Skip to main content

Error codes

Error response format

All API errors return a consistent JSON structure:

{
"statusCode": 400,
"timestamp": "2026-02-17T09:18:05.040Z",
"path": "/api/v1/...",
"message": "Human-readable error description",
"code": "ERROR_CODE"
}

The code field is only present for domain-specific errors (see Domain-specific error codes below). Generic HTTP errors (e.g. invalid UUID, unauthorized) omit the code field.

HTTP status codes

Status codeDescription
400 Bad RequestValidation failures, invalid request parameters, or invalid client configuration
401 UnauthorizedMissing or invalid OAuth token
403 ForbiddenAccessing resources outside your organization or environment
404 Not FoundSession, flow, flow version, or file not found
409 ConflictDuplicate resource (e.g. flow already exists)
412 Precondition FailedFlow cannot execute in its current configuration (missing credentials, template, or step config)
422 Unprocessable EntityRequest semantically valid but failed business validation (e.g. file too large)
500 Internal Server ErrorUnexpected server error
503 Service UnavailableFile service temporarily unavailable

Validation errors

When request body validation fails, the message field follows the pattern:

Validation failed: field.path: error message, another.field: error message

Domain-specific error codes

These codes appear in the code field of the error response.

Migration: renamed error codes

The following error codes were renamed and now return 412 Precondition Failed instead of 400 Bad Request:

Old codeNew codeNew HTTP status
SPHINX_CREDENTIALS_NOT_FOUNDDOC_IDV_CREDENTIALS_NOT_FOUND412
TEMPLATE_ID_NOT_FOUNDTEMPLATE_ID_NOT_IN_SIGNING_SYSTEM412
TEMPLATE_ID_MISSING_FOR_NODETEMPLATE_ID_MISSING_FOR_STEP412
MISSING_NODE_SHORTNAMEMISSING_SHORTNAME_SIGNING_STEP412
INCOMPATIBLE_DOCUMENT_TYPE_NODESINCOMPATIBLE_DOCUMENT_TYPE_STEPS412
DOCUMENT_TYPE_NOT_VALIDFIELD_VALUE_NOT_ALLOWED412
DOCUMENT_TYPE_MISMATCHFIELD_VALUE_NOT_ALLOWED412

The following error codes were not renamed but now return 412 Precondition Failed instead of 400 Bad Request:

CodeOld HTTP statusNew HTTP status
INVALID_PDF400412
SIGNATURE_OUT_OF_BOUNDS400412

If you are parsing error codes or handling HTTP 400 responses, update your integration to use the new code names and expect 412 instead.

Session and flow execution errors
CodeHTTP statusDescription
INVALID_CLIENT400client_id is missing, not found, or has no allowed redirect URLs configured
REDIRECT_NOT_ALLOWED400The provided redirect_url is not in the client's allowlist
UNAUTHORIZED_ACCESS403Session environment mismatch or organization ownership violation
VAULT_ENTRY_NOT_FOUND404Referenced file does not exist
VAULT_ENTRY_DELETED404Referenced file was deleted
FIELD_VALUE_NOT_ALLOWED412A field in the request body has a value that is not permitted (e.g. documentImages.documentType is not valid for this flow)
INCOMPATIBLE_DOCUMENT_TYPE_STEPS412The flow combines steps that each require a different document type (IBAN, proof of address, identity document)
TEMPLATE_ID_NOT_IN_SIGNING_SYSTEM412The provided Template ID does not exist in the signing system
TEMPLATE_ID_MISSING_FOR_STEP412None of the flow's requested Template IDs match a signing step account
DOC_IDV_CREDENTIALS_NOT_FOUND412DocIDV credentials are not configured for the given shortname and environment
INVALID_PDF412An uploaded document could not be parsed as a valid PDF
SIGNATURE_OUT_OF_BOUNDS412A signature anchor on a document falls beyond the PDF's last page
MISSING_SHORTNAME_SIGNING_STEP412A signing step has no shortname configured for the given environment
MISSING_STEP_CREDENTIALS412The flow requires credentials that are not configured for this organisation.
MISSING_STEP_CONFIG412One or more steps in the flow require configuration that has not been enabled for this organisation.
FILE_TOO_LARGE422An uploaded file exceeds the allowed size limit
File errors
CodeHTTP statusDescription
ENTRY_NOT_FOUND404Requested file entry does not exist
ENTRY_DELETED_ERROR404Requested file entry has been deleted
INVALID_FLOW_EXECUTION400The file request references an invalid flow execution
PRESIGNED_URL_GENERATION_FAILED503Failed to generate download URL
UPLOAD_FAILED503File upload to storage failed
ENTRY_IS_NOT_A_BINARY503Entry is not a binary file
ENTRY_IS_NOT_A_DATA_BLOCK503Entry is not a data block
ENTRY_IS_WRONG_TYPE_OF_DATA_BLOCK503Entry is a data block but of the wrong type
ENTRY_ALREADY_ATTACHED503Entry is already attached to a parent
note

The 503 status code for ENTRY_IS_NOT_A_BINARY, ENTRY_IS_NOT_A_DATA_BLOCK, ENTRY_IS_WRONG_TYPE_OF_DATA_BLOCK, and ENTRY_ALREADY_ATTACHED is a fallback mapping — these are client-input or state errors, not transient service unavailability. Do not build retry-on-503 logic for these codes; they represent permanent errors.