curl --request PATCH \
--url https://api.brale.xyz/accounts/{account_id}/addresses/{address_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"date_of_birth": "1990-01-31"
}
'import requests
url = "https://api.brale.xyz/accounts/{account_id}/addresses/{address_id}"
payload = { "date_of_birth": "1990-01-31" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({date_of_birth: '1990-01-31'})
};
fetch('https://api.brale.xyz/accounts/{account_id}/addresses/{address_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.brale.xyz/accounts/{account_id}/addresses/{address_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'date_of_birth' => '1990-01-31'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.brale.xyz/accounts/{account_id}/addresses/{address_id}"
payload := strings.NewReader("{\n \"date_of_birth\": \"1990-01-31\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.brale.xyz/accounts/{account_id}/addresses/{address_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"date_of_birth\": \"1990-01-31\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.brale.xyz/accounts/{account_id}/addresses/{address_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"date_of_birth\": \"1990-01-31\"\n}"
response = http.request(request)
puts response.read_body{
"id": "2VcUIIsgARwVbEGlIYbhg6fGG57",
"status": "active",
"name": "Solana Custodial Wallet",
"address": "73uyt9HkEqx9bThYXWaUBP67sWsiJEsyJ5rSCieDx5me",
"transfer_types": [
"solana",
"base",
"wire"
]
}{
"type": "date_of_birth_already_set",
"detail": "Date of birth is already set and cannot be changed",
"code": "ValidationError",
"status": 400
}{
"type": "recipient_update_failed",
"detail": "The recipient could not be updated",
"code": "ValidationError",
"status": 422
}Update an Address
Update the name, status, transfer types, or recipient details for an existing address.
curl --request PATCH \
--url https://api.brale.xyz/accounts/{account_id}/addresses/{address_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"date_of_birth": "1990-01-31"
}
'import requests
url = "https://api.brale.xyz/accounts/{account_id}/addresses/{address_id}"
payload = { "date_of_birth": "1990-01-31" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({date_of_birth: '1990-01-31'})
};
fetch('https://api.brale.xyz/accounts/{account_id}/addresses/{address_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.brale.xyz/accounts/{account_id}/addresses/{address_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'date_of_birth' => '1990-01-31'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.brale.xyz/accounts/{account_id}/addresses/{address_id}"
payload := strings.NewReader("{\n \"date_of_birth\": \"1990-01-31\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.brale.xyz/accounts/{account_id}/addresses/{address_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"date_of_birth\": \"1990-01-31\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.brale.xyz/accounts/{account_id}/addresses/{address_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"date_of_birth\": \"1990-01-31\"\n}"
response = http.request(request)
puts response.read_body{
"id": "2VcUIIsgARwVbEGlIYbhg6fGG57",
"status": "active",
"name": "Solana Custodial Wallet",
"address": "73uyt9HkEqx9bThYXWaUBP67sWsiJEsyJ5rSCieDx5me",
"transfer_types": [
"solana",
"base",
"wire"
]
}{
"type": "date_of_birth_already_set",
"detail": "Date of birth is already set and cannot be changed",
"code": "ValidationError",
"status": 400
}{
"type": "recipient_update_failed",
"detail": "The recipient could not be updated",
"code": "ValidationError",
"status": 422
}PATCH https://api.brale.xyz/accounts/{account_id}/addresses/{address_id}
Updatable fields
| Field | Type | Description |
|---|---|---|
name | string | Rename the address. |
status | string | "archived" to archive, "active" to unarchive (external addresses only — custodial addresses cannot be unarchived). |
additional_transfer_types | array of strings | Add new rails to the address (e.g. "wire", "fednow_credit", "solana"). For bank addresses, supply bank_address and beneficiary_address before adding wire. |
bank_address | object | Street address of the bank. Required for bank addresses before enabling wire. |
beneficiary_address | object | Street address of the beneficiary. Required for bank addresses before enabling wire. |
account_holder_type | string | Bank addresses only. "individual" or "business". Can be set only while it is not set yet. Sending the value that is already stored succeeds with no change; a different value returns 400 account_holder_type_already_set. |
date_of_birth | string | Bank addresses only. Individual recipient’s date of birth in YYYY-MM-DD format. Can be set only while no date of birth is stored. Sending the stored value succeeds with no change. A different value returns 400 date_of_birth_already_set. |
Add transfer types to an existing address
To add new rails to an existing address (for example, addingach_credit and same_day_ach_credit to an address), send a PATCH to the same endpoint with additional_transfer_types:
PATCH https://api.brale.xyz/accounts/{account_id}/addresses/{address_id}
{
"additional_transfer_types": ["ach_credit", "same_day_ach_credit"]
}
additional_transfer_types is merged into the address’s existing transfer_types. You do not need to resend the full existing list — send only the rails you want to add. Sending a transfer type that is already enabled is idempotent.
Add FedNow to an existing recipient
To send FedNow payouts to an existing bank address, such as an ACH recipient, addfednow_credit:
{
"additional_transfer_types": ["fednow_credit"]
}
["ach_credit"] becomes ["ach_credit", "fednow_credit"]. The address id does not change, so existing references keep working. bank_address and beneficiary_address are not required to add fednow_credit. Confirm fednow_credit is present before sending a payout. See Send FedNow payouts.
Set the account holder type
For bank addresses created withoutaccount_holder_type, set it once:
{ "account_holder_type": "individual" }
individual → PPD, business → CCD). Once set, it cannot be changed through the API.
Set the recipient’s date of birth
For individual bank recipients created without a date of birth, set it once:{ "date_of_birth": "1990-01-31" }
- The date must be in
YYYY-MM-DDformat and in the past. Otherwise Brale returns400validation_errors. The error response does not include the submitted value. - Business recipients do not accept
date_of_birth. Sending it for a business recipient returns400date_of_birth_not_supported. Settingaccount_holder_typetobusinesson an address with a stored date of birth returns the same error. - If Brale cannot update the recipient, it does not save the date of birth. Brale returns
422recipient_update_failed, or503when the update is temporarily unavailable. - Responses return
date_of_birthmasked to the year (for example,"1990-**-**").
Error responses
400— invalid or incompatible transfer types, attempting to archive a pending address, attempting to unarchive a custodial address, invalid status value, or invalidaccount_holder_typevalue.400account_holder_type_already_set— the address already has a differentaccount_holder_type.400date_of_birth_already_set— the address already has a differentdate_of_birth.400date_of_birth_not_supported—date_of_birthwas sent for a business recipient, oraccount_holder_type: businesswas sent for an address with a stored date of birth.404— address not found or not owned by the account.422fednow_routing_number_not_supported— the address’s routing number does not participate in FedNow. Do not retry.422fednow_provider_registration_failed— FedNow registration failed. This can be temporary. Retry the same request after a backoff.422recipient_update_failed— Brale could not update the recipient with the new date of birth. The change is not saved.503— the recipient update is temporarily unavailable. The change is not saved. Retry after a backoff.
addresses:writeAuthorizations
Path Parameters
Body
For bank addresses only. Whether the bank account belongs to an individual or a business. Can be set only while it is not set yet. Sending the stored value succeeds with no change. A different value returns 400 account_holder_type_already_set.
individual, business For bank addresses only. Date of birth of an individual recipient, in YYYY-MM-DD format. Can be set only while no date of birth is stored. Sending the stored value returns 200 with no change. A different value returns 400 date_of_birth_already_set. Sending it for a business recipient, or with account_holder_type: business, returns 400 date_of_birth_not_supported. A malformed or future date returns 400 validation_errors. Responses return the date masked to the year (1990-**-**).
"1990-01-31"
Response
The updated address
Was this page helpful?