/v1/simulations/*) let you drive those outcomes yourself, so you can build and test a complete money movement flow end to end before going live.
This walkthrough takes a new integration through the full lifecycle: you open an account (operating or virtual, whichever fits your product), fund it with a simulated incoming deposit, and pay out to a counterparty. You advance each step yourself with the simulation endpoints.
In this guide
Prerequisites
Core walkthrough
Failed and returned payouts
Freeze, drain, and close
Return a deposit you received
SWIFT
Conversions
What you’ll build
- Open an account (operating or virtual).
- Receive a simulated deposit and watch it settle.
- Save a payout counterparty.
- Send a payout and advance it to
sent.
Prerequisites
-
A sandbox API key with these scopes (or
full_access). See Scopes and inspect your key with GET/v1/api_key.
Steps
Configure your environment
Open an account
ACCOUNT_ID you capture here.- Operating account: one account you hold directly. Simplest option, good for treasury or a single balance.
- Virtual account: a dedicated account per end customer (embedded-banking or FBO model), created under an account program and tied to an account holder.
Operating account
Operating account
active with its own US payment details.ACCOUNT_ID for the steps below:/v1/simulations/accounts in the API Reference →Virtual account
Virtual account
Create an account program
/v1/simulations/account_programs in the API Reference →Create an account holder
country_of_citizenship: use the US individual shape below when it is US, the non-US individual shape for any other country, and the business shape when holder_type is business.beneficiary_data schemas (US individual, non-US individual, business) in the POST /v1/account_holders API Reference →.Create the virtual account
ACCOUNT_ID for the steps below:/v1/accounts in the API Reference →Read the account's payment details
/v1/accounts/{id} in the API Reference →Simulate an incoming deposit
counterparty. The currency must match the account currency. Give it an unstructured_remittance_information value you can recognize later. You use it to find the settled deposit./v1/simulations/deposits in the API Reference →Confirm the deposit settled
settled. Poll the deposits list and match on the remittance information you set./v1/deposits in the API Reference →Save a payout counterparty
aba financial address.id):/v1/counterparties in the API Reference →Create a payout
counterparty_id; the rail is validated against the counterparty’s financial address and selected automatically when omitted.initiated and moves to submitted while it is in flight.id):/v1/payouts in the API Reference →Simulate a successful send
/v1/simulations/payouts/{id}/send in the API Reference →Poll until the payout is sent
Review the account's transactions
credit and the outgoing payout as a debit. Each transaction’s source links back to the deposit or payout that created it (null when it does not map to a retrievable resource). account_id is required. Narrow the results with the optional booked_at.gte and booked_at.lte filters./v1/transactions in the API Reference →Simulate a failed or returned payout
Beyond the happy path, you can drive failure outcomes to test how your integration reacts.Reject a payout before it is sent
Reject a payout before it is sent
submitted (before you simulate a send), simulate the network rejecting it. The payout moves to failed and the funds are released back to your account. Use invalid_routing_number for domestic rails or invalid_account_format for a SWIFT rejection./v1/simulations/payouts/{id}/reject in the API Reference →Return a payout after it is sent
Return a payout after it is sent
sent, simulate the receiving bank returning it. The original payout stays sent; the returned funds arrive as a new standalone deposit (a credit transaction) on your account. Valid reasons are account_closed, invalid_account_format, invalid_routing_number, account_blocked, and unknown./v1/simulations/payouts/{id}/return in the API Reference →The returned funds show up as a new deposit rather than a change to the payout. List your deposits to find it:/v1/deposits in the API Reference →Return a deposit you received
A deposit you do not want to keep (an unexpected sender, a wrong amount) is sent back with a return. Returns are their own resource with the payout lifecycle:initiated → sent, then failed if the network rejects it or returned if the sender’s bank sends it back. The deposit itself stays settled; the return is linked to it and debits your account when it is sent.
Create the return
deposit_id of a settled deposit. The return goes back over the rail the deposit arrived on; you do not choose a rail or a reason code./v1/returns in the API Reference →Follow the return
initiated until you drive it, the same way as a payout: POST /v1/simulations/returns/{id}/send makes it sent, /reject (with a reason) makes it failed, and /return on a sent return plays the sender’s bank sending it back: the return moves to returned and the funds are credited to your account again. Retrieve the return to follow each step./v1/returns/{id} in the API Reference →SWIFT
International USD moves over SWIFT and follows the same simulations as the domestic rails, with two differences:currency: "EUR" with rail: "swift" is rejected at creation. Payout simulations (send, reject, return) work the same way as for the domestic rails. Use invalid_account_format as the reject reason to mimic a correspondent bank refusing the beneficiary details. Field-level rules and country requirements are on the SWIFT rail page.
Save an international counterparty
type: "bic" with account_number instead./v1/counterparties in the API Reference →Send a SWIFT payout
rail: "swift". Then drive it with send, reject, or return as above./v1/payouts in the API Reference →Receive an international wire
counterparty_id, or an inline counterparty with an iban financial address./v1/simulations/deposits in the API Reference →Scripted outcomes by beneficiary BIC
The sandbox also plays the legs a SWIFT payment travels after the first one. Once yousend a SWIFT payout, the beneficiary’s bank decides what happens next. Three German test beneficiaries have scripted outcomes; save one as an iban counterparty with the BIC in the bic field and pay it. Any other reachable bank succeeds on every leg.
- The payout moves to
returnedand thepayout.returnedwebhook fires. No deposit is created: Augustus matches the return to the payout on the original payment reference and credits the amount back to your account. Follow it on the payout, not on the deposits list. - The re-credited amount is net of a fixed USD 10.00 return charge: a USD 100.00 payout puts USD 90.00 back on your account, while the payout itself keeps showing USD 100.00. Never reconcile a return by its amount.
- A payout of USD 10.00 or less is consumed by the charge, so no return arrives and the rejection is final.
POST /v1/simulations/payouts/{id}/return is unaffected: the payout moves to returned and the full amount is credited back.
Freeze, drain, and close
Winding down an account or an account program follows the same sequence: freeze it, drain the residual balance to an external destination, settle the drain payout(s), then close it. A frozen account or program can be reactivated with the matchingunfreeze endpoint before you close it.
Close an operating account
Close an operating account
Freeze the account
/v1/simulations/accounts/{id}/freeze in the API Reference →Changed your mind before closing? Reactivate the account with unfreeze:/v1/simulations/accounts/{id}/unfreeze in the API Reference →Drain the residual balance
aba financial address for a USD destination./v1/simulations/accounts/{id}/drain in the API Reference →Settle the drain payout
/v1/simulations/payouts/{id}/send in the API Reference →Close the account
client_request and aml_risk_fraud./v1/simulations/accounts/{id}/close in the API Reference →Close an account program
Close an account program
Freeze the program
/v1/simulations/account_programs/{id}/freeze in the API Reference →Changed your mind before closing? Reactivate the program and its accounts with unfreeze:/v1/simulations/account_programs/{id}/unfreeze in the API Reference →Drain the program
/v1/simulations/account_programs/{id}/drain in the API Reference →Settle each drain payout
/v1/simulations/payouts/{id}/send in the API Reference →Conversions
Prerequisites
Create a conversion
Simulate outcome
Success
Success
Failure
Failure
Get conversion