freeze, unfreeze, or terminate — to one of your virtual cards. The action is recorded immediately as a pending VirtualCardAction and queued for asynchronous processing with the card-issuing provider; the card's status is optimistically updated in the same transaction (e.g. active → frozen for freeze, frozen → active for unfreeze, or active/frozen → terminated for terminate).freeze requires the card to currently be active, unfreeze requires it to currently be frozen, and terminate requires it to be active or frozen. Requesting an action the card's current status doesn't support fails with a 400 error and no changes are made. Terminating a card also zeroes its cached_balance. Cards that are pending-approval or already terminated reject every action with a 400 error.curl --location --request PATCH '/virtual-card-actions/01HXYZ9876543210ZYXWVUTSRQ' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"action": "freeze"
}'{
"message": "Virtual card action created successfully",
"status": "success",
"data": {
"id": "01J8ZK3QANDACTION0000000A1",
"entity_id": "01HABC9999888877776666ZZZZ",
"virtual_card_id": "01HXYZ9876543210ZYXWVUTSRQ",
"type": "freeze",
"status": "pending",
"status_reason": null,
"reason": "customer-reported-card-lost",
"provider_code": "sandbox_card_provider",
"created": "2026-09-28T10:15:00Z",
"updated": "2026-09-28T10:15:00Z"
}
}