Skip to main content

Sandbox Simulation

Move test ACH transfers through their full lifecycle and receive the same webhooks you’ll see in production.
In production, an ACH transfer moves through its lifecycle automatically based on network timing. In sandbox, transfers are not submitted to the Federal Reserve, so they don’t progress on their own. Instead, you advance each transfer manually using simulation endpoints. Each status change fires the same webhook you’ll receive in production, so you can test your webhook handling, status polling, and reconciliation logic end to end. Before testing, review ACH Statuses so you know which statuses to expect at each step.

Simulation Endpoints

These endpoints exist only in the sandbox. They return 404 in production.
A transfer in the under_review status cannot be advanced. This applies to all transfers, incoming and outgoing, including returns. Manual review is not simulated in the sandbox, so a transfer that enters under_review will stay there. If this happens, create a new test transfer, and see Validations & best practices for how to avoid triggering a review.

Test an Outgoing ACH

  1. Create the transfer with the standard endpoint: POST /v1/ach. The transfer enters the scheduled status and stays there until you advance it.
  2. Advance it with POST /v1/simulate/ach/{ach_id}/advance. Each call moves the transfer to the next status in the production lifecycle: scheduled → processing → submitted → posted. Three advance calls take a transfer from scheduled to posted.
  3. Confirm you receive the expected webhook after each advance before making the next call.
Wait several minutes between the create call and each advance call. The sandbox uses the same batch-based processing as production, and each status change runs validations that take a few minutes to complete. If you advance a transfer before the previous step finishes, webhooks may arrive duplicated or out of order.

Test an Incoming ACH

Use POST /v1/simulate/ach/incoming_ach to create an incoming transfer to one of your accounts. In production, this is a transfer another institution originates, so there is no standard endpoint to create one yourself.

Test Returns

Use POST /v1/simulate/ach/{ach_id}/incoming_return to simulate a return initiated by the other institution. To initiate a return yourself, use the standard return endpoint described in Returns, Reversals, & Exceptions.

What Is and Isn’t Real

  • No funds move, and Fed processing windows don’t apply. You control timing entirely through the advance endpoint.
  • Everything else behaves like production: statuses, webhooks, and validation behavior match what your integration will see live.