> ## Documentation Index
> Fetch the complete documentation index at: https://docs.polygon.technology/llms.txt
> Use this file to discover all available pages before exploring further.

# Simulate inbound transfer on a Virtual Account

> 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 `rail` field in the request body to choose
the transfer type (`ach_in`, `wire_in`, or `swift_in`); the request and
response fields for each rail are documented on the corresponding schema.



## OpenAPI

````yaml /api-reference/openapi.yaml post /virtual-accounts/{virtualAccountId}/simulate
openapi: 3.0.3
info:
  title: Polygon OMS Public API
  version: v26.05.28-0001
  description: >-
    Unified API for moving money between crypto and fiat. Three ways to move
    money: Transactions (instant, wallet or card funded, including Cash-In for
    in-person cash deposits), Deposit Addresses (reusable crypto deposit
    configurations), and Virtual Accounts (dedicated bank accounts that
    auto-convert fiat to crypto). Standard transactions follow a two-step flow:
    create a Quote (pricing), then create a Transaction (execution). Cash-in
    codes generate a one-time deposit code for in-person cash deposits at retail
    locations.
  contact:
    name: Polygon OMS
    url: https://oms.polygon.technology
servers:
  - url: https://sandbox-api.polygon.technology/v0.9
    description: Sandbox
  - url: https://api.polygon.technology/v0.9
    description: Production
security:
  - BearerAuth: []
tags:
  - name: Auth
    description: Authentication via FrontEgg
  - name: Customers
    description: Customer management and KYC
  - name: Customer
  - name: Wallet
  - name: Quote
  - name: Transaction
  - name: Webhook
  - name: CashIns
  - name: CashLocation
  - name: Sandbox
  - name: Simulation
paths:
  /virtual-accounts/{virtualAccountId}/simulate:
    post:
      tags:
        - Simulation
      summary: Simulate inbound transfer on a Virtual Account
      description: >-
        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 `rail` field in the request body to
        choose

        the transfer type (`ach_in`, `wire_in`, or `swift_in`); the request and

        response fields for each rail are documented on the corresponding
        schema.
      operationId: simulateVirtualAccountInbound
      parameters:
        - in: path
          name: virtualAccountId
          required: true
          schema:
            type: string
        - $ref: '#/components/parameters/IdempotencyKeyHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VirtualAccountSimulationRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VirtualAccountSimulationResponse'
          description: The request has succeeded.
