Skip to content

Developer API

Country Data API

Access employment compliance policies, employer & employee tax rates, income tax brackets, and public holidays for 41 countries via a simple REST API. Fully public — no authentication required.

https://joinneo.com/wp-json/neo/v1
OpenAPI Spec llms.txt EOR Quote API →

Endpoints

GET /neo/v1/countries

Returns a list of all published countries with basic info.

Query Parameters

ParameterTypeDefaultDescription
include_states optional integer 0 Set to 1 to include a states array of state codes for each country.

Response

[
  {
    "code": "US",
    "name": "United States",
    "url": "https://joinneo.com/country/united-states/",
    "states": ["US-AL", "US-AK", "..."]  // only with include_states=1
  }
]

Example

curl https://joinneo.com/wp-json/neo/v1/countries
curl https://joinneo.com/wp-json/neo/v1/countries?include_states=1
Try it →
GET /neo/v1/countries/{code}

Returns full employment data for a country — compliance policies, tax rates, income tax brackets, and public holidays.

Path Parameters

ParameterTypeDescription
code required string ISO 3166-1 alpha-2 country code (e.g. US, GB, DE).

Query Parameters

ParameterTypeDefaultDescription
state optional string null ISO 3166-2 state code (e.g. US-CA, CH-ZH) for state-specific data.
fields optional string null Comma-separated list of fields to include. See Fields Filter.

Response

{
  "code": "US",
  "name": "United States",
  "url": "https://joinneo.com/country/united-states/",
  "state": null,
  "policies": {
    "min_salary": { "amount": "57672.00", "currency": "USD", "period": "year" },
    "hourly_rate": { "amount": "7.25", "currency": "USD" },
    "notice_period": { "min_days": 0, "max_days": null },
    "paid_time_off": { "accrual_days": 10, "accrual_rate": "year" },
    "sick_leave": { "accrual_days": 5, "accrual_rate": "year", "...": "..." },
    "probation": { "min_days": null, "max_days": 90 },
    "work_hours": { "hours": 40, "rate": "week" }
  },
  "taxes": {
    "employer": {
      "total_rate": 10.35,
      "components": [
        { "name": "Social Security", "key": "SOCIAL_SECURITY_TAX", "rate": 0.062 },
        { "name": "Medicare", "key": "MEDICARE_BASE_TAX", "rate": 0.0145 }
      ]
    },
    "employee": {
      "total_rate": 7.65,
      "components": [/* same shape */]
    },
    "income_tax_brackets": [
      {
        "key": "default",
        "label": "Standard",
        "tiers": [
          { "min": 0, "max": 11600, "rate": 0.1 },
          { "min": 11601, "max": 47150, "rate": 0.12 }
        ]
      }
    ]
  },
  "holidays": [
    { "name": "New Year's Day", "date": "2026-01-01" }
  ],
  "states": ["US-AL", "US-AK", "..."]
}

Example

# National data
curl https://joinneo.com/wp-json/neo/v1/countries/US

# State-specific data
curl https://joinneo.com/wp-json/neo/v1/countries/US?state=US-CA
Try it →
GET /neo/v1/countries/{code}/states

Returns all states or regions for a country. Available for United States (51), Australia (8), United Kingdom (4), Canada (13), Switzerland (26), Spain (19), Mexico (32), United Arab Emirates (7).

Path Parameters

ParameterTypeDescription
code required string ISO 3166-1 alpha-2 country code.

Response

[
  { "code": "US-AL", "name": "Alabama" },
  { "code": "US-AK", "name": "Alaska" },
  // ...
]

Example

curl https://joinneo.com/wp-json/neo/v1/countries/US/states
curl https://joinneo.com/wp-json/neo/v1/countries/CH/states
Try it →
GET /neo/v1/countries/{code}/states/{state_code}

Returns full state-specific employment data. Same response shape as the country endpoint, with state and state_name populated.

Path Parameters

