Square orders webhooks

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 returnsreturn_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.