Skip to main content
POST
/
cards
/
{cardId}
/
unload
Unload Card
curl --request POST \
  --url https://api.fyatu.com/api/v3/cards/{cardId}/unload \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "amount": 25,
  "reference": "withdraw-67890"
}
'
{
  "success": true,
  "status": 200,
  "message": "Card unloaded successfully",
  "data": {
    "cardId": "crd_8f3a2b1c4d5e6f7890abcdef12345678",
    "amountUnloaded": 25,
    "fee": 0.25,
    "amountCredited": 24.75,
    "reference": "withdraw-67890"
  },
  "meta": {
    "requestId": "req_a1b2c3d4e5f6",
    "timestamp": "2026-01-17T10:00:00+00:00"
  }
}

Overview

Withdraw funds from a card back to your business wallet. An unloading fee may apply based on your pricing configuration.

Path Parameters

ParameterTypeDescription
cardIdstringThe unique card identifier

Request Body

FieldTypeRequiredDescription
amountnumberYesAmount to unload in USD
referencestringNoYour unique reference for this operation. Defaults to cardId if not provided. Returned in webhooks for easy reconciliation.

Example Usage

<?php
$cardId = 'crd_8f3a2b1c4d5e6f7890abcdef12345678';
$data = [
    'amount' => 25.00,
    'reference' => 'withdraw-67890'  // Optional: your unique reference
];

$ch = curl_init("https://api.fyatu.com/api/v3/cards/{$cardId}/unload");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $accessToken,
        'Content-Type: application/json'
    ],
    CURLOPT_POSTFIELDS => json_encode($data)
]);

$response = curl_exec($ch);
$result = json_decode($response, true);

if ($result['success']) {
    echo "Unloaded: $" . $result['data']['amountUnloaded'] . "\n";
    echo "New Card Balance: $" . $result['data']['newBalance'] . "\n";
    echo "Reference: " . $result['data']['reference'] . "\n";
}

Error Responses

StatusError CodeDescription
400CARD_NOT_ACTIVECard is not active (frozen, suspended, or terminated)
400INSUFFICIENT_CARD_BALANCECard balance is lower than the requested unload amount
400CARD_FROZENCard is frozen at bank partner (auto-syncs local status)
400CARD_TERMINATEDCard has been terminated (auto-syncs local status)
500BALANCE_CHECK_FAILEDFailed to verify card balance
500UNLOAD_FAILEDFailed to unload card at the bank partner
The funds are credited to your business wallet immediately after successful unloading. Use the Get Pricing endpoint to check if unloading fees apply.

Authorizations

Authorization
string
header
required

JWT access token obtained from /auth/token

Path Parameters

cardId
string
required

Body

application/json
amount
number
required

Amount to unload in USD

reference
string

Your unique reference for this operation. Defaults to cardId if not provided.

Maximum string length: 100

Response

Funds unloaded successfully

success
boolean
Example:

true

status
integer
Example:

200

message
string
data
object
meta
object