Skip to main content
POST
/
accounts
/
{account_id}
/
addresses
/
external
curl --request POST \
  --url https://api.brale.xyz/accounts/{account_id}/addresses/external \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --header 'Idempotency-Key: <idempotency-key>' \
  --data '
{
  "name": "Base External Wallet",
  "transfer_types": [
    "base"
  ],
  "address": "0xE57e438aE0b1557bFC1ad70BD7751635E473D888"
}
'
{
  "id": "2VcUIIsgARwVbEGlIYbhg6fGG57"
}
This endpoint is the Direct bank entry path for creating external off-chain bank addresses. Use it when you already have the bank account details (account number, routing number) and need wire, ach_credit, or rtp.
This endpoint does not support ach_debit. If you need ACH debit, use the Plaid-linked bank account flow instead.
For a full comparison of both external bank address creation paths, see External bank addresses.

Direct bank entry examples

ACH credit

Request
{
  "owner": "Jane Doe",
  "transfer_types": ["ach_credit", "same_day_ach_credit"],
  "account_number": "1234567890",
  "routing_number": "063108680",
  "name": "Example Bank",
  "bank_address": {
    "street_line_1": "100 Example St",
    "street_line_2": "Suite 500",
    "city": "Springfield",
    "state": "CA",
    "zip": "90001"
  },
  "beneficiary_address": {
    "street_line_1": "100 Example St",
    "street_line_2": "Suite 500",
    "city": "Springfield",
    "state": "CA",
    "zip": "90001"
  },
  "account_type": "checking"
}

Wire

Request
{
  "owner": "Jane Doe",
  "transfer_types": ["wire"],
  "account_number": "1234567890",
  "routing_number": "063108680",
  "name": "Example Bank",
  "bank_address": {
    "street_line_1": "100 Example St",
    "street_line_2": "Suite 500",
    "city": "Springfield",
    "state": "CA",
    "zip": "90001"
  },
  "beneficiary_address": {
    "street_line_1": "100 Example St",
    "street_line_2": "Suite 500",
    "city": "Springfield",
    "state": "CA",
    "zip": "90001"
  },
  "account_type": "checking"
}

RTP

Request
{
  "owner": "Jane Doe",
  "transfer_types": ["ach_credit", "same_day_ach_credit", "rtp_credit"],
  "account_number": "1234567890",
  "routing_number": "063108680",
  "name": "Example Bank",
  "bank_address": {
    "street_line_1": "100 Example St",
    "street_line_2": "Suite 500",
    "city": "Springfield",
    "state": "CA",
    "zip": "90001"
  },
  "beneficiary_address": {
    "street_line_1": "100 Example St",
    "street_line_2": "Suite 500",
    "city": "Springfield",
    "state": "CA",
    "zip": "90001"
  },
  "account_type": "checking"
}
RTP eligibility is determined asynchronously by the banking partner after the address is created. The rtp_credit transfer type may not appear immediately. See Key Concepts → Addresses for details.
Use the playground below to try this endpoint directly, or review the OpenAPI details in the right panel.

Authorizations

Authorization
string
header
required

Use the Bearer token returned from the Auth endpoint via OAuth2 client_credentials flow. Include the token in the "Authorization: Bearer " header.

Headers

Idempotency-Key
string
required

A unique string used to prevent duplicate operations. Each POST request must use a new idempotency key. Use a UUIDv4 string. Example: idemp-123e4567-e89b-12d3-a456-426614174000

Path Parameters

account_id
string<ksuid>
required

The ID of the account

Pattern: ^[a-zA-Z0-9]{26}$
Example:

"2VcUIIsgARwVbEGlIYbhg6fGG57"

Body

application/json
name
string | null
required
Example:

"Company External EVM Address"

address
string
required
Example:

"0xb518d4d6221d9a41d23d71cbce8e106e7aab8f9b"

transfer_types
string[]
required

Response

201 - */*

External address successfully created

id
string<ksuid>
Pattern: ^[a-zA-Z0-9]{26}$
Example:

"2VcUIIsgARwVbEGlIYbhg6fGG57"