List Refunds
GET/api/shopify/:integrationInstance/refunds
Returns a paginated list of Shopify refunds synced for the integration instance, with the parent order summary and refund line item totals (quantity, subtotal, tax, and total refunded including adjustments).
This endpoint currently requires session authentication; Personal Access Token scope support is in progress.
Authentication: Requires Bearer token.
Filterable columns: id, legacy_resource_id, note, order_name, shopify_created_at, shopify_processed_at, created_at, updated_at. filter[search] matches the refund ID, order number, and note.
Filtering: pass filter[column]=value for an exact match, or filter[column.operator]=value with operators such as contains, does_not_contain, is, is_not, is_one_of, starts_with, ends_with, is_empty, is_not_empty (text), greater_than, less_than, greater_than_or_equal, less_than_or_equal, between (numeric/date). Complex AND/OR trees can be sent as a base64-encoded JSON tree in the filter_groups parameter.
Allowed sorts: id, legacy_resource_id, note, shopify_created_at, shopify_processed_at, created_at, updated_at (default -id). Pagination defaults to 15 per page.
Sales credits from refunds: each synced Shopify refund also produces a sales credit on the linked sales order — one line per refunded product line, plus a separate non-product line described "Shipping refund" (no sales_order_line_id, posted to the integration's shipping refund nominal code) when the refund paid shipping money back. Any refund discrepancy Shopify reports is shared between the product lines and the shipping by subtotal, and no line goes below zero, so the credit totals the money actually refunded. The credit's metadata records shipping_refund_subtotal (shipping refunded by Shopify) and shipping_refund_credited (amount of the Shipping refund line). A refund that returns only shipping, with no product lines, creates no credit. A refund for units that are already fully credited is not credited again; a note on the sales order says why.
Request
Responses
- 200
- 401
- 403
- 404
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Not found — no record with the given identifier (or the route does not exist). Verify the ID before retrying.
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.