Read this once and you will be able to use any endpoint in the API without surprises.Documentation Index
Fetch the complete documentation index at: https://docs.retailgrid.io/llms.txt
Use this file to discover all available pages before exploring further.
Identifiers
Two kinds of ids show up in the API:product_id/sku/competitor_name/ etc. - your stable business identifier. You provide it. Use it for upserts.id/entity_id- Retailgrid’s internal row id, returned in responses. Use it in path parameters when patching or deleting (PATCH /v1/products/{entity_id}).
entity_id is a UUID for products, product variants, and transactions. For competitor prices it is an integer - the only place this varies in the API.
Bulk endpoints
Every entity has aPOST /v1/<entity>/bulk endpoint that accepts an items array and returns per-item results.
Request:
BulkResponse):
BulkItemResult.ok before declaring victory.
Recommended batch size: 500 to 2,000 items per request depending on row width. Larger payloads will work but increase latency and the chance of a transport-level retry.
Async jobs
ThePOST /v1/imports/* endpoints accept a multipart CSV and return immediately with a JobHandle:
GET /v1/jobs/{job_id}:
status is one of queued, running, completed, failed. A reasonable polling cadence is every 5-10 seconds for active jobs and every 30-60 seconds for queued jobs.
Sync vs async
| You want to… | Use | Endpoint family |
|---|---|---|
| Push a few records right now | Sync, JSON | POST /v1/<entity>/{entity_id} or /bulk |
| Refresh a full catalog from a CSV | Async, multipart | POST /v1/imports/<entity> then poll /v1/jobs/{id} |
Decimals
Money, quantities, and rates are returned as strings, not floats. This avoids the rounding surprises you would get with IEEE-754:Timestamps
All timestamps are ISO 8601 in UTC:YYYY-MM-DD. The API does not perform timezone conversion - send UTC, get UTC.
Idempotency
POST /v1/<entity>/{entity_id} is an upsert keyed on the path’s entity_id, which makes it safe to retry. PATCH is also idempotent at the field level. DELETE is idempotent (deleting an already-deleted row returns 204).
The /bulk endpoints are idempotent per item, keyed on the business identifier inside each item (product_id, sku, etc.).
There is no Idempotency-Key header today - we will add one before we recommend this API for payment-adjacent flows.
Pagination
The current write-focused endpoints do not paginate (there are no list endpoints inv1). When read endpoints land they will use cursor-based pagination; they will be added under a new section in this reference.
Rate limits
Rate limits are applied per API key. Today’s limits are generous enough that well-behaved sync pipelines do not hit them; if you do, you will receive429 Too Many Requests with a Retry-After header. Specific numbers will be published here once we have stable production data.