Skip to main content
POST
Testnet Automations return placeholder banking coordinates that cannot receive real deposits. Use this endpoint to simulate an inbound ACH or wire deposit instead. Brale creates a simulated inbound payment, runs the normal Automation mint path, and returns the resulting Transfer. Brale does not contact a bank, and no real fiat moves. POST https://api.brale.xyz/accounts/{account_id}/automations/{automation_id}/simulations/deposits Required scopes: automations:write and network:testnet
This endpoint is available only with testnet credentials. The Automation must belong to the account in the path, have status: "active", and have a destination on a testnet chain, such as base_sepolia or solana_devnet.

Path parameters

Headers

Request body

The request body accepts only the fields below. Brale rejects additional properties.

Examples

Response

202 Accepted

Returns the standard Transfer representation. There is no separate simulation resource. The Transfer includes automation_id, and source.transfer_type matches the requested rail.
Response
Fetch the Transfer with Get a transfer to follow it to complete and read destination.transaction_id for the testnet mint.

Errors

Idempotency

Idempotency-Key is required, as on every POST request. See Idempotency.
  • Send a new key to create a new simulated deposit.
  • Retry with the same key and the same body to get the cached 202 response. The retry does not create a second payment, Transfer, transaction, or mint.
  • Reusing a key with a different body or URI returns 422 and does not create another mint.

Webhooks

Brale emits the normal payment.completed webhook event for the simulated inbound payment. There is no simulation-specific webhook type.

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. Use a new key for each new simulated deposit. Reuse the same key only to retry the same request. Reusing a key with a different body or URI returns 422.

Path Parameters

account_id
string<ksuid>
required

The ID of the account that owns the Automation

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

"2VcUIIsgARwVbEGlIYbhg6fGG57"

automation_id
string<ksuid>
required

The ID of the testnet Automation to fund

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

"2VcUIIsgARwVbEGlIYbhg6fGG57"

Body

application/json

Request body for simulating an inbound fiat deposit into a testnet Automation.

amount
Amount · object
required

Deposit amount. value must be a positive decimal string greater than zero. currency must be a reserve currency accepted by the API.

Example:
transfer_type
enum<string>
required

Inbound rail to simulate.

Available options:
ach,
wire
Example:

"wire"

Response

Accepted. Returns the Transfer created by the Automation. The Transfer includes automation_id, and source.transfer_type matches the requested rail.

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 | null

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> | null

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

Optional. When returned with a value of true, the source funding for this transfer was simulated in testnet rather than coming from a real payment. Not every simulated transfer is guaranteed to include this field. Not present for production-funded transfers.

created_at
string<date-time>
Example:

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

updated_at
string<date-time>
Example:

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