KYC

frameOS includes built-in KYC (Know Your Customer) verification for individual accounts. KYC collects and verifies identity information to meet regulatory requirements — frameOS handles document collection, identity matching, and compliance checks as part of a hosted onboarding session.

KYC is required to unlock payment capabilities that involve receiving funds. If you request card_receive, bank_account_receive, or creator_shield, KYC is automatically included in the onboarding flow without needing to explicitly request the kyc capability.

Capability requirements

Some capabilities implicitly require KYC. When you request any of the following, KYC verification is automatically included in the account's onboarding session. You can also request kyc directly if you need identity verification independent of these capabilities.

CapabilityRequires KYCNotes
kycStandalone identity verification
card_receiveRequiredKYC is automatically included
bank_account_receiveRequiredKYC is automatically included
creator_shieldRequiredKYC is automatically included

Once KYC passes, any capabilities that depend on it are activated automatically.

Required information

KYC is only available for individual accounts. At minimum, frameOS requires the following information to complete verification:

FieldDescription
First nameLegal first name of the individual
Last nameLegal last name of the individual
Phone numberA valid phone number for the individual
AddressResidential address
Last 4 of SSNLast four digits of the individual's Social Security Number

Create an account with KYC

To enable KYC for an account, create an individual account with the kyc capability and prefill any known identity information. Then create an onboarding session to collect and verify the remaining required fields.

Parameters
typestring

Must be individual. KYC is only supported for individual accounts.

capabilitiesarray

Include kyc to request identity verification. You can also include card_receive, bank_account_receive, or creator_shield — KYC will be included automatically for any of these.

profile.individual.name.first_namestringoptional

The individual's legal first name.

profile.individual.name.last_namestringoptional

The individual's legal last name.

profile.individual.phoneobjectoptional

Object containing number and country_code for the individual's phone.

profile.individual.emailstringoptional

The individual's email address.

POST/v1/accounts
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"],
  "profile": {
    "individual": {
      "email": "quavo@framepayments.com",
      "name": {
        "first_name": "Quavious",
        "last_name": "Marshall"
      },
      "phone": {
        "number": "3107484186",
        "country_code": "1"
      }
    }
  }
}'
RESPONSE
{
  "id": "99c6b0da-2570-42a7-838a-5eaa318b07df",
  "object": "account",
  "type": "individual",
  "capabilities": [
    {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567892",
      "object": "capability",
      "name": "kyc",
      "status": "pending",
      "disabled_reason": null,
      "currently_due": [],
      "disabled": null
    }
  ],
  "profile": {
    "individual": {
      "email": "quavo@framepayments.com",
      "ssn_last_four": null,
      "name": {
        "first_name": "Quavious",
        "middle_name": null,
        "last_name": "Marshall",
        "suffix": null
      },
      "phone": {
        "number": "3107484186",
        "country_code": "1"
      },
      "birthdate": null,
      "address": null
    }
  },
  "terms_of_service": null,
  "metadata": {},
  "livemode": false,
  "created": 1721010605
}

Complete KYC via onboarding

Once the account is created, create an onboarding session to collect and verify the required identity information. frameOS guides the account holder through the remaining fields — address, last 4 of SSN, and any document verification — and activates the kyc capability once verification passes.

REQUEST
curl --request POST \
  --url https://api.framepayments.com/v1/onboarding_sessions \
  --header 'Authorization: Bearer API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
  "account_id": "99c6b0da-2570-42a7-838a-5eaa318b07df",
  "return_url": "https://example.com/onboarding/complete"
}'

After the account holder completes the session, retrieve the account to confirm the kyc capability status has transitioned to active.