Reference Data | Countries | Get Countries

Getting Countries Data

This document outlines the procedure for making API calls to retrieve city data from https://easycms.fi/public_api/get_countries/. Utilize various parameters to filter and customize your data retrieval.

Country Data Retrieval

Fetch city data effectively using the below API call. Apply the IN or NOT_IN parameters as an array or a single integer to filter results according to your specific needs.

Endpoint and Method

  • Endpoint: https://easycms.fi/public_api/get_countries/
  • Method: POST

Parameters | Payload

Each parameter can be used individually or in combination to refine your data retrieval:

  • TOKEN (api_key): Your unique API key for authentication. How to Create API Credentials.

  • username: Your login username.

  • password: Your login password.

  • account: Your specific account ID.

  • Pagination: To manage data effectively, this endpoint supports fetching up to 50 products at a time.

  • Parameters:

    • start - Specify the starting point of the row from which to begin fetching products.
    • limit - Control the number of products returned in a single request. The maximum limit is 50, but you can opt for a smaller number based on your needs.

  • Filters: To manage data effectively, this endpoint supports fetching up to 50 products at a time.

  • IN - For filtering by country IDs (optional, array or single integer).

  • NOT_IN - For excluding specific country IDs (optional, array or single integer).

  • search - Search keyword (optional, string). Performs a partial (LIKE) match across multiple country columns. Supports multi-word queries separated by spaces or + — each word must match at least one column (AND logic between words). Case-insensitive.

    • Searchable columns: country_name, country_iso_code, continent_name, continent_code, currency_alphabetic_code, country_id, country_number



Understanding Country Search

The search parameter enables broad keyword matching across all relevant columns of the country record. This is useful for:

  • Quick lookup: Find a country by partial name (searches across all language variants stored in country_name).
  • ISO code search: Find countries by their ISO code (country_iso_code), e.g., search=FI.
  • Continent search: Find all countries in a continent by searching continent_name or continent_code.
  • Currency search: Find countries using a specific currency by searching currency_alphabetic_code.
  • Multi-word search: Use spaces to narrow results — e.g., search=Europe+EUR will only return countries where one word matches "Europe" AND another matches "EUR" across any searchable columns.

Each word in the search query is matched independently across all searchable columns using OR within a word, and AND between words.



Call Examples in Different Languages


# Get all countries (default: first 50)
curl -X POST 'https://easycms.fi/public_api/get_countries' \
-H 'Authorization1: TOKEN' \
-d 'username=USERNAME&password=PASSWORD&account=ACCOUNT_ID'

# Search countries by keyword (matches country_name, country_iso_code, continent_name, etc.)
curl -X POST 'https://easycms.fi/public_api/get_countries' \
-H 'Authorization1: TOKEN' \
-d 'username=USERNAME&password=PASSWORD&account=ACCOUNT_ID&search=Finland'

# Search countries by multiple keywords (AND logic)
curl -X POST 'https://easycms.fi/public_api/get_countries' \
-H 'Authorization1: TOKEN' \
-d 'username=USERNAME&password=PASSWORD&account=ACCOUNT_ID&search=Europe+EUR'

$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => "https://easycms.fi/public_api/get_countries",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_POST => true,
  CURLOPT_POSTFIELDS => http_build_query(['username' => 'USERNAME', 'password' => 'PASSWORD', 'account' => 'ACCOUNT_ID', 'search' => 'Finland']),
  CURLOPT_HTTPHEADER => array("Authorization1: TOKEN"),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;

import requests
url = "https://easycms.fi/public_api/get_countries"
headers = {"Authorization1": "TOKEN"}
payload = {'username': 'USERNAME', 'password': 'PASSWORD', 'account': 'ACCOUNT_ID', 'search': 'Finland'}
response = requests.post(url, headers=headers, data=payload)
print(response.text)

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://easycms.fi/public_api/get_countries"))
    .headers("Authorization1", "TOKEN")
    .POST(HttpRequest.BodyPublishers.ofString("username=USERNAME&password=PASSWORD&account=ACCOUNT_ID&search=Finland"))
    .build();
HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());

const https = require('https');
const data = new URLSearchParams({ 
  username: 'USERNAME', 
  password: 'PASSWORD', 
  account: 'ACCOUNT_ID',
  search: 'Finland'
}).toString();
const options = {
  hostname: 'prolasku.fi',
  path: '/public_api/get_countries',
  method: 'POST',
  headers: {
    'Authorization1': 'TOKEN',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Content-Length': data.length
  }
};
const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(data); });
});
req.on('error', (e) => { console.error(e); });
req.write(data);
req.end();

import React, { useEffect, useState } from 'react';
function App() {
  const [categoryData, setCategoryData] = useState('');
  useEffect(() => {
    const fetchData = async () => {
      try {
        const response = await fetch('https://easycms.fi/public_api/get_countries', {
          method: 'POST',
          headers: {'Authorization1': 'TOKEN', 'Content-Type': 'application/x-www-form-urlencoded'},
          body: new URLSearchParams({username: 'USERNAME', password: 'PASSWORD', account: 'ACCOUNT_ID', search: 'Finland'}).toString()
        });
        const data = await response.text();
        setCategoryData(data);
      } catch (error) {
        console.error(error);
      }
    };
    fetchData();
  }, []);
  return (
{categoryData}
); } export default App;

// Kotlin example requires using a third-party library like OkHttp for POST requests with a body
// Kotlin Example using OkHttp for POST request
import okhttp3.OkHttpClient
import okhttp3.FormBody
import okhttp3.Request

