curl https://api.payonproof.com/api/anchors/countries
GET /api/anchors/countries
Returns a list of countries with anchor coverage, including supported currencies and operational statistics.
Query parameters
Include countries with only non-operational anchors. By default, only countries with at least one operational anchor are returned.
Response
Array of country objects sorted alphabetically by name
ISO 3166-1 alpha-2 country code (e.g., “US”, “PH”)
Full country name in English (e.g., “United States”, “Philippines”)
Array of currency codes supported by anchors in this country (e.g., [“USD”, “USDC”])
Number of on-ramp anchors (deposit: fiat → crypto)
Number of off-ramp anchors (withdraw: crypto → fiat)
Number of anchors with full operational capabilities (SEP-10, SEP-24)
Response example
{
"countries": [
{
"code": "BR",
"name": "Brazil",
"currencies": ["BRL", "USD"],
"onRampCount": 2,
"offRampCount": 2,
"operationalAnchors": 2
},
{
"code": "PH",
"name": "Philippines",
"currencies": ["PHP"],
"onRampCount": 1,
"offRampCount": 1,
"operationalAnchors": 1
},
{
"code": "US",
"name": "United States",
"currencies": ["USD", "USDC"],
"onRampCount": 3,
"offRampCount": 3,
"operationalAnchors": 3
}
]
}
Error responses
405 Method Not Allowed
{
"error": "Method not allowed"
}
500 Internal Server Error
{
"error": "Failed to retrieve anchor catalog"
}
Use cases
Display coverage map
const { countries } = await fetch('/api/anchors/countries').then(r => r.json());
const coverageMap = countries.map(c => ({
country: c.name,
code: c.code,
coverage: c.operationalAnchors > 0 ? 'full' : 'limited',
rampTypes: {
canDeposit: c.onRampCount > 0,
canWithdraw: c.offRampCount > 0
}
}));
Filter by currency support
const usdcCountries = countries.filter(c =>
c.currencies.includes('USDC') && c.operationalAnchors > 0
);
Check remittance corridor availability
function isCorridorAvailable(origin, destination, countries) {
const originCountry = countries.find(c => c.code === origin);
const destCountry = countries.find(c => c.code === destination);
return originCountry?.onRampCount > 0 &&
destCountry?.offRampCount > 0 &&
originCountry.operationalAnchors > 0 &&
destCountry.operationalAnchors > 0;
}
if (isCorridorAvailable('US', 'PH', countries)) {
console.log('Remittance corridor available');
}
Implementation notes
- Country names are resolved using
Intl.DisplayNames API when available
- Countries with code “ZZ” (unknown/international) are excluded
- By default, only countries with
operationalAnchors > 0 are returned
- A country appears if it has at least one on-ramp OR off-ramp anchor
- Currency list is deduplicated across all anchors in the country