Bank Account Verification
Bank account verification confirms that an account holder owns and controls the bank account they're linking for ACH payments or payouts. frameOS connects the account holder to their bank through a secure hosted flow, retrieving account details and identity signals to verify ownership instantly.
Bank account verification is only available through the hosted onboarding session flow. It cannot be triggered directly via the API.
How it works
During the onboarding session, the account holder is prompted to log in to their bank directly within the hosted flow. frameOS connects to their institution, retrieves the necessary account details, and returns identity signals and account data used to confirm ownership.
This process is instant — there are no micro-deposits or multi-day waiting periods. Once the account holder successfully authenticates with their bank, the verification is complete and the bank_account_verification capability is activated.
The retrieved data may include account and routing numbers, account holder name, and additional signals used for fraud evaluation. This information is stored against the payment method and used in downstream compliance and risk checks.
Integrate with onboarding
Bank account verification is designed to be part of onboarding. We recommend requesting the bank_account_verification capability alongside your other capabilities so account holders link and verify their bank account while they're already in the sign-up flow.
If you're also collecting KYC, the identity information returned during bank account verification is cross-referenced against the account holder's KYC data — adding an additional layer of confidence to the overall verification result.
Create an account with bank account verification
Parameters
Must be individual. Bank account verification is only supported for individual accounts.
Include bank_account_verification to enable bank account verification. Combine with kyc to cross-reference the verified bank identity data against the account holder's KYC information.
The account holder's email address.
The account holder's first name.
The account holder's last name.
Object containing number and country_code for the account holder's phone.
curl --request POST \
--url https://api.framepayments.com/v1/accounts \
--header 'Authorization: Bearer API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"type": "individual",
"capabilities": ["kyc", "bank_account_verification"],
"profile": {
"individual": {
"email": "marcia@example.com",
"name": {
"first_name": "Marcia",
"last_name": "Longo"
},
"phone": {
"number": "3107484186",
"country_code": "1"
}
}
}
}'
{
"id": "e5f6a7b8-c9d0-1234-efab-345678901234",
"object": "account",
"type": "individual",
"status": "pending",
"external_id": null,
"capabilities": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567891",
"object": "capability",
"name": "bank_account_verification",
"status": "pending",
"disabled_reason": null,
"currently_due": [],
"disabled": null
},
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567892",
"object": "capability",
"name": "kyc",
"status": "pending",
"disabled_reason": null,
"currently_due": [],
"disabled": null
}
],
"profile": {
"individual": {
"email": "marcia@example.com",
"ssn_last_four": null,
"name": {
"first_name": "Marcia",
"middle_name": null,
"last_name": "Longo",
"suffix": null
},
"phone": {
"number": "3107484186",
"country_code": "1"
},
"birthdate": null,
"address": null
}
},
"terms_of_service": null,
"metadata": {},
"livemode": false,
"created": 1721010605
}
Complete onboarding
Create an onboarding session to launch the bank account verification flow. frameOS presents the account holder with a secure bank login experience within the hosted session — no redirects or third-party windows. Once they authenticate with their bank, frameOS retrieves and validates their account details automatically.
curl --request POST \
--url https://api.framepayments.com/v1/onboarding_sessions \
--header 'Authorization: Bearer API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"account_id": "e5f6a7b8-c9d0-1234-efab-345678901234",
"return_url": "https://example.com/onboarding/complete"
}'
After the session completes, retrieve the account to confirm the bank_account_verification capability status has transitioned to active.