Status Codes

Open in ChatGPT

Top-level HTTP errors

A request rejected before a successful endpoint response uses the Kratos error envelope below.

{
  "code": 503,
  "reason": "PROVIDER_UPSTREAM_UNAVAILABLE",
  "message": "the selected provider is unreachable; retry later",
  "metadata": {}
}
  • reason is the stable machine-readable value. Branch on it.
  • code is the HTTP status repeated in the JSON body.
  • message is a human-readable explanation and is not a stable branch key.
  • metadata contains only fields explicitly allowed for that reason, such as batch maxSize.

Outward reason catalog

Each operation documents only the reasons its request path can produce. Reasons not approved at the gateway boundary are folded into GATEWAY_PROVIDER_UNAVAILABLE.

HTTPreasonWhat happenedWhat to do
400GATEWAY_MALFORMED_BODYThe request body does not match this endpoint's schema. Unknown fields, misspelled names, wrong casing, and wrong types are rejected before screening.Fix the body against the endpoint schema. Do not branch on message text; it is written for people and may change.
400PROVIDER_INVALID_ADDRESSThe address is not valid on the chain named in the request body.Correct the address or chain, then send a new request.
400PROVIDER_UNSUPPORTED_CHAINThe selected provider does not serve this chain for the requested capability.Call List capability chains for the provider and capability, then choose one of the returned chains or select another enabled provider.
400PROVIDER_UNSUPPORTED_TRANSACTIONThe selected provider rejected this transaction for the requested chain, direction, output address, or asset.Correct the transaction request. Repeating it unchanged will not help.
400PROVIDER_INVALID_TRANSACTIONThe transaction hash is not valid on the chain named in the request.Correct the hash or chain, then send a new request.
400PROVIDER_INVALID_REQUESTThe platform rejected the request before a provider call because a required field is missing or a value is invalid.Correct the request using the endpoint schema. Repeating it unchanged will not help.
400PROVIDER_INVALID_PAGE_TOKENThe cursor is invalid. Cursors are opaque and must come from a previous nextCursor response.Start without cursor, then return each nextCursor unchanged as the next request's cursor.
400PROVIDER_BATCH_INVALIDThe address batch is empty or absent; proto3 cannot distinguish those two forms.Submit at least one address.
400BATCH_SIZE_EXCEEDS_PROVIDER_LIMITThe batch exceeds the selected provider's per-request limit. Error metadata carries provider, requested, and maxSize.Split the request into batches no larger than maxSize. List enabled providers returns the same batch.maxSize before submission.
400PROVIDER_CAPABILITY_UNSUPPORTEDThe selected provider does not offer the capability required by this endpoint.Select an enabled provider that advertises the capability, or omit provider to use the tenant default. The API returns an error rather than an empty result.
400TENANT_VENDOR_NOT_BOUNDThe request names a provider that is not enabled for this tenant. The platform does not silently fall back to the default.Use a provider returned by List enabled providers, or omit provider to use the tenant default.
401GATEWAY_CREDENTIAL_INVALIDThe request did not pass API-credential authentication.Check the Authorization header and credential before retrying.
404PROVIDER_NOT_FOUNDThe provider slug is not registered on this platform.Use a slug returned by List enabled providers.
404SANDBOX_ADDRESS_NOT_FOUNDNo recorded sandbox response matches this provider, capability, chain, subject, and request shape.Use a subject from the supplied sandbox catalog or a live credential. Repeating the same sandbox request will return the same error.
404PROVIDER_TRANSACTION_NOT_FOUNDThe hash is well formed, but no transaction was found on the requested chain.Retry if the transaction is still pending; otherwise verify that the hash belongs to the selected chain.
404SCREENING_JOB_NOT_FOUNDThe batch job does not exist or does not belong to this tenant. Those states are deliberately indistinguishable.Use the jobId returned by Submit address batch and the credential that created it.
409TENANT_NO_VENDOR_BINDINGNo provider is enabled for this tenant, so no provider call was made.Contact support to enable a provider for the tenant.
409PLATFORM_DEFAULT_VENDOR_MISSINGThe tenant has no provider binding and the platform has no default from which to create one.Contact support; changing the request cannot repair platform configuration.
409TENANT_VENDOR_BINDING_INVALIDThe tenant's enabled providers do not contain exactly one default, so the platform refuses to choose arbitrarily.Contact support to repair the tenant-provider binding.
429GATEWAY_QUOTA_BALANCE_EXHAUSTEDYour organisation has spent its cumulative screening quota, which every API key shares. No clock refills it.Ask your account manager to add quota. Retrying does not help until they do.
429PROVIDER_RATE_LIMITEDThe selected provider rate-limited the upstream call. This is separate from your screening quota.Retry with backoff or select another enabled provider.
501GATEWAY_ENDPOINT_NOT_IMPLEMENTEDThe published endpoint is not currently implemented by the upstream service.Do not retry unchanged; use another available endpoint or contact support.
502GATEWAY_PROVIDER_UNAVAILABLEThe gateway could not obtain an outward-safe authoritative response from the provider service.Retry later. Do not treat this response as a clean screening result.
502PROVIDER_MALFORMED_RESPONSEThe selected provider answered, but the platform could not normalize the response into the published contract.Retry once; if it repeats, report the trace id. Do not interpret it as no risk found.
503TENANT_VENDOR_UNAVAILABLEThe explicitly selected provider, or the tenant default when provider was omitted, is unavailable to this request. Its provider row may be missing or disabled, or no adapter may be registered.Select another enabled provider. If none is available, contact support to repair provider or tenant-binding configuration.
503PROVIDER_UPSTREAM_UNAVAILABLEThe selected provider was unreachable or timed out before returning a usable response.Retry with backoff or select another enabled provider. No conclusion was established.
503PROVIDER_DISABLEDThe selected provider is disabled or has no usable integration configuration.Select another enabled provider or contact support.
503GATEWAY_ACCOUNT_UNAVAILABLEThe gateway could not verify the credential with the account service and rejected the request.Retry later; do not replace the credential based on this response alone.
503GATEWAY_QUOTA_UNAVAILABLEThe gateway could not confirm the quota deduction, so it did not screen. Nothing was charged that it can see.Retry later. A retry may succeed; it will not be charged twice for the same attempt.

