Overview
Chainrails KYC is a reusable identity layer for headless financial flows. Instead of asking a user to repeat verification with every provider, Chainrails maintains one profile and evaluates it against the requirements of the provider and transaction being used. The engine follows a progressive model: clients collect only the requirements currently missing for a transaction. Information already provided or verified is reused where the next provider accepts it.Chainrails KYC applies to headless providers. For widget providers, create the ramp order and redirect the user to
widgetUrl; that provider owns its KYC flow.How the flow works
- Ask for the provider requirements with
GET /api/v1/kyc/requirements. - Read the user’s current eligibility with
GET /api/v1/kyc/state. - Collect only missing, insufficient, or rejected fields.
- Submit them with
POST /api/v1/kyc/submit. - If an external verification URL is returned, redirect the user and poll state after they return.
- Continue when
canProceedistrue, or direct the user to support whenblockedistrue.
Progressive requirements
Every required field has an assurance level:
State responses group requirements by what the client should do next:
Verification methods
Chainrails currently supports:- Text verification: registry validation of country-specific identifiers. Nigeria currently supports BVN and NIN.
- External verification: a hosted identity-document and biometric flow covering document verification, liveness, face match, phone verification, and device/IP analysis.
- Manual review: used when verified identity evidence conflicts or a provider result is inconclusive.
countryCode identifies the transaction corridor. fields.country identifies the user’s current country of residence. They are separate concepts and do not need to match.
Standalone KYC endpoints
Use the dedicated endpoints when KYC is managed independently of a ramp transaction or will be reused across multiple Chainrails products:/api/v1/ramp/kyc entry points documented in the Complete Ramping Guide. They apply ramp-specific amount handling and access checks while calling the same KYC engine.
Security and privacy
- Send KYC requests only from your authenticated backend.
- Never expose your Chainrails API key in a frontend application.
- Do not log identity numbers, document data, verification payloads, or decrypted profile fields.
- Do not assume that returning from an external verification URL means approval; always query KYC state.
- Do not repeatedly resubmit blocked data. Manual review is required when
blockedistrue.

