Open Application Platform Docs

Errors

Every code this platform can return, generated from the code that defines them.

Write your branching logic against `code`, which is never translated. Do not branch on `message`: it is translated, and its wording changes with the caller's language.

{
  "request_id": "req_01J8Q…",
  "error": {
    "code": "CAPABILITY_NOT_ENABLED",
    "message": "…",
    "status": 403,
    "capability": "routing.optimize",
    "retry_after_seconds": null,
    "details": [{"field": "jobs[3].location.lat", "code": "OUT_OF_RANGE", "message": "…"}],
    "doc_url": "…/developer/errors"
  }
}

The four ways a call can be refused are deliberately distinguishable without reading text: NOT_AUTHORIZED means this operation is not allowed for this credential; CAPABILITY_NOT_ENABLED means the account has not subscribed; CAPABILITY_NOT_GRANTED_TO_KEY means the account has it but this key does not; and QUOTA_EXHAUSTED answers 402 rather than 403 so a billing failure is recognisable without matching a string.

Status Code Description
400 MALFORMED_REQUEST The request could not be parsed.
401 KEY_UNKNOWN Unknown API key.
401 SESSION_EXPIRED The session token is invalid or has expired.
401 SESSION_REVOKED The session was ended because its API key or entitlements changed.
401 TOKEN_INVALID Unknown or revoked API token.
401 TOKEN_MISSING No API token. Send Authorization: Bearer <your token>.
402 QUOTA_EXHAUSTED The included allowance for this capability is used up for the current period.
403 CAPABILITY_NOT_ENABLED This capability is not enabled for your account. See :doc to enable it.
403 CAPABILITY_NOT_GRANTED_TO_KEY Your account has this capability, but this API key was not granted it.
403 ENGINE_NOT_ENABLED This routing engine is not enabled for your account. Omit `engine` or choose an engine that is.
403 KEY_IP_NOT_ALLOWED This API key is not permitted from your IP address.
403 KEY_REVOKED This API key has been revoked or has expired.
403 NOT_AUTHORIZED This operation is not permitted for these credentials.
403 OPEN_API_DISABLED Open Platform access is not enabled for this account.
404 JOB_NOT_FOUND No such job, or it belongs to another account.
404 OPEN_NOT_FOUND Not Found
404 RESOURCE_NOT_FOUND The referenced resource does not exist.
409 JOB_NOT_FINISHED The job has not finished yet. Poll the job, or wait for the callback.
409 USE_STANDARD_PATH Send this call to the standard path: the same call to the Open Platform /v1/plan/* (see `reason`).
410 JOB_RESULT_EXPIRED The result has expired and is no longer available. Submit the request again.
410 RESOURCE_EXPIRED The referenced resource has expired. Upload it again.
413 REQUEST_TOO_LARGE The request body is too large. Upload large payloads as a reusable resource instead.
422 CALLBACK_NOT_VERIFIED Verify the callback endpoint first: POST /v1/webhooks/verify and echo the challenge back.
422 CALLBACK_URL_UNSAFE The callback URL must be a public HTTPS endpoint.
422 PLAN_REFINE_REFUSED The plan cannot be refined here (see `reason`). Refine it with routing.refine, with the stops to keep in `freeze`.
422 SOLVE_INFEASIBLE No plan satisfies every constraint. Check time windows, capacities and skills.
422 UNSUPPORTED_REGION That routing region is not available. Use NA, EU, AU or ASIA.
422 VALIDATION_FAILED The request failed validation. See details.
424 ENGINE_REJECTED The routing engine refused this problem. Its reason is included where available.
429 CONCURRENCY_LIMIT Too many solves are already running for this account. Retry when one finishes.
429 RATE_LIMITED Too many requests. Please retry after the indicated delay.
429 SNAPSHOT_LIMIT_REACHED A distance snapshot cannot be opened: a limit is reached (see `limit`). Close a snapshot no longer in use, or call without `matrix`.
500 INTERNAL_ERROR An unexpected error occurred. Quote the request_id when contacting support.
502 ENGINE_UNAVAILABLE The routing engine is temporarily unreachable. Please retry.
503 OPEN_PLATFORM_DISABLED The open platform is temporarily unavailable.
503 OPEN_UNAVAILABLE The open platform is temporarily unable to verify your credentials. Please retry.
504 SOLVE_TIMEOUT The solve exceeded the synchronous budget. Send the same request with "mode":"async" and collect the result from the job.