Age Verification
Age verification confirms that an account holder meets the minimum age requirements for your platform or product. frameOS evaluates age against the identity information collected during KYC — no separate document upload or additional flow required.
Age verification depends on KYC having been completed for the account. The date of birth collected during KYC is used as the basis for the age check.
How it works
Once KYC is complete, frameOS evaluates the account holder's date of birth against the minimum age thresholds for your platform. The check is run internally — there's no additional step for the account holder to complete.
frameOS evaluates two thresholds:
| Threshold | Age | Common use cases |
|---|---|---|
| Minimum age | 18+ | Financial services, online platforms, adult content |
| Drinking age | 21+ | Alcohol delivery, cannabis, age-restricted retail |
If the account holder does not meet the minimum age requirement, the verification fails and the associated capabilities are not enabled.
Required information
Age verification requires a complete individual profile. The following fields must be present on the account before the check can run:
| Field | Description |
|---|---|
| First name | Legal first name |
| Last name | Legal last name |
| Phone number | Account holder's phone number |
| Date of birth | Used to calculate current age |
| Last 4 of SSN | Required as part of KYC |
| Address | Full residential address including street, city, state, postal code, and country |
If any of these fields are missing, age verification will not run and the capability will remain inactive. Ensure KYC is fully completed before expecting age verification to resolve.
Relationship to KYC
Age verification is downstream of KYC — it uses the identity data collected during the KYC flow rather than collecting anything new. For this reason, kyc should always be requested alongside age_verification.
Use KYC Prefill to pre-populate identity data including date of birth from just a phone number, reducing the fields the account holder needs to enter manually during onboarding.
Create an account with age verification
Parameters
Must be individual. Age verification is only supported for individual accounts.
Include age_verification alongside kyc. KYC must complete before age verification can run.
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", "age_verification"],
"profile": {
"individual": {
"email": "marcia@example.com",
"name": {
"first_name": "Marcia",
"last_name": "Longo"
},
"phone": {
"number": "3107484186",
"country_code": "1"
}
}
}
}'
{
"id": "f6a7b8c9-d0e1-2345-fabc-456789012345",
"object": "account",
"type": "individual",
"status": "pending",
"external_id": null,
"capabilities": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567891",
"object": "capability",
"name": "kyc",
"status": "pending",
"disabled_reason": null,
"currently_due": [],
"disabled": null
},
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567892",
"object": "capability",
"name": "age_verification",
"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 collect the required identity information. Once KYC completes and all required fields are present, frameOS runs the age check automatically — the account holder does not need to take any additional action.
curl --request POST \
--url https://api.framepayments.com/v1/onboarding_sessions \
--header 'Authorization: Bearer API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"account_id": "f6a7b8c9-d0e1-2345-fabc-456789012345",
"return_url": "https://example.com/onboarding/complete"
}'
After onboarding completes, retrieve the account to check the age_verification capability status. A status of active means the account holder passed the age check. A status of failed means they did not meet the minimum age requirement and the capability will not be enabled.