Skip to main content
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

includeNonOperational
boolean
default:"false"
Include countries with only non-operational anchors. By default, only countries with at least one operational anchor are returned.

Response

countries
array
Array of country objects sorted alphabetically by name

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

Build docs developers (and LLMs) love