> ## Documentation Index
> Fetch the complete documentation index at: https://public-openfx.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Capabilities

> Every capability you can request, the identity details each one needs, and how capabilities control who can be paid.

A capability lets an account do one thing in a payout: be paid in a currency, or be named as the
sender. This page lists every capability, the identity details each one needs, and how they control
payouts. For how a capability's status changes, see
[Account model](/v3/account-model#the-shared-state-machine).

## What a capability is

Each capability has an id: `cap_` followed by a Base58 string. Treat it as opaque; don't try to
read meaning into it. An id stands for one fixed set of terms: what it covers, the identity it
needs, and its legal basis. When any of those change, OpenFX issues a new id.

To see what a capability covers, read its `details` (`CapabilityDetails`). It's read-only and always
matches the id:

* `grants`: what the capability lets the account do, as one or more `CapabilityGrant` values. A
  capability with several grants is still one capability, with one set of requirements and one
  status.
* `currencies` (optional): the currencies it covers.
* `repatriability` (optional): which kinds of account it covers, such as regular or NRE for INR.

Two rules apply. **A missing field means no limit**: no `currencies` means any currency, and no
`repatriability` means the distinction doesn't apply. **Every combination applies**: two grants and
two currencies mean both grants for both currencies. Where that wouldn't hold, OpenFX issues
separate capabilities per currency instead.

New fields can appear in `details`, so ignore ones you don't recognize. Compare capabilities, check
payouts, and match webhooks by id, never by `details`.

## The capability catalog

These are the ids to use. They're fixed and global: the same id works in <span class="ofx-enum">SANDBOX</span> and
<span class="ofx-enum">LIVE</span>, and it's both what you send in `capabilities` and what accounts report back. The names
in the first column are labels for this page only; the API uses just the id.

| Capability | Id | Grant | Currency | Repatriability | Offered to |
| - | - | - | - | - | - |
| **RECEIVE\_EUR** | `cap_Ji86R1HUP9uUTtp9kdkqBw` | <span class="ofx-enum">RECEIVE\_PAYOUTS</span> | <span class="ofx-enum">EUR</span> | Not applicable | Individuals and organizations |
| **RECEIVE\_MXN** | `cap_4fdeGSFUm3ux2h2XxRc36m` | <span class="ofx-enum">RECEIVE\_PAYOUTS</span> | <span class="ofx-enum">MXN</span> | Not applicable | Individuals and organizations |
| **RECEIVE\_COP** | `cap_ErJidGbptNorgQQMFtt8q3` | <span class="ofx-enum">RECEIVE\_PAYOUTS</span> | <span class="ofx-enum">COP</span> | Not applicable | Individuals and organizations |
| **RECEIVE\_AED** | `cap_JgahDHi18aKcx9riZS36wb` | <span class="ofx-enum">RECEIVE\_PAYOUTS</span> | <span class="ofx-enum">AED</span> | Not applicable | Individuals and organizations |
| **RECEIVE\_INR** | `cap_R8mRkY9V6dXFFpFrff3mDw` | <span class="ofx-enum">RECEIVE\_PAYOUTS</span> | <span class="ofx-enum">INR</span> | <span class="ofx-enum">NON\_REPATRIABLE</span> | Individuals |
| **RECEIVE\_INR\_REPATRIABLE** | `cap_GKm4sqq9YsRcJj9yMnHyLx` | <span class="ofx-enum">RECEIVE\_PAYOUTS</span> | <span class="ofx-enum">INR</span> | <span class="ofx-enum">REPATRIABLE</span> | Individuals |
| **SEND\_INR** | `cap_R2EcnNENdJX6suu2SWM2fs` | <span class="ofx-enum">SEND\_PAYOUTS\_TO\_THIRD\_PARTIES</span> | <span class="ofx-enum">INR</span> | <span class="ofx-enum">NON\_REPATRIABLE</span> | Individuals |
| **SEND\_INR\_REPATRIABLE** | `cap_BTfPKkGd8ttTQjf3bxA22g` | <span class="ofx-enum">SEND\_PAYOUTS\_TO\_THIRD\_PARTIES</span> | <span class="ofx-enum">INR</span> | <span class="ofx-enum">REPATRIABLE</span> | Individuals |

[Identity requirements](#identity-requirements) below lists what each one needs.

## Request capabilities at create

Send capability ids in `capabilities` when you
[create the account](/v3/api-reference/payments/accounts/create-account). You can only add
capabilities at creation, so request every one the account will need, along with the identity
details they require. Each starts <span class="ofx-enum">PENDING</span>. If you send `[]` or leave it out, the account has
no capabilities.

Each capability comes back as an `AccountCapability` with its `details`, which you can use in your
own product, for example to offer adding a EUR payout address once the account can receive EUR.

An account can hold each capability only once, ever. Requesting the same one twice fails with
`422` <span class="ofx-enum">CAPABILITY\_DUPLICATE</span>. If a capability is rejected, you can't request it again; you need
a different one. [Account model](/v3/account-model#the-shared-state-machine) explains each status.

## Identity requirements

Each capability is available to individuals, organizations, or both, and needs certain identity
details before it can become <span class="ofx-enum">ACTIVE</span>. The sections below list them.

Each table lists one required field per row, as a path into the account's identity. An individual's
fields start with `identity.individual` and an organization's with `identity.organization`. If a
capability is open to both, each gets its own table. If you request several capabilities, you need
the fields for all of them.

Most identity fields are optional in the schema, so an account with no capabilities needs very
little. These tables show what each capability adds. If anything is missing when you request it, the
request fails with `422` <span class="ofx-enum">IDENTITY\_REQUIREMENT\_UNMET</span>, and `error.details.issues` lists every
missing field. The capability isn't created.

The **When required** column gives any condition. "Always" means in every case. Conditions that
depend on the account are explained below the table.

### Receiving capabilities

Receiving capabilities grant <span class="ofx-enum">RECEIVE\_PAYOUTS</span>: the account can be paid. See
[The coverage gate](#the-coverage-gate).

#### Be paid in euro over SEPA

**`cap_Ji86R1HUP9uUTtp9kdkqBw` (RECEIVE\_EUR).** Covers <span class="ofx-enum">RECEIVE\_PAYOUTS</span> for <span class="ofx-enum">EUR</span>. Offered to
individuals and organizations.

An individual needs:

| Field | When required |
| - | - |
| `identity.individual.firstName` | Always |
| `identity.individual.lastName` | Always |
| `identity.individual.residentialAddress.country` | Always |

An organization needs:

| Field | When required |
| - | - |
| `identity.organization.legalName` | Always |
| `identity.organization.registeredAddress.country` | Always |

#### Be paid in Mexican pesos

**`cap_4fdeGSFUm3ux2h2XxRc36m` (RECEIVE\_MXN).** Covers <span class="ofx-enum">RECEIVE\_PAYOUTS</span> for <span class="ofx-enum">MXN</span>. Offered to
individuals and organizations.

An individual needs:

| Field | When required |
| - | - |
| `identity.individual.firstName` | Always |
| `identity.individual.lastName` | Always |
| `identity.individual.taxInformation[]` | An entry whose `issuingCountry` is MX, carrying the RFC. Not needed where `documents[]` carries the CURP |
| `identity.individual.documents[]` | A <span class="ofx-enum">NATIONAL\_ID</span> document issued in MX, carrying the CURP as `number`. Not needed where `taxInformation[]` carries the RFC |

An individual is identified by an RFC or a CURP. If you send both, OpenFX uses the RFC. A passport
isn't accepted instead.

An organization needs:

| Field | When required |
| - | - |
| `identity.organization.legalName` | Always |
| `identity.organization.taxInformation[]` | An entry whose `issuingCountry` is MX, carrying the RFC |

#### Be paid in Colombian pesos

**`cap_ErJidGbptNorgQQMFtt8q3` (RECEIVE\_COP).** Covers <span class="ofx-enum">RECEIVE\_PAYOUTS</span> for <span class="ofx-enum">COP</span>, to a Colombian
bank account or a Bre-B key. Offered to individuals and organizations.

An individual needs:

| Field | When required |
| - | - |
| `identity.individual.firstName` | Always |
| `identity.individual.lastName` | Always |
| `identity.individual.nationality` | Always |
| `identity.individual.documents[]` | A <span class="ofx-enum">NATIONAL\_ID</span> or <span class="ofx-enum">PASSPORT</span> document from any issuing country, or a <span class="ofx-enum">RESIDENCE\_PERMIT</span> issued in CO, carrying `number` and `issuingCountry` |

A Colombian citizen is identified by their cédula, sent as a <span class="ofx-enum">NATIONAL\_ID</span> issued in CO. A
foreign national uses a cédula de extranjería, sent as a <span class="ofx-enum">RESIDENCE\_PERMIT</span> issued in CO, or a
passport or national ID from another country. A driving license isn't accepted.

An organization needs:

| Field | When required |
| - | - |
| `identity.organization.legalName` | Always |
| `identity.organization.taxInformation[]` | An entry whose `issuingCountry` is CO, carrying the NIT |

#### Be paid in UAE dirhams

**`cap_JgahDHi18aKcx9riZS36wb` (RECEIVE\_AED).** Covers <span class="ofx-enum">RECEIVE\_PAYOUTS</span> for <span class="ofx-enum">AED</span>, to a bank account held in the United Arab Emirates. Offered to individuals and organizations.

An individual needs:

| Field | When required |
| - | - |
| `identity.individual.firstName` | Always |
| `identity.individual.lastName` | Always |
| `identity.individual.residentialAddress.line1` | Always. At most 50 characters |
| `identity.individual.residentialAddress.country` | Always |

No identity document is needed. If you send a <span class="ofx-enum">PASSPORT</span>, or a <span class="ofx-enum">NATIONAL\_ID</span> issued in AE (the Emirates ID), its `number` must be at most 50 characters, not counting spaces and separators. The address can be in any country.

An organization needs:

| Field | When required |
| - | - |
| `identity.organization.legalName` | Always |
| `identity.organization.registeredAddress.line1` | Always. At most 50 characters |
| `identity.organization.registeredAddress.country` | Always |

The name paid is checked on the payout address, not here. A UAE bank account takes a name of at most 75 bytes using letters A to Z, digits, spaces and / – ? : - ( ) . , ' + &, with no digits for an individual. If the account's own name doesn't fit, send `accountHolderName` when you [register the payout address](/v3/payouts).

#### Be paid into a regular Indian account

**`cap_R8mRkY9V6dXFFpFrff3mDw` (RECEIVE\_INR).** Covers <span class="ofx-enum">RECEIVE\_PAYOUTS</span> for <span class="ofx-enum">INR</span>,
<span class="ofx-enum">NON\_REPATRIABLE</span>: an NRO or resident account, registered with `isNre: false`.
Offered to individuals only.

| Field | When required |
| - | - |
| `identity.individual.firstName` | Always |
| `identity.individual.lastName` | Always |
| `identity.individual.phoneNumber` | Always |

Every INR capability, receiving and sending, needs a `phoneNumber`. OpenFX can waive this for your
organization, in which case it's no longer listed as required.

#### Be paid into an Indian NRE account

**`cap_GKm4sqq9YsRcJj9yMnHyLx` (RECEIVE\_INR\_REPATRIABLE).** Covers <span class="ofx-enum">RECEIVE\_PAYOUTS</span> for <span class="ofx-enum">INR</span>,
<span class="ofx-enum">REPATRIABLE</span>: an NRE account, registered with `isNre: true`. Offered to individuals
only.

| Field | When required |
| - | - |
| `identity.individual.firstName` | Always |
| `identity.individual.lastName` | Always |
| `identity.individual.phoneNumber` | Always |
| `identity.individual.nationality` | Always |

### Sending capabilities

Sending capabilities grant <span class="ofx-enum">SEND\_PAYOUTS\_TO\_THIRD\_PARTIES</span>: the account can be named as the sender
of a payout to someone else's bank account. They exist only for <span class="ofx-enum">INR</span> today, so a payout in any other currency never names a `sender`.

#### Be named as the sender to a regular Indian account

**`cap_R2EcnNENdJX6suu2SWM2fs` (SEND\_INR).** Covers <span class="ofx-enum">SEND\_PAYOUTS\_TO\_THIRD\_PARTIES</span> for <span class="ofx-enum">INR</span>,
<span class="ofx-enum">NON\_REPATRIABLE</span>. Offered to individuals only.

| Field | When required |
| - | - |
| `identity.individual.firstName` | Always |
| `identity.individual.lastName` | Always |
| `identity.individual.phoneNumber` | Always |
| `identity.individual.taxInformation[]` | An entry whose `issuingCountry` is IN, carrying the PAN. Not needed where `documents[]` carries a qualifying document |
| `identity.individual.documents[]` | A <span class="ofx-enum">PASSPORT</span>, <span class="ofx-enum">NATIONAL\_ID</span>, <span class="ofx-enum">DRIVERS\_LICENSE</span>, or <span class="ofx-enum">RESIDENCE\_PERMIT</span> document carrying `number` and an accepted `issuingCountry`. An <span class="ofx-enum">SSN</span> also counts where `residentialAddress.country` is US. Not needed where `taxInformation[]` carries the PAN |

A sender is identified by a PAN or an identity document, wherever they live. The document can be a
passport, national ID, driving license, or residence permit; send an Aadhaar as a <span class="ofx-enum">NATIONAL\_ID</span>
issued in IN. A sender living in the US (`residentialAddress.country` is US) can use an <span class="ofx-enum">SSN</span>
instead. A PAN is five letters, four digits, and a letter, such as ABCDE1234F; anything else doesn't
count.

A document only counts if its `issuingCountry` is accepted. Both INR-sending capabilities accept every
country except these:

AF, AI, AO, AQ, AS, BA, BF, BG, BO, BV, BY, CC, CD, CF, CI, CM, CU, CX, EH, ER, GN, GQ, GS, GU, GW,
HM, HT, IO, IQ, IR, KM, KP, LA, LB, LY, MC, MH, ML, MM, NE, NF, NI, NR, PA, PG, PN, PS, PW, RU, SD,
SJ, SO, SS, ST, SY, TC, TF, TJ, TK, TM, UA, UM, VE, VI, VU, YE, ZW.

#### Be named as the sender to an Indian NRE account

**`cap_BTfPKkGd8ttTQjf3bxA22g` (SEND\_INR\_REPATRIABLE).** Covers <span class="ofx-enum">SEND\_PAYOUTS\_TO\_THIRD\_PARTIES</span> for
<span class="ofx-enum">INR</span>, <span class="ofx-enum">REPATRIABLE</span>. Offered to individuals only.

| Field | When required |
| - | - |
| `identity.individual.firstName` | Always |
| `identity.individual.lastName` | Always |
| `identity.individual.phoneNumber` | Always |
| `identity.individual.nationality` | Always |
| `identity.individual.dateOfBirth` | Always |
| `identity.individual.residentialAddress.line1` | Always |
| `identity.individual.residentialAddress.city` | Always |
| `identity.individual.residentialAddress.country` | Always. Not IN, since an NRE sender lives outside India, and not a sanctioned country |
| `identity.individual.taxInformation[]` | An entry whose `issuingCountry` is IN, carrying the PAN. Not needed where `documents[]` carries a qualifying document |
| `identity.individual.documents[]` | A <span class="ofx-enum">PASSPORT</span>, <span class="ofx-enum">NATIONAL\_ID</span>, <span class="ofx-enum">DRIVERS\_LICENSE</span>, or <span class="ofx-enum">RESIDENCE\_PERMIT</span> document carrying `number` and an accepted `issuingCountry`. Not needed where `taxInformation[]` carries the PAN |

An NRE sender is identified the same way as a regular one: a PAN, or a passport, national ID,
driving license, or residence permit from an accepted country. An <span class="ofx-enum">SSN</span> doesn't count here.

An NRE sender lives outside India, so `residentialAddress.country` can't be IN or a sanctioned
country.

## The coverage gate

A payout checks **what a capability covers, not its id**. When you create a payout, OpenFX works
out the coverage it needs from the `receiveCurrency` and, for INR, from the bank account's `isNre`.
The receiver, and the sender if there is one, must each hold an <span class="ofx-enum">ACTIVE</span> capability that covers it.

* <span class="ofx-enum">RECEIVE\_PAYOUTS</span> lets the account be paid at the bank accounts its capability covers.
* <span class="ofx-enum">SEND\_PAYOUTS\_TO\_THIRD\_PARTIES</span> lets the account be named as a payout's `sender`. It only
  grants permission: the money still comes from the payout's `financialAccountId`, never from the
  sender. It exists only for INR today, so only INR payouts and quotes can name a
  sender. Naming one on a payout or quote in any other currency fails with `422` <span class="ofx-enum">SENDER\_NOT\_SUPPORTED</span>.

The payout has no field for the sender's account type. For INR, the bank account's `isNre` decides it
for the whole payout.

A payout address doesn't name a capability, but its account must already hold one that can receive
at it, in any status. See [Payouts](/v3/payouts). OpenFX decides how the payout is
delivered.

## How the vocabulary evolves

Capabilities are only ever added. A published capability is never renamed or changed.

To widen what a capability covers, OpenFX issues a new capability and grants it to accounts that
already meet its requirements. You get
[`common.account.capability_activated`](/v3/webhooks/payments/accounts-webhooks/account-capability-activated)
without doing anything. A change to requirements or legal basis always means a new capability. To
retire one, OpenFX issues a replacement and moves holders of the old one to <span class="ofx-enum">REJECTED</span>; the old
one can then no longer be requested.

This means capabilities are versioned without version numbers, and one capability may be replaced by
several ids over time. Because payouts check coverage across all your <span class="ofx-enum">ACTIVE</span> capabilities, you
won't notice this when paying, and your audit trail stays clear.

## What's next

<CardGroup cols={2}>
  <Card title="Account model" icon="https://public-assets.openfx.com/docs/icons/capability-lifecycle.svg" href="/v3/account-model">
    The resources behind a payout, and the statuses they share.
  </Card>

  <Card title="Payouts" icon="https://public-assets.openfx.com/docs/icons/withdrawals.svg" href="/v3/payouts">
    Set up a recipient and send a payout.
  </Card>
</CardGroup>
