Country requirements
Bank lookup means you must fetch the receiving institution fromGET /v2/institutions and pass the selected bank_id. See Bank lookups below.
Recipient extras are in addition to the fields every registration requires: name (or business_name), email, and address.
Where Business recipients is No, the country accepts individual recipients only, and submitting
recipient.business fails.
US payouts are first-party only: beneficiary_type must be FIRST_PARTY, and the destination must be a bank account the customer owns. Every other country accepts both FIRST_PARTY and THIRD_PARTY.
SEPA countries
All SEPA corridors pay out in EUR and share the same requirements: Austria, Belgium, Bulgaria, Croatia, Cyprus, Czechia, Denmark, Estonia, Finland, France, Germany, Greece, Hungary, Ireland, Italy, Latvia, Lithuania, Luxembourg, Malta, Netherlands, Norway, Poland, Portugal, Romania, Slovakia, Slovenia, Spain, Sweden, Switzerland.Why rails and details objects differ
Some countries have a standardized local scheme with its ownpayment_method value, such as SPEI for Mexico or PIX for Brazil. Countries without a dedicated local rail use BANK_TRANSFER as the catch-all, and the country on the request determines which corridor applies.
Rails with identical field sets share a details object. SPAV, SINPE, LBTR, IBFT, MADA, ZAHAV, NPSS, BECS, and ACH all use bank_transfer_details despite having distinct payment_method values.
Beyond the fields you collect, the rail changes nothing. Conversion submission, webhook handling, and status progression are identical everywhere.
Bank lookups
Countries marked Yes above require the customer to choose their receiving institution, and registration fails without abank_id. Fetch the list before you render the bank field:
- Japan requires a lookup for
bank_idand separately requires abank_code, the Zengin code, which the institutions endpoint does not return. Collect it from the customer. - United Kingdom needs no lookup, but does require at least one of
swift_or_bic_numberorbank_id. If you sendbank_id, get it from the institutions endpoint rather than constructing it.
Building the request
Payout destinations are registered throughPOST /v2/identities/{identity_id}/payment-instructions. The country determines three things: the payment_method, the details object nested inside bank_account_details, and which recipient fields you need.
Canada, which uses one of the more detailed objects:
recipient.individual or recipient.business. Nest tax_id and phone inside whichever one you set. Both are also accepted at the top level of recipient, but that form is deprecated, and the nested value wins if you send both.
Bastion derives the account holder’s name and address from the recipient object before forwarding to the payment provider. Do not put them inside bank_account_details.
Format requirements
Tax IDs
Bank codes
Postal codes
Street addresses
Saudi Arabia, the United Arab Emirates, Israel, and Kenya require a physical street address.
P.O. Box and PO Box are rejected in street_line_1.
Phone numbers
E.164 with country code, e.g. +541143000000.
Account identifiers