fun main() {
    val client = OkHttpClient()

    val formBody = FormBody.Builder()
        .add("username", "USERNAME")
        .add("password", "PASSWORD")
        .add("account", "ACCOUNT_ID")
        .add("search", "Finland")
        .build()

    val request = Request.Builder()
        .url("https://easycms.fi/public_api/get_countries")
        .post(formBody)
        .addHeader("Authorization1", "TOKEN")
        .build()

    client.newCall(request).execute().use { response ->
        if (!response.isSuccessful) throw IOException("Unexpected code $response")

        println(response.body?.string())
    }
}

using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
    static async Task Main()
    {
        var token = "TOKEN";
        var content = new FormUrlEncodedContent(new[]
        {
            new KeyValuePair("username", "USERNAME"),
            new KeyValuePair("password", "PASSWORD"),
            new KeyValuePair("account", "ACCOUNT_ID"),
            new KeyValuePair("search", "Finland")
        });
        using (var httpClient = new HttpClient())
        {
            httpClient.DefaultRequestHeaders.Add("Authorization1", token);
            var response = await httpClient.PostAsync("https://easycms.fi/public_api/get_countries", content);
            if (response.IsSuccessStatusCode)
            {
                var responseData = await response.Content.ReadAsStringAsync();
                Console.WriteLine(responseData);
            }
            else
            {
                Console.WriteLine($"Error: {response.StatusCode}");
            }
        }
    }
}




Handling Endpoint Results

When you make a request to the endpoint, you receive a JSON response containing various keys and values. Here's an explanation of the response keys and their meanings:


# API Response Output Object Breakdown

This document offers a detailed breakdown of the response output object received from the API server. Each field in the JSON response is explained to facilitate understanding and integration.

## Fields Overview

The response object contains various fields that provide information about a country, its geographical positioning, localisation details, and more. Below are the individual field descriptions:

### `country_id`
- **Type:** String
- **Description:** Unique identifier for the country.
- **Example:** `"40"`

### `geoname_id`
- **Type:** String
- **Description:** Geographical database identifier for the country.
- **Example:** `"660013"`

### `locale_code`
- **Type:** String
- **Description:** Locale code representing the preferred language or regional settings.
- **Example:** `"en"`

### `continent_code`
- **Type:** String
- **Description:** Code representing the continent where the country is located.
- **Example:** `"EU"`

### `continent_name`
- **Type:** String
- **Description:** Name of the continent where the country is located.
- **Example:** `"Europe"`

### `country_iso_code`
- **Type:** String
- **Description:** ISO code of the country.
- **Example:** `"FI"`

### `currency_alphabetic_code`
- **Type:** String
- **Description:** Alphabetic code for the country's currency.
- **Example:** `"EUR"`

### `country_name`
- **Type:** Object
- **Description:** Contains the name of the country in various languages.
- **Sub-fields:** 
  - `en_gb`, `zh`, `fa_ir`, `sv`, `fi`, `ru`, `no`, `th`, `es`, `vi`
  - Each sub-field is a language code representing the country name in that language.
  - **Example:** `{"en_gb": "Finland", "zh": "芬兰", ...}`

### `languages`
- **Type:** String
- **Description:** List of languages spoken in the country, represented by language codes.
- **Example:** `"fi-FI,sv-FI,smn"`

### `TLD`
- **Type:** String
- **Description:** Top Level Domain (TLD) for the country.
- **Example:** `".fi"`

### `country_number`
- **Type:** String
- **Description:** A numerical code or representation for the country.
- **Example:** `"68"`

### `parent_id`
- **Type:** Integer
- **Description:** Identifier for the parent entity of the country, if applicable. Zero often indicates no parent entity.
- **Example:** `0`

### `visible`
- **Type:** String
- **Description:** Indicates if the country is visible in the system. "1" for visible, "0" for not visible.
- **Example:** `"1"`

To see available languages please check endpoint /get_languages.

These key-value pairs provide comprehensive information about the cities and can be used for various purposes in your application.
    


    "INFO": {
        "start": 0,
        "limit": 50,
        "count": 1,
        "total_count": "1",
        "tip": "You may pass the table's main column identifier ex: city_id for tbl_cities, pid for tbl_products, cid for tbl_categories etc... to make a request for a single specific id from your query. EXAMPLE PARAM: city_id = 2 when sending the request for \"get_cities\" ",
        "WHERE": "country_id IN (40)"
    },
    "OUTPUT": [
        {
            "country_id": "40",
            "geoname_id": "660013",
            "locale_code": "en",
            "continent_code": "EU",
            "continent_name": "Europe",
            "country_iso_code": "FI",
            "currency_alphabetic_code": "EUR",
            "country_name": {
                "en_gb": "Finland",
                "zh": "芬兰",
                "fa_ir": "فنلاند",
                "sv": "Finland",
                "fi": "Suomi",
                "ru": "Финляндия",
                "no": "Finland",
                "th": "ฟินแลนด์",
                "es": "Suomi",
                "vi": "Suomi"
            },
            "languages": "fi-FI,sv-FI,smn",
            "TLD": ".fi",
            "country_number": "68",
            "parent_id": 0,
            "visible": "1"
        }
    ]
}
    

Error Handling

Here are the possible error messages and their meanings:

  • UN-AUTHORIZED - _user_name_password_is_set_but_wrong_value!: Incorrect username or password.
  • this_account_does_not_exist_or_your_credentials_do_not_match_this_account: The account doesn't exist or mismatched credentials.
  • UN-AUTHORIZED - header is set but the header value is not correct!: Incorrect authorization header value.
  • Maximum query size is 50 rows per query: Exceeded maximum limit of 50 rows per query.