Skip to main content
Emblem Developer Docs

Error Reference

Complete error code reference for hosted verification.

This page lists the error codes you may encounter when using Emblem's hosted verification API.

Start verification errors

POST /api/v1/verify/start

CodeHTTP statusDescriptionWhat to do
INVALID_REQUEST400Malformed request bodyCheck that you are sending valid JSON with the expected fields.
VALIDATION_ERROR400Missing or invalid fieldsVerify integration_id, callback_url, and any optional fields.
INTEGRATION_INACTIVE400Integration is disabledRe-enable the integration in the Emblem dashboard.
PROVIDER_INACTIVE400Provider is disabled for this integrationCheck your integration settings in the dashboard.
UNAUTHORIZED401Missing or invalid API keyConfirm your Bearer token is present and correct.
ENTITLEMENT_REQUIRED403Entitlement required for production verification sessionsConfirm your account is provisioned for production verification.
PUBLISHER_SUSPENDED403Tenant is suspended by EmblemContact Emblem support or your account owner to resolve the suspension.
NOT_FOUND404Integration ID not foundVerify that you are using the correct integration_id for this environment.
RATE_LIMITED429Too many requestsRespect the Retry-After header before retrying.
PROVIDER_ERROR502Upstream provider failed to start the sessionRetry later or contact support if the problem persists.

Validate result errors

POST /api/v1/verify/validate

CodeHTTP statusDescriptionWhat to do
VALIDATION_ERROR400Missing or invalid fieldsConfirm that you are sending result_token in the request body.
INVALID_FORMAT400Token format is wrongCheck that you are sending the exact result_token returned in the callback.
INVALID_SIGNATURE400Token signature does not verifyMake sure the token is unmodified and from the same Emblem environment.
INVALID_PAYLOAD400Token payload is malformedRetry only if you suspect the token was corrupted in transit.
EXPIRED400Token TTL exceededStart a new verification flow and validate immediately next time.
ALREADY_USED400Token was already consumedUse the cached validation result from your first successful validation.
UNAUTHORIZED401Missing or invalid secret bearer; public keys are not acceptedMove validation to your backend and send Authorization: Bearer emb_sk_*.
FORBIDDEN403Token belongs to a different integrationValidate the token using the same integration that started the session.
NOT_FOUND404No matching session foundConfirm you are validating a current token from the correct environment.

Session reconciliation errors

GET /api/v1/verify/sessions/{sessionId}

CodeHTTP statusDescriptionWhat to do
VALIDATION_ERROR400Invalid session IDCheck the session_id format and value.
UNAUTHORIZED401Missing or invalid API keyConfirm your secret key is present and correct.
NOT_FOUND404Session not foundVerify that the session belongs to your integration and environment.
RATE_LIMITED429Too many recovery requestsRespect the Retry-After header and reduce polling frequency.
INTERNAL_ERROR500Emblem-side failureRetry later or contact support with the request ID.

Webhook failure codes

Webhook payloads use failure.code values such as PROVIDER_REJECTED, USER_CANCELLED, TIMEOUT, MAX_ATTEMPTS, and UNKNOWN for non-success verification outcomes.

See Webhooks for the full webhook failure-code reference and payload examples.

Rate limiting

Rate limits are enforced per IP address and per key:

Auth methodLimitScope
Public key60 req/minPer IP
Public key600 req/minPer key
Secret key600 req/minPer IP

When a request is rate limited, Emblem returns 429 RATE_LIMITED and includes a Retry-After header with the number of seconds to wait before retrying.

On this page