REST Countries

Country data, normalized and ready to ship.

One record per country covering names, ISO codes, currencies, languages, capitals, borders, flags, calling codes, timezones, leaders, memberships and demographics, all reconciled from dozens of upstream sources so you don't have to. Pick only the fields you want and get JSON back.

Get an API key Read the docs

Try a real request

// Fires a real request against the demo API key.
// Click the button below to run it. The response opens in the Explorer panel.
const response = await fetch(
  'https://api.restcountries.com/countries/v5?q=canada',
  { headers: { 'Authorization': 'Bearer rc_live_demo' } }
);
const result = await response.json();

Run this request → Search by name, code, capital and more. The response opens in an Explorer panel on the right.

Inside one record

Every field you'd expect, on every country

A trimmed sample; records sit under data.objects. Narrow the payload to just what you need with ?response_fields=.

{
  "names": { "common": "Canada", "official": "Canada" },
  "codes": { "alpha_2": "CA", "alpha_3": "CAN", "ccn3": "124", "fifa": "CAN", "cioc": "CAN" },
  "capitals": [{ "name": "Ottawa", "primary": true, "coordinates": { "lat": 45.42, "lng": -75.7 } }],
  "flag": { "emoji": "🇨🇦", "url_svg": "https://flags.restcountries.com/v5/svg/ca.svg", "url_png": "https://flags.restcountries.com/v5/w640/ca.png" },
  "region": "Americas",
  "subregion": "North America",
  "area": { "kilometers": 9984670, "miles": 3855101.1 },
  "borders": ["USA"],
  "calling_codes": ["1"],
  "currencies": [{ "code": "CAD", "name": "Canadian dollar", "symbol": "$" }],
  "languages": [{ "name": "English", "bcp47": "en" }, { "name": "French", "bcp47": "fr" }],
  "leaders": [
    { "name": "Mark Carney", "title": "Prime Minister", "attributes": { "head_of_government": true } }
  ],
  "memberships": { "un": true, "nato": true, "g7": true, "g20": true, "commonwealth": true },
  "population": 38005238,
  "timezones": ["UTC-08:00", "UTC-07:00", "UTC-06:00", "UTC-05:00", "UTC-04:00", "UTC-03:30"],
  "tlds": [".ca"]
}
// trimmed: the full record carries 90+ fields across names, codes, geography,
// economy, demographics, classifications, links and more
Countries 250+ incl. dependencies
Fields 90+ on every country record
Languages 25+ localized country names
Sources 35+ reconciled upstream feeds

Common questions

Before you wire it in

How fresh is the data?

Synced from official sources every 4 hours. Names, leaders, memberships, and statistical fields land in the API the same day they change upstream.

What about edge cases like Kosovo, Taiwan, or Palestine?

All present, with explicit recognition status, alternate names, and the ISO codes the standards bodies actually publish (or omit). We expose the data and let your app decide.

Can I fetch just the fields I need?

Yes. Pass ?response_fields= to narrow the payload to specific fields, or query with ?q= to search by name, code, or capital. See the full reference →

Start building with country data.

Free tier covers most prototypes. Point at /countries/v5 and go.

Get an API key Read the docs