Move USDC
POST /transfers is the same single endpoint used for fiat transfers — you get crypto behavior by setting currency to a crypto code (e.g. BASE-USDC) instead of USD. Two shapes are supported:
- Wallet → wallet (crypto) — move USDC between two accounts' crypto wallets, e.g. player → casino (a buy-in) or casino → player (a payout). Same request shape as paying winnings, just with a crypto
currency. - Crypto cash-out — push a crypto wallet balance to an external bank account; the USDC is converted to USD and settles via ACH. Same request shape as a fiat cash-out, just with a crypto
currencyon the source side.
A fiat wallet-to-wallet transfer posts synchronously (200, born posted). A crypto wallet-to-wallet transfer is not instant — it's created pending and dispatched over the crypto rail, landing dispatched. The response is 202 Accepted, not 200. Read the final state from GET /transfers/{id} or a transfer.* webhook.
Move USDC between wallets
Both sides are addressed by account id, exactly like an internal fiat transfer — only the currency differs:
curl -i -X POST \
https://sandbox-api.pathly.io/transfers \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: usdc_2026-07-13_peter_01' \
-d '{
"source_account": "5b3f0c2e-1d4a-4e8b-9c7a-2f6d8e0a1b22",
"destination_account": "<YOUR_MERCHANT_ACCOUNT_ID>",
"amount": 5000000,
"currency": "BASE-USDC",
"reference": "cash game buy-out"
}'
source_account/destination_accountaddress each side's crypto wallet forcurrency— the player's and the casino's, in either direction.amountis in the smallest unit of the currency (USDC has 6 decimals:5000000= 5.00 USDC).- The
Idempotency-Keyheader is required, as on everyPOST /transferscall.
Response
HTTP/1.1 202 Accepted
Location: /transfers/e4f5a6b7-...
POST /transfers returns no body; read the created transfer from the Location header or subscribe to transfer.* webhooks (see webhooks). The transfer is born pending, then dispatched once handed to the crypto rail; the destination wallet's balance updates when the movement completes. For the full request and response — including the crypto variants of the schema — see the Create a transfer API reference.
Cash out USDC to a bank account
To let a player cash out their crypto wallet directly to a bank account, use the same cash-out shape as a fiat push (see Let a player cash out), but set source_account's wallet currency to the crypto code:
curl -i -X POST \
https://sandbox-api.pathly.io/transfers \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: usdc_cashout_2026-07-13_peter_02' \
-d '{
"source_account": "5b3f0c2e-1d4a-4e8b-9c7a-2f6d8e0a1b22",
"destination_payment_method": "<PLAYER_BANK_PAYMENT_METHOD_ID>",
"amount": 5000000,
"currency": "BASE-USDC"
}'
The USDC is converted to USD and pushed via ACH to the player's bank account on file. This follows the same async, 202, bank-leg lifecycle as a fiat cash-out (pending → dispatched → settled, or returned if the bank rejects it) — see Let a player cash out for the KYX requirement and lifecycle detail, and webhooks to track the outcome. For the full request and response, see the Create a transfer API reference.
A crypto wallet only has USDC to move once it's been funded on-chain — see Load a crypto wallet.