curl --request POST \
--url https://api.example.com/banks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"rail": "<string>"
}
'import requests
url = "https://api.example.com/banks"
payload = { "rail": "<string>" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({rail: '<string>'})
};
fetch('https://api.example.com/banks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"rail": "<string>",
"currency": "<string>",
"method": "sepa",
"opened": true,
"feeBps": 123,
"supportedAccounts": [
"USDC"
],
"status": "preparing",
"destinationAccount": "USDC",
"minimumDeposit": "500.00",
"id": "bnk_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41",
"requisites": {
"fields": {
"iban": "<string>",
"bic": "<string>",
"accountNumber": "<string>",
"routingNumber": "<string>",
"pixKey": "<string>",
"pixKeyType": "phone",
"paymentKey": "<string>",
"financialInstitutionId": "<string>",
"branchNumber": "<string>",
"accountKind": "checking",
"phoneNumber": "<string>"
},
"holder": {
"type": "individual",
"firstName": "<string>",
"lastName": "<string>",
"businessName": "<string>",
"address": {
"streetAddress": "<string>",
"addressLine2": "<string>",
"city": "<string>",
"state": "<string>",
"country": "AF",
"zip": "<string>"
},
"idType": "passport",
"idNumber": "<string>",
"taxId": "<string>",
"nationality": "<string>"
},
"state": "active",
"bankName": "<string>",
"paymentReference": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}Request a rail for this client
Answers 201 with the rail record the first time, 200 with Idempotency-Replayed: true when the rail was already requested or is already active. A rail is a singleton per client, so the server key is the client and the rail.
curl --request POST \
--url https://api.example.com/banks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"rail": "<string>"
}
'import requests
url = "https://api.example.com/banks"
payload = { "rail": "<string>" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({rail: '<string>'})
};
fetch('https://api.example.com/banks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"rail": "<string>",
"currency": "<string>",
"method": "sepa",
"opened": true,
"feeBps": 123,
"supportedAccounts": [
"USDC"
],
"status": "preparing",
"destinationAccount": "USDC",
"minimumDeposit": "500.00",
"id": "bnk_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41",
"requisites": {
"fields": {
"iban": "<string>",
"bic": "<string>",
"accountNumber": "<string>",
"routingNumber": "<string>",
"pixKey": "<string>",
"pixKeyType": "phone",
"paymentKey": "<string>",
"financialInstitutionId": "<string>",
"branchNumber": "<string>",
"accountKind": "checking",
"phoneNumber": "<string>"
},
"holder": {
"type": "individual",
"firstName": "<string>",
"lastName": "<string>",
"businessName": "<string>",
"address": {
"streetAddress": "<string>",
"addressLine2": "<string>",
"city": "<string>",
"state": "<string>",
"country": "AF",
"zip": "<string>"
},
"idType": "passport",
"idNumber": "<string>",
"taxId": "<string>",
"nationality": "<string>"
},
"state": "active",
"bankName": "<string>",
"paymentReference": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Your own key for this write, ^[A-Za-z0-9._:-]{1,128}$. A retry with the same key replays the first answer; the same key with a different request is refused.
"po-inv-2026-114"
The client account to act for, as a cl_… id. Omit it to act as yourself.
"cl_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41"
Body
Stable rail identifier returned by the virtual-account list operation.
Response
Successful Response
Stable HEVN identifier for this receiving payment method.
ISO 4217 fiat currency code received through this payment method.
Payment network or method represented by this rail.
sepa, swift, ach, uaefts, fedwire, rtp, fednow, pix, spei, pse, breb, transfers_3_0, ukfps, npp, nip, bdt_local, bdt_ewallet, bob_local, brl_local, cad_eft, clp_local, cny_alipay, cny_wechatpay, cop_local, crc_local, dkk_local, dop_local, dop_ewallet, egp_local, gtq_local, gtq_ewallet, hkd_fps, hnl_local, idr_local, idr_ewallet, ils_local, inr_local, inr_upi, jmd_local, jpy_local, krw_local, myr_local, nok_local, php_local, php_ewallet, pkr_raast, pkr_ewallet, pln_local, sar_local, sle_local, thb_local, try_fast, tzs_local, ugx_local, vnd_local, xof_local, zmw_local Whether receiving details have been provisioned for this payment method.
Variable fee in basis points; 100 basis points equals 1 percent.
Settlement tokens accepted by this payment method.
USDC, EURC Current virtual-account lifecycle status.
preparing, active, suspended, closed Digital asset used for settlement.
USDC, EURC Minimum amount accepted through this method.
"500.00"
Opened virtual-account identifier.
^(?:bnk_)?[A-Za-z0-9._:\-]{1,216}$"bnk_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41"
Receiving details, present after the virtual account becomes active.
Show child attributes
Show child attributes
Was this page helpful?