Skip to main content
Version: CP v. 2

KYB statuses & error codes

Status values​

ObjectLifecycle
Data requestpending_approval → released | refused | cancelled | failed
Signature requestpending_approval → signed | refused | cancelled | expired
Offer (QR code)Created as OPEN. It is single-use and expires after 30 minutes by default (1 hour at most).

Data-request refusal reasons​

reasonMeaning
declinedThe business declined the request.
threshold_not_metThe vote didn't reach the business's approval threshold.
expiredThe 24-hour window ended without a decision.
business_not_verifiedThe business isn't (or is no longer) verified.
business_wallet_rotatedThe business changed its wallet address while the request was open.
cancelled_by_merchantYou cancelled the request.
unavailableThe request couldn't be fulfilled.

Error responses​

Non-2xx responses carry a machine-readable reason in error.reason, the HTTP status in error.code, and usually a human-readable error.message:

{ "success": false, "error": { "code": 403, "reason": "pii_not_entitled", "message": "…" } }
ReasonStatusWhat to do
malformed_request400Fix the request body or parameters.
field_not_priced400The field has no price yet. Check /api/v1/kyb/pricing.
apikey_missing401Send your API key in Authorization (no Bearer prefix).
apikey_invalid401The API key is unknown or revoked.
insufficient_credit, no_credit_account402Top up credit. The body can include requiredChf, availableChf and quotedCents.
kyb_not_entitled403Ask your CorePass contact for the entitlement the route needs (kyb:read or kyb:data-request).
kyb_signature_not_entitled403Ask for kyb:signature.
pii_not_entitled403Ask for kyb:pii, or remove director/UBO fields. The message names the fields at fault.
business_not_found404No business with that wallet address.
request_not_found404Unknown data-request or signature-request ID.
offer_not_found404Unknown offer ID.
not_released404The data request hasn't been released yet. This isn't an error; try again later.
not_signed404The signature request hasn't been signed yet.
idempotency_key_conflict409The Idempotency-Key was already used with a different request body.
request_already_open409There's already an open request for this business and client domain.
no_webhook_endpoint409Register a webhook endpoint first.
request_not_open409The request is already resolved (released, refused, cancelled or expired).
offer_not_open409The offer has already been claimed, cancelled or has expired. Create a new offer.
endpoint_not_quarantined409Reactivate was called on an endpoint that isn't quarantined.
document_not_available409The requested document image isn't available.
payload_expired410The release was purged after its retention period. Create a new request.
unknown_field422A field name isn't in the vocabulary. See KYB fields.
retired_field422The field name was retired. See Retired names.
business_not_verified422The business isn't KYB-verified.
rate_limited429Back off and retry. A Retry-After header may say when.
internal_error500Unexpected error. Retry later.
not_implemented501The operation isn't available yet.
entitlement_unavailable503The entitlement check is temporarily unavailable. Retry. Don't treat it as an authorization failure.
verification_unavailable503 / 504A backing service is temporarily unavailable or didn't answer in time. Retry later.

Branch on error.reason rather than on the HTTP status code alone: several reasons share a status.

Entitlements​

EntitlementControlsDefault
kyb:readBusiness and member lookups, pricing, billing views, webhook endpoint managementGranted to every organization automatically
kyb:data-requestCreating and managing data requests, price quotesNot granted by default. Ask your CorePass contact.
kyb:piiNaming a director/UBO (natural-person) field in a data requestNot granted by default. It is separate from kyb:data-request.
kyb:signatureCreating and managing signature requestsNot granted by default. Ask your CorePass contact.

There's currently no self-service way to get these in the dashboard.