Skip to main content
This changelog tracks changes to the Retailgrid Public API only. For product-wide changes, see the main changelog.

2026-06-22 - Product store endpoints; variants folded into products

The catalog is keyed at the SKU (item) level. item_id is the required unique identifier for each item; product_id is now an optional product-level code that groups related items. Added:
  • Product store REST entity - GET /v1/product_store (list), POST /v1/product_store (upsert), POST /v1/product_store/bulk, and GET / PATCH / DELETE /v1/product_store/{entity_id} - per-store, market, or channel prices, costs, and stock. Upsert key (item_id, store_id). See Product store.
  • POST /v1/imports/product_store - asynchronous CSV import for product store-level data. See Import product store CSV.
Changed:
  • Product create now requires item_id (the unique SKU-level key); product_id is optional.
Removed:
  • POST / PATCH / DELETE /v1/product_variants/* and POST /v1/product_variants/bulk. The variant level is now the item-level product, addressed by item_id. Migrate variant writes to the Products endpoints.

2026-06-03 - Store-level ingestion

The ingest path now supports store-level product data, so clients pushing data programmatically can send multiple prices per product per store, market, or channel. Added:
  • Ingest endpoints accept a store_id alongside item_id - one record per item-store combination, persisted per the Product store data spec.
  • Upsert semantics use (item_id, store_id) as the natural key.
  • Every incoming record is validated against existing stores and products; invalid records (unknown store, duplicate keys within a batch) return a 4xx with a specific error code per row.
Backward compatible: payloads that omit store_id are treated as product-level and behave exactly as before.

2026-05-21 - Read endpoints

The Public API now reads as well as writes. The inbound/outbound asymmetry that integrators raised at v1 launch is closed. Added:
  • GET /v1/products — list and filter enriched product records, including custom columns from product imports. See List products.
  • GET /v1/transactions — list and filter sales transactions. See List transactions.
  • GET /v1/grids — list grids in the account, including a column-schema summary and row count per grid. See List grids.
  • GET /v1/grids/{grid_id}/rows — export the full row contents of a grid (canonical + custom + formula/calculated columns). See Get grid rows.

2026-05-04 - v1 launch

The first public version of the Retailgrid API is live at https://clientapi.retailgrid.io. Available now:
  • Auth - GET /v1/auth/verify for key validation. Bearer tokens, prefixed rg_live_.
  • Imports (async CSV) - products, transactions, competitor prices.
  • Products - bulk upsert, create, patch, delete.
  • Product variants - bulk upsert, create, patch, delete.
  • Transactions - bulk upsert, create, patch, delete.
  • Competitor prices - bulk upsert, create, patch, delete.
  • Jobs - GET /v1/jobs/{job_id} for polling async import status.
Known gaps we plan to close:
  • Idempotency-Key header support on non-idempotent creates.
  • A documented rate-limit ceiling.
  • Webhook callbacks for job completion (replacing polling).