curl --request GET \
--url https://api.stablepay.ai/v1/payments/{paymentId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.stablepay.ai/v1/payments/{paymentId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.stablepay.ai/v1/payments/{paymentId}', 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/payments/{paymentId}",
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.stablepay.ai/v1/payments/{paymentId}"
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.stablepay.ai/v1/payments/{paymentId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.stablepay.ai/v1/payments/{paymentId}")
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{
"id": "ABC_NG01M2IEFDNF4INFQD41O3R",
"status": "succeeded",
"direction": "money_out",
"paymentMethod": "BANK",
"sourceCurrency": "USDC",
"amountStablecoin": "0.787",
"fiatAmount": "1000",
"destinationCurrency": "NGN",
"providerRef": "AbCd2fv3ovnefe2",
"reference": "issuer_payment_001",
"errorCode": null,
"failureReason": null,
"customerMessage": null,
"depositInstruction": null,
"redirectUrl": null,
"paymentCode": "BANK",
"createdAt": "2026-05-06T10:31:00.000Z",
"updatedAt": "2026-05-06T10:31:45.000Z"
}Get Payment
Retrieve a single payment by ID or reference.
curl --request GET \
--url https://api.stablepay.ai/v1/payments/{paymentId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.stablepay.ai/v1/payments/{paymentId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.stablepay.ai/v1/payments/{paymentId}', 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/payments/{paymentId}",
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.stablepay.ai/v1/payments/{paymentId}"
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.stablepay.ai/v1/payments/{paymentId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.stablepay.ai/v1/payments/{paymentId}")
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{
"id": "ABC_NG01M2IEFDNF4INFQD41O3R",
"status": "succeeded",
"direction": "money_out",
"paymentMethod": "BANK",
"sourceCurrency": "USDC",
"amountStablecoin": "0.787",
"fiatAmount": "1000",
"destinationCurrency": "NGN",
"providerRef": "AbCd2fv3ovnefe2",
"reference": "issuer_payment_001",
"errorCode": null,
"failureReason": null,
"customerMessage": null,
"depositInstruction": null,
"redirectUrl": null,
"paymentCode": "BANK",
"createdAt": "2026-05-06T10:31:00.000Z",
"updatedAt": "2026-05-06T10:31:45.000Z"
}Authorizations
Stablepay API key. Include as Authorization: Bearer <key>.
Path Parameters
The payment ID or reference.
Response
Payment found.
Prefixed ULID for this payment.
"pay_01HV8KZMRJPQR9S7T3XABCDEF"
Current state of the payment in the state machine.
initiated → provider_accepted → succeeded | failed | refunded
money_out: issuer sends stablecoin → recipient receives fiat. money_in: customer pays fiat → issuer receives stablecoin.
money_in, money_out The supported payment method used to deliver funds to the recipient.
BANK, MOMO, PAYBILL, TILL Stablecoin sent onchain for payment settlement.
USDC, USDT Total stablecoin amount charged.
"10.500"
Fiat amount the recipient receives.
"1350"
Fiat currency received by the recipient.
CDF, GHS, KES, NGN, TZS, UGX, XAF, XOF, ZAR, ZMW Provider's transaction ID. Null until the provider accepts.
"CC4SOjQu8UUarKaOGZy9"
Caller's own reference code (e.g. "csh-txn-20260506-001"). Stored as supplied in the payment request.
"csh-txn-20260506-001"
Machine-readable failure code (e.g. insufficient_funds or invalid_account). Null unless status is failed.
null
Human-readable description of why the payment failed. Null unless status is failed.
null
Human-readable status message safe to surface to the end customer.
null
Hosted checkout URL the customer must be redirected to complete the payment. Present for payment methods that require a redirect (e.g. OPAY deeplink payins); null otherwise.
null
The paymentCode supplied on the request, echoed back.
null
Money-in only. Bank account the customer must transfer fiat into to complete a bank payin.
Show child attributes
Show child attributes