components:
  parameters:
    IdempotencyKeyHeader:
      description: >-
        Required on POST and PUT requests. Use a unique value per logical
        mutation attempt, for example a UUID.
      in: header
      name: Idempotency-Key
      required: true
      schema:
        type: string
  schemas:
    VirtualAccountSimulationRequest:
      description: Rail-discriminated request for POST /virtual-accounts/{id}/simulate.
      discriminator:
        mapping:
          ach_in:
            $ref: '#/components/schemas/AchInSimulationRequest'
          swift_in:
            $ref: '#/components/schemas/SwiftInSimulationRequest'
          wire_in:
            $ref: '#/components/schemas/WireInSimulationRequest'
        propertyName: rail
      oneOf:
        - $ref: '#/components/schemas/AchInSimulationRequest'
        - $ref: '#/components/schemas/WireInSimulationRequest'
        - $ref: '#/components/schemas/SwiftInSimulationRequest'
      type: object
    VirtualAccountSimulationResponse:
      description: Rail-discriminated response for POST /virtual-accounts/{id}/simulate.
      discriminator:
        mapping:
          ach_in:
            $ref: '#/components/schemas/AchInSimulationResponse'
          swift_in:
            $ref: '#/components/schemas/SwiftInSimulationResponse'
          wire_in:
            $ref: '#/components/schemas/WireInSimulationResponse'
        propertyName: rail
      oneOf:
        - $ref: '#/components/schemas/AchInSimulationResponse'
        - $ref: '#/components/schemas/WireInSimulationResponse'
        - $ref: '#/components/schemas/SwiftInSimulationResponse'
      type: object
    AchInSimulationRequest:
      description: ACH IN simulation against a Virtual Account.
      properties:
        addenda:
          description: Optional ACH addenda records (max 4 entries, each ≤ 80 chars).
          items:
            type: string
          type: array
        amount:
          $ref: '#/components/schemas/SimulationAmount'
        rail:
          enum:
            - ach_in
          type: string
      required:
        - rail
        - amount
      type: object
    SwiftInSimulationRequest:
      description: |-
        International (SWIFT) Wire IN simulation against a Virtual Account. The
        three originator fields are required by the upstream provider.
      properties:
        amount:
          $ref: '#/components/schemas/SimulationAmount'
        memo:
          description: Optional ISO 20022 memo (≤ 140 chars, SWIFT MT charset).
          type: string
        originatorAccountNumber:
          description: Originator's bank account number or IBAN (≤ 34 chars).
          type: string
        originatorBic:
          description: >-
            Originator's bank BIC/SWIFT code (8 or 11 chars). Uppercased
            server-side.
          type: string
        originatorName:
          description: Originator's legal name (≤ 140 chars).
          type: string
        rail:
          enum:
            - swift_in
          type: string
      required:
        - rail
        - amount
        - originatorName
        - originatorAccountNumber
        - originatorBic
      type: object
    WireInSimulationRequest:
      description: Domestic Wire IN simulation against a Virtual Account.
      properties:
        amount:
          $ref: '#/components/schemas/SimulationAmount'
        memo:
          description: Optional ISO 20022 memo (≤ 140 chars).
          type: string
        rail:
          enum:
            - wire_in
          type: string
      required:
        - rail
        - amount
      type: object
    AchInSimulationResponse:
      properties:
        amount:
          $ref: '#/components/schemas/SimulationAmount'
        rail:
          enum:
            - ach_in
          type: string
        status:
          enum:
            - submitted
          type: string
        submittedAt:
          type: string
          format: date-time
        virtualAccountId:
          type: string
      required:
        - rail
        - virtualAccountId
        - amount
        - status
        - submittedAt
      type: object
    SwiftInSimulationResponse:
      properties:
        amount:
          $ref: '#/components/schemas/SimulationAmount'
        internationalWireInId:
          description: International wire in id (intl_wire_in_…) for webhook correlation.
          type: string
        rail:
          enum:
            - swift_in
          type: string
        status:
          description: >-
            The upstream provider settles SWIFT asynchronously and returns
            uppercase

            "PENDING"; preserved verbatim (not lowercased) to keep the wire
            shape

            identical to the pre-consolidation `SimulateSwiftInResponse` - no
            breaking

            change.
          enum:
            - PENDING
          type: string
        submittedAt:
          type: string
          format: date-time
        virtualAccountId:
          type: string
      required:
        - rail
        - virtualAccountId
        - internationalWireInId
        - amount
        - status
        - submittedAt
      type: object
    WireInSimulationResponse:
      properties:
        amount:
          $ref: '#/components/schemas/SimulationAmount'
        rail:
          enum:
            - wire_in
          type: string
        status:
          enum:
            - submitted
          type: string
        submittedAt:
          type: string
          format: date-time
        virtualAccountId:
          type: string
      required:
        - rail
        - virtualAccountId
        - amount
        - status
        - submittedAt
      type: object
    SimulationAmount:
      description: Amount in USD minor units (cents).
      properties:
        currency:
          description: ISO-4217 currency code. Currently always "USD".
          type: string
        value:
          allOf:
            - $ref: '#/components/schemas/int64String'
          description: Amount in minor units (cents) as decimal string.
      required:
        - currency
        - value
      type: object
    int64String:
      description: Wire-safe integer string for fiat amounts within int64 range.
      type: string
      x-go-type: types.Int64String
      x-go-type-import:
        path: github.com/0xPolygon/bpn-api/types
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Token from POST /auth/token

````