Skip to main content

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.

Not yet available to API tokens

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. null when 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.

coveragePercentage on the ledger is null whenever any entity could not be counted, so a partial measurement is never presented as overall coverage.

When the store is disconnected (the app was uninstalled or its access token revoked), Shopify is not called at all and remoteCountsError names the store and, when known, when the app was uninstalled. A downloaded-but-not-imported shortfall still carries its blocker and action while Shopify's count is unknown.

Request​

Responses​

OK

Response Headers
    Content-Type