API errors
Errors use RFC 9457 problem details with Content-Type: application/problem+json:
{ "type": "https://help.termpact.com/api/errors/validation_failed", "title": "The request is not valid", "status": 422, "errors": [{ "field": "base_bp", "code": "too_big", "message": "Too big: expected number to be <=10000" }]}The type is stable; the title and messages may change wording.
| Type | Status | Meaning |
|---|---|---|
not_found |
404 | The path or the object doesn’t exist in your store. |
method_not_allowed |
405 | The path exists but not with this method; see the Allow header. |
validation_failed |
422 | The body, query or a business rule refused the request; errors lists each field. A fixed price above the variant’s retail price is refused this way. |
insufficient_scope |
403 | The key lacks the scope the endpoint needs. |
plan_required |
403 | The store isn’t on the Pro plan. |
read_only |
402 | The subscription isn’t active; reads work, writes don’t. |
shop_read_only |
503 | Writes are paused for this store while Termpact checks a problem. Reads work; retry after Retry-After. |
conflict |
409 | The change conflicts with current data, for example deleting a price list that locations still use. |
idempotency_key_required |
400 | A POST without a valid Idempotency-Key. |
idempotency_key_reused |
422 | The key was already used with a different request. |
idempotency_in_progress |
409 | The first request with this key is still running; retry after Retry-After. |
payload_too_large |
413 | The body is over 1 MB. |
unsupported_media_type |
415 | The body isn’t application/json. |
rate_limited |
429 | Too many requests; wait for Retry-After seconds. |
unavailable |
503 | A temporary problem on our side; retry with backoff. |