Terminate Card
curl --request DELETE \
--url https://api.fyatu.com/api/v3/cards/{cardId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"reason": "Card reported lost by customer",
"reference": "cancel-card-abc123"
}
'import requests
url = "https://api.fyatu.com/api/v3/cards/{cardId}"
payload = {
"reason": "Card reported lost by customer",
"reference": "cancel-card-abc123"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.delete(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'DELETE',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({reason: 'Card reported lost by customer', reference: 'cancel-card-abc123'})
};
fetch('https://api.fyatu.com/api/v3/cards/{cardId}', 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}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
CURLOPT_POSTFIELDS => json_encode([
'reason' => 'Card reported lost by customer',
'reference' => 'cancel-card-abc123'
]),
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/cards/{cardId}"
payload := strings.NewReader("{\n \"reason\": \"Card reported lost by customer\",\n \"reference\": \"cancel-card-abc123\"\n}")
req, _ := http.NewRequest("DELETE", 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.delete("https://api.fyatu.com/api/v3/cards/{cardId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"reason\": \"Card reported lost by customer\",\n \"reference\": \"cancel-card-abc123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fyatu.com/api/v3/cards/{cardId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"reason\": \"Card reported lost by customer\",\n \"reference\": \"cancel-card-abc123\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"status": 200,
"message": "Card terminated successfully",
"data": {
"id": "crd_8f3a2b1c4d5e6f7890abcdef12345678",
"status": "TERMINATED",
"reason": "Card reported lost by customer",
"refundedBalance": 45.5,
"terminatedAt": "2026-01-17T10:00:00+00:00",
"reference": "cancel-card-abc123"
},
"meta": {
"requestId": "req_a1b2c3d4e5f6",
"timestamp": "2026-01-17T10: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
Terminate Card
Permanently terminate a virtual card. Remaining balance is returned to your wallet. DELETE /cards/.
DELETE
/
cards
/
{cardId}
Terminate Card
curl --request DELETE \
--url https://api.fyatu.com/api/v3/cards/{cardId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"reason": "Card reported lost by customer",
"reference": "cancel-card-abc123"
}
'import requests
url = "https://api.fyatu.com/api/v3/cards/{cardId}"
payload = {
"reason": "Card reported lost by customer",
"reference": "cancel-card-abc123"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.delete(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'DELETE',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({reason: 'Card reported lost by customer', reference: 'cancel-card-abc123'})
};
fetch('https://api.fyatu.com/api/v3/cards/{cardId}', 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}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
CURLOPT_POSTFIELDS => json_encode([
'reason' => 'Card reported lost by customer',
'reference' => 'cancel-card-abc123'
]),
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/cards/{cardId}"
payload := strings.NewReader("{\n \"reason\": \"Card reported lost by customer\",\n \"reference\": \"cancel-card-abc123\"\n}")
req, _ := http.NewRequest("DELETE", 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.delete("https://api.fyatu.com/api/v3/cards/{cardId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"reason\": \"Card reported lost by customer\",\n \"reference\": \"cancel-card-abc123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fyatu.com/api/v3/cards/{cardId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"reason\": \"Card reported lost by customer\",\n \"reference\": \"cancel-card-abc123\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"status": 200,
"message": "Card terminated successfully",
"data": {
"id": "crd_8f3a2b1c4d5e6f7890abcdef12345678",
"status": "TERMINATED",
"reason": "Card reported lost by customer",
"refundedBalance": 45.5,
"terminatedAt": "2026-01-17T10:00:00+00:00",
"reference": "cancel-card-abc123"
},
"meta": {
"requestId": "req_a1b2c3d4e5f6",
"timestamp": "2026-01-17T10: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
Permanently terminate a card. Any remaining balance will be automatically returned to your business wallet. This action cannot be undone.Terminating a card closes it immediately, but returning its remaining balance can take from
seconds to several hours depending on the card network. The
refundedBalance in this
response is the amount we expect to return, not money that has moved.Two webhooks follow, and they mean different things:card.terminated— a notification. The card is closed and unusable. Update your records; do not move money.card.termination_refund— your cue to act. The balance is back in your account; now settle with your customer.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
cardId | string | The unique card identifier |
Request Body (Optional)
| Field | Type | Required | Description |
|---|---|---|---|
reference | string | No | Your unique reference for this operation. Defaults to cardId if not provided. Returned in webhooks for easy reconciliation. |
Terminating a card closes it immediately, but returning its remaining balance can take from
seconds to several hours depending on the card network. The
refundedBalance in this
response is the amount we expect to return, not money that has moved.You will receive card.terminated twice: once with status: "PROCESSING" when the card
stops working, then again with status: "COMPLETED" and the settled refundedBalance once
the balance is actually back in your account. Stop card usage on the first; release funds to
your own customer only on the second.Example Usage
<?php
$cardId = 'crd_8f3a2b1c4d5e6f7890abcdef12345678';
$data = [
'reference' => 'cancel-card-abc123' // Optional: your unique reference
];
$ch = curl_init('https://api.fyatu.com/api/v3/cards/' . $cardId);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'DELETE',
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 terminated at: " . $result['data']['terminatedAt'] . "\n";
echo "Reference: " . $result['data']['reference'] . "\n";
}
const cardId = 'crd_8f3a2b1c4d5e6f7890abcdef12345678';
const response = await fetch(`https://api.fyatu.com/api/v3/cards/${cardId}`, {
method: 'DELETE',
headers: {
'Authorization': `Bearer ${accessToken}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
reference: 'cancel-card-abc123' // Optional: your unique reference
})
});
const result = await response.json();
if (result.success) {
console.log('Card terminated at:', result.data.terminatedAt);
console.log('Reference:', result.data.reference);
}
Error Responses
| Error Code | Description |
|---|---|
ALREADY_TERMINATED | Card is already terminated |
If you want to temporarily disable a card without losing the balance, use the Freeze Card endpoint instead.
Authorizations
JWT access token obtained from /auth/token
Path Parameters
Body
application/json
⌘I

