Withdraw from card
Taking money off a card is Not yet available for new cards. See what the two routes return today, and what to do instead.
Status. Not yet available for new cards.
Withdrawing moves money from a card back to the card account that backs it. Today Gravv refuses a withdrawal from a new card on both routes. In sandbox, it refuses a withdrawal from every card issued since 14 September 2026. Until Gravv fixes this, contact support to move money off a card.
Withdraw before you block a card. Gravv refuses a withdrawal from a blocked card.
A money example. Tunde leaves his employer, and his card holds 435.80 USD. The usual plan is to withdraw 435.80 USD to the card account, block the card, and then move the 435.80 USD on with a transfer. Today Gravv refuses the withdrawal, so his employer freezes the card and asks support to move the 435.80 USD.
What each route answers today
POST /v1/cards/withdraw
curl --request POST \
--url https://api.gravv.xyz/v1/cards/withdraw \
--header 'Api-Key: <API_KEY>' \
--header 'Idempotency-Key: 4f1d2ed4-a24c-42fe-be07-f4af741a6f90' \
--header 'Content-Type: application/json' \
--data '
{
"card_id": "e7b1c2d3-4f5a-4b6c-8d7e-9f0a1b2c3d4e",
"amount": 435.8
}
'
amount is a JSON number in US dollars with at most 2 decimals. The money can only go to the card's own card account. On cards that support this route, the response is {"data":{"tx_hash":"0x…"},"error":null}, and Gravv then sends the cards.transaction.withdraw event. On a new card, the response is this error instead:
{
"data": null,
"error": "this card withdraws by transfer: send a transfer from the card to its account"
}
A transfer from the card to its card account
A new card withdraws by transfer, with these values:
- The source is the card.
- The destination is the card's own
account_id(fromGET /v1/cards?card_id=…). - The
customer_idis the cardholder.
Today Gravv refuses this transfer too, with the balance for this account could not be confirmed — please try again shortly. Do not retry it in a loop.
What can go wrong
| Response | Why | Fix |
|---|---|---|
400 this card withdraws by transfer: send a transfer from the card to its account |
The card is a new card | Not yet available. Contact support |
400 the balance for this account could not be confirmed — please try again shortly |
You used the transfer route on a new card | Not yet available. Contact support |
400 cannot withdraw from a freezed or blocked card |
The card is frozen, blocked or inactive | Unfreeze the card first. If it is blocked, contact support |
400 insufficient balance |
The amount is more than the card's balance |
Read the balance again |
400 amount must be greater than zero |
The amount is 0 or negative | Send a positive amount |
400 a withdrawal for this idempotency key is already in progress; retry shortly |
You sent the same key while the first call was still running | Wait, then retry |
400 internal server error or the request could not be completed |
The card program or the balance read failed, or amount was a string |
Read the balance and your webhooks before you retry. Then retry with a new key |