List Card Products
curl --request GET \
--url https://api.fyatu.com/api/v3/cards/products \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fyatu.com/api/v3/cards/products"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fyatu.com/api/v3/cards/products', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fyatu.com/api/v3/cards/products",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fyatu.com/api/v3/cards/products"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.fyatu.com/api/v3/cards/products")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fyatu.com/api/v3/cards/products")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"status": 200,
"message": "Card products retrieved successfully",
"data": {
"products": [
{
"productId": "MCUSD1",
"name": "Mastercard World USD",
"brand": "MASTERCARD",
"currency": "USD",
"type": "PREPAID",
"issuanceFee": 5,
"minimumFunding": 5,
"spendingLimit": 25000,
"spendingPeriod": "DAILY",
"features": {
"applePay": false,
"googlePay": false,
"3dSecure": true,
"reloadable": true
},
"isTokenized": false,
"canIssue": true,
"canFund": true,
"canUnload": true,
"isDefault": true
}
]
},
"meta": {
"requestId": "req_a1b2c3d4e5f6",
"timestamp": "2026-02-25T10:00:00+00:00"
}
}{
"success": false,
"status": 401,
"message": "Unable to identify business",
"error": {
"code": "AUTH_TOKEN_INVALID"
},
"meta": {
"requestId": "req_abc123",
"timestamp": "2026-01-05T10:30:00+00:00"
}
}Cards
List Card Products
List available card products — returns productId, brand, currency, fees, and availability flags. Use productId when creating a card. GET /cards/products.
GET
/
cards
/
products
List Card Products
curl --request GET \
--url https://api.fyatu.com/api/v3/cards/products \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fyatu.com/api/v3/cards/products"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fyatu.com/api/v3/cards/products', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fyatu.com/api/v3/cards/products",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fyatu.com/api/v3/cards/products"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.fyatu.com/api/v3/cards/products")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fyatu.com/api/v3/cards/products")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"status": 200,
"message": "Card products retrieved successfully",
"data": {
"products": [
{
"productId": "MCUSD1",
"name": "Mastercard World USD",
"brand": "MASTERCARD",
"currency": "USD",
"type": "PREPAID",
"issuanceFee": 5,
"minimumFunding": 5,
"spendingLimit": 25000,
"spendingPeriod": "DAILY",
"features": {
"applePay": false,
"googlePay": false,
"3dSecure": true,
"reloadable": true
},
"isTokenized": false,
"canIssue": true,
"canFund": true,
"canUnload": true,
"isDefault": true
}
]
},
"meta": {
"requestId": "req_a1b2c3d4e5f6",
"timestamp": "2026-02-25T10:00:00+00:00"
}
}{
"success": false,
"status": 401,
"message": "Unable to identify business",
"error": {
"code": "AUTH_TOKEN_INVALID"
},
"meta": {
"requestId": "req_abc123",
"timestamp": "2026-01-05T10:30:00+00:00"
}
}Overview
Retrieve the list of available card products. Each product defines the card brand, currency, fees, features, and availability. Use theproductId when creating a card to specify which product to issue.
Products include availability flags (canIssue, canFund, canUnload) so you know exactly what operations are supported for each product. The isDefault flag indicates which product is used as the automatic fallback during card replacement when the original card type is unavailable for issuance.
Example Usage
<?php
$response = file_get_contents(
'https://api.fyatu.com/api/v3/cards/products',
false,
stream_context_create([
'http' => [
'method' => 'GET',
'header' => 'Authorization: Bearer ' . $accessToken
]
])
);
$result = json_decode($response, true);
foreach ($result['data']['products'] as $product) {
$status = $product['canIssue'] ? '✓' : '✗';
echo "[{$status}] {$product['name']} ({$product['currency']}) - Fee: \${$product['issuanceFee']}";
if ($product['isDefault']) echo ' [DEFAULT]';
echo "\n";
}
const response = await fetch('https://api.fyatu.com/api/v3/cards/products', {
method: 'GET',
headers: {
'Authorization': `Bearer ${accessToken}`
}
});
const result = await response.json();
result.data.products.forEach(product => {
const status = product.canIssue ? '✓' : '✗';
const def = product.isDefault ? ' [DEFAULT]' : '';
console.log(`[${status}] ${product.name} (${product.currency}) - Fee: $${product.issuanceFee}${def}`);
});
Response Fields
| Field | Type | Description |
|---|---|---|
productId | string | Product identifier to use in card creation |
name | string | Human-readable product name |
brand | string | Card brand: MASTERCARD or VISA |
currency | string | Card currency: USD or EUR |
type | string | Card type (e.g., PREPAID, DEBIT) |
issuanceFee | number | Fee charged when issuing this card (in USD) |
minimumFunding | number | Minimum initial funding amount (in product currency) |
spendingLimit | number | Maximum spending limit for the card |
spendingPeriod | string | Time period for the spending limit: DAILY, MONTHLY, or YEARLY |
features.applePay | boolean | Whether the card supports Apple Pay |
features.googlePay | boolean | Whether the card supports Google Pay |
features.3dSecure | boolean | Whether the card supports 3D Secure |
features.reloadable | boolean | Whether the card can be funded after creation |
isTokenized | boolean | Whether the card supports digital wallet tokenization (Apple Pay, Google Pay) |
canIssue | boolean | Whether this product is currently available for new card issuance |
canFund | boolean | Whether cards of this product can receive funding (loading money) |
canUnload | boolean | Whether cards of this product support unloading (withdrawing money) |
isDefault | boolean | Whether this is the default fallback product used during card replacement |
fees.crossBorder | object | Cross-border fee for this product — { percent, flat, minimum } |
fees.settlement | object | Settlement fee for this product — { percent, flat, minimum } |
fees.authorization | object | Authorization fee for this product — { percent, flat, minimum } |
fees.decline | object | Declined-authorization fee for this product — { percent, flat, minimum } |
Which fees are here, and which are on your plan
issuanceFee above and every fee in GET /account/pricing
come from your plan and are identical whichever product you issue.
The fees object is different: each product is issued on its own BIN, and these four fees belong
to the BIN. They are the exact figures for this product, so this is where to look before choosing
between products. Cross-border differs several-fold between products and applies to any
payment settled outside the United States or in a currency other than USD — on recurring
international charges that difference compounds.
These four are deducted from the card balance at the time of authorization or settlement, not
billed to your account afterwards. They are published here so you can see what a card will be
charged before you choose a product — a
0.1 authorization fee reduces the available balance on
every approved authorization, whether or not it goes on to settle.percent is a percentage (0.7 means 0.7%), flat is a fixed amount in
USD, and minimum is the floor applied to the computed charge — null when the product sets no
floor, which is not the same as a floor of 0.
Example Response
{
"success": true,
"message": "Card products retrieved successfully",
"data": {
"products": [
{
"productId": "MCUSD1",
"name": "Mastercard World USD",
"brand": "MASTERCARD",
"currency": "USD",
"type": "PREPAID",
"issuanceFee": 5.00,
"minimumFunding": 5.00,
"spendingLimit": 25000,
"spendingPeriod": "DAILY",
"features": {
"applePay": false,
"googlePay": false,
"3dSecure": true,
"reloadable": true
},
"isTokenized": false,
"canIssue": true,
"canFund": true,
"canUnload": true,
"isDefault": true,
"fees": {
"crossBorder": { "percent": 0.7, "flat": 0, "minimum": 0 },
"settlement": { "percent": 0, "flat": 0, "minimum": null },
"authorization": { "percent": 0, "flat": 0.1, "minimum": null },
"decline": { "percent": 0, "flat": 0.4, "minimum": null }
}
}
]
}
}
Use the
productId value from this response as the productId field when creating a card. Only products with canIssue: true can be used for new card creation.Default Product & Card Replacement: When a card is replaced, the system first checks if the original card’s product type is still available for issuance (
canIssue: true). If it is, the replacement card will be the same type. If not, the product marked as isDefault: true is used automatically as a fallback — no action is needed from your side.EUR Products: For EUR-denominated cards, the
amount you provide in the create card request is in EUR. Your business wallet (which is USD-denominated) will be debited the equivalent amount in USD based on the current exchange rate, plus the issuance fee.Authorizations
JWT access token obtained from /auth/token

