Skip to main content
GET
/
accounts
/
{account_id}
/
transfers
/
{id}
Retrieve a single transfer
curl --request GET \
  --url https://api.brale.xyz/accounts/{account_id}/transfers/{id} \
  --header 'Authorization: Bearer <token>'
{
  "id": "2VcUIIsgARwVbEGlIYbhg6fGG57",
  "status": "pending",
  "failure": null,
  "source": {
    "value_type": "USD",
    "transfer_type": "wire",
    "address_id": "2VcUIIsgARwVbEGlIYbhg6fGG57",
    "financial_institution_id": "<string>",
    "wire_memo": "<string>",
    "transaction_id": "0xdd5646ea…",
    "payment_details": {
      "received_at": "2026-04-07T00:01:24.514000Z",
      "sender_name": "Originator Name",
      "sender_bank_name": "JPMorgan Chase Bank",
      "sender_bank_routing_number": "000000123",
      "payment_reference": "Simulated Wire",
      "imad": "20260406XOIZJDPP953495",
      "trace_number": "021000029876543"
    }
  },
  "destination": {
    "value_type": "USD",
    "transfer_type": "wire",
    "address_id": "2VcUIIsgARwVbEGlIYbhg6fGG57",
    "financial_institution_id": "<string>",
    "wire_memo": "<string>",
    "transaction_id": "0xdd5646ea…",
    "payment_details": {
      "received_at": "2026-04-07T00:01:24.514000Z",
      "sender_name": "Originator Name",
      "sender_bank_name": "JPMorgan Chase Bank",
      "sender_bank_routing_number": "000000123",
      "payment_reference": "Simulated Wire",
      "imad": "20260406XOIZJDPP953495",
      "trace_number": "021000029876543"
    }
  },
  "amount": {
    "value": "11234.88",
    "currency": "USD"
  },
  "note": null,
  "automation_id": "2VcUIIsgARwVbEGlIYbhg6fGG57",
  "funding_simulated": true,
  "created_at": "2026-01-01T00:00:00Z",
  "updated_at": "2026-01-01T00:00:00Z"
}
Use the playground below to try this endpoint directly, or review the OpenAPI details in the right panel.

source.payment_details

Transfer responses may include an optional source.payment_details object when Brale has underlying payment metadata to expose for the source leg of a transfer. This is primarily relevant for inbound fiat-funded transfers (wire, ACH). Wire transfers typically include the fuller set of fields. ACH transfers may include only a subset — fields may be null or omitted depending on available rail metadata.
FieldTypeDescription
received_atstring (ISO 8601)When the underlying payment was received or posted
sender_namestring | nullName of the originating sender, when available
sender_bank_namestring | nullOriginating bank name, when available
sender_bank_routing_numberstring | nullOriginating bank routing number, when available
payment_referencestring | nullSender-provided payment reference or memo, when available
imadstring | nullWire IMAD / tracking identifier, when available
trace_numberstring | nullACH trace identifier for the underlying payment, when available. Primarily relevant for inbound ACH-funded transfers.

Example: wire-funded transfer

Response
{
  "id": "3C0QcbwVywOGyU2HBSenljm5dhU",
  "status": "complete",
  "failure": null,
  "source": {
    "transfer_type": "wire",
    "financial_institution_id": "3AjRnbvj9Mq6crkviJv08d0KLB2",
    "value_type": "USD",
    "payment_details": {
      "received_at": "2026-04-07T00:01:24.514000Z",
      "sender_name": "Originator Name",
      "sender_bank_name": "JPMorgan Chase Bank",
      "sender_bank_routing_number": "000000123",
      "payment_reference": "Simulated Wire",
      "imad": "20260406XOIZJDPP953495"
    }
  },
  "destination": {
    "transaction_id": "0x41c66f1d059dad7a55a854e157a1b5b938780c77ba5296e434a02dfb1727fe5e",
    "transfer_type": "base",
    "address_id": "3ARaM0I93ObWOIFDIztsTx4TAsp",
    "value_type": "ARB"
  },
  "updated_at": "2026-04-07T00:01:44.824834Z",
  "created_at": "2026-04-07T00:01:27.756775Z",
  "note": null,
  "amount": {
    "value": "102.0",
    "currency": "USD"
  },
  "automation_id": "3AjRnDClEzwuCKlRioG3OXMS4pH"
}

Example: ACH-funded transfer (payment_details excerpt)

Response (source excerpt)
{
  "source": {
    "transfer_type": "ach_debit",
    "value_type": "USD",
    "payment_details": {
      "received_at": "2026-04-07T02:10:06.921000Z",
      "sender_name": "Test ACH Sender",
      "sender_bank_name": null,
      "sender_bank_routing_number": "721160232",
      "payment_reference": null,
      "imad": null,
      "trace_number": "021000029876543"
    }
  }
}
See Transfers — source.payment_details for full details.

destination.payment_details

