Capabilities

Returns all capabilities for the given account. Capabilities are permissions attached to accounts that control what verification flows frameOS runs and what payment methods an account can use.

export FRAME_API_KEY='sk_sandbox_...'

The Capability object

Attributes
idstring

Unique identifier for the capability.

objectstring

Object type identifier. Always capability.

nameenum

The capability type. One of kyc, phone_verification, kyc_prefill, age_verification, address_verification, card_verification, bank_account_verification, creator_shield, geo_compliance, card_send, card_receive, bank_account_send, or bank_account_receive.

account_idstring

ID of the account this capability belongs to.

statusenum

Current status. One of unrequested, pending, active, disabled, or ineligible.

disabled_reasonnullable string

Why the capability is disabled. Present only when status is disabled.

ineligible_reasonnullable string

Deprecated — always null. The ineligible status is no longer produced; the field remains for backward compatibility.

currently_duearray

Field keys still required before this capability can activate. Empty when status is active, or ineligible — an ineligible capability cannot be satisfied via its current path, so none of its fields are actionable.

errorsarray

Failure conclusions derived from the account's latest concluded identity verification run. Empty for capabilities not backed by identity verification, when no run has concluded, or when the latest concluded run approved.

createdstring

ISO 8601 timestamp of when the capability was created.

updatedstring

ISO 8601 timestamp of when the capability was last updated.

disablednullable string

ISO 8601 timestamp of when the capability was disabled. null if not disabled.

THE CAPABILITY OBJECT
{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567891",
  "object": "capability",
  "name": "kyc",
  "account_id": "99c6b0da-2570-42a7-838a-5eaa318b07df",
  "status": "pending",
  "disabled_reason": null,
  "ineligible_reason": null,
  "currently_due": [
    "profile.individual.name",
    "profile.individual.address",
    "profile.individual.ssn_last_four"
  ],
  "errors": [],
  "created": "2024-07-15T01:10:05Z",
  "updated": "2024-07-15T01:10:05Z",
  "disabled": null
}

List capabilities

Returns all capabilities for the given account. Capabilities are permissions attached to accounts that control what verification flows frameOS runs and what payment methods an account can use.

Path parameters
account_idstring

The ID of the account.

Returns

A dictionary with a data property containing an array of capability objects.

GET/v1/accounts/{account_id}/capabilities
curl --request GET \
  --url https://api.framepayments.com/v1/accounts/a70cd72f-e74a-40f2-96a2-3f60714aac4a/capabilities \
  --header 'Authorization: Bearer API_KEY'
RESPONSE
{
  "data": [
    {
      "id": "00000000-0000-4000-8000-000000000001",
      "object": "capability",
      "name": "card_send",
      "account_id": "00000000-0000-4000-8000-000000000002",
      "status": "pending",
      "disabled_reason": null,
      "ineligible_reason": null,
      "currently_due": [],
      "errors": [],
      "created": "2025-04-20T00:00:00Z",
      "updated": "2025-04-20T00:00:00Z",
      "disabled": null
    }
  ]
}

Request capabilities

Requests one or more capabilities for an account. Capability dependencies are resolved automatically — for example, requesting kyc_prefill also creates kyc and phone_verification capabilities.

Requesting an already-active capability is a no-op. A capability your merchant account has switched off is skipped — it is absent from the response, and the capabilities requested alongside it are still created.

The endpoint returns 201 when at least one new capability was created, and 200 when none was, whether because every requested capability already existed or because all of them were skipped.

You may only request capabilities covered by the Frame products your own account holds. A capability outside that set is rejected with 422 and the error code capability_not_provisionable; error_details.data names the offending capability and the required_product that would cover it. The same rejection, byte for byte, is returned by POST /v1/accounts when it carries capabilities.

Path parameters
account_idstring

The ID of the account.

Body parameters
capabilitiesarray

An array of capability names to request (e.g. ["kyc", "card_receive"]).

Returns

Returns an array of capability objects when nothing new was created — every requested capability already existed, or is switched off for the merchant and was skipped.

POST/v1/accounts/{account_id}/capabilities
curl --request POST \
  --url https://api.framepayments.com/v1/accounts/a70cd72f-e74a-40f2-96a2-3f60714aac4a/capabilities \
  --header 'Authorization: Bearer API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
  "capabilities": [
    "kyc"
  ]
}'
RESPONSE
[
  {
    "id": "00000000-0000-4000-8000-000000000001",
    "object": "capability",
    "name": "card_send",
    "account_id": "00000000-0000-4000-8000-000000000002",
    "status": "pending",
    "disabled_reason": null,
    "ineligible_reason": null,
    "currently_due": [],
    "errors": [],
    "created": "2025-04-20T00:00:00Z",
    "updated": "2025-04-20T00:00:00Z",
    "disabled": null
  }
]