Status codes do not replace reason

Different reasons can share one HTTP status but require different action.

  • A 503 can mean a selected provider is temporarily unavailable or that tenant-provider configuration needs repair; inspect reason before retrying.
  • A 502 means the gateway or provider could not produce an outward-safe normalized response. It is not a low-risk result.
  • A 409 represents tenant/provider configuration state, not a malformed screening body.
  • GATEWAY_QUOTA_BALANCE_EXHAUSTED is your organisation's cumulative screening quota, shared by every API key; PROVIDER_RATE_LIMITED is the selected provider's upstream limit.

Branch on reason, then use metadata only for keys documented for that reason.

Batch acceptance and item failures

Submit address batch returns 202 Accepted. Invalid or duplicate addresses rejected before acceptance appear in rejected; accepted addresses run asynchronously.

An accepted item can later fail with ScreeningJobResult.error.reason, a closed enum with no diagnostic-text field. progress.total is accepted addresses, done is successful terminal items, and failed is failed terminal items. A job is terminal when done + failed == total.

Batch item error reasons

These enum values appear inside ScreeningJobResult.error.reason after a batch was accepted. They are not top-level HTTP reasons and carry no diagnostic-text field.

Item reasonWhat happenedWhat to do
SCREENING_JOB_ITEM_ERROR_REASON_UNSPECIFIEDReserved protobuf zero value. A conforming failed item does not emit it.Treat it as a malformed response and contact support. Do not infer whether retrying or changing input will help.
SCREENING_JOB_ITEM_ERROR_REASON_UPSTREAMThe provider call for the batch leg was unreachable, timed out, or rate-limited.Retry the batch with backoff, or select another enabled provider that offers address batch.
SCREENING_JOB_ITEM_ERROR_REASON_SANDBOX_NOT_FOUNDThe complete sandbox request and ordered address combination has no recording.Use an exact recorded combination. Repeating the unchanged request cannot succeed.
SCREENING_JOB_ITEM_ERROR_REASON_VENDOR_ITEMThe provider explicitly marked this accepted address as failed.Do not treat it as clean. Review the address and selected provider; retrying unchanged is not guaranteed to help.
SCREENING_JOB_ITEM_ERROR_REASON_VENDOR_NO_ANSWERThe provider batch response omitted this accepted address.Resubmit the missing address. If the provider omits it again, contact support with the jobId.
SCREENING_JOB_ITEM_ERROR_REASON_PLATFORMThe platform could not normalize or attribute the provider result for this address.Retry once. If it repeats, contact support with the jobId; do not interpret it as a clean result.
SCREENING_JOB_ITEM_ERROR_REASON_EXECUTORThe batch executor could not run or finish this accepted address; no provider conclusion was established.Resubmit the job later. If it repeats, contact support with the jobId.
Status Codes — AlphaToken RegTech API