Capabilities

A capability is a feature you can utilize on an account. "This account can be charged on a card." "This account can receive a bank account payout." "This account holder is identity-verified." Each is a capability with its own status and its own list of outstanding requirements.

You request a capability; Frame provisions its requirements, reports its status and what it still needs (currently_due), and bills for its use; you decide what your platform does with what Frame reports. Some capabilities act at transaction time — geo_compliance blocking a restricted charge is the feature doing its job. A capability's status reports what currently is — it does not carry the play-by-play of individual checks, which live on their own records.

Request only what the relationship needs — a buyer paying you on a hosted checkout only needs card_send; a seller getting a payout needs card_receive or bank_account_receive plus the verifications those depend on.

The capability set

CapabilityWhat it enablesAccount requirements
card_sendThe account's card can be charged (the everyday "accept a payment" case).Individual or business account; an attached card payment method.
card_receiveFrame can push a payout to the account's debit card.Individual account with completed KYC and a card payment method.
bank_account_sendThe account's bank account can be debited via ACH.Individual or business account; an attached bank account.
bank_account_receiveFrame can push a payout to the account's bank account.Individual account with completed KYC and a verified bank account.
kycThe account holder has completed identity verification.Individual account with name, phone, address, date of birth, last 4 of SSN.
idvThe account holder has confirmed their identity with a government ID and a selfie.Individual account. Frame requests it automatically when KYC cannot resolve from data alone.
kybThe business behind the account has completed Know-Your-Business verification.Business account with its legal entity details.
kyc_prefillKYC data is pre-filled from a verified identity source instead of being re-collected.Individual account with a phone number.
phone_verificationThe phone number on file is verified via SMS or voice.Individual account with a phone number.
age_verificationThe account holder's age has been confirmed against the date of birth.Individual account with verified KYC and DOB.
address_verificationA physical address has been validated.Payment method with a billing address; ACH additionally requires verified KYC.
bank_account_verificationBank account ownership has been verified.Individual account; must use a hosted onboarding session.
card_verificationA card has been verified without being charged.Individual account with a card payment method.
geo_complianceLocation-based rules have been applied to the account.Account with Frame.js or a mobile SDK initialized.
creator_shieldCreator-focused fraud protection signals are running on the account.Individual account with verified KYC.

A few terms to keep oriented:

  • _send means funds are pulled from the account (you charge the buyer's card). _receive means funds are pushed to the account (you pay out to the seller's bank).
  • The "minimal" capability for a buyer account is card_send. It doesn't require KYC, and it's what hosted checkout requests automatically.
  • KYC, age, address, phone, bank account, and card verifications are independent capabilities — request the ones you need rather than running them all by default.

Lifecycle

The status field on a capability is one of three values — this matches the Capability schema:

  • pending — the capability has been requested but at least one requirement is unmet. Frame is waiting on additional information or on a check to resolve.
  • active — as of Frame's last evaluation, every requirement was satisfied and the capability is usable.
  • disabled — the capability has been switched off deliberately, by you or by Frame acting on a policy decision — and nothing else. The disabled_reason field describes why. A failed check never lands here: verification outcomes live on their own records, and a capability whose check failed stays pending.

Two lifecycle notes that are not status values you should branch on: a capability type that has never been requested on an account simply isn't part of that account's capability list yet (conceptually "unrequested" — there is nothing to read); and a small number of legacy capabilities may still show an ineligible state from an older model — treat it as "off, not self-service fixable." It is being retired.

A capability moves between states automatically as data lands. Attach a card → card_send becomes active. Complete KYC through an onboarding session → kyc becomes active. There is no explicit "activate" call; you supply the inputs, Frame re-evaluates.

Re-evaluation is triggered by those inputs landing, not run on a schedule, and some checks resolve in the background. So status holds the result of the most recent evaluation and can trail the account's live state for a short window after a change — while currently_due is computed when you read it and is always current. If the two disagree, trust currently_due. Rather than polling status after a write, listen for the capability webhooks.

What active means, per capability

One rule governs status everywhere: active means every requirement on the capability's checklist was satisfied as of Frame's last evaluation. What the checklist contains differs by capability, so active answers a different question depending on which one you're reading:

Capabilitiesactive answers
kyc, kyb, idv, age_verification, phone_verification"Is this person or business verified?" — the verification itself is on the checklist.
card_send, card_receive, bank_account_send, bank_account_receive, address_verification, card_verification, bank_account_verification"Is this ready to use?" — provisioning steps like an attached payment method and accepted terms; the receive capabilities also depend on verification.
geo_compliance, kyc_prefill"Is the feature on?" — a minimal checklist; the feature does its work per-transaction or per-flow once enabled.
creator_shield"Verified person, enrolled, monitoring running."

Read the row you care about with its own question in mind — kyc_prefill: active means the prefill accelerator is enabled for the account, not that a prefill succeeded; kyc: active means the person is verified.

currently_due

When a capability is pending, the currently_due array on the capability lists the actionable outstanding requirements — fields the account holder still has to supply.

{
  "name": "kyc",
  "status": "pending",
  "currently_due": ["profile.individual.address", "profile.individual.birthdate"]
}

currently_due is what you'd hand to an onboarding session to collect, or what you'd surface in your own UI. A pending capability with a populated currently_due is waiting on the account holder; an empty currently_due on a pending capability means Frame is waiting on a back-channel check (a verification still resolving, a document under review) — listen for the capability.activated webhook to know when it activates. A failed check does not fire a capability event: it is reported on the requirement's verification record (for KYC, on the identity verification and its account.identity_verification.* webhook family).

Capabilities and account status

An account's status rolls up from its capability statuses:

  • All requested capabilities active → account active.
  • One or more capabilities pending → account pending.
  • All capabilities disabled or the account explicitly disabled → account disabled.

A pending account can still transact through any of its active capabilities — the rollup is informational, not a gate. See accounts for the full state model.

Adding capabilities later

Capabilities are not locked at account creation. As an account holder unlocks new features on your platform — graduating from buyer to seller, opting into payouts — request additional capabilities by passing them on an update or by creating a new onboarding session configured for the additions. Each fresh session collects only the deltas, not what's already on file.

Reference

For the full capability set on a live account, see GET/v1/accounts/{account_id}/capabilities.

Frame Assistant

Ask anything about Frame's APIs and products