---
title: "Simulate inbound transfer on a Virtual Account"
method: POST
path: "/virtual-accounts/{virtualAccountId}/simulate/inbound-transfer"
tags: ["Sandbox"]
---

# Simulate inbound transfer on a Virtual Account

`POST /virtual-accounts/{virtualAccountId}/simulate/inbound-transfer`

Simulate an inbound fiat transfer against a Virtual Account, for testing
webhook and reconciliation flows. Sandbox / non-production only; returns
404 in production-live. Set the `type` field in the request body to
choose the transfer rail: `bankUs` (network `ach` or `wire`) or
`bankIban` (network `swift`).

## Path parameters

- `virtualAccountId` string, required

## Headers

- `Idempotency-Key` string, required

## Request body

- union — Type-discriminated request for POST /virtual-accounts/{id}/simulate/inbound-transfer.
  - object — US domestic (ACH or Wire) inbound simulation against a Virtual Account.
    - `type` 'bankUs', required — Rail discriminator. Always `bankUs` for a US domestic inbound.
    - `network` 'ach' | 'wire', required — Network for a `bankUs` (US domestic) inbound simulation.
    - `asset` 'usd', required — Always "usd", the only asset the VA rail supports today.
    - `amount` string, required — Wire-safe decimal string for financial float values (USD amounts, percentages).
  - object — International (SWIFT) inbound simulation against a Virtual Account.
    - `type` 'bankIban', required — Rail discriminator. Always `bankIban` for an international inbound.
    - `network` 'swift', required — Always "swift" for the international rail.
    - `asset` 'usd', required — Always "usd", the only asset the VA rail supports today.
    - `amount` string, required — Wire-safe decimal string for financial float values (USD amounts, percentages).

## Response `200`

The request has succeeded.

- SimulateVaInboundTransferResponse — Flat (non-discriminated) response for POST /virtual-accounts/{id}/simulate/inbound-transfer.
  - `virtualAccountId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
  - `type` 'bankUs' | 'bankIban', required — Echoes the request's `type` discriminator on the response.
  - `network` 'ach' | 'wire' | 'swift', required — Network actually used - the union of both request rails' networks.
  - `asset` 'usd', required — Always "usd".
  - `amount` string, required — Wire-safe decimal string for financial float values (USD amounts, percentages).
  - `status` 'submitted' | 'pending', required — "submitted" for ach/wire (settles synchronously); "pending" for swift - the upstream provider settles SWIFT asynchronously.
  - `submittedAt` string, date-time, required — When the simulated transfer was submitted.
  - `referenceId` string, nullable, required — Correlation id for the subsequent webhook. `null` for ach/wire; an `intl_wire_in_…` id for swift.

---

[API](https://skmtc.net/polygon-technology/apis/polygon-oms-public-api.md) · [All operations](https://skmtc.net/polygon-technology/apis/polygon-oms-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/polygon-technology/polygon-oms-public-api/revisions/18fdaebf64e5/schema)
