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 moreCapabilityGrantvalues. 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.
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 SANDBOX and LIVE, and it’s both what you send incapabilities and what accounts report back. The names
in the first column are labels for this page only; the API uses just the id.
Identity requirements below lists what each one needs.
Request capabilities at create
Send capability ids incapabilities when you
create the 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 PENDING. 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 CAPABILITY_DUPLICATE. If a capability is rejected, you can’t request it again; you need
a different one. Account model explains each status.
Identity requirements
Each capability is available to individuals, organizations, or both, and needs certain identity details before it can become ACTIVE. 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 withidentity.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 IDENTITY_REQUIREMENT_UNMET, 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 RECEIVE_PAYOUTS: the account can be paid. See The coverage gate.Be paid in euro over SEPA
cap_Ji86R1HUP9uUTtp9kdkqBw (RECEIVE_EUR). Covers RECEIVE_PAYOUTS for EUR. Offered to
individuals and organizations.
An individual needs:
An organization needs:
Be paid in Mexican pesos
cap_4fdeGSFUm3ux2h2XxRc36m (RECEIVE_MXN). Covers RECEIVE_PAYOUTS for MXN. Offered to
individuals and organizations.
An individual needs:
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:
Be paid in Colombian pesos
cap_ErJidGbptNorgQQMFtt8q3 (RECEIVE_COP). Covers RECEIVE_PAYOUTS for COP, to a Colombian
bank account or a Bre-B key. Offered to individuals and organizations.
An individual needs:
A Colombian citizen is identified by their cédula, sent as a NATIONAL_ID issued in CO. A
foreign national uses a cédula de extranjería, sent as a RESIDENCE_PERMIT issued in CO, or a
passport or national ID from another country. A driving license isn’t accepted.
An organization needs:
Be paid in UAE dirhams
cap_JgahDHi18aKcx9riZS36wb (RECEIVE_AED). Covers RECEIVE_PAYOUTS for AED, to a bank account held in the United Arab Emirates. Offered to individuals and organizations.
An individual needs:
No identity document is needed. If you send a PASSPORT, or a NATIONAL_ID 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:
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.
Be paid into a regular Indian account
cap_R8mRkY9V6dXFFpFrff3mDw (RECEIVE_INR). Covers RECEIVE_PAYOUTS for INR,
NON_REPATRIABLE: an NRO or resident account, registered with isNre: false.
Offered to individuals only.
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 RECEIVE_PAYOUTS for INR,
REPATRIABLE: an NRE account, registered with isNre: true. Offered to individuals
only.
Sending capabilities
Sending capabilities grant SEND_PAYOUTS_TO_THIRD_PARTIES: the account can be named as the sender of a payout to someone else’s bank account. They exist only for INR today, so a payout in any other currency never names asender.
Be named as the sender to a regular Indian account
cap_R2EcnNENdJX6suu2SWM2fs (SEND_INR). Covers SEND_PAYOUTS_TO_THIRD_PARTIES for INR,
NON_REPATRIABLE. Offered to individuals only.
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 NATIONAL_ID
issued in IN. A sender living in the US (
residentialAddress.country is US) can use an SSN
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 SEND_PAYOUTS_TO_THIRD_PARTIES for
INR, REPATRIABLE. Offered to individuals only.
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 SSN 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 thereceiveCurrency and, for INR, from the bank account’s isNre.
The receiver, and the sender if there is one, must each hold an ACTIVE capability that covers it.
- RECEIVE_PAYOUTS lets the account be paid at the bank accounts its capability covers.
- SEND_PAYOUTS_TO_THIRD_PARTIES lets the account be named as a payout’s
sender. It only grants permission: the money still comes from the payout’sfinancialAccountId, 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 with422SENDER_NOT_SUPPORTED.
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. 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 getcommon.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 REJECTED; 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 ACTIVE capabilities, you
won’t notice this when paying, and your audit trail stays clear.
What’s next
Account model
The resources behind a payout, and the statuses they share.
Payouts
Set up a recipient and send a payout.