Get Inventory Discrepancies
GET/api/veracore/integration-instances/:integration_instance/inventory/discrepancies
Mapped products whose SKU.io quantity disagrees with the Veracore balance for the same warehouse.
This endpoint currently requires session authentication; Personal Access Token scope support is in progress.
discrepancy is veracore_inventory minus sku_inventory, so a negative number is the dangerous direction: SKU.io believes it holds more than the warehouse does and will keep selling stock that is not there. discrepancy_value is the absolute gap priced at unit cost.
Rows are Veracore Offers, not SKU.io products. A multi-product offer reports the minimum balance across its components, so it is one row here and several products in SKU.io — those rows are excluded from the report and from stock take creation because the two sides are not comparable.
The feed is paginated (page, per_page, default 15) and filtered server-side. veracore_product_row_id is the Veracore catalogue record behind the offer so the row can be followed through to the item; it is null when no catalogue record was ever stored for it.
Totals over the same filtered set — item count, cost impact, shortfall and surplus counts — come from the companion discrepancy-stats endpoint, which is what to call for headline figures rather than summing a page.
Search
filter[search] runs a fuzzy LIKE across sku, product_name, veracore_product_id and veracore_title.
Filters
Every filterable column takes an operator suffix, e.g. filter[sku.contains]=WID. The bare form (filter[sku]=WID-BLU-12) is equivalent to .is.
- Text operators:
is,is_not,contains,does_not_contain,is_one_of,is_not_one_of,starts_with,does_not_start_with,ends_with,does_not_end_with,is_empty,is_not_empty. - Numeric operators:
is,is_not,is_one_of,is_not_one_of,greater_than,less_than,greater_than_or_equal,less_than_or_equal,between,is_empty,is_not_empty. - Datetime operators:
is,is_not,before,after,on_or_before,on_or_after,between,is_empty,is_not_empty, plus the relative operatorstoday,yesterday,tomorrow,past_week,past_month,past_year,next_week,next_month,next_year.
Advanced filter groups
Instead of flat keys, clients may send a base64-encoded filter_groups tree, nesting AND/OR groups over the same columns. Unregistered columns inside the tree are silently ignored.
- Text columns:
sku,product_name,type,veracore_product_id,veracore_title,sku_warehouse_name,veracore_warehouse_id,veracore_warehouse_name. - Numeric columns:
unit_cost,sku_inventory,veracore_inventory,discrepancy,discrepancy_value,component_count. - Datetime columns:
last_synced_at. filter[direction]takesshortfallorsurplus.filter[sku_warehouse_id]takes one id or a comma-separated list.
Sorting
sort accepts sku, product_name, type, unit_cost, veracore_product_id, veracore_title, sku_warehouse_name, veracore_warehouse_name, last_synced_at, sku_inventory, veracore_inventory, discrepancy, discrepancy_value, component_count (prefix with - for descending). Default sort is sku.
Errors
404when the integration instance does not exist or is not a Veracore instance.
Authentication: Requires Bearer token.
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.