curl --request POST \
--url https://api.stablepay.ai/v1/reversals \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"stablepayReference": "ISS_KE01K5D3W8ZQ4FZXQJHBVYFT9K3E",
"reversalReference": "QGR7X8T2PL",
"reason": "customer requested reversal"
}
'import requests
url = "https://api.stablepay.ai/v1/reversals"
payload = {
"stablepayReference": "ISS_KE01K5D3W8ZQ4FZXQJHBVYFT9K3E",
"reversalReference": "QGR7X8T2PL",
"reason": "customer requested reversal"
}
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({
stablepayReference: 'ISS_KE01K5D3W8ZQ4FZXQJHBVYFT9K3E',
reversalReference: 'QGR7X8T2PL',
reason: 'customer requested reversal'
})
};
fetch('https://api.stablepay.ai/v1/reversals', 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.stablepay.ai/v1/reversals",
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([
'stablepayReference' => 'ISS_KE01K5D3W8ZQ4FZXQJHBVYFT9K3E',
'reversalReference' => 'QGR7X8T2PL',
'reason' => 'customer requested reversal'
]),
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.stablepay.ai/v1/reversals"
payload := strings.NewReader("{\n \"stablepayReference\": \"ISS_KE01K5D3W8ZQ4FZXQJHBVYFT9K3E\",\n \"reversalReference\": \"QGR7X8T2PL\",\n \"reason\": \"customer requested reversal\"\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.stablepay.ai/v1/reversals")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"stablepayReference\": \"ISS_KE01K5D3W8ZQ4FZXQJHBVYFT9K3E\",\n \"reversalReference\": \"QGR7X8T2PL\",\n \"reason\": \"customer requested reversal\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.stablepay.ai/v1/reversals")
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 \"stablepayReference\": \"ISS_KE01K5D3W8ZQ4FZXQJHBVYFT9K3E\",\n \"reversalReference\": \"QGR7X8T2PL\",\n \"reason\": \"customer requested reversal\"\n}"
response = http.request(request)
puts response.read_body{
"reversalId": "ISS_RV01K5D3W8ZQ4FZXQJHBVYFT9K3F",
"paymentId": "ISS_KE01K5D3W8ZQ4FZXQJHBVYFT9K3E",
"stablepayReference": "ISS_KE01K5D3W8ZQ4FZXQJHBVYFT9K3E",
"reversalReference": "QGR7X8T2PL",
"blockchain": "SOLANA",
"status": "pending_review",
"reversalAmountUsdc": "10.500000",
"toAddress": "4Nd1mXKqRtPvYbGfJhAeZwQsUcTnVpLgDkRyXmWtB9Cq",
"reversalTxHash": null,
"failureReason": null,
"reason": "customer requested reversal",
"createdAt": "2026-10-14T09:12:04.000Z",
"reviewedAt": null,
"sentAt": null,
"confirmedAt": null,
"alreadyExisted": false
}Create Reversal
Submit a reversal claim against a succeeded payout that the recipient has reversed. Submitting a second claim for the same payout returns the existing one.
curl --request POST \
--url https://api.stablepay.ai/v1/reversals \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"stablepayReference": "ISS_KE01K5D3W8ZQ4FZXQJHBVYFT9K3E",
"reversalReference": "QGR7X8T2PL",
"reason": "customer requested reversal"
}
'import requests
url = "https://api.stablepay.ai/v1/reversals"
payload = {
"stablepayReference": "ISS_KE01K5D3W8ZQ4FZXQJHBVYFT9K3E",
"reversalReference": "QGR7X8T2PL",
"reason": "customer requested reversal"
}
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({
stablepayReference: 'ISS_KE01K5D3W8ZQ4FZXQJHBVYFT9K3E',
reversalReference: 'QGR7X8T2PL',
reason: 'customer requested reversal'
})
};
fetch('https://api.stablepay.ai/v1/reversals', 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.stablepay.ai/v1/reversals",
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([
'stablepayReference' => 'ISS_KE01K5D3W8ZQ4FZXQJHBVYFT9K3E',
'reversalReference' => 'QGR7X8T2PL',
'reason' => 'customer requested reversal'
]),
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.stablepay.ai/v1/reversals"
payload := strings.NewReader("{\n \"stablepayReference\": \"ISS_KE01K5D3W8ZQ4FZXQJHBVYFT9K3E\",\n \"reversalReference\": \"QGR7X8T2PL\",\n \"reason\": \"customer requested reversal\"\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.stablepay.ai/v1/reversals")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"stablepayReference\": \"ISS_KE01K5D3W8ZQ4FZXQJHBVYFT9K3E\",\n \"reversalReference\": \"QGR7X8T2PL\",\n \"reason\": \"customer requested reversal\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.stablepay.ai/v1/reversals")
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 \"stablepayReference\": \"ISS_KE01K5D3W8ZQ4FZXQJHBVYFT9K3E\",\n \"reversalReference\": \"QGR7X8T2PL\",\n \"reason\": \"customer requested reversal\"\n}"
response = http.request(request)
puts response.read_body{
"reversalId": "ISS_RV01K5D3W8ZQ4FZXQJHBVYFT9K3F",
"paymentId": "ISS_KE01K5D3W8ZQ4FZXQJHBVYFT9K3E",
"stablepayReference": "ISS_KE01K5D3W8ZQ4FZXQJHBVYFT9K3E",
"reversalReference": "QGR7X8T2PL",
"blockchain": "SOLANA",
"status": "pending_review",
"reversalAmountUsdc": "10.500000",
"toAddress": "4Nd1mXKqRtPvYbGfJhAeZwQsUcTnVpLgDkRyXmWtB9Cq",
"reversalTxHash": null,
"failureReason": null,
"reason": "customer requested reversal",
"createdAt": "2026-10-14T09:12:04.000Z",
"reviewedAt": null,
"sentAt": null,
"confirmedAt": null,
"alreadyExisted": false
}Authorizations
Stablepay API key. Include as Authorization: Bearer <key>.
Body
The original payout's payment ID.
"ISS_KE01K5D3W8ZQ4FZXQJHBVYFT9K3E"
The recipient's official reversal confirmation reference. Stablepay verifies this with the provider.
"QGR7X8T2PL"
Your own note about the claim.
"customer requested reversal"
Response
Claim lodged, or the existing claim for this payout.
The reversal ID. Use it to check the claim's status.
"ISS_RV01K5D3W8ZQ4FZXQJHBVYFT9K3F"
The payout being reversed.
"ISS_KE01K5D3W8ZQ4FZXQJHBVYFT9K3E"
The payment reference supplied on the claim.
"ISS_KE01K5D3W8ZQ4FZXQJHBVYFT9K3E"
The recipient's reversal confirmation reference.
"QGR7X8T2PL"
Chain the reversal is paid on. Taken from the original payout.
"SOLANA"
pending_review: lodged, awaiting verification. No money has moved. approved: verified by Stablepay; the reversal is queued. sending: the reversal is in flight. confirmed: the reversal is confirmed on-chain. rejected: could not be verified. No money moved. failed: the reversal was attempted and did not complete.
pending_review, approved, sending, confirmed, rejected, failed "pending_review"
Full original amount returned, in USDC.
"10.500000"
Your funding wallet on that chain. Resolved by Stablepay, never supplied on the claim.
"4Nd1mXKqRtPvYbGfJhAeZwQsUcTnVpLgDkRyXmWtB9Cq"
On-chain hash of the reversal transaction. Null until the reversal is sent.
null
Why the reversal failed. Null unless status is failed.
null
The note supplied on the claim, or the rejection note.
"customer requested reversal"
When the claim was lodged.
When the claim was approved or rejected. Null while pending_review.
null
When the reversal was broadcast. Null until sent.
null
When the reversal was confirmed on-chain. Null until confirmed.
null
True when a claim for this payout had already been lodged.
false

