Thanks for the questions!
1. Trigger sources
Yes, order.created and order.updated fire for orders created/updated via Square POS, Square Online, the Orders API, Order Manager, and the Square Dashboard. The source field on the order object indicates the origin. See: Order Object - Square API Reference
2. Payload contents
Correct, the webhook payloads contain only metadata (order_id, version, state, location_id, timestamps), not the full order. Call RetrieveOrder with the order_id to get order detail. See: GET /v2/orders/{order_id} - Square API Reference
3. Refunds / cancellations webhooks
It depends on your use case. order.updated covers order-level state changes (cancellations, returns), while refund.created / refund.updated cover the monetary side. These don’t always fire together. For example, a goodwill refund won’t change the order, and a cancellation may not involve a refund. We’d recommend reviewing the webhook events reference and subscribing to the combination that matches your needs: Webhooks
4. Identifying affected line items
Call RetrieveOrder and inspect the returns → return_line_items array. Each entry includes source_line_item_uid mapping back to the original line item.
5. Distinguishing refund types
At a high level: check the order’s state (CANCELED = cancellation), the returns section (populated = item-level return), and refund.* events (monetary refund details). We’d recommend reviewing the Orders and Refunds API references together for the full picture:
• Refunds and Exchanges
• Refunds API
Hope that helps! Let us know if anything needs clarification.