Accounts
frameOS centers on connected accounts, the merchants and/or the end users who send payments, receive payouts, and complete verification flows on your platform. Create an account with the capabilities you need, prefill the information you already have, and use hosted onboarding to securely collect the rest.
Accounts support two types: individual and business. Individual accounts are used for sole proprietors and end users. Business accounts are for companies and organizations. The type you choose determines which capabilities and verification flows are available.
For a low-code option, use hosted onboarding to generate a session and let Frame collect the required information directly from the account holder.
Account types
| Type | Use case |
|---|---|
| individual | Sole proprietors, creators, and end users on marketplaces |
| business | For companies, organizations, and other entities with a formally registered legal structure. |
Most frameOS verification products, including KYC, phone verification, and address verification, are designed for individual accounts.
Business accounts follow a separate verification model. We run KYB on the legal entity while simultaneously onboarding and verifying each owner or controller as an individual in Frame, applying the appropriate KYC and related checks in parallel.
Accounts and capabilities in frameOS
Accounts are the anchor for everything in frameOS. Capabilities define what an account can do — request them when creating the account, and frameOS uses them to determine what information to collect during onboarding and which verification checks to run automatically.
| Capability | Description | Account requirement |
|---|---|---|
| kyc | KYC — Configurable identity verification flows | Individual account with name, phone, address, DOB, last 4 of SSN |
| phone_verification | Phone verification — Verify via SMS or voice | Individual account with phone number |
| kyc_prefill | KYC Prefill — Pre-fill KYC with verified identity data | Individual account with phone number |
| age_verification | Age verification — Confirm age for restrictions | Individual account with verified KYC and DOB |
| address_verification | Address verification — Validate physical addresses | Payment method with billing address; ACH also requires verified KYC |
| card_verification | Card verification — Verify cards without charging | Individual account with a card payment method |
| bank_account_verification | Bank account verification — Verify bank account ownership | Individual account; must use hosted onboarding session |
| creator_shield | Creator Shield — Fraud protection for creators | Individual account with verified KYC |
| geo_compliance | Geocompliance — Location-based rules | Account with Frame.js or mobile SDK initialized |
| card_send | Accept card payments | Individual or business account |
| card_receive | Card payouts — Receive payouts to a card | Individual account with verified KYC and card payment method |
| bank_account_send | Accept bank account payments | Individual or business account |
| bank_account_receive | Bank account payouts — Receive payouts to a bank account | Individual account with verified KYC and bank account payment method |
| Billing | Fee plans and invoicing | Any account; fee plan assigned at creation via billing.fee_plan_id |
See onboarding sessions for how capabilities drive the hosted onboarding flow.
The Account object
Attributes
Unique identifier for the account.
The type of account. One of individual or business.
The current status of the account. One of active, pending, or disabled.
An optional identifier from your own system. Must be unique per merchant. Useful for linking Frame accounts to records in your platform.
An array of capability objects for this account. Each object includes the capability id, name, status, disabled_reason, currently_due, and disabled.
The account holder's profile information. Contains either an individual or business sub-object depending on the account type.
Object containing first_name, middle_name, last_name, and suffix.
The individual's email address.
Object containing number and country_code.
Date of birth in YYYY-MM-DD format. Required for KYC and age verification.
Last four digits of the Social Security Number. The full SSN is accepted during onboarding and stored encrypted — only the last four digits are returned via the API.
Residential address containing line_1, line_2, city, state_or_province, postal_code, and country.
The registered legal name of the business.
The business's trade name, if different from its legal name.
The business entity type (e.g. llc, corporation, sole_proprietorship).
Business email address.
Object containing number and country_code.
The business's website URL.
A description of the business.
Employer Identification Number. Stored encrypted — only the last four digits are returned via the API.
Merchant Category Code.
NAICS industry classification code.
Business address containing line_1, line_2, city, state_or_province, postal_code, and country.
Record of when and how the account holder accepted your platform's terms of service. null if not yet accepted.
The token identifying the version of terms accepted.
true if the account holder has accepted the terms of service.
ISO 8601 timestamp of when the terms were accepted.
A set of key-value pairs you can attach to the account for your own reference.
true if the account exists in live mode, false if in test mode.
Unix timestamp of when the account was created.
{
"id": "99c6b0da-2570-42a7-838a-5eaa318b07df",
"object": "account",
"type": "individual",
"status": "active",
"external_id": "usr_8675309",
"capabilities": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567891",
"object": "capability",
"name": "card_send",
"status": "active",
"disabled_reason": null,
"currently_due": [],
"disabled": null
},
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567892",
"object": "capability",
"name": "kyc",
"status": "active",
"disabled_reason": null,
"currently_due": [],
"disabled": null
},
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567893",
"object": "capability",
"name": "card_receive",
"status": "active",
"disabled_reason": null,
"currently_due": [],
"disabled": null
}
],
"profile": {
"individual": {
"email": "marcia@example.com",
"ssn_last_four": "6789",
"name": {
"first_name": "Marcia",
"middle_name": null,
"last_name": "Longo",
"suffix": null
},
"phone": {
"number": "3107484186",
"country_code": "1"
},
"birthdate": null,
"address": {
"line_1": "123 Main St",
"line_2": null,
"city": "Los Angeles",
"state_or_province": "CA",
"postal_code": "90001",
"country": "US"
}
}
},
"terms_of_service": {
"token": "tos_v1_2024",
"accepted": true,
"accepted_at": "2024-08-24T14:15:22Z"
},
"metadata": {},
"livemode": false,
"created": 1721010605
}
Create an account
Creates a new account. Pass the account type, any capabilities to request, and known profile information. frameOS validates the profile fields and immediately triggers any capability checks that can be resolved without additional information from the account holder.
For capabilities that require further information — such as KYC — create an onboarding session after account creation to collect the remaining fields.
Parameters
The type of account. One of individual or business.
An array of capability type names to request for the account (e.g. ["kyc", "card_receive"]). Do not pass an object or hash — only an array of strings.
An optional identifier from your own system. Must be unique per merchant.
Profile information for the account holder. Contains either an individual or business sub-object.
Object containing first_name, middle_name (optional), last_name, and suffix (optional).
The individual's email address.
Object containing number and country_code.
Full 9-digit Social Security Number. Stored encrypted — only the last four digits are returned via the API.
Last four digits of the SSN, if the full SSN is not available.
Object containing line_1, line_2 (optional), city, state_or_province, postal_code, and country.
Date of birth in YYYY-MM-DD format.
Records that KYC data was pre-filled, with confirmed_at, ip_address, and user_agent.
The registered legal name of the business.
The business entity type.
Business email address.
Object containing number and country_code.
The business's trade name (doing business as), if different from its legal name.
The business's website URL.
A description of the business.
9-digit Employer Identification Number. Stored encrypted.
Merchant Category Code.
NAICS industry classification code.
Object containing line_1, line_2 (optional), city, state_or_province, postal_code, and country.
Record of the account holder's acceptance of your platform's terms of service.
ISO 8601 timestamp of when the terms were accepted.
IP address of the account holder at the time of acceptance.
User agent string from the account holder's browser at the time of acceptance.
An optional token identifying the specific version of terms accepted.
A set of key-value pairs to attach to the account.
Returns
Returns the newly created account object along with the current status of any requested capabilities.
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", "card_receive"],
"external_id": "usr_8675309",
"profile": {
"individual": {
"email": "marcia@example.com",
"name": {
"first_name": "Marcia",
"last_name": "Longo"
},
"phone": {
"number": "3107484186",
"country_code": "1"
}
}
},
"terms_of_service": {
"accepted_at": "2024-08-24T14:15:22Z",
"ip_address": "192.168.1.1",
"user_agent": "Mozilla/5.0",
"token": "tos_v1_2024"
},
"metadata": {
"platform_user_id": "u_123"
}
}'
{
"id": "99c6b0da-2570-42a7-838a-5eaa318b07df",
"object": "account",
"type": "individual",
"status": "pending",
"external_id": "usr_8675309",
"capabilities": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567892",
"object": "capability",
"name": "kyc",
"status": "pending",
"disabled_reason": null,
"currently_due": [],
"disabled": null
},
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567893",
"object": "capability",
"name": "card_receive",
"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": {
"token": "tos_v1_2024",
"accepted": true,
"accepted_at": "2024-08-24T14:15:22Z"
},
"metadata": {
"platform_user_id": "u_123"
},
"livemode": false,
"created": 1721010605
}
Update an account
Updates an existing account. You can update profile information, metadata, and terms of service acceptance. Updating profile fields required for pending capabilities triggers those checks to re-run automatically.
Parameters
An identifier from your own system to associate with the account. Must be unique per merchant.
Updated profile information for the account holder. Contains either an individual or business sub-object.
Object containing first_name, middle_name (optional), last_name, and suffix (optional).
The individual's email address.
Object containing number and country_code.
Date of birth in YYYY-MM-DD format.
Full 9-digit Social Security Number. Stored encrypted — only the last four digits are returned via the API.
Last four digits of the SSN, if the full SSN is not available.
Object containing line_1, line_2 (optional), city, state_or_province, postal_code, and country.
Records that KYC data was pre-filled, with confirmed_at, ip_address, and user_agent.
The registered legal name of the business.
The business entity type.
Business email address.
Object containing number and country_code.
The business's trade name (doing business as), if different from its legal name.
The business's website URL.
A description of the business.
9-digit Employer Identification Number. Stored encrypted.
Merchant Category Code.
NAICS industry classification code.
Object containing line_1, line_2 (optional), city, state_or_province, postal_code, and country.
Record of the account holder's acceptance of your platform's terms of service.
ISO 8601 timestamp of when the terms were accepted.
IP address of the account holder at the time of acceptance.
User agent string from the account holder's browser at the time of acceptance.
An optional token identifying the specific version of terms accepted.
Updated metadata key-value pairs.
Returns
Returns the updated account object with current capability statuses.
curl --request PATCH \
--url https://api.framepayments.com/v1/accounts/7b03bf26-6394-4ee8-b56a-d38635bd14b1 \
--header 'Authorization: Bearer API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"profile": {
"individual": {
"name": {
"first_name": "Riley",
"last_name": "Morgan"
}
}
}
}'
{
"id": "7b03bf26-6394-4ee8-b56a-d38635bd14b1",
"object": "account",
"type": "individual",
"status": "pending",
"external_id": "usr_8675309",
"capabilities": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567892",
"object": "capability",
"name": "kyc",
"status": "pending",
"disabled_reason": null,
"currently_due": [],
"disabled": null
},
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567893",
"object": "capability",
"name": "card_receive",
"status": "pending",
"disabled_reason": null,
"currently_due": [],
"disabled": null
}
],
"profile": {
"individual": {
"email": "riley@example.com",
"ssn_last_four": null,
"name": {
"first_name": "Riley",
"middle_name": null,
"last_name": "Morgan",
"suffix": null
},
"phone": {
"number": "3107484186",
"country_code": "1"
},
"birthdate": null,
"address": null
}
},
"terms_of_service": null,
"metadata": {
"platform_user_id": "u_123"
},
"livemode": false,
"created": 1721010605
}
Retrieve an account
Retrieves an existing account by ID, including its profile and current capability statuses.
Parameters
No parameters.
Returns
Returns the account object with current capability statuses.
curl --request GET \
--url https://api.framepayments.com/v1/accounts/7b03bf26-6394-4ee8-b56a-d38635bd14b1 \
--header 'Authorization: Bearer API_KEY'
{
"id": "7b03bf26-6394-4ee8-b56a-d38635bd14b1",
"object": "account",
"type": "individual",
"status": "pending",
"external_id": "usr_8675309",
"capabilities": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567892",
"object": "capability",
"name": "kyc",
"status": "active",
"disabled_reason": null,
"currently_due": [],
"disabled": null
},
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567893",
"object": "capability",
"name": "card_receive",
"status": "pending",
"disabled_reason": null,
"currently_due": [],
"disabled": null
}
],
"profile": {
"individual": {
"email": "riley@example.com",
"ssn_last_four": null,
"name": {
"first_name": "Riley",
"middle_name": null,
"last_name": "Morgan",
"suffix": null
},
"phone": {
"number": "3107484186",
"country_code": "1"
},
"birthdate": null,
"address": null
}
},
"terms_of_service": null,
"metadata": {
"platform_user_id": "u_123"
},
"livemode": false,
"created": 1721010605
}
List all accounts
Returns a paginated list of accounts for your platform.
Parameters
Filter by account status. One of active, pending, or disabled.
Filter by account type. One of individual or business.
Filter by your platform's external identifier.
Number of results to return. Defaults to 10, maximum 100.
Page offset for pagination.
Returns
A dictionary with a data property containing an array of account objects with capability statuses.
curl --request GET \
--url 'https://api.framepayments.com/v1/accounts?type=individual&status=active' \
--header 'Authorization: Bearer API_KEY'
{
"meta": {
"page": 1,
"has_more": true,
"next": 2,
"prev": null,
"url": "/v1/accounts"
},
"data": [
{
"id": "99c6b0da-2570-42a7-838a-5eaa318b07df",
"object": "account",
"type": "individual",
"status": "active",
"external_id": "usr_8675309",
"capabilities": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567891",
"object": "capability",
"name": "card_send",
"status": "active",
"disabled_reason": null,
"currently_due": [],
"disabled": null
},
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567892",
"object": "capability",
"name": "kyc",
"status": "active",
"disabled_reason": null,
"currently_due": [],
"disabled": null
}
],
"profile": {
"individual": {
"email": "marcia@example.com",
"ssn_last_four": "6789",
"name": {
"first_name": "Marcia",
"middle_name": null,
"last_name": "Longo",
"suffix": null
},
"phone": {
"number": "3107484186",
"country_code": "1"
},
"birthdate": "1982-07-19",
"address": {
"line_1": "123 Main St",
"line_2": null,
"city": "Los Angeles",
"state_or_province": "CA",
"postal_code": "90001",
"country": "US"
}
}
},
"terms_of_service": {
"token": "tos_v1_2024",
"accepted": true,
"accepted_at": "2024-08-24T14:15:22Z"
},
"metadata": {},
"livemode": false,
"created": 1721010605
},
{
"id": "7b03bf26-6394-4ee8-b56a-d38635bd14b1",
"object": "account",
"type": "individual",
"status": "active",
"external_id": null,
"capabilities": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567894",
"object": "capability",
"name": "kyc",
"status": "pending",
"disabled_reason": null,
"currently_due": [],
"disabled": null
},
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567895",
"object": "capability",
"name": "card_send",
"status": "pending",
"disabled_reason": null,
"currently_due": [],
"disabled": null
}
],
"profile": {
"individual": {
"email": "riley@example.com",
"ssn_last_four": null,
"name": {
"first_name": "Riley",
"middle_name": null,
"last_name": "Morgan",
"suffix": null
},
"phone": {
"number": "3107484186",
"country_code": "1"
},
"birthdate": null,
"address": null
}
},
"terms_of_service": null,
"metadata": {},
"livemode": false,
"created": 1720924205
}
]
}
Disable an account
Disables an account. Disabled accounts cannot initiate or receive payments and all associated capabilities are suspended. Contact Frame support to re-enable a disabled account.
Parameters
No parameters.
Returns
Returns the disabled account object.
curl --request DELETE \
--url https://api.framepayments.com/v1/accounts/99c6b0da-2570-42a7-838a-5eaa318b07df \
--header 'Authorization: Bearer API_KEY'
{
"id": "99c6b0da-2570-42a7-838a-5eaa318b07df",
"object": "account",
"type": "individual",
"status": "disabled",
"external_id": "usr_8675309",
"capabilities": [],
"profile": {
"individual": {
"email": "marcia@example.com",
"ssn_last_four": "6789",
"name": {
"first_name": "Marcia",
"middle_name": null,
"last_name": "Longo",
"suffix": null
},
"phone": {
"number": "3107484186",
"country_code": "1"
},
"birthdate": null,
"address": {
"line_1": "123 Main St",
"line_2": null,
"city": "Los Angeles",
"state_or_province": "CA",
"postal_code": "90001",
"country": "US"
}
}
},
"terms_of_service": {
"token": "tos_v1_2024",
"accepted": true,
"accepted_at": "2024-08-24T14:15:22Z"
},
"metadata": {},
"livemode": false,
"created": 1721010605
}
Next steps
- Onboarding Sessions — Use hosted sessions to collect identity and verification data
- KYC — Identity verification for individual accounts
- Billing — Assign fee plans and manage invoicing for accounts