Skip to content

Responses

The envelope of every answer, its headers, and how amounts are written.

Version v1.1, updated

On this page

Every successful answer is a JSON object with the result in data. Lists add meta, and every answer carries headers you can log and act on.

The envelope

One record comes in data. A list comes in data as an array, with meta for the next page.

200 OKJSON
{
  "data": {
    "created_at": "2026-09-01T07:30:00.000Z",
    "description": "Flours for resale",
    "external_ids": [],
    "id": "00000000-0000-4000-8000-000000000021",
    "name": "Flour",
    "product_kind": "goods",
    "updated_at": "2026-09-28T14:05:12.417Z"
  }
}

A create or an update answers with the record as its read operation returns it. You never need a second call to see the result.

Status codes

Status

Meaning

200 OK

A read, an update, an action or a batch succeeded.

201 Created

A record was created. The Location header holds its path.

204 No Content

The link of an external id was removed. There is no body.

4xx, 5xx

An error, described in Errors.

Headers

Header

On

Meaning

X-Request-Id

Every response.

The request id. Log it, and quote it to support.

X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset

Every response to a request with a key.

Where you stand against the rate limits.

Location

201 responses.

The path of the created record.

Idempotency-Replayed

A replayed write.

true when the answer is the stored one. See Idempotency.

Cache-Control

Every response except the OpenAPI document.

no-store: answers are never kept by caches.

Amounts in responses

Amounts, prices and quantities are decimal strings, never JSON numbers. Money has two decimals, such as "64.50". Unit prices and invoice quantities have four, such as "3.2000", and stock quantities up to three.

Read them with a decimal type, never a floating point one. Decimal strings, dates and ids lists every rule.

  • requests
  • pagination-and-filtering
  • formats
  • errors-overview