Skip to content

Errors

Section-by-section degradation

Read endpoints degrade section by section rather than failing the whole response. A partial fan-out returns 200 with an errors[] array naming each degraded section while the healthy sections still populate:

json
{
  "data": [ /* … the sections that loaded … */ ],
  "errors": [
    { "field": "pricing", "code": "downstream_timeout", "detail": "pricing temporarily unavailable" }
  ]
}

Treat a non-empty errors[] as "this part is temporarily stale," not a hard failure - render what loaded and retry the degraded section. An empty (or absent) errors[] means the whole response is fresh.

Hard failures

Hard failures use standard HTTP status codes:

StatusMeaning
401Missing / malformed / unknown / revoked / expired key or shopper token
403Capability split (publishable on a privileged route), wrong merchant, off-allowlist Origin
404Not found, or a cross-customer resource accessed by URL
429Rate limit exceeded - see Rate limits

Checkout over a credit limit returns a structured over_credit_limit state (with the shortfall), not a raw 409 - inspect the response body, don't just branch on the status code.

Next steps

In the API Reference

Every operation lists its error responses. A good one to inspect:

Built on the Harmon platform — the storefront API for merchants.