Skip to main content
POST
/
cards
/
{id}
/
statement
Generate card statement
curl --request POST \
  --url https://api.fyatu.com/api/v3.20/cards/{id}/statement \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "brandColor": "#2563eb",
  "brandName": "Acme Cards Ltd",
  "brandLogo": "https://acmecards.com/logo.png",
  "contactEmail": "support@acmecards.com",
  "address": "128 City Road, London EC1V 2NX, United Kingdom",
  "phone": "+44 20 7946 0958",
  "website": "https://acmecards.com"
}
'
import requests

url = "https://api.fyatu.com/api/v3.20/cards/{id}/statement"

payload = {
"brandColor": "#2563eb",
"brandName": "Acme Cards Ltd",
"brandLogo": "https://acmecards.com/logo.png",
"contactEmail": "support@acmecards.com",
"address": "128 City Road, London EC1V 2NX, United Kingdom",
"phone": "+44 20 7946 0958",
"website": "https://acmecards.com"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
brandColor: '#2563eb',
brandName: 'Acme Cards Ltd',
brandLogo: 'https://acmecards.com/logo.png',
contactEmail: 'support@acmecards.com',
address: '128 City Road, London EC1V 2NX, United Kingdom',
phone: '+44 20 7946 0958',
website: 'https://acmecards.com'
})
};

fetch('https://api.fyatu.com/api/v3.20/cards/{id}/statement', 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.20/cards/{id}/statement",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'brandColor' => '#2563eb',
'brandName' => 'Acme Cards Ltd',
'brandLogo' => 'https://acmecards.com/logo.png',
'contactEmail' => 'support@acmecards.com',
'address' => '128 City Road, London EC1V 2NX, United Kingdom',
'phone' => '+44 20 7946 0958',
'website' => 'https://acmecards.com'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://api.fyatu.com/api/v3.20/cards/{id}/statement"

payload := strings.NewReader("{\n \"brandColor\": \"#2563eb\",\n \"brandName\": \"Acme Cards Ltd\",\n \"brandLogo\": \"https://acmecards.com/logo.png\",\n \"contactEmail\": \"support@acmecards.com\",\n \"address\": \"128 City Road, London EC1V 2NX, United Kingdom\",\n \"phone\": \"+44 20 7946 0958\",\n \"website\": \"https://acmecards.com\"\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://api.fyatu.com/api/v3.20/cards/{id}/statement")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"brandColor\": \"#2563eb\",\n \"brandName\": \"Acme Cards Ltd\",\n \"brandLogo\": \"https://acmecards.com/logo.png\",\n \"contactEmail\": \"support@acmecards.com\",\n \"address\": \"128 City Road, London EC1V 2NX, United Kingdom\",\n \"phone\": \"+44 20 7946 0958\",\n \"website\": \"https://acmecards.com\"\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.fyatu.com/api/v3.20/cards/{id}/statement")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"brandColor\": \"#2563eb\",\n \"brandName\": \"Acme Cards Ltd\",\n \"brandLogo\": \"https://acmecards.com/logo.png\",\n \"contactEmail\": \"support@acmecards.com\",\n \"address\": \"128 City Road, London EC1V 2NX, United Kingdom\",\n \"phone\": \"+44 20 7946 0958\",\n \"website\": \"https://acmecards.com\"\n}"

response = http.request(request)
puts response.read_body
{
  "success": true,
  "status": 200,
  "message": "Statement generated",
  "data": {
    "url": "https://cdn.fyatu.com/statements/3f2a9c7e1b6d4085a1c2e3f4b5a69788c0d1e2f3a4b5c6d7e8f9011223344556.pdf",
    "expiresInHours": 24
  },
  "meta": {
    "requestId": "req_01HXY123456ABCDEF",
    "platform": "Fyatu CaaS",
    "timestamp": "2026-07-08T10:00:00Z"
  }
}

Overview

Generates a bank-grade PDF statement for a card and returns a download link. The statement lists every settled card transaction grouped by day (funding, charges, fees, reversals, termination refunds …) with a summary of Total Money In / Out, Available Balance, and — when the provider ledger and available balance differ — a Pending Value line so the summary always balances. Because CaaS businesses have no stored branding, you supply your own white-label branding in the request body. Every field is optional; anything omitted falls back to a sensible default (brandName defaults to your account display name, and the contact line is dropped entirely when you provide no contactEmail/phone).
The returned url points to cdn.fyatu.com and is valid for 24 hours, after which the file is automatically deleted. Fetch and store the PDF on your side if you need it longer.

Path Parameters

ParameterTypeDescription
idstringThe card ID (prefix crd_)

Body Parameters (all optional)

FieldTypeDescription
brandColorstringHex color for the header, accents and totals row (e.g. #2563eb)
brandNamestringBusiness/brand name shown in the header and footer. Defaults to your account display name
brandLogostringPublicly reachable PNG or JPG logo URL, rendered in the header
contactEmailstringSupport email printed in the footer
addressstringBusiness address printed under the header
phonestringSupport phone printed in the footer
websitestringWebsite printed in the header strip

Example

curl -X POST https://api.fyatu.com/api/v3.20/cards/crd_01HXYZ5555ABCDEF1111/statement \
  -H "Authorization: Bearer $FYATU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "brandColor": "#2563eb",
    "brandName": "Acme Cards Ltd",
    "brandLogo": "https://acmecards.com/logo.png",
    "contactEmail": "support@acmecards.com",
    "address": "128 City Road, London EC1V 2NX, United Kingdom",
    "phone": "+44 20 7946 0958",
    "website": "https://acmecards.com"
  }'
const resp = await fetch(
  'https://api.fyatu.com/api/v3.20/cards/crd_01HXYZ5555ABCDEF1111/statement',
  {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.FYATU_API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      brandColor: '#2563eb',
      brandName: 'Acme Cards Ltd',
      brandLogo: 'https://acmecards.com/logo.png',
      contactEmail: 'support@acmecards.com',
    }),
  }
);
const { data } = await resp.json();
console.log('Statement:', data.url);
import os, requests

resp = requests.post(
    'https://api.fyatu.com/api/v3.20/cards/crd_01HXYZ5555ABCDEF1111/statement',
    headers={'Authorization': f'Bearer {os.environ["FYATU_API_KEY"]}'},
    json={
        'brandColor': '#2563eb',
        'brandName': 'Acme Cards Ltd',
        'brandLogo': 'https://acmecards.com/logo.png',
        'contactEmail': 'support@acmecards.com',
    },
)
print('Statement:', resp.json()['data']['url'])

Success Response (200)

{
  "success": true,
  "status": 200,
  "message": "Statement generated",
  "data": {
    "url": "https://cdn.fyatu.com/statements/3f2a9c7e1b6d4085a1c2e3f4b5a69788c0d1e2f3a4b5c6d7e8f9011223344556.pdf",
    "expiresInHours": 24
  },
  "meta": {
    "requestId": "req_01HXY123456ABCDEF",
    "platform": "Fyatu CaaS",
    "timestamp": "2026-07-08T10:00:00Z"
  }
}

Error Codes

CodeHTTPCause
CARD_NOT_FOUND404Card does not exist or belongs to another business/environment
CARD_PROVISIONING409Card is still being provisioned by the card network
PROVIDER_ERROR502Card network unavailable — retry with exponential back-off
SERVICE_UNAVAILABLE503Statement generation is temporarily unavailable
INSUFFICIENT_SCOPE403Key lacks cards:read scope

Authorizations

Authorization
string
header
required

API key from the FYATU CaaS portal. Pass as Authorization: Bearer <key>.

Path Parameters

id
string
required

Body

application/json
brandColor
string

Hex brand color used for the header, accents and totals row.

Example:

"#2563eb"

brandName
string

Business / brand name. Defaults to your account display name when omitted.

Example:

"Acme Cards Ltd"

Publicly reachable PNG or JPG logo URL shown in the statement header.

Example:

"https://acmecards.com/logo.png"

contactEmail
string
Example:

"support@acmecards.com"

address
string
Example:

"128 City Road, London EC1V 2NX, United Kingdom"

phone
string
Example:

"+44 20 7946 0958"

website
string
Example:

"https://acmecards.com"

Response

200 - application/json

Statement generated

success
boolean
status
integer
message
string
data
object
meta
object