curl --request GET \
--url https://sandbox-api.polygon.technology/v0.13/virtual-accounts \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox-api.polygon.technology/v0.13/virtual-accounts"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox-api.polygon.technology/v0.13/virtual-accounts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox-api.polygon.technology/v0.13/virtual-accounts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://sandbox-api.polygon.technology/v0.13/virtual-accounts"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://sandbox-api.polygon.technology/v0.13/virtual-accounts")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox-api.polygon.technology/v0.13/virtual-accounts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "<string>",
"limit": 123,
"hasMore": true,
"nextCursor": "<string>",
"previousCursor": "<string>",
"data": [
{
"customer": {
"id": "<string>"
},
"id": "<string>",
"status": "pending",
"sourceToDestination": "cryptoToCrypto",
"statusReason": "<string>",
"source": {
"asset": "<string>",
"network": "<string>"
},
"depositInstructions": {
"bankUs": [
{
"bankName": "<string>",
"bankAddress": "<string>",
"accountNumber": "<string>",
"routingNumber": "<string>",
"accountType": "<string>",
"BIC": "<string>",
"memo": "<string>",
"supportedSources": [
{
"asset": "<string>",
"network": "<string>"
}
]
}
]
},
"provider": "<string>",
"payoutOrigin": {
"type": "bank",
"id": "<string>",
"accountHolder": "customer",
"accountHolderName": "<string>"
},
"destination": {
"type": "walletCrypto",
"category": "crypto",
"id": "<string>",
"asset": "<string>",
"network": "<string>",
"displayName": "<string>",
"party": {
"relationship": "customer",
"id": "<string>",
"name": "<string>"
},
"memo": "<string>"
},
"returnDestination": {
"type": "bankUs",
"network": "ach",
"id": "<string>"
},
"sponsorGas": true,
"bankMemo": "<string>",
"label": "<string>",
"metadata": {},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"failureReason": "provisioningTimeout",
"deletionRequestedAt": "2023-11-07T05:31:56Z",
"deletionRequestedBy": "<string>",
"finalBalance": {
"value": "<string>",
"currency": "<string>",
"display": "<string>"
}
}
]
}List all Virtual Accounts
List all Virtual Accounts across the organization. Spans every customer in the caller’s organization; optionally filter by status and/or customer.
curl --request GET \
--url https://sandbox-api.polygon.technology/v0.13/virtual-accounts \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox-api.polygon.technology/v0.13/virtual-accounts"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox-api.polygon.technology/v0.13/virtual-accounts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox-api.polygon.technology/v0.13/virtual-accounts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://sandbox-api.polygon.technology/v0.13/virtual-accounts"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://sandbox-api.polygon.technology/v0.13/virtual-accounts")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox-api.polygon.technology/v0.13/virtual-accounts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "<string>",
"limit": 123,
"hasMore": true,
"nextCursor": "<string>",
"previousCursor": "<string>",
"data": [
{
"customer": {
"id": "<string>"
},
"id": "<string>",
"status": "pending",
"sourceToDestination": "cryptoToCrypto",
"statusReason": "<string>",
"source": {
"asset": "<string>",
"network": "<string>"
},
"depositInstructions": {
"bankUs": [
{
"bankName": "<string>",
"bankAddress": "<string>",
"accountNumber": "<string>",
"routingNumber": "<string>",
"accountType": "<string>",
"BIC": "<string>",
"memo": "<string>",
"supportedSources": [
{
"asset": "<string>",
"network": "<string>"
}
]
}
]
},
"provider": "<string>",
"payoutOrigin": {
"type": "bank",
"id": "<string>",
"accountHolder": "customer",
"accountHolderName": "<string>"
},
"destination": {
"type": "walletCrypto",
"category": "crypto",
"id": "<string>",
"asset": "<string>",
"network": "<string>",
"displayName": "<string>",
"party": {
"relationship": "customer",
"id": "<string>",
"name": "<string>"
},
"memo": "<string>"
},
"returnDestination": {
"type": "bankUs",
"network": "ach",
"id": "<string>"
},
"sponsorGas": true,
"bankMemo": "<string>",
"label": "<string>",
"metadata": {},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"failureReason": "provisioningTimeout",
"deletionRequestedAt": "2023-11-07T05:31:56Z",
"deletionRequestedBy": "<string>",
"finalBalance": {
"value": "<string>",
"currency": "<string>",
"display": "<string>"
}
}
]
}Authorizations
Token from POST /auth/token
Query Parameters
Page size, supported range 1-100. The default and maximum are per-resource (see each endpoint's description; most endpoints default to 50) and are resolved at runtime from configuration. Values outside the range are clamped to the nearest bound rather than rejected. The range is published machine-readably via the x-minimum/x-maximum OpenAPI extensions below — deliberately NOT via @minValue/@maxValue, which emit JSON-Schema minimum/maximum and make the generated SDK (Zod) reject values the server accepts and clamps. See PaginatedList.limit for the effective value applied.
Filter by status. deleted returns Virtual Accounts whose close flow has finalized; they are excluded from every other filter and from the unfiltered list.
Lifecycle of a Virtual Account. pending: awaiting bank provisioning. active: accepting deposits. frozen: deposits held by compliance. inactiveActionRequired: destination unusable - re-point destination to recover. closed: permanently disabled. deleted: close flow finalized. failed: provisioning failed.
pending, active, frozen, closed, deleted, failed, inactiveActionRequired Filter to a single customer (cst_ prefix).
Response
The request has succeeded.
Paginated list of VirtualAccount resources.
Resource type discriminator.
The effective page size applied to this response, after clamping an out-of-range or unset requested limit into the supported bound.
True when more rows exist beyond this page in the direction of travel (forward by default, backward when endingBefore was supplied).
Opaque cursor pointing at the last item in this page. Present when data is non-empty. Pass as startingAfter to fetch the next page; hasMore=false signals no more pages forward.
Opaque cursor pointing at the first item in this page. Present when data is non-empty. Pass as endingBefore to page backward; when this yields an empty response the client is at the start of the list.
The page of results.
Hide child attributes
Hide child attributes
Virtual Account ID (va_ prefix).
^[a-z]+_([0-9a-hjkmnp-tv-z]{26}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$Current lifecycle status of the virtual account.
pending, active, frozen, closed, deleted, failed, inactiveActionRequired Corridor composite derived from the destination type — fiatAccountToCrypto for a crypto-wallet destination (inbound fiat auto-converts), or fiatAccountToFiatAccount for a bank or walletFiat destination (inbound USD forwarded onward — the same token for both; walletFiat introduces no new corridor).
cryptoToCrypto, cryptoToCash, cryptoToFiatAccount, cashToCrypto, fiatAccountToCrypto, fiatAccountToFiatAccount Human-readable explanation of the current status.
Bank coordinates senders use to deposit into this Virtual Account. Null until the provider has opened the account, so a pending Virtual Account carries none, and null again once the account has ended, since a closed, failed or deleted Virtual Account can no longer receive a deposit. Capture it while the account is live if you need it for your own records.
Hide child attributes
Hide child attributes
Hide child attributes
Hide child attributes
US ABA routing number; null when the block has none.
US account type; null when the block has none. Always "checking" when present.
SWIFT/BIC code; populated when supportedSources includes international_wire, null otherwise.
Reference senders must include when routing through a correspondent bank; null when none is needed.
The institution that issues and custodies this Virtual Account — currently "Erebor Bank, N.A." or "Cross River Bank". Assigned by OMS from your project's configuration, never supplied by you. Read it when you need to tell an end user or a support ticket which institution is holding the deposited funds. It is not the entity an outbound forward is sent under — that is payoutOrigin.accountHolderName, which is set by whoever executes the payout and can name a different company. New providers may be added, so treat the string as free-form rather than a fixed set. Read-only; omitted when OMS cannot determine the institution.
Where the onward forward of an inbound deposit is sent from, and whose legal identity it goes out under. Response-only, derived from the destination type and the issuing institution. A bank destination renders the bank arm; a crypto-wallet destination renders the blockchain arm with a null accountHolder, since a crypto payout has no sending legal identity. Absent for a walletFiat destination, whose delivery is an internal ledger movement rather than a payout. accountHolder and accountHolderName are also null whenever OMS cannot name the issuing institution.
Hide child attributes
Hide child attributes
bank, blockchain Public TypeID, e.g. txn_01h455vb4pex5vsknk084sn02q.
^[a-z]+_([0-9a-hjkmnp-tv-z]{26}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$Whose legal identity the payment is sent under. Determined by OMS from the route's configuration — not a request field. Always present; null when OMS cannot determine it, and on destinations that have no sending legal identity (cash payouts, and crypto payouts outside a Deposit Address). A bank payout that goes out under the payment provider or the partner records that holder just before it is sent to the provider, and reports it only while a payout was or may have been created there; a send interrupted after the holder was recorded and before it went out has an unknown outcome and may report it. A failed send known to have created no payout at the provider, and a payout sent before holders were recorded whose holder could not be recovered afterwards, report the fallback value instead, which may differ from the holder actually used. The fallback value, also reported before a holder is recorded and for payouts that always go out under the customer's own name, is the Deposit Address's value for the destination type the transaction pays (see DepositAddressPayoutOrigin) on a transaction created from a Deposit Address, and the value its route implies on any other.
customer, paymentProvider, partner The legal name the payment is sent under, resolved from accountHolder — the customer's own legal name for customer, the owning customer's legal name for partner (for now; a partner-level name may replace it later), or the payment provider's name for paymentProvider, which differs between a bank origin ("Coinme Inc FBO its Customers") and a blockchain origin. This is what the recipient sees as the sender. Like accountHolder and unlike id, it is populated as soon as it is determinable, so it appears on Quote and Deposit Address responses as well as Transactions. Null whenever accountHolder is null. Absent when accountHolder is customer on a Transaction, Deposit Address or Virtual Account: the customer's name is on the customer resource. A Quote still includes the customer's name when it can be resolved.
V0.10: unified side shape.
- OMS wallet
- External wallet
- Fiat wallet
- US bank account
- IBAN bank account
- Canadian bank account
- Card
- Cash
Hide child attributes
Hide child attributes
Type discriminator.
walletCrypto High-level grouping: fiatAccount for bank or card accounts, crypto for wallets.
crypto OMS wallet ID (wlt_ prefix). Dereference via GET /wallets/{id}. Null while a deposit is still in flight and the wallet it lands in has not resolved yet.
^[a-z]+_([0-9a-hjkmnp-tv-z]{26}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$Canonical asset identifier.
Network identifier.
Opaque, render-only summary for list/detail display. Never a full account number/IBAN/PAN.
Structured identity of who is on this side.
Hide child attributes
Hide child attributes
Which kind of party this is.
customer, otherCustomer, externalRegistered, externalUnregistered cst_ for customer/otherCustomer; ctp_ for externalRegistered; null for externalUnregistered.
^[a-z]+_([0-9a-hjkmnp-tv-z]{26}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$Display name of a counterparty or external sender. Absent for a customer party on a Transaction, Deposit Address or Virtual Account; a Quote includes the customer's name when it can be resolved. Null or absent when an external sender is unattributed.
Free-text message that travelled with the transfer on this side's rail. Never populated on this instrument — no rail behind it carries a message — so the key is always absent. A memo appears only on the bank arms (bankUs, bankIban, bankCanada).
The configured fiat return destination (v0.11-8) for failed outbound legs; absent/null when none is set (the project return policy applies instead, once T13 wires the waterfall).
- US bank account
- IBAN bank account
- Canadian bank account
- Fiat wallet
Hide child attributes
Hide child attributes
Whether OMS absorbs the on-chain gas cost for the destination delivery. Persisted from the create/update request (currently only true is accepted).
Wire/ACH memo the customer can include with deposits.
Partner display label.
When the virtual account was created.
When the virtual account was last updated.
Set when status = failed; closed enum identifying the failure category.
provisioningTimeout, systemError, ereborRejected, deletePendingTimeout, coinmeDeclined Set when DELETE has been requested but the close webhook has not yet finalized.
Identity (JWT subject claim) of the caller who invoked DELETE.
DDA balance snapshot at the moment the VA flipped to deleted.
Was this page helpful?