Get country-specific bank fields and linking availability
curl --request GET \
--url https://prod-api.stableyard.fi/v2/accounts/{accountId}/bank-account-requirements \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://prod-api.stableyard.fi/v2/accounts/{accountId}/bank-account-requirements"
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}/bank-account-requirements', 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}/bank-account-requirements",
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}/bank-account-requirements"
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}/bank-account-requirements")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://prod-api.stableyard.fi/v2/accounts/{accountId}/bank-account-requirements")
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{
"version": 1,
"accountId": "acct_123",
"countries": [
{
"country": "VN",
"name": "Vietnam",
"currency": "VND",
"implementation": "supported",
"schema": {
"type": "object",
"additionalProperties": false,
"properties": {
"country": {
"type": "string",
"const": "VN"
},
"currency": {
"type": "string",
"const": "VND"
},
"accountHolderName": {
"type": "string",
"title": "Recipient name",
"minLength": 1,
"maxLength": 160,
"x-normalize": "vietnam_name"
},
"beneficiaryType": {
"type": "string",
"title": "Beneficiary type",
"enum": [
"individual",
"business"
],
"default": "individual"
},
"bankName": {
"type": "string",
"title": "Bank name",
"minLength": 1,
"maxLength": 160
},
"bankCode": {
"type": "string",
"title": "Bank code",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9_-]+$",
"x-bank-directory": true
},
"accountNumber": {
"type": "string",
"title": "Account number",
"minLength": 4,
"maxLength": 34,
"pattern": "^[0-9]{4,34}$",
"writeOnly": true,
"x-normalize": "digits"
},
"rail": {
"type": "string",
"const": "bank_transfer",
"default": "bank_transfer"
}
},
"required": [
"country",
"currency",
"accountHolderName",
"bankName",
"bankCode",
"accountNumber"
]
},
"alternatives": [],
"available": true,
"unavailableReason": null
}
]
}{
"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"
}
}Bank accounts
Get bank account requirements by country
Read each country’s bank account fields and whether linking is available there.
GET
/
v2
/
accounts
/
{accountId}
/
bank-account-requirements
Get country-specific bank fields and linking availability
curl --request GET \
--url https://prod-api.stableyard.fi/v2/accounts/{accountId}/bank-account-requirements \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://prod-api.stableyard.fi/v2/accounts/{accountId}/bank-account-requirements"
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}/bank-account-requirements', 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}/bank-account-requirements",
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}/bank-account-requirements"
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}/bank-account-requirements")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://prod-api.stableyard.fi/v2/accounts/{accountId}/bank-account-requirements")
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{
"version": 1,
"accountId": "acct_123",
"countries": [
{
"country": "VN",
"name": "Vietnam",
"currency": "VND",
"implementation": "supported",
"schema": {
"type": "object",
"additionalProperties": false,
"properties": {
"country": {
"type": "string",
"const": "VN"
},
"currency": {
"type": "string",
"const": "VND"
},
"accountHolderName": {
"type": "string",
"title": "Recipient name",
"minLength": 1,
"maxLength": 160,
"x-normalize": "vietnam_name"
},
"beneficiaryType": {
"type": "string",
"title": "Beneficiary type",
"enum": [
"individual",
"business"
],
"default": "individual"
},
"bankName": {
"type": "string",
"title": "Bank name",
"minLength": 1,
"maxLength": 160
},
"bankCode": {
"type": "string",
"title": "Bank code",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9_-]+$",
"x-bank-directory": true
},
"accountNumber": {
"type": "string",
"title": "Account number",
"minLength": 4,
"maxLength": 34,
"pattern": "^[0-9]{4,34}$",
"writeOnly": true,
"x-normalize": "digits"
},
"rail": {
"type": "string",
"const": "bank_transfer",
"default": "bank_transfer"
}
},
"required": [
"country",
"currency",
"accountHolderName",
"bankName",
"bankCode",
"accountNumber"
]
},
"alternatives": [],
"available": true,
"unavailableReason": null
}
]
}{
"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 one entry per country with its currency, an
available flag, an unavailableReason when linking is unavailable, and a strict JSON Schema for the bank fields. Validate input against these schemas before linking.
Bank linking is available in the United States (US), the Philippines (PH) and Vietnam (VN) when it is enabled for your app. Every other country returns available: false. Availability can change between calls, so handle a failed link even when available was true.
Then link the bank account. See Off-ramps.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"