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 (from GET /v1/cards?card_id=…).
  • The customer_id is 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
Was this page helpful?