curl --request GET \
--url https://api.globalstack.io/v1/currencies/ \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.globalstack.io/v1/currencies/"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.globalstack.io/v1/currencies/', 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.globalstack.io/v1/currencies/",
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.globalstack.io/v1/currencies/"
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.globalstack.io/v1/currencies/")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.globalstack.io/v1/currencies/")
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{
"status": true,
"message": "Supported currencies fetched successfully",
"code": "ok",
"data": [
{
"code": "NGN",
"name": "Nigerian Naira",
"type": "fiat",
"precision": 2,
"can_onramp": true,
"can_offramp": true,
"can_transfer": true,
"can_deposit": true,
"can_convert": true,
"requires_access": false,
"networks": [
{
"network": "bank",
"inbound": {
"min": "1.00",
"max": "5000000.00"
},
"outbound": {
"min": "1.00",
"max": "5000000.00"
}
}
],
"created_at": "2025-01-15T12:34:56.000Z",
"updated_at": "2025-01-15T12:34:56.000Z",
"country_code": "NG",
"has_access": true,
"fees": {
"payment_methods": [
{
"network": "bank",
"offramp": {
"tiers": [
{
"fee_type": "percentage",
"fee_value": 1.5,
"transaction_value_min": 4001,
"transaction_value_max": 22000,
"min_fee": 60,
"max_fee": 330
}
],
"network_fees": {
"ethereum": 123,
"base": 123,
"solana": 123
}
},
"onramp": {
"tiers": [
{
"fee_type": "percentage",
"fee_value": 1.5,
"transaction_value_min": 4001,
"transaction_value_max": 22000,
"min_fee": 60,
"max_fee": 330
}
],
"network_fees": {
"ethereum": 123,
"base": 123,
"solana": 123
}
}
}
]
},
"customer_restrictions": [
{
"capability": "deposit",
"reason": "customer_kyc_not_approved",
"next_steps": {
"action": "<string>",
"docs_url": "<string>"
}
}
]
}
],
"meta": {
"request_id": "req_01HXYZ4K5ABCDEFGHJKLMNPQRS",
"timestamp": "2026-05-14T15:43:55.732Z",
"version": "1"
}
}{
"status": false,
"message": "Resource not found",
"code": "not_found",
"data": null,
"meta": {
"next_steps": {
"action": "Verify the resource identifier and retry.",
"docs_url": "https://docs.globalstack.io/errors#not_found"
},
"request_id": "req_01HXYZ4K5ABCDEFGHJKLMNPQRS",
"timestamp": "2026-05-14T15:43:55.732Z",
"version": "1"
}
}{
"status": false,
"message": "Resource not found",
"code": "not_found",
"data": null,
"meta": {
"next_steps": {
"action": "Verify the resource identifier and retry.",
"docs_url": "https://docs.globalstack.io/errors#not_found"
},
"request_id": "req_01HXYZ4K5ABCDEFGHJKLMNPQRS",
"timestamp": "2026-05-14T15:43:55.732Z",
"version": "1"
}
}{
"status": false,
"message": "Resource not found",
"code": "not_found",
"data": null,
"meta": {
"next_steps": {
"action": "Verify the resource identifier and retry.",
"docs_url": "https://docs.globalstack.io/errors#not_found"
},
"request_id": "req_01HXYZ4K5ABCDEFGHJKLMNPQRS",
"timestamp": "2026-05-14T15:43:55.732Z",
"version": "1"
}
}List currencies
List supported currencies with networks, directional transaction limits
(inbound / outbound), capability flags (can_onramp, can_offramp,
can_deposit, can_convert), and current conversion fees (fees) keyed by
settlement network. Flag meaning depends on type — see the API overview.
Each fees.payment_methods entry describes the tiered fee ladder and
per-chain network fees for its settlement network, split by offramp /
onramp when both directions are supported. fees is null for crypto
currencies and when fee data is unavailable.
Each row is unique by code plus country_code (for example every WAEMU
country has its own XOF entry with its own networks and limits). Use filters
to find currencies that support a given operation or network, then paginate
with page and per_page.
For which countries and networks we cover, start with GET /v1/countries. For
banks and mobile money operators (provider_id on fiat beneficiaries), use
GET /v1/countries/{country_code}/providers — not this resource.
Platform view vs customer view
Without customer_id, the capability flags answer “can this be done on the
platform” — they are the same for every caller.
Pass the optional customer_id query parameter (a customer id, cust_…) and
the same flags answer a narrower question: can this customer do this right
now? Capabilities that depend on the customer’s state are downgraded — today,
fiat can_deposit reads false when the customer’s KYC is not approved. The
capability filters (can_deposit=true, …) are then evaluated against the
customer’s view too, so a filtered listing never advertises an operation the
customer would be blocked from.
Every downgraded row carries a customer_restrictions array explaining the
downgrade. Each entry has:
capability— the capability that was removed (e.g.deposit).reason— a stable machine code (e.g.customer_kyc_not_approved).next_steps—{ action, docs_url }with what to do about it.
customer_restrictions entries are the exact diff between the platform view
and the customer view: they appear only for capabilities the platform
supports (true at platform level) that the customer’s state removes. A
capability that is false at platform level is never annotated, and the field
is omitted entirely on rows with no downgrade and in the platform view.
An unknown customer_id, or one belonging to another integration, returns
404 not_found; a malformed one returns 400 invalid_input. See the full
customer restrictions reference
for all restriction reasons.
Filter behavior
code— filter by ISO currency code (e.g.XOFreturns all WAEMU country rows).type—fiatorcrypto.country_code— filter by ISO 3166-1 alpha-2 country code.customer_id— customer id (cust_…). Switches the listing to that customer’s view (see above).can_onramp— boolean. Currencies that can participate in onramps. For fiat, usable as onramp source; for crypto, as onramp destination.can_offramp— boolean. Currencies that can participate in offramps. For fiat, usable as offramp destination; for crypto, as offramp source.can_deposit— boolean. Currencies that can participate in deposits (typically crypto only).can_convert— boolean. Currencies that participate in wallet-to-wallet conversions.network— only currencies that include this network in theirnetworksarray.min_inbound_amount— decimal string. Only currencies where at least one network has inbound min less than or equal to this value.max_inbound_amount— decimal string. Only currencies where at least one network has inbound max greater than or equal to this value.min_outbound_amount— decimal string. Only currencies where at least one network has outbound min less than or equal to this value.max_outbound_amount— decimal string. Only currencies where at least one network has outbound max greater than or equal to this value.page— integer, 1-indexed page number.per_page— integer page size (max 200).
Example
GET /v1/currencies?type=fiat&can_offramp=true
curl --request GET \
--url https://api.globalstack.io/v1/currencies/ \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.globalstack.io/v1/currencies/"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.globalstack.io/v1/currencies/', 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.globalstack.io/v1/currencies/",
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.globalstack.io/v1/currencies/"
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.globalstack.io/v1/currencies/")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.globalstack.io/v1/currencies/")
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{
"status": true,
"message": "Supported currencies fetched successfully",
"code": "ok",
"data": [
{
"code": "NGN",
"name": "Nigerian Naira",
"type": "fiat",
"precision": 2,
"can_onramp": true,
"can_offramp": true,
"can_transfer": true,
"can_deposit": true,
"can_convert": true,
"requires_access": false,
"networks": [
{
"network": "bank",
"inbound": {
"min": "1.00",
"max": "5000000.00"
},
"outbound": {
"min": "1.00",
"max": "5000000.00"
}
}
],
"created_at": "2025-01-15T12:34:56.000Z",
"updated_at": "2025-01-15T12:34:56.000Z",
"country_code": "NG",
"has_access": true,
"fees": {
"payment_methods": [
{
"network": "bank",
"offramp": {
"tiers": [
{
"fee_type": "percentage",
"fee_value": 1.5,
"transaction_value_min": 4001,
"transaction_value_max": 22000,
"min_fee": 60,
"max_fee": 330
}
],
"network_fees": {
"ethereum": 123,
"base": 123,
"solana": 123
}
},
"onramp": {
"tiers": [
{
"fee_type": "percentage",
"fee_value": 1.5,
"transaction_value_min": 4001,
"transaction_value_max": 22000,
"min_fee": 60,
"max_fee": 330
}
],
"network_fees": {
"ethereum": 123,
"base": 123,
"solana": 123
}
}
}
]
},
"customer_restrictions": [
{
"capability": "deposit",
"reason": "customer_kyc_not_approved",
"next_steps": {
"action": "<string>",
"docs_url": "<string>"
}
}
]
}
],
"meta": {
"request_id": "req_01HXYZ4K5ABCDEFGHJKLMNPQRS",
"timestamp": "2026-05-14T15:43:55.732Z",
"version": "1"
}
}{
"status": false,
"message": "Resource not found",
"code": "not_found",
"data": null,
"meta": {
"next_steps": {
"action": "Verify the resource identifier and retry.",
"docs_url": "https://docs.globalstack.io/errors#not_found"
},
"request_id": "req_01HXYZ4K5ABCDEFGHJKLMNPQRS",
"timestamp": "2026-05-14T15:43:55.732Z",
"version": "1"
}
}{
"status": false,
"message": "Resource not found",
"code": "not_found",
"data": null,
"meta": {
"next_steps": {
"action": "Verify the resource identifier and retry.",
"docs_url": "https://docs.globalstack.io/errors#not_found"
},
"request_id": "req_01HXYZ4K5ABCDEFGHJKLMNPQRS",
"timestamp": "2026-05-14T15:43:55.732Z",
"version": "1"
}
}{
"status": false,
"message": "Resource not found",
"code": "not_found",
"data": null,
"meta": {
"next_steps": {
"action": "Verify the resource identifier and retry.",
"docs_url": "https://docs.globalstack.io/errors#not_found"
},
"request_id": "req_01HXYZ4K5ABCDEFGHJKLMNPQRS",
"timestamp": "2026-05-14T15:43:55.732Z",
"version": "1"
}
}Authorizations
API key issued during merchant onboarding.
Query Parameters
Response
Supported currencies fetched successfully
true true
Human-readable summary
"Supported currencies fetched successfully"
ok "ok"
Show child attributes
Show child attributes
Show child attributes
Show child attributes