Skip to content
DescriptorAPI

Docs

Errors

Every error has the same shape and a stable code.

Errors use standard HTTP status codes and always have the same JSON shape, with a stable machine-readable code, a human-readable message, and the request_id:

{
  "error": {
    "code": "invalid_request",
    "message": "descriptor is required.",
    "request_id": "req_01JABCDEF0123456789ABCDEFG"
  }
}

Branch on code, not on message: messages may be reworded, codes will not change.

Error codes

StatusCodeWhat to do
400invalid_requestFix the request. The message names the field, for example a country that is not a two-letter code.
401unauthorizedCheck the API key. See Authentication.
402quota_exceededYour monthly quota is used up. Wait for the next month or upgrade. See Rate limits and quotas.
404not_foundThe merchant ID or route does not exist.
429rate_limitedSlow down and retry after the number of seconds in the Retry-After header.
500internal_errorRetry with backoff. If it persists, contact us with the request_id.

No match is not an error

When we cannot identify a merchant, /v1/enrich still returns 200, with merchant: null and confidence: 0. These results are not billed.

Errors inside a batch

In /v1/enrich/batch, an invalid item gets an error object in its place (with code and message) and the other items are processed normally. See Batch enrichment.

Retrying

Retry 429 after Retry-After, and 500 or network errors with exponential backoff. Do not retry 400, 401 or 402 without changing something first. Enrichment is safe to retry: the same descriptor gives the same answer.

Try it

Runs through the playground, no key needed