Transfer responses may include an optional destination.payment_details object when Brale has underlying payment metadata to expose for the destination leg of a transfer. This is primarily relevant for outbound wire transfers (stablecoin-to-fiat offramps and wire payouts). The object is optional and may be absent immediately after a transfer is created. For outbound wires, the IMAD is assigned by the sending bank and may not be available until after the wire has been submitted; Brale populates this field later when the underlying bank metadata arrives.
FieldTypeDescription
imadstring | nullWire IMAD / tracking identifier for the outbound wire, when available
destination.payment_details is a response-only field. It is not accepted as input when creating a transfer. Do not confuse it with destination.wire_memo, which remains a request field for outbound wire transfers.

Example: outbound wire transfer

Response
{
  "id": "3D1RcbwVywOGyU2HBSenljm5dhV",
  "status": "complete",
  "source": {
    "address_id": "2VcUIonJeVQzFoBuC7LdFT0dRe4",
    "value_type": "SBC",
    "transfer_type": "solana",
    "transaction_id": "5K8…"
  },
  "destination": {
    "address_id": "34yGFQf7tP1HJCPAWNGaN4rh4nX",
    "value_type": "USD",
    "transfer_type": "wire",
    "wire_memo": "Invoice 1048",
    "payment_details": {
      "imad": "20260406XOIZJDPP953495"
    }
  },
  "updated_at": "2026-04-07T00:05:12.102000Z",
  "created_at": "2026-04-07T00:01:27.756775Z",
  "amount": {
    "value": "100.00",
    "currency": "USD"
  },
  "note": null
}
See Transfers — destination.payment_details for full details.

transaction_id

The transaction_id field appears on the source and destination objects in the response. It contains the on-chain transaction hash or off-chain payment reference once the leg has been submitted to the network. You can also use transaction_id as a query-parameter filter on the List transfers endpoint to find transfers by their on-chain hash without needing to know the transfer id first.

failure

Every transfer response includes a failure field.
  • failure is usually null.
  • failure is populated when status is failed and Brale has structured failure details. It is especially relevant for ACH returns and other rail/provider failures.
  • Clients should not assume failure is always present for every failed transfer — check for null before reading nested fields.
FieldTypeDescription
typestringError classification for the failure (e.g. ach_return).
occurred_atstring (ISO 8601)When the failure occurred.
retriablebooleanWhether the failure is considered retriable. Note: spelled retriable, not retryable.
ach_returnobject | nullACH-only return details. Present for ACH return failures; not set for on-chain or other rail failures.
ach_return.codestringACH return code (e.g. R01 — Insufficient Funds).
ach_return.reasonstringHuman-readable description of the ACH return reason.
ach_return.categorystringOne of administrative, unauthorized, or general.

Example: failed ACH transfer

Response (failure excerpt)
{
  "id": "3D1RcbwVywOGyU2HBSenljm5dhV",
  "status": "failed",
  "failure": {
    "type": "ach_return",
    "occurred_at": "2026-04-07T00:05:12.102000Z",
    "retriable": false,
    "ach_return": {
      "code": "R01",
      "reason": "Insufficient Funds",
      "category": "administrative"
    }
  }
}

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.

Path Parameters

account_id
string<ksuid>
required

The ID of the account

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

"2VcUIIsgARwVbEGlIYbhg6fGG57"

id
string<ksuid>
required

The ID of the transfer (KSUID)

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

"2VcUIIsgARwVbEGlIYbhg6fGG57"

Response

200 - */*

A single transfer object

A money movement between a source and a destination. Returned by the create, get, and list transfer endpoints. The same shape is used everywhere a Transfer is exposed to API consumers.

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

"2VcUIIsgARwVbEGlIYbhg6fGG57"

status
enum<string>

Lifecycle stage of the transfer

Available options:
pending,
processing,
complete,
canceled,
failed
Example:

"pending"

failure
TransferFailure · object

Structured failure details for a failed transfer. Usually null. Populated when status is failed and Brale has structured failure details for the transfer — most commonly for ACH returns and other rail/provider failures. Clients should not assume failure is always present for every failed transfer; check for null before reading nested fields.

Example:

null

source
TransferEndpoint · object

One side (source or destination) of a Transfer. The same shape is used in create requests and in responses. Response-only fields like transaction_id and payment_details are populated by Brale as the underlying leg settles.

destination
TransferEndpoint · object

One side (source or destination) of a Transfer. The same shape is used in create requests and in responses. Response-only fields like transaction_id and payment_details are populated by Brale as the underlying leg settles.

amount
Amount · object

Monetary value with explicit currency

note
string | null

Optional free-form note attached to the transfer.

Example:

null

automation_id
string<ksuid>

ID of the Automation that created this transfer, when applicable. Omitted for transfers created directly via the API.

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

"2VcUIIsgARwVbEGlIYbhg6fGG57"

funding_simulated
boolean

Set to true when the source funding for this transfer was simulated in a test environment rather than coming from a real payment. Not present for production transfers.

created_at
string<date-time>
Example:

"2026-01-01T00:00:00Z"

updated_at
string<date-time>
Example:

"2026-01-01T00:00:00Z"