Skip to documentation
Browse documentation

Handle failures with the problem code and request ID

Errors use application/problem+json. The HTTP status classifies the transport outcome, while the stable code identifies the recovery path. Save requestId or correlationId when escalating a failure.

{
  "type": "https://docs.data.hyran.co/problems/invalid_token",
  "title": "The request was rejected",
  "status": 401,
  "detail": "A bearer API token is required.",
  "code": "invalid_token",
  "requestId": "4d34680e-64c8-44ec-994d-a1352c6569b4",
  "correlationId": "4d34680e-64c8-44ec-994d-a1352c6569b4",
  "retryable": false,
  "recovery": "Replace or rotate the credential, then retry without changing tenant inputs."
}

Retry decisions

StatusDefault action
400Correct the documented fields. Do not retry the same request.
401Replace or rotate the credential.
403Request the required scope or use the issued regional origin.
404Confirm the canonical object ID and its availability window.
409Re-read the resource before deciding whether to retry.
429Wait for Retry-After, then use bounded exponential backoff.
500 or 503Retry only when retryable is true. Preserve the request ID.

POST /v1/exports does not accept an idempotency key in V1. If a client loses the response after sending the body, do not automatically repeat the POST. Check owned export jobs or ask Hyran support to correlate the request ID first.

Rate limits

Each API credential receives 600 requests in the current one-minute UTC bucket. Successful protected responses return RateLimit, RateLimit-Policy, and V1 compatibility headers. A rate-limited request returns 429, a zero remaining count, and Retry-After in seconds.