Receive Fiat via a Virtual Account
A virtual account is a fiat on-ramp for a player's crypto wallet: a set of real US bank coordinates (routing + account number) that the player can fund by ACH, wire, or FedNow. Money deposited is converted to USDC and credited to the player's crypto wallet — no card, no on-chain transfer.
It's provisioned automatically during crypto onboarding (it requires the same verified, terms-accepted player), and it surfaces as a bank-account payment method that is receive-only.
1. Find the virtual account
List the player's bank-account payment methods. The virtual account is the receive-only one — credit: false, debit: true (it can be funded, but is never a cash-out destination). A bank account the player added themselves for cash-out is credit: true.
curl -i -X GET \
'https://sandbox-api.pathly.io/payment-methods?accountId=5b3f0c2e-1d4a-4e8b-9c7a-2f6d8e0a1b22&type=bank-account' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'
{
"status": "success",
"data": [
{
"id": "7cb10e03-c482-5cd5-b2ee-39b61c44f165",
"type": "bank-account",
"credit": false,
"debit": true,
"bank-account": {
"bank_name": "Lead Bank",
"routing_number": "101019644",
"last4": "4331",
"account_holder_name": "Peter Griffin",
"currency": "USD",
"bank_country": "US"
}
}
],
"code": 200,
"message": "Successful request"
}
Note the id (7cb10e03…). The list omits the full account number — fetch it in the next step.
2. Retrieve the deposit bank details
To hand the player their deposit coordinates, retrieve the payment method by id. The single-resource detail endpoint returns the full account_number (the list endpoint returns last4 only):
curl -i -X GET \
https://sandbox-api.pathly.io/payment-methods/7cb10e03-c482-5cd5-b2ee-39b61c44f165 \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'
{
"status": "success",
"data": {
"id": "7cb10e03-c482-5cd5-b2ee-39b61c44f165",
"type": "bank-account",
"credit": false,
"debit": true,
"bank-account": {
"bank_name": "Lead Bank",
"routing_number": "101019644",
"account_number": "7682924331",
"last4": "4331",
"account_holder_name": "Peter Griffin",
"account_type": "checking",
"currency": "USD",
"bank_country": "US"
}
},
"code": 200,
"message": "Successful request"
}
Give the player the account_holder_name, routing_number, and account_number — those are the coordinates to fund the virtual account from any US bank. See the Retrieve a payment method reference.
For privacy, the list endpoint (GET /payment-methods) returns only last4. The full account_number is returned exclusively by the detail endpoint (GET /payment-methods/{id}), so it's fetched deliberately, one account at a time — not exposed in bulk listings.
3. Deposit and watch the wallet
When the player sends USD to those coordinates, it's converted to USDC and credited to the crypto wallet. There's no synchronous confirmation — the credit lands after the deposit settles. Subscribe to the balance.updated webhook (it fires with the crypto currency when the deposit settles), or poll the crypto balance / deposit history.
In sandbox there's no real bank to send from. Use the simulate a deposit helper (POST /individuals/{id}/simulate-deposit) to credit the wallet and exercise the downstream flow.
Once funded, the balance behaves like any other crypto balance: move it with POST /transfers or let the player cash out.