Preview: these APIs are still being designed and aren't available yet.
Skip to Content
UpskyDocs

Errors

The error format shared by every Upsky API.

Every API returns errors in the same shape:

{
  "error": {
    "code": "invalid_request",
    "message": "The field 'email' is required.",
    "request_id": "req_123"
  }
}

Include request_id when you contact support.

Status codes

StatusCodeWhat to do
400invalid_requestFix the request. Retrying won't help.
401unauthorizedCheck that your API key is correct and hasn't been revoked.
402insufficient_creditsAdd credits or turn on auto top-up, then retry.
403pro_requiredSubscribe to Pro. Live requests to paid products need it.
403account_suspendedContact support.
403forbiddenYour key can't access this resource.
404not_foundCheck the ID, and test versus live mode.
409conflictThe resource can't do that now, such as canceling a submitted verification.
409idempotency_key_reusedUse a new Idempotency-Key for a different request.
409request_in_progressThe first attempt is still running. Retry shortly.
409retry_laterWait the seconds in Retry-After, then retry.
413payload_too_largeSend a body under 1 MB.
429rate_limitedWait, then retry. See limits.
500internal_errorRetry with backoff.
503service_unavailableRetry with backoff.

Branch on code, not on message: codes are stable, and messages may be reworded.

Every response, successful or not, also carries the ID in an X-Request-Id header.

Retrying safely

Add an Idempotency-Key header to POST requests. Any unique string up to 255 characters works, such as a UUID.

  • If the first request succeeded, a retry with the same key returns that same response, with an Idempotent-Replayed: true header, and the work isn't done twice.
  • If the first request was refused or failed, nothing is remembered, so a retry runs it again.
  • Keys are remembered for 24 hours, separately for test and live mode.

On this page