Get Shopify Reconciliation Ledger
GET/api/shopify/:integrationInstance/reconciliation
Compare, entity by entity, how many records the Shopify store holds against how many reached SKU.io.
This endpoint currently requires session authentication; Personal Access Token scope support is in progress.
Each entry carries three counts, because the pipeline has three stages and data can stall at either hop:
inChannel— what the Shopify store itself reports.nullwhen Shopify could not be counted.downloaded— records pulled into SKU.io's staging tables.inSku— records that became real SKU.io records (sales orders, catalog products).
gap is inChannel - inSku, floored at 0, and is null whenever inChannel is null — an unmeasured gap is never reported as zero.
Status values (status on each entry and on the ledger as a whole): in_sync, gap, unknown, not_applicable. The overall status is the weakest entry, never an average, so a single entity short of records prevents an all-clear.
When an entry has a gap it also carries blocker (why, in plain terms), actionLabel and actionRoute (the single step that closes it).
Query parameters:
fresh(optional, boolean) — bypass the 5-minute cache and re-count both sides immediately.
Request
Responses
- 200
- 401
- 403
- 404
- 429
- 500
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.
Internal Server Error