ParameterTypeDescription
code required string ISO 3166-1 alpha-2 country code.
state_code required string ISO 3166-2 state code (e.g. US-CA, CH-ZH, ES-CT, MX-JAL).

Query Parameters

ParameterTypeDefaultDescription
fields optional string null Comma-separated list of fields. See Fields Filter.

Response

{
  "code": "US",
  "name": "United States",
  "url": "https://joinneo.com/country/united-states/",
  "state": "US-CA",
  "state_name": "California",
  "policies": { /* state-specific policies */ },
  "taxes": { /* state-specific tax rates */ },
  "holidays": [ /* national + state holidays */ ]
}

Example

curl https://joinneo.com/wp-json/neo/v1/countries/US/states/US-CA
curl https://joinneo.com/wp-json/neo/v1/countries/CH/states/CH-ZH
curl https://joinneo.com/wp-json/neo/v1/countries/MX/states/MX-JAL
Try it →

Fields Filter

Use the ?fields= query parameter on the Get Country and Get State endpoints to return only the data you need. The response always includes identifiers (code, name, url, state).

Available Fields

FieldTypeDescription
Top-level sections
policiesobjectAll compliance policies
taxesobjectAll tax data (employer, employee, brackets)
holidaysarrayPublic holidays for the current year
statesarrayState codes (country endpoint only)
Individual policy fields
min_salaryobjectMinimum annual compensation
hourly_rateobjectMinimum hourly rate
notice_periodobjectTermination notice requirements
paid_time_offobjectPTO entitlement
sick_leaveobjectSick leave entitlement
probationobjectProbation period limits
work_hoursobjectStandard working hours
Individual tax fields
employerobjectEmployer contribution rates and components
employeeobjectEmployee contribution rates and components
income_tax_bracketsarrayProgressive income tax tiers

Examples

# Get only minimum salary for Germany
curl https://joinneo.com/wp-json/neo/v1/countries/DE?fields=min_salary

# Get minimum salary for California
curl https://joinneo.com/wp-json/neo/v1/countries/US/states/US-CA?fields=min_salary

# Holidays and PTO together
curl https://joinneo.com/wp-json/neo/v1/countries/FR?fields=holidays,paid_time_off

# Only employer tax rates
curl https://joinneo.com/wp-json/neo/v1/countries/GB?fields=employer

# Mix sections and individual fields
curl https://joinneo.com/wp-json/neo/v1/countries/AU?fields=min_salary,employer,holidays

Response Reference

policies object

FieldTypeDescription
min_salaryobjectMinimum annual compensation. Contains amount (string), currency (ISO), period ("year").
hourly_rateobjectMinimum hourly rate. Contains amount (string), currency (ISO).
notice_periodobjectTermination notice. min_days, max_days, min_days_during_probation.
paid_time_offobjectPTO. accrual_days (int), accrual_rate ("year"/"month").
sick_leaveobjectSick leave. accrual_days, accrual_rate, requires_medical_certificate, employer_pays, government_pays.
probationobjectProbation period. min_days, max_days.
work_hoursobjectStandard hours. hours (int), rate ("week"/"day").

taxes object

FieldTypeDescription
employer.total_ratefloatTotal employer rate as percentage (e.g. 10.35 = 10.35%).
employer.total_rate_maxfloat|nullUpper bound if rate varies by state.
employer.componentsarrayBreakdown: name, key, rate (decimal, e.g. 0.062).
employee.total_ratefloatTotal employee rate as percentage.
employee.componentsarraySame shape as employer components.
income_tax_bracketsarrayBracket groups with key, label, tiers (min, max, rate).

holidays array

FieldTypeDescription
namestringHoliday name in English.
datestringDate in YYYY-MM-DD format for the current year.

Rate Limiting

Requests are rate-limited per IP address. The current limit is 60 requests per minute.

When the limit is exceeded, the API returns HTTP 429 with a Retry-After: 60 header:

{
  "code": "rate_limit_exceeded",
  "message": "Rate limit exceeded. Try again later."
}

Error Responses

All errors return a JSON object with code and message fields.

HTTP StatusCodeDescription
404not_foundCountry code not recognized or page not published.
404invalid_stateState code not found for the given country.
404no_statesCountry does not have states/regions.
429rate_limit_exceededRate limit exceeded. Wait and retry.
503api_disabledAPI disabled by administrator.

Supported Countries

The API covers 41 countries with payroll data. Countries with state-level data are shown with their region count.

AE United Arab Emirates 7 states
AR Argentina
AT Austria
AU Australia 8 states
BG Bulgaria
BR Brazil
BW Botswana
CA Canada 13 states
CH Switzerland 26 states
CL Chile
CO Colombia
CR Costa Rica
CZ Czech Republic
DE Germany
EG Egypt
ES Spain 19 states
FR France
GB United Kingdom 4 states
HK Hong Kong
IE Ireland
IN India
IT Italy
JP Japan
MA Morocco
MX Mexico 32 states
MY Malaysia
NL Netherlands
NZ New Zealand
PH Philippines
PL Poland
QA Qatar
RO Romania
RS Serbia
SA Saudi Arabia
SG Singapore
TN Tunisia
TW Taiwan
US United States 51 states
UY Uruguay
VN Vietnam
ZA South Africa

Quick Start

cURL

# List all countries
curl https://joinneo.com/wp-json/neo/v1/countries

# Full data for Germany
curl https://joinneo.com/wp-json/neo/v1/countries/DE

# Swiss cantons
curl https://joinneo.com/wp-json/neo/v1/countries/CH/states

# Zurich-specific data
curl https://joinneo.com/wp-json/neo/v1/countries/CH/states/CH-ZH

# Only minimum salary for California
curl https://joinneo.com/wp-json/neo/v1/countries/US/states/US-CA?fields=min_salary

JavaScript

// Get UK employment data
const response = await fetch('https://joinneo.com/wp-json/neo/v1/countries/GB');
const data = await response.json();

console.log(data.policies.paid_time_off);   // { accrual_days: 28, accrual_rate: "year" }
console.log(data.taxes.employer.total_rate); // 15.05
console.log(data.holidays.length);           // 8

Python

import requests

# Get minimum salary in Mexico (Jalisco)
r = requests.get('https://joinneo.com/wp-json/neo/v1/countries/MX/states/MX-JAL',
                 params={'fields': 'min_salary'})
data = r.json()
print(data['min_salary'])  # { amount: "...", currency: "MXN", period: "year" }

LLM & AI Agent Integration

This API is fully public and designed for use by LLMs, AI agents, and chatbots. No authentication required.

Machine-Readable Discovery

ResourceURLPurpose
OpenAPI 3.1 https://joinneo.com/wp-json/neo/v1openapi.json Full API spec — import into ChatGPT Actions, Claude tools, Swagger, Postman
llms.txt https://joinneo.com/llms.txt LLM-friendly API summary
llms-full.txt https://joinneo.com/llms-full.txt Detailed schema for LLM context windows
.well-known https://joinneo.com/.well-known/neo-api.json Auto-discovery manifest

Use Cases for LLMs

  • "What's the minimum salary in Germany?"GET /countries/DE?fields=min_salary
  • "How many PTO days do employees get in France?"GET /countries/FR?fields=paid_time_off
  • "What are the employer taxes in the UK?"GET /countries/GB?fields=employer
  • "List public holidays in Japan"GET /countries/JP?fields=holidays
  • "What's the notice period in California?"GET /countries/US/states/US-CA?fields=notice_period

Also Available: EOR Quote API

Need to calculate total cost of employment? The EOR Quote API generates live quotes with employer taxes, statutory contributions, and management fees — returning shareable, branded quote URLs.

NEO
Powered by NEO AI - Intelligent Matching Technology