Skip to main content
A Verification walks you through identity verification (KYC for individuals, KYB for businesses) for an account that needs to receive payouts. For example, you can create a Verification to onboard a user before their first withdrawal, pre-filling their name and address so they complete the hosted KYC form in seconds without you building any verification UI. Later, you can use the same Verification to read back their verified identity data and respond to any RFIs that downstream payout providers surface. Create a Verification when an account needs to be verified before transacting — typically before their first withdrawal. Before creating, make sure you have a Company with a ledger account (created automatically when you create a company). Don’t create multiple Verifications of the same kind on the same account — each account supports at most one active individual (KYC) and one business (KYB) profile. The Verification transitions through multiple statuses as the user completes the process: pending while they’re going through KYC, approved once identity is confirmed, rejected if the provider declines, and action_required when a payout provider needs additional information like a bank statement or tax ID. Successful Verifications result in a fully verified identity with confirmed name, date of birth, country, and address — unlocking the account for payouts. If you create a Verification with pre-fill fields (first_name, address, etc.), it automatically seeds both the verification and the hosted KYC form so the user doesn’t re-enter information you already have. We recommend listening for the identity_profile.approved and identity_profile.rejected webhooks rather than polling, to react to status changes in real time. By using Verifications, you can onboard users for payouts through a single API integration, even as the underlying KYC providers and compliance requirements change over time.

Endpoints

MethodPathDescription
GET/verifications?account_id={biz_ tag}List verifications for an account
GET/verifications/{verification_id}Retrieve a single verification by its idpf_ tag
POST/verificationsCreate a verification and start a KYC/KYB session
PATCH/verifications/{verification_id}Update identity fields or respond to RFIs
DELETE/verifications/{verification_id}Soft-delete and unlink from the account

Statuses

StatusDescriptionNext step
not_startedVerification exists but no KYC session has been startedCall POST /verifications to start
pendingUser needs to complete KYC at the session_urlRedirect the user to session_url
approvedKYC passed — the account can transactNo action needed
rejectedKYC was declined by the providerCall POST /verifications with restart: true
action_requiredA payout provider needs additional informationCheck rfis array and respond
{
	"id": "verf_xxxxxxxxxxxxx",
	"last_error_code": "abandoned",
	"last_error_reason": "Document image was too blurry to read.",
	"status": "requires_input"
}
id
string
required
The numeric id of the verification record.Example: verf_xxxxxxxxxxxxx
last_error_code
VerificationErrorCodes | null
required
The most recent error code returned during verification. Null if no error has occurred.Available options: abandoned, consent_declined, country_not_supported, device_not_supported, document_expired, document_type_not_supported, document_unverified_other, email_unverified_other, email_verification_declined, id_number_insufficient_document_data, id_number_mismatch, id_number_unverified_other, phone_unverified_other, phone_verification_declined, selfie_document_missing_photo, selfie_face_mismatch, selfie_manipulated, selfie_unverified_other, under_supported_age
last_error_reason
string | null
required
A human-readable explanation of the most recent verification error. Null if no error has occurred.Example: Document image was too blurry to read.
status
VerificationStatuses
required
The current status of this verification session.Available options: requires_input, processing, verified, canceled, created, started, submitted, approved, declined, resubmission_requested, expired, abandoned, review, action_required