curl --request GET \
--url https://api-gateway.perflo.ai/v1/accounts/endorsement \
--header 'Authorization: Bearer <token>' \
--header 'DPoP: <api-key>'import requests
url = "https://api-gateway.perflo.ai/v1/accounts/endorsement"
headers = {
"DPoP": "<api-key>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {DPoP: '<api-key>', Authorization: 'Bearer <token>'}};
fetch('https://api-gateway.perflo.ai/v1/accounts/endorsement', 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-gateway.perflo.ai/v1/accounts/endorsement",
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>",
"DPoP: <api-key>"
],
]);
$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-gateway.perflo.ai/v1/accounts/endorsement"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("DPoP", "<api-key>")
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-gateway.perflo.ai/v1/accounts/endorsement")
.header("DPoP", "<api-key>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-gateway.perflo.ai/v1/accounts/endorsement")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["DPoP"] = '<api-key>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"currency": "<string>",
"in_progress": true,
"phase": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"fields": [
{
"message": "<string>",
"path": "<string>"
}
],
"request_id": "<string>",
"retryable": true,
"submission_uncertain": true
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"fields": [
{
"message": "<string>",
"path": "<string>"
}
],
"request_id": "<string>",
"retryable": true,
"submission_uncertain": true
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"fields": [
{
"message": "<string>",
"path": "<string>"
}
],
"request_id": "<string>",
"retryable": true,
"submission_uncertain": true
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"fields": [
{
"message": "<string>",
"path": "<string>"
}
],
"request_id": "<string>",
"retryable": true,
"submission_uncertain": true
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"fields": [
{
"message": "<string>",
"path": "<string>"
}
],
"request_id": "<string>",
"retryable": true,
"submission_uncertain": true
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"fields": [
{
"message": "<string>",
"path": "<string>"
}
],
"request_id": "<string>",
"retryable": true,
"submission_uncertain": true
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"fields": [
{
"message": "<string>",
"path": "<string>"
}
],
"request_id": "<string>",
"retryable": true,
"submission_uncertain": true
}Get endorsement status
Returns the normalized gated-currency endorsement status without provider identifiers, session material, or hosted verification URLs.
curl --request GET \
--url https://api-gateway.perflo.ai/v1/accounts/endorsement \
--header 'Authorization: Bearer <token>' \
--header 'DPoP: <api-key>'import requests
url = "https://api-gateway.perflo.ai/v1/accounts/endorsement"
headers = {
"DPoP": "<api-key>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {DPoP: '<api-key>', Authorization: 'Bearer <token>'}};
fetch('https://api-gateway.perflo.ai/v1/accounts/endorsement', 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-gateway.perflo.ai/v1/accounts/endorsement",
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>",
"DPoP: <api-key>"
],
]);
$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-gateway.perflo.ai/v1/accounts/endorsement"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("DPoP", "<api-key>")
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-gateway.perflo.ai/v1/accounts/endorsement")
.header("DPoP", "<api-key>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-gateway.perflo.ai/v1/accounts/endorsement")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["DPoP"] = '<api-key>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"currency": "<string>",
"in_progress": true,
"phase": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"fields": [
{
"message": "<string>",
"path": "<string>"
}
],
"request_id": "<string>",
"retryable": true,
"submission_uncertain": true
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"fields": [
{
"message": "<string>",
"path": "<string>"
}
],
"request_id": "<string>",
"retryable": true,
"submission_uncertain": true
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"fields": [
{
"message": "<string>",
"path": "<string>"
}
],
"request_id": "<string>",
"retryable": true,
"submission_uncertain": true
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"fields": [
{
"message": "<string>",
"path": "<string>"
}
],
"request_id": "<string>",
"retryable": true,
"submission_uncertain": true
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"fields": [
{
"message": "<string>",
"path": "<string>"
}
],
"request_id": "<string>",
"retryable": true,
"submission_uncertain": true
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"fields": [
{
"message": "<string>",
"path": "<string>"
}
],
"request_id": "<string>",
"retryable": true,
"submission_uncertain": true
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"fields": [
{
"message": "<string>",
"path": "<string>"
}
],
"request_id": "<string>",
"retryable": true,
"submission_uncertain": true
}Authorizations
Per-request RFC 9449 DPoP proof signed with ES256. Protected requests use Authorization: DPoP your_access_token_here. Create a new proof for the exact method and normalized target URI, and include the server nonce when challenged.
OAuth 2.0 with RFC 9700 security practices. Discover exact environment endpoints from /.well-known/openid-configuration and /.well-known/oauth-authorization-server, and discover the resource from /.well-known/oauth-protected-resource. Authorization-code clients use PKCE S256, the exact environment resource, nonce with openid, and DPoP binding. Confidential clients also require PAR and private_key_jwt. Access and refresh tokens are sender-constrained with DPoP. purchases:execute is unavailable and omitted from this scope registry.
Scopes
Read the resource owner’s financial accounts, withdrawal limits, and endorsement status.
Headers
Optional caller request identifier. Unsafe values are replaced with a generated UUID.
^[A-Za-z0-9._~-]{8,128}$Query Parameters
The gated currency to inspect.
^[A-Z]{3}$Response
The normalized endorsement status for the requested currency.
The gated-currency endorsement status without provider identifiers, session material, or hosted verification URLs.
The gated currency the endorsement covers.
^[A-Z]{3}$Whether a provider endorsement is currently in progress.
Normalized provider endorsement phase, or null when none was stated.
1 - 128^[a-z0-9]+(?:[._-][a-z0-9]+)*$