Skip to main content

Errors

The API returns errors in application/problem+json format (RFC 9457). Every error shares a stable, predictable structure:

{
"type": "https://docs.skipo.com/errors/unauthorized",
"title": "Unauthorized",
"status": 401,
"detail": "This operation requires a signed request (X-API-Key header + signed JWT).",
"code": "unauthorized",
"retryable": false,
"instance": "/v2/withdrawals"
}

Fields

FieldDescription
typeStable URI documenting the error (points to docs.skipo.com/errors/{code}).
titleHuman-readable summary of the error type.
statusHTTP status code.
detailDescription specific to this occurrence.
codeStable, machine-readable code — use it to branch your logic.
retryabletrue if retrying the same request may succeed.
instancePath of the request that failed.
tip

Branch your error handling on code, not on title or detail (which may be reworded or translated). The code is a stable contract.

Common codes

codeHTTPRetryable?
unauthorized401no
invalid_signature401no
insufficient_scope403no
not_found404no
validation_error400no
unprocessable422no
rate_limited429yes
internal_error500yes

The full error catalog documents all 22 codes, each with its own page at docs.skipo.com/errors/{code} — the same URI that appears in the response's type field.