Errors

Every non-2xx response from the API uses a consistent JSON envelope. Your integration can branch on the type field rather than parsing free-form title/detail strings.

Envelope shape

{
  "type":     "result:no-model-for-route",
  "status":   422,
  "title":    "No assigned model covers this trip",
  "detail":   null,
  "instance": "trace-id:81fbbbd2c4fd213dad135b1d587ab6be"
}

Wire tags

The full set you might see. Tags not listed here are 5xx infrastructure errors — retry with backoff.

TagStatusMeaning
rejection:authentication-failed401Bearer-auth failure on any /v1/* call: JWT missing, expired, revoked, or signature invalid.
result:invalid-credentials401/v1/auth/token rejected the supplied X-API-KEY / X-API-SECRET.
result:unauthorized401/v1/auth/token called without both X-API-KEY and X-API-SECRET headers.
result:invalid-revoke-request400/v1/auth/revoke body must carry exactly one of jti or all: true — not both, not neither.
rejection:static-validation-failed400Request body failed validation (missing required field, type mismatch).
rejection:route-not-found404HTTP path doesn't match any endpoint.
result:account-blocked403Account is not in Active status (either Blocked or Pending). Contact us.
result:customer-not-found404The customer the JWT refers to no longer exists.
result:no-model-for-route422Account not assigned to a model that covers this trip's geo.
result:model-not-allowed-for-customer403The model field in your request isn't assigned to your account.
result:model-unavailable503The model is currently down. Retry shortly.
result:model-mode-mismatch422The model doesn't serve this trip's mode (e.g. requested scheduled, model only realtime).
result:model-geo-mismatch422The model doesn't cover one of the endpoints.
result:route-metadata-incomplete400You supplied one of distanceKm/durationMinutes but not the other.
result:route-provider-unavailable502You omitted distanceKm/durationMinutes and the gateway's internal route-resolution path was temporarily unreachable. Retry, or supply both values directly.
result:inference-unavailable502The pricing pipeline temporarily couldn't price this request. Safe to retry.
result:strategy-failed500An internal pricing computation produced an invalid result. Report to us with the instance trace.

Retry policy

Safe to retry with exponential backoff: any 5xx response (in particular result:inference-unavailable and result:route-provider-unavailable). Do not retry 4xx — they indicate a request shape your integration needs to fix.

Always log the instance trace id; if you need help, sharing it with us lets us correlate to our server-side trace in seconds.