Get a cardholder
curl --request GET \
--url https://api.fyatu.com/api/v3.20/cardholders/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fyatu.com/api/v3.20/cardholders/{id}"
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.20/cardholders/{id}', 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/cardholders/{id}",
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.20/cardholders/{id}"
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.20/cardholders/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fyatu.com/api/v3.20/cardholders/{id}")
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": "Cardholder retrieved",
"data": {
"cardholderId": "chl_01HXYZ1234ABCDEF5678",
"firstName": "John",
"lastName": "Smith",
"email": "john.smith@example.com",
"phone": "+12025551234",
"dateOfBirth": "1990-05-15",
"nationality": "US",
"address": {
"address": "123 Main Street, Apt 4B",
"city": "Newark",
"country": "US",
"state": "Delaware",
"postalCode": "19701"
},
"kycDocument": {
"documentType": "PASSPORT",
"documentNumber": "AB123456",
"issuingCountry": "US",
"frontUrl": "https://storage.example.com/doc-front.jpg",
"backUrl": null,
"selfieUrl": "https://storage.example.com/selfie.jpg"
},
"externalId": "usr_123456",
"metadata": {
"plan": "premium"
},
"status": "ACTIVE",
"kycStatus": "APPROVED",
"kycVerifiedAt": "2026-05-10T14:23:00Z",
"kycRejectionReason": null,
"totalCards": 2,
"suspendedAt": null,
"terminatedAt": null,
"createdAt": "2026-05-01T09:00:00Z",
"updatedAt": "2026-05-10T14:23:00Z"
},
"meta": {
"requestId": "req_a1b2c3d4e5f6a7b8c9d0e1f2",
"platform": "Fyatu CaaS",
"timestamp": "2026-05-22T15:00:00Z"
}
}Cardholders
Get Cardholder
Retrieve full profile details for a cardholder by ID. GET /cardholders/. Requires cardholders:read scope.
GET
/
cardholders
/
{id}
Get a cardholder
curl --request GET \
--url https://api.fyatu.com/api/v3.20/cardholders/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fyatu.com/api/v3.20/cardholders/{id}"
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.20/cardholders/{id}', 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/cardholders/{id}",
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.20/cardholders/{id}"
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.20/cardholders/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fyatu.com/api/v3.20/cardholders/{id}")
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": "Cardholder retrieved",
"data": {
"cardholderId": "chl_01HXYZ1234ABCDEF5678",
"firstName": "John",
"lastName": "Smith",
"email": "john.smith@example.com",
"phone": "+12025551234",
"dateOfBirth": "1990-05-15",
"nationality": "US",
"address": {
"address": "123 Main Street, Apt 4B",
"city": "Newark",
"country": "US",
"state": "Delaware",
"postalCode": "19701"
},
"kycDocument": {
"documentType": "PASSPORT",
"documentNumber": "AB123456",
"issuingCountry": "US",
"frontUrl": "https://storage.example.com/doc-front.jpg",
"backUrl": null,
"selfieUrl": "https://storage.example.com/selfie.jpg"
},
"externalId": "usr_123456",
"metadata": {
"plan": "premium"
},
"status": "ACTIVE",
"kycStatus": "APPROVED",
"kycVerifiedAt": "2026-05-10T14:23:00Z",
"kycRejectionReason": null,
"totalCards": 2,
"suspendedAt": null,
"terminatedAt": null,
"createdAt": "2026-05-01T09:00:00Z",
"updatedAt": "2026-05-10T14:23:00Z"
},
"meta": {
"requestId": "req_a1b2c3d4e5f6a7b8c9d0e1f2",
"platform": "Fyatu CaaS",
"timestamp": "2026-05-22T15:00:00Z"
}
}Overview
Returns the full profile of a single cardholder, including address, KYC status, and spend statistics. ThekycRejectionReason field is only present when kycStatus is REJECTED. The terminatedAt field is only present when status is TERMINATED. Both APPROVED and WAIVED cardholders can be issued cards.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
id | string | The cardholder ID (prefix chl_) |
Example
curl https://api.fyatu.com/api/v3.20/cardholders/chl_01HXYZ1234ABCDEF5678 \
-H "Authorization: Bearer $FYATU_API_KEY"
const resp = await fetch(
'https://api.fyatu.com/api/v3.20/cardholders/chl_01HXYZ1234ABCDEF5678',
{ headers: { 'Authorization': `Bearer ${process.env.FYATU_API_KEY}` } }
);
const body = await resp.json();
const cardholder = body.data;
console.log(cardholder.kycStatus); // "APPROVED"
console.log(cardholder.totalCards); // 2
import os, requests
resp = requests.get(
'https://api.fyatu.com/api/v3.20/cardholders/chl_01HXYZ1234ABCDEF5678',
headers={'Authorization': f'Bearer {os.environ["FYATU_API_KEY"]}'}
)
cardholder = resp.json()['data']
print(cardholder['kycStatus'])
Success Response (200)
{
"success": true,
"status": 200,
"message": "Cardholder retrieved",
"data": {
"cardholderId": "chl_01HXYZ1234ABCDEF5678",
"programId": "prg_01HXYZ9876ABCDEF0000",
"firstName": "John",
"lastName": "Smith",
"email": "john.smith@example.com",
"phone": "+12025551234",
"dateOfBirth": "1990-05-15",
"nationality": "US",
"address": {
"line1": "123 Main Street",
"line2": "Apt 4B",
"city": "Newark",
"state": "Delaware",
"postalCode": "19701",
"country": "US"
},
"externalId": "usr_123456",
"metadata": { "plan": "premium" },
"status": "ACTIVE",
"kycStatus": "APPROVED",
"kycVerifiedAt": "2026-05-01T09:05:00Z",
"totalCards": 2,
"totalSpendCents": 125000,
"suspendedAt": null,
"createdAt": "2026-05-01T09:00:00Z",
"updatedAt": "2026-05-01T09:05:00Z"
},
"meta": {
"requestId": "req_01HXY123456ABCDEF",
"platform": "Fyatu CaaS",
"timestamp": "2026-05-22T10:00:00Z"
}
}
Conditional Fields
| Field | Present when |
|---|---|
kycRejectionReason | kycStatus is REJECTED |
kycVerifiedAt | kycStatus is APPROVED; null for PENDING, WAIVED, and REJECTED |
terminatedAt | status is TERMINATED |
KYC Waived Example
On MINIMAL programs,kycStatus is WAIVED immediately after creation — the cardholder has not been identity-verified but is allowed to hold cards. No kycVerifiedAt is set.
{
"success": true,
"status": 200,
"message": "Cardholder retrieved",
"data": {
"cardholderId": "chl_01HXYZ1234ABCDEF5678",
"kycStatus": "WAIVED",
"kycVerifiedAt": null
},
"meta": { "requestId": "req_01HXY123456ABCDEF", "platform": "Fyatu CaaS", "timestamp": "2026-05-25T10:00:00Z" }
}
KYC Rejected Example
{
"success": true,
"status": 200,
"message": "Cardholder retrieved",
"data": {
"cardholderId": "chl_01HXYZ1234ABCDEF5678",
"kycStatus": "REJECTED",
"kycRejectionReason": "Document expired or unreadable",
"kycVerifiedAt": "2026-05-01T09:05:00Z"
},
"meta": { "requestId": "req_01HXY123456ABCDEF", "platform": "Fyatu CaaS", "timestamp": "2026-05-22T10:00:00Z" }
}
Error Codes
| Code | HTTP | Cause |
|---|---|---|
CARDHOLDER_NOT_FOUND | 404 | Cardholder does not exist or belongs to another business |
INSUFFICIENT_SCOPE | 403 | Key lacks cardholders:read scope |
Authorizations
API key from the FYATU CaaS portal. Pass as Authorization: Bearer <key>.
Path Parameters
⌘I

