Skip to main content
POST
/
cards
Create Card
curl --request POST \
  --url https://api.fyatu.com/api/v3/cards \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "cardholderId": "ch_1a2b3c4d5e6f7890abcdef1234567890",
  "name": "JAMES WILSON",
  "amount": 100,
  "spendingLimit": 5000
}
'
{
  "success": true,
  "status": 201,
  "message": "Card created successfully",
  "data": {
    "id": "crd_8f3a2b1c4d5e6f7890abcdef12345678",
    "cardholderId": "ch_1a2b3c4d5e6f7890abcdef1234567890",
    "name": "JAMES WILSON",
    "last4": "4829",
    "maskedNumber": "5412750000004829",
    "expiryDate": "01/2030",
    "brand": "MASTERCARD",
    "status": "ACTIVE",
    "initialBalance": 100,
    "createdAt": "2026-01-17 10:00:00"
  },
  "meta": {
    "requestId": "req_a1b2c3d4e5f6",
    "timestamp": "2026-01-17T10:00:00+00:00"
  }
}

Overview

Issue a new virtual card to a cardholder. The cardholder must have verified KYC status and your business wallet must have sufficient balance for the card amount plus fees.

Prerequisites

  1. Verified Cardholder: The cardholder must exist and have status: ACTIVE
  2. Sufficient Balance: Wallet must cover: amount + issuanceFee + holdingBalance
  3. Active Application: Your app must be in ACTIVE status

Request Body

FieldTypeRequiredDescription
cardholderIdstringYesID of the cardholder to issue card to
amountnumberYesInitial funding amount in USD (minimum $5)
namestringNoName on card (defaults to cardholder name)
spendingLimitintegerNoMonthly spending limit: 5000 or 10000 (default: 5000)

Example Usage

<?php
$data = [
    'cardholderId' => 'ch_1a2b3c4d5e6f7890abcdef1234567890',
    'amount' => 100.00,
    'name' => 'JAMES WILSON',
    'spendingLimit' => 5000
];

$ch = curl_init('https://api.fyatu.com/api/v3/cards');
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 "Card created: " . $result['data']['id'] . "\n";
    echo "Masked: " . $result['data']['maskedNumber'] . "\n";
    echo "Balance: $" . $result['data']['initialBalance'] . "\n";
}

Fees & Holding Balance

Spending LimitHolding Balance
$5,000/month$1.00
$10,000/month$3.00
The holding balance is reserved for future monthly fees and is returned when the card is terminated.

Error Responses

Error CodeDescription
APP_INACTIVEApplication is not active
CARDHOLDER_INACTIVECardholder is not active (KYC not verified)
INSUFFICIENT_BALANCEBusiness wallet balance is too low
DEBIT_FAILEDFailed to debit from business wallet
PROVIDER_ERRORFailed to register cardholder with bank partner
CARD_CREATION_FAILEDFailed to create card at the bank partner
Ensure your wallet has sufficient balance to cover the funding amount plus applicable fees. Use the Get Pricing endpoint to retrieve your current rates.

Authorizations

Authorization
string
header
required

JWT access token obtained from /auth/token

Body

application/json
cardholderId
string
required

ID of the cardholder to issue card to

amount
number
required

Initial funding amount in USD (min $5)

Required range: x >= 5
name
string

Name on card (defaults to cardholder name if not provided)

Minimum string length: 4
brand
enum<string>
default:MASTERCARD

Card network brand

Available options:
MASTERCARD,
VISA
type
enum<string>
default:VIRTUAL

Card form factor

Available options:
VIRTUAL,
PHYSICAL,
METAL
spendingLimit
enum<integer>
default:5000

Monthly spending limit in USD

Available options:
5000,
10000

Response

Card created successfully

success
boolean
Example:

true

status
integer
message
string
data
object
meta
object