Get account KYC
curl --request GET \
--url https://prod-api.stableyard.fi/v2/accounts/{accountId}/kyc \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://prod-api.stableyard.fi/v2/accounts/{accountId}/kyc"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://prod-api.stableyard.fi/v2/accounts/{accountId}/kyc', 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://prod-api.stableyard.fi/v2/accounts/{accountId}/kyc",
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: Basic <encoded-value>"
],
]);
$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://prod-api.stableyard.fi/v2/accounts/{accountId}/kyc"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Basic <encoded-value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://prod-api.stableyard.fi/v2/accounts/{accountId}/kyc")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://prod-api.stableyard.fi/v2/accounts/{accountId}/kyc")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body{
"accountId": "acct_123",
"current": {
"id": "kyc_123",
"accountId": "acct_123",
"status": "approved",
"eligibility": {
"status": "eligible",
"verifiedAt": "2026-08-28T10:20:00.000Z",
"validUntil": "2027-08-28T10:20:00.000Z"
},
"nextAction": {
"type": "none"
},
"completedAt": "2026-08-28T10:20:00.000Z",
"createdAt": "2026-08-28T10:05:00.000Z",
"updatedAt": "2026-08-28T10:20:00.000Z"
},
"verifications": [
{
"id": "kyc_123",
"accountId": "acct_123",
"status": "approved",
"eligibility": {
"status": "eligible",
"verifiedAt": "2026-08-28T10:20:00.000Z",
"validUntil": "2027-08-28T10:20:00.000Z"
},
"nextAction": {
"type": "none"
},
"completedAt": "2026-08-28T10:20:00.000Z",
"createdAt": "2026-08-28T10:05:00.000Z",
"updatedAt": "2026-08-28T10:20:00.000Z"
}
]
}{
"error": {
"code": "bad_request",
"message": "The request is invalid"
}
}{
"error": {
"code": "unauthorized",
"message": "Authentication is required"
}
}{
"error": {
"code": "forbidden",
"message": "The credential does not allow this operation"
}
}{
"error": {
"code": "not_found",
"message": "The resource was not found"
}
}{
"error": {
"code": "idempotency_conflict",
"message": "The Idempotency-Key was already used with a different request"
}
}{
"error": {
"code": "chain_config_missing",
"message": "The requested network is not configured for this environment"
}
}{
"error": {
"code": "rate_limited",
"message": "Too many requests"
}
}Identity verification
Get an account's KYC status
Read a UPA’s latest identity verification state and recent history.
GET
/
v2
/
accounts
/
{accountId}
/
kyc
Get account KYC
curl --request GET \
--url https://prod-api.stableyard.fi/v2/accounts/{accountId}/kyc \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://prod-api.stableyard.fi/v2/accounts/{accountId}/kyc"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://prod-api.stableyard.fi/v2/accounts/{accountId}/kyc', 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://prod-api.stableyard.fi/v2/accounts/{accountId}/kyc",
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: Basic <encoded-value>"
],
]);
$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://prod-api.stableyard.fi/v2/accounts/{accountId}/kyc"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Basic <encoded-value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://prod-api.stableyard.fi/v2/accounts/{accountId}/kyc")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://prod-api.stableyard.fi/v2/accounts/{accountId}/kyc")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body{
"accountId": "acct_123",
"current": {
"id": "kyc_123",
"accountId": "acct_123",
"status": "approved",
"eligibility": {
"status": "eligible",
"verifiedAt": "2026-08-28T10:20:00.000Z",
"validUntil": "2027-08-28T10:20:00.000Z"
},
"nextAction": {
"type": "none"
},
"completedAt": "2026-08-28T10:20:00.000Z",
"createdAt": "2026-08-28T10:05:00.000Z",
"updatedAt": "2026-08-28T10:20:00.000Z"
},
"verifications": [
{
"id": "kyc_123",
"accountId": "acct_123",
"status": "approved",
"eligibility": {
"status": "eligible",
"verifiedAt": "2026-08-28T10:20:00.000Z",
"validUntil": "2027-08-28T10:20:00.000Z"
},
"nextAction": {
"type": "none"
},
"completedAt": "2026-08-28T10:20:00.000Z",
"createdAt": "2026-08-28T10:05:00.000Z",
"updatedAt": "2026-08-28T10:20:00.000Z"
}
]
}{
"error": {
"code": "bad_request",
"message": "The request is invalid"
}
}{
"error": {
"code": "unauthorized",
"message": "Authentication is required"
}
}{
"error": {
"code": "forbidden",
"message": "The credential does not allow this operation"
}
}{
"error": {
"code": "not_found",
"message": "The resource was not found"
}
}{
"error": {
"code": "idempotency_conflict",
"message": "The Idempotency-Key was already used with a different request"
}
}{
"error": {
"code": "chain_config_missing",
"message": "The requested network is not configured for this environment"
}
}{
"error": {
"code": "rate_limited",
"message": "Too many requests"
}
}Returns the latest identity verification state and recent verification history for the UPA. Verification decision details and identity documents are never returned.
Authorizations
HTTP Basic auth. Username is the Stableyard app ID. Password is the app secret. The optional Stableyard-Version request header must match the environment pin.
Headers
Optional contract-version assertion. Omit it to use the app environment's pinned version. A different supported version is accepted only after that environment is explicitly migrated.
Available options:
2026-09-09 Path Parameters
Canonical account id returned by the Accounts API.
Example:
"acct_123"