---
title: "Simulate a virtual account deposit"
method: POST
path: "/virtual_accounts/{id}/deposits/simulate"
tags: ["Virtual Accounts"]
---

# Simulate a virtual account deposit

`POST /virtual_accounts/{id}/deposits/simulate`

## Request

- Base URL: `https://api.cert.zerohash.com`
- URL: `https://api.cert.zerohash.com/virtual_accounts/{id}/deposits/simulate`
- Auth: API key in header `X-SCX-API-KEY` and API key in header `X-SCX-PASSPHRASE`

Simulates an inbound wire, ACH or RTP deposit into a virtual account in the zerohash CERT environment, so you can test deposit handling without sending real money. The deposit then follows the same path as a real one: it is listed in the virtual account transactions and you receive the same deposit webhooks. Every request creates a new deposit; repeating a request creates another one. A virtual account that is not `ACTIVE` returns `409 Conflict` with a message naming its status; an unknown id or an account belonging to another platform returns `404 Not Found`. Not available in production.

## Path parameters

- `id` string, uuid, required

## Headers

- `X-SCX-SIGNED` string, required
- `X-SCX-TIMESTAMP` string, required

## Request body

- SimulateVirtualAccountDepositRequest
  - `rail` 'wire' | 'ach' | 'rtp', required: The payment rail the simulated deposit arrives on.
  - `amount` string, required: The deposit amount in USD as a decimal string, greater than zero with at most 2 decimal places.
  - `originator_name` string: The name the payment is sent from. Defaults to the virtual account holder's legal name; send a different name to simulate a name mismatch on a wire.
  - `originator_country` string: The 2-letter country code of the originator. Defaults to `US`.

## Response `202`

The simulated deposit was accepted.

- SimulateVirtualAccountDepositResponse: The simulated deposit's identifiers. The virtual account's bank details are never returned.
  - `virtual_account_id` string, uuid
  - `core_transaction_id` string: The bank's transaction id for the simulated payment; the deposit appears in the virtual account's transactions under it.

## Other responses

- `400`: Bad Request
- `403`: Forbidden
- `404`: Not Found
- `409`: The virtual account is not `ACTIVE`.
- `500`: Internal Server Error
- `503`: Service Unavailable

## Changes

- **2026-11-03** `47cf70ae701c`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/zerohash/apis/zerohash-api/changes/virtual_accounts/:id/deposits/simulate/post.md)

---

[API](https://skmtc.dev/zerohash/apis/zerohash-api.md) - [All operations](https://skmtc.dev/zerohash/apis/zerohash-api/llms.txt) - [OpenAPI document](https://skmtc.dev/zerohash/apis/zerohash-api/revisions/47cf70ae701c?raw)