Get capability

Retrieves a single capability by name for the given account. Returns the full capability object including current status, any outstanding requirements, and any errors.

Path parameters
account_idstring

The ID of the account.

nameenum

The name of the capability to retrieve (e.g. kyc). One of kyc, phone_verification, kyc_prefill, age_verification, address_verification, card_verification, bank_account_verification, creator_shield, geo_compliance, card_send, card_receive, bank_account_send, or bank_account_receive.

Returns

Returns the capability object.

GET/v1/accounts/{account_id}/capabilities/{name}
curl --request GET \
  --url https://api.framepayments.com/v1/accounts/a70cd72f-e74a-40f2-96a2-3f60714aac4a/capabilities/<name> \
  --header 'Authorization: Bearer API_KEY'
RESPONSE
{
  "id": "00000000-0000-4000-8000-000000000001",
  "object": "capability",
  "name": "card_send",
  "account_id": "00000000-0000-4000-8000-000000000002",
  "status": "active",
  "disabled_reason": null,
  "ineligible_reason": null,
  "currently_due": [],
  "errors": [],
  "created": "2025-04-20T00:00:00Z",
  "updated": "2025-04-20T00:00:00Z",
  "disabled": null
}

Disable capability

Disables a capability for an account. Disabling a capability never changes the account's status, including when it leaves the account with no active capabilities.

If the capability is already disabled, the request returns 200 with no state change.

Capability dependencies bind in both directions. A capability another one is still standing on cannot be disabled while that dependent is pending or active: the request is rejected with 422 and the error code capability_has_live_dependents, and error_details.data names the capability and the dependents blocking it. Disable the dependents first. The dependency is checked transitively, mirroring the transitive expansion POST /v1/accounts/{account_id}/capabilities performs.

Path parameters
account_idstring

The ID of the account.

nameenum

The name of the capability to disable (e.g. kyc). One of kyc, phone_verification, kyc_prefill, age_verification, address_verification, card_verification, bank_account_verification, creator_shield, geo_compliance, card_send, card_receive, bank_account_send, or bank_account_receive.

Returns

Returns the disabled capability object.

DELETE/v1/accounts/{account_id}/capabilities/{name}
curl --request DELETE \
  --url https://api.framepayments.com/v1/accounts/a70cd72f-e74a-40f2-96a2-3f60714aac4a/capabilities/<name> \
  --header 'Authorization: Bearer API_KEY'
RESPONSE
{
  "id": "00000000-0000-4000-8000-000000000001",
  "object": "capability",
  "name": "card_send",
  "account_id": "00000000-0000-4000-8000-000000000002",
  "status": "disabled",
  "disabled_reason": null,
  "ineligible_reason": null,
  "currently_due": [],
  "errors": [],
  "created": "2025-04-20T00:00:00Z",
  "updated": "2025-04-20T00:00:00Z",
  "disabled": "2025-04-20T00:00:00Z"
}

Reactivate capability

Reactivates a disabled capability, returning it to pending — the reverse of the disable operation. The capability's requirements then re-evaluate; it becomes active only once its checklist passes, so a successful call never returns an active capability directly.

Only a capability in the disabled state can be reactivated. A request may also be refused for account-specific reasons — the response code identifies which: capability_reactivation_blocked means the capability cannot currently be reactivated and support should be contacted, and — where product-based provisioning is enforced — capability_not_provisionable means no Frame product your account holds covers it.

Path parameters
account_idstring

The ID of the account.

nameenum

The name of the capability to reactivate (e.g. kyc). One of kyc, phone_verification, kyc_prefill, age_verification, address_verification, card_verification, bank_account_verification, creator_shield, geo_compliance, card_send, card_receive, bank_account_send, or bank_account_receive.

Returns

Returns the capability object, now pending.

POST/v1/accounts/{account_id}/capabilities/{name}/reactivate
curl --request POST \
  --url https://api.framepayments.com/v1/accounts/a70cd72f-e74a-40f2-96a2-3f60714aac4a/capabilities/<name>/reactivate \
  --header 'Authorization: Bearer API_KEY'
RESPONSE
{
  "id": "00000000-0000-4000-8000-000000000001",
  "object": "capability",
  "name": "card_send",
  "account_id": "00000000-0000-4000-8000-000000000002",
  "status": "pending",
  "disabled_reason": null,
  "ineligible_reason": null,
  "currently_due": [],
  "errors": [],
  "created": "2025-04-20T00:00:00Z",
  "updated": "2025-04-20T00:00:00Z",
  "disabled": null
}
Frame Assistant

Ask anything about Frame's APIs and products