Get Card Transactions
curl --request GET \
--url https://api.fyatu.com/api/v3/cards/{cardId}/transactions \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fyatu.com/api/v3/cards/{cardId}/transactions"
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/{cardId}/transactions', 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/{cardId}/transactions",
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/{cardId}/transactions"
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/{cardId}/transactions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fyatu.com/api/v3/cards/{cardId}/transactions")
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": "Transactions retrieved successfully",
"data": {
"transactions": [
{
"id": "8a7b6c5d4e3f2a1b0c9d8e7f",
"type": "DEBIT",
"amount": 15.99,
"currency": "USD",
"merchant": "Netflix",
"logo": "https://logos.ntropy.com/netflix.com",
"status": "COMPLETED",
"description": "NETFLIX.COM LOS GATOS",
"category": "Card Charge",
"createdAt": "2026-01-15 14:32:18"
},
{
"id": "1b2c3d4e5f6a7b8c9d0e1f2a",
"type": "CREDIT",
"amount": 100,
"currency": "USD",
"merchant": "Card Funding",
"logo": "https://logos.ntropy.com/consumer_icons-ATM_bank_deposit",
"status": "COMPLETED",
"description": "Mastercard Virtual dollar card funding",
"category": "Card Funding",
"createdAt": "2026-01-14 09:15:42"
},
{
"id": "3c4d5e6f7a8b9c0d1e2f3a4b",
"type": "DEBIT",
"amount": 49.99,
"currency": "USD",
"merchant": "Spotify",
"logo": "https://logos.ntropy.com/spotify.com",
"status": "COMPLETED",
"description": "SPOTIFY PREMIUM STOCKHOLM",
"category": "Card Charge",
"createdAt": "2026-01-12 11:05:33"
},
{
"id": "5e6f7a8b9c0d1e2f3a4b5c6d",
"type": "DEBIT",
"amount": 25,
"currency": "USD",
"merchant": "Card Withdrawal",
"logo": "https://logos.ntropy.com/consumer_icons-ATM_bank_withdrawal",
"status": "COMPLETED",
"description": "Mastercard Virtual dollar card unloading",
"category": "Card Withdrawal",
"createdAt": "2026-01-10 16:48:21"
}
],
"pagination": {
"currentPage": 1,
"totalItems": 47,
"totalPages": 3,
"hasMore": true
}
},
"meta": {
"requestId": "req_a1b2c3d4e5f6g7h8",
"timestamp": "2026-01-17T12: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"
}
}{
"success": false,
"status": 404,
"message": "Wallet not found",
"error": {
"code": "RESOURCE_NOT_FOUND"
},
"meta": {
"requestId": "req_abc123",
"timestamp": "2026-01-05T10:30:00+00:00"
}
}Cards
Get Card Transactions
Get transaction history for a specific card — merchant name, amount, status, and timestamps. GET /cards//transactions.
GET
/
cards
/
{cardId}
/
transactions
Get Card Transactions
curl --request GET \
--url https://api.fyatu.com/api/v3/cards/{cardId}/transactions \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fyatu.com/api/v3/cards/{cardId}/transactions"
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/{cardId}/transactions', 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/{cardId}/transactions",
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/{cardId}/transactions"
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/{cardId}/transactions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fyatu.com/api/v3/cards/{cardId}/transactions")
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": "Transactions retrieved successfully",
"data": {
"transactions": [
{
"id": "8a7b6c5d4e3f2a1b0c9d8e7f",
"type": "DEBIT",
"amount": 15.99,
"currency": "USD",
"merchant": "Netflix",
"logo": "https://logos.ntropy.com/netflix.com",
"status": "COMPLETED",
"description": "NETFLIX.COM LOS GATOS",
"category": "Card Charge",
"createdAt": "2026-01-15 14:32:18"
},
{
"id": "1b2c3d4e5f6a7b8c9d0e1f2a",
"type": "CREDIT",
"amount": 100,
"currency": "USD",
"merchant": "Card Funding",
"logo": "https://logos.ntropy.com/consumer_icons-ATM_bank_deposit",
"status": "COMPLETED",
"description": "Mastercard Virtual dollar card funding",
"category": "Card Funding",
"createdAt": "2026-01-14 09:15:42"
},
{
"id": "3c4d5e6f7a8b9c0d1e2f3a4b",
"type": "DEBIT",
"amount": 49.99,
"currency": "USD",
"merchant": "Spotify",
"logo": "https://logos.ntropy.com/spotify.com",
"status": "COMPLETED",
"description": "SPOTIFY PREMIUM STOCKHOLM",
"category": "Card Charge",
"createdAt": "2026-01-12 11:05:33"
},
{
"id": "5e6f7a8b9c0d1e2f3a4b5c6d",
"type": "DEBIT",
"amount": 25,
"currency": "USD",
"merchant": "Card Withdrawal",
"logo": "https://logos.ntropy.com/consumer_icons-ATM_bank_withdrawal",
"status": "COMPLETED",
"description": "Mastercard Virtual dollar card unloading",
"category": "Card Withdrawal",
"createdAt": "2026-01-10 16:48:21"
}
],
"pagination": {
"currentPage": 1,
"totalItems": 47,
"totalPages": 3,
"hasMore": true
}
},
"meta": {
"requestId": "req_a1b2c3d4e5f6g7h8",
"timestamp": "2026-01-17T12: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"
}
}{
"success": false,
"status": 404,
"message": "Wallet not found",
"error": {
"code": "RESOURCE_NOT_FOUND"
},
"meta": {
"requestId": "req_abc123",
"timestamp": "2026-01-05T10:30:00+00:00"
}
}Overview
Retrieve a paginated list of all transactions made with a specific card, including purchases, refunds, and funding operations.Path Parameters
| Parameter | Type | Description |
|---|---|---|
cardId | string | The unique card identifier |
Query Parameters
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number (default: 1) |
reference | string | Return only transactions carrying this reference — see below |
Confirming an operation reached the card
Passreference with the transactionReference returned by a fund or unload call to see the
transactions that operation produced on the card.
This is the authoritative check. The card provider’s transaction history is the record of what
actually happened to the card, and it is independent of the status we report on the operation
itself. If a funding call reports a failure but the money did reach the card, this lookup shows
it — which is exactly the case worth verifying before re-funding a card.
curl "https://api.fyatu.com/api/v3/cards/{cardId}/transactions?reference=FND6A8CB4646CFC0" -H "Authorization: Bearer $ACCESS_TOKEN"
transactions array means no transaction with that reference exists on the card.
One or more entries means the operation reached it — a single reference can return more than
one row when an operation also attracted a fee.
The lookup searches the card’s history rather than a single page, so page is ignored when
reference is set.
reference matches the transactionReference from the fund/unload response, not the
reference you supplied for idempotency. The two are different identifiers: yours keys the
request, transactionReference identifies the operation on the card.Example Usage
<?php
$cardId = 'crd_8f3a2b1c4d5e6f7890abcdef12345678';
$ch = curl_init("https://api.fyatu.com/api/v3/cards/{$cardId}/transactions?page=1");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $accessToken
]
]);
$response = curl_exec($ch);
$result = json_decode($response, true);
if ($result['success']) {
foreach ($result['data']['transactions'] as $txn) {
$sign = $txn['type'] === 'CREDIT' ? '+' : '-';
$cat = $txn['category'] ? "[{$txn['category']}] " : '';
echo "{$cat}{$txn['merchant']}: {$sign}\${$txn['amount']} ({$txn['status']})\n";
// e.g. "[Cross-border Fee] FACEBK *TQSR DUBLIN: -$0.50 (COMPLETED)"
}
if ($result['data']['pagination']['hasMore']) {
echo "Page {$result['data']['pagination']['currentPage']} of {$result['data']['pagination']['totalPages']}\n";
}
}
const cardId = 'crd_8f3a2b1c4d5e6f7890abcdef12345678';
const response = await fetch(
`https://api.fyatu.com/api/v3/cards/${cardId}/transactions?page=1`,
{ headers: { 'Authorization': `Bearer ${accessToken}` } }
);
const result = await response.json();
if (result.success) {
result.data.transactions.forEach(txn => {
const sign = txn.type === 'CREDIT' ? '+' : '-';
const cat = txn.category ? `[${txn.category}] ` : '';
console.log(`${cat}${txn.merchant}: ${sign}$${txn.amount} (${txn.status})`);
// e.g. "[Cross-border Fee] FACEBK *TQSR DUBLIN: -$0.50 (COMPLETED)"
});
const { currentPage, totalPages, hasMore } = result.data.pagination;
if (hasMore) console.log(`Page ${currentPage} of ${totalPages}`);
}
Response Fields
| Field | Type | Description |
|---|---|---|
id | string | Unique transaction identifier |
reference | string | Provider reference the operation carried on the card (the clientReference); filter on it with the reference query param |
type | string | DEBIT (purchases, fees) or CREDIT (funding, refunds) |
amount | number | Transaction amount in USD |
currency | string | Transaction currency (usually USD) |
merchant | string | Merchant name |
logo | string | Merchant logo URL (nullable) |
status | string | COMPLETED, PENDING, DECLINED, REFUNDED, REVERSED |
description | string | Network narration or payment code (e.g. "Account verification") |
category | string | Human-readable transaction category (e.g. "Card Charge", "Cross-border Fee", "Card Funding"). Use this to distinguish the actual payment from associated fees. |
createdAt | string | Transaction timestamp (YYYY-MM-DD HH:MM:SS UTC) |
references | object | Network identifiers for tracing the payment — see References |
References
references carries the identifiers a merchant, a cardholder’s bank or our support team needs to
trace a card payment — for example when a cardholder asks a merchant for a refund. It is always
present; funding and withdrawals carry no network identifiers, so for them it is an empty object.
Each field appears only when the card network supplied it.
| Field | Type | Description |
|---|---|---|
authorizationCode | string | Authorization identifier issued when the payment was approved |
rrn | string | Retrieval Reference Number assigned by the card network (12 digits) |
arn | string | Acquirer Reference Number — see the note below |
merchantId | string | Merchant identifier at the network |
network | string | Card network, e.g. MASTERCARD |
maskedPan | string | Masked card number the payment was made with |
authorizationAmount | number | Amount the merchant requested, in the merchant’s currency. Differs from amount on foreign-currency payments |
authorizationCurrency | string | Currency of authorizationAmount |
relatedTransactionId | string | On a fee (Cross-border Fee, decline fees): the id of the transaction it was charged on |
The ARN is assigned by the merchant’s acquirer when it submits the payment for clearing, so an
authorization that has not cleared never has one. When
arn is absent on a cleared payment,
contact support with the rrn and authorizationCode and we will obtain it. A refund request to
the merchant does not need the ARN — the merchant identifies the payment from its own order.Category Values
| Value | Meaning |
|---|---|
Card Charge | The actual merchant payment |
Cross-border Fee | International surcharge attached to a cross-border charge |
Card Funding | Balance top-up |
Card Withdrawal | Balance unload |
Refund | Merchant refund |
Reversal | Transaction reversal |
Declined | Declined authorisation attempt |
Decline Fee (Domestic) | Fee for a declined domestic authorisation |
Decline Fee (International) | Fee for a declined international authorisation |
Pagination
| Field | Type | Description |
|---|---|---|
currentPage | integer | Current page number |
totalItems | integer | Total number of transactions |
totalPages | integer | Total number of pages |
hasMore | boolean | Whether more pages are available |
When a single card payment generates two DEBIT entries with the same merchant (e.g. a Facebook charge of 1.00followedbya0.50 entry), the
category field tells them apart: "Card Charge" is the actual payment and "Cross-border Fee" is the international surcharge. Always check category before rendering transaction labels in your UI.Authorizations
JWT access token obtained from /auth/token
Path Parameters
Query Parameters
Required range:
x <= 100Return only the transactions carrying this reference — the transactionReference returned by a fund or unload call. Searches the card history rather than a single page, and is the way to confirm an operation actually reached the card.

