Skip to main content

Payment instruments

A payment instrument is a stored account or card that money moves to or from - a bank account, a digital wallet, an on-chain crypto wallet, a real-time-payment alias, or a card. Instruments appear in the Merchant API in three places:

  • On the way in - when you create a transfer, you describe the destination in payment_method.details.
  • On the way out - a TransferView returns the resolved destination as its payment_instrument object.
  • On transactions, orders and webhooks - the same payment_instrument object reports the card a payment ran on, or the destination of a transfer. See Instruments on transactions, orders and webhooks.

A payout has no instrument fields of its own: it reuses the instrument of the original payment you reference, so you never re-supply account details for a payout.

Instrument types​

The type field selects the instrument kind and determines which fields are populated. Values are lowercase on the wire.

typeDestination
bank_accountA bank account (IBAN or account number + routing details).
walletA digital wallet such as Skrill, PayPal, or GCash. Addressed by holder_email / holder_phone.
crypto_walletAn on-chain wallet address.
real_time_paymentA real-time-payment alias (e.g. a Pix key, phone, PayID, or VPA).
cardA tokenized destination card.

Common fields​

Every instrument, whatever its type, may carry these:

FieldTypeDescription
idstringThe stored instrument identifier (pi_...), on returned instruments.
typestringOne of the values above.
country_codestringISO 3166-1 alpha-2 country code.
holder_namestringFull name of the account/instrument holder.
holder_emailstringHolder email.
holder_phonestringHolder phone (also the recipient address for digital wallets).
document_idstringHolder tax/identity document number, where the rail requires it.
holder_addressobjectHolder postal address (line1, line2, city, state, postal_code, country), when one was supplied.

Fields without a value are omitted from a returned instrument.

Fields by type​

Beyond the common fields, each type adds its own. When creating a transfer these go inside payment_method.details; on a returned payment_instrument they appear at the top level. Which fields are required depends on the payment method, country, and provider.

bank_account​

FieldTypeDescription
ibanstringAccount IBAN.
account_numberstringAccount number, where IBAN is not used.
bic_swiftstringBIC / SWIFT code.
bank_codestringNational bank/sort code.
branch_codestringBranch code, where applicable.
bank_namestringName of the bank.
account_typestringe.g. checking or savings.

wallet​

No exclusive fields - the recipient is identified by the common holder_email / holder_phone. Which wallet it is comes from the transfer's payment_method.code.

crypto_wallet​

FieldTypeDescription
wallet_addressstringThe on-chain destination address.

real_time_payment​

FieldTypeDescription
account_referencestringThe RTP alias - a Pix key, phone number, PayID, or VPA.

card​

FieldTypeDescription
card_brandstringCard brand in lowercase, e.g. visa.
last4_digitsstringLast four digits of the card number. The full number is never returned.
binstringThe card's bank identification number (first six to eight digits).
card_fundingstringHow the card draws funds: credit, debit, prepaid, or unknown when the BIN could not be classified.
card_productstringThe card product tier in lowercase, e.g. platinum, gold, world. Omitted when unknown.
issuer_namestringName of the issuing bank. Omitted when unknown.

For a card, the common holder_name is the cardholder name as it was entered with the card. It is omitted when none was captured.

A card destination is addressed by its card_token, which you supply in payment_method.details when you create the transfer. The token and the card's expiry are not returned on an instrument.

Instruments on transactions, orders and webhooks​

Besides transfers, the payment_instrument object is returned wherever a transaction is reported, so you can show the card on an invoice or recognise it when you look a payment up later:

WhereFieldWhen it is set
GET /v1/transactions/{id} and the transaction searchpayment_instrumentOn every attempt that ran on a stored instrument, including failed ones.
GET /v1/orders/{id} and the order searchpayment_instrumentOnce the order has succeeded: it is the instrument of the order's final transaction. A pending or failed order carries none.
Transaction webhooksdata.payment_instrumentOn the same transactions as the API, at the time the event is emitted.

The object is present only when Orchestr holds the instrument:

  • Card payments collected through our card fields or the server-to-server card API carry a card instrument with card_brand, last4_digits, the BIN-derived bin, card_funding, card_product and issuer_name, and the cardholder name in holder_name.
  • Transfers carry their destination instrument.
  • Redirect methods (iDEAL, PayPal and similar), and card payments where the customer enters the card on a provider-hosted page, carry no instrument: the field is absent.

Example, a card payment:

"payment_instrument": {
"id": "pi_8a7b6c5d",
"type": "card",
"country_code": "US",
"holder_name": "Jane Doe",
"card_brand": "visa",
"last4_digits": "4242",
"bin": "42424242",
"card_funding": "credit",
"card_product": "platinum",
"issuer_name": "Commonwealth Bank"
}

Request-side details​

When you create a transfer, payment_method.details accepts the union of the fields above plus a few holder attributes some rails require - first_name, middle_name, last_name, date_of_birth, bank_address, and holder_address. Supply only what the destination needs; unused fields are ignored. See the PaymentMethodDetails schema for the full list.

Next steps​