The Tax Brief real effective rates for 111+ countries — bi-weekly, free.
REST API · v1 · OpenAPI 3.0.3

CountryTaxCalc Data API

Structured tax data for 111 countries — brackets, social contributions, and net income calculations

Base URL: https://api.countrytaxcalc.com

Quick start

1
Get your key

Free tier (1,000 req/month): email daniel@countrytaxcalc.com with subject "API Access - Free Tier".
Paid plans from $19/month: view pricing →

2
Make your first call
curl -X POST https://api.countrytaxcalc.com/api/v1/calculate \
  -H "X-API-Key: ctc_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"country": "GB", "income": 60000}'
3
Read the response

Look for totals.net_income for take-home pay and totals.effective_tax_rate for the effective rate. The metadata.accuracy_confidence field is 0.95 when data is verified against an official source, 0.70 for fallback.

Overview

The CountryTaxCalc API provides accurate income tax data for 111 countries sourced from official government tax authorities and updated annually.

111 countries Progressive brackets, flat rates, and social contributions
US states (50 + DC) Federal + state tax in one call via jurisdiction
Canadian provinces (13) Federal + provincial tax via jurisdiction
160+ currencies Auto-converted via ECB / exchangerate-api fallback
Access tiers
Free /calculate · /countries list · 1,000 req/month
Starter + country detail & rates · 50k req/month · $19/mo
Growth + /summary · 500k req/month · $49/mo
Pro + /compare (20 countries in one call) · 2M req/month · $149/mo
View pricing & get a key →

Authentication

All endpoints except /health require an API key passed as a header:

X-API-Key: ctc_your_key_here

Keys follow the format ctc_[32 hex characters]. Get a free key →

Rate limit headers

Every authenticated response includes:

HeaderDescription
X-RateLimit-LimitMonthly request limit for your plan
X-RateLimit-RemainingRequests remaining this calendar month
X-RateLimit-ResetUnix timestamp when limit resets (1st of next month, 00:00 UTC)
X-RateLimit-UsedRequests made this month including this one

A separate per-minute burst limit applies independently. Burst-limited responses return 429 with a Retry-After header.

Endpoints

GET /api/v1/health Public — no key required

Server and database status check.

curl https://api.countrytaxcalc.com/api/v1/health
{
  "status": "healthy",
  "timestamp": "2026-07-06T12:00:00.000Z",
  "database": "connected"
}
GET /api/v1/countries Free+

All 111+ supported countries with currency metadata. API key is accepted but not required — this endpoint is publicly accessible.

curl https://api.countrytaxcalc.com/api/v1/countries
GET /api/v1/countries/{code} Starter+

Country metadata — currency, calculation complexity, available jurisdiction codes.

curl https://api.countrytaxcalc.com/api/v1/countries/DE \
  -H "X-API-Key: ctc_your_key"
GET /api/v1/countries/{code}/rates Starter+

Raw tax bracket data — no income required. Cached 1 hour. Add ?year=2024 for historical data (Growth+).

curl https://api.countrytaxcalc.com/api/v1/countries/DE/rates \
  -H "X-API-Key: ctc_your_key"
{
  "country_code": "DE",
  "country_name": "Germany",
  "currency": "EUR",
  "tax_year": 2026,
  "calculation_type": "progressive",
  "source_url": "https://www.bundesfinanzministerium.de/",
  "last_updated": "2026-04-15",
  "brackets": [
    { "from": 0, "to": 11784, "rate": 0, "rate_percent": "0.0%" },
    { "from": 11784, "to": 66761, "rate": 0.14, "rate_percent": "14.0%" },
    { "from": 66761, "to": null, "rate": 0.42, "rate_percent": "42.0%" }
  ],
  "deductions": [...],
  "social_contributions": [...]
}
POST /api/v1/calculate Free+

Full tax calculation with income tax, social contributions, deductions, and take-home pay. Auto-converts currency if input differs from the country's local currency.

curl -X POST https://api.countrytaxcalc.com/api/v1/calculate \
  -H "X-API-Key: ctc_your_key" \
  -H "Content-Type: application/json" \
  -d '{"country": "DE", "income": 80000, "currency": "USD"}'
{
  "country": "Germany",
  "country_code": "DE",
  "tax_year": 2026,
  "currency": "EUR",
  "gross_income": 73872,
  "currency_conversion": {
    "input_income": 80000,
    "input_currency": "USD",
    "local_currency": "EUR",
    "exchange_rate": 0.9234,
    "converted_income": 73872,
    "fx_source": "frankfurter",
    "fx_rate_age_hours": 18.4
  },
  "breakdown": {
    "taxable_income": 62268,
    "national_income_tax": {
      "amount": 19843,
      "effective_rate": 26.86,
      "marginal_rate": 42
    },
    "social_contributions": [...],
    "special_taxes": [...]
  },
  "totals": {
    "total_tax": 25634,
    "net_income": 48238,
    "effective_tax_rate": 34.7,
    "take_home_percentage": 65.3,
    "monthly_net_income": 4019.8
  },
  "metadata": {
    "accuracy_confidence": 0.95,
    "data_source": "Bundeszentralamt für Steuern",
    "last_updated": "2026-04-15"
  }
}
FieldTypeRequiredDescription
countrystringYesISO 2-letter code (DE) or country name (Germany)
incomenumberYesAnnual gross income. Must be > 0 and ≤ 100,000,000.
currencystringNoISO 4217 code. Defaults to country's local currency. Auto-converts if different.
jurisdictionstringNoState/province code. See Jurisdiction codes below.
tax_yearintegerNoDefaults to current year. Historical years (past) require Growth+.
currency_conversion — Only present in the response when the input currency differs from the country's local currency. The fx_source field indicates which FX provider was used: "frankfurter" (ECB, primary) or "exchangerate-api" (fallback for 160+ currencies).
accuracy_confidence0.95 means database-backed calculation from verified official sources. 0.70 indicates a temporary fallback; treat as approximate.
GET /api/v1/summary Growth+

All 111+ countries ranked by effective tax rate for a given income level.

Currency note: Income is treated as a nominal amount in each country's own local currency. net_income values are in local currency and are not directly comparable across countries. Use effective_tax_rate for currency-neutral comparison, or use POST /compare with an explicit currency field to compare in a single currency.
curl "https://api.countrytaxcalc.com/api/v1/summary?income=100000" \
  -H "X-API-Key: ctc_your_key"
{
  "income": 100000,
  "currency_note": "Income treated as nominal in each country's local currency.",
  "tax_year": 2026,
  "total_countries": 111,
  "countries": [
    {
      "rank": 1,
      "country_code": "AE",
      "country_name": "United Arab Emirates",
      "total_tax": 0,
      "net_income": 100000,
      "effective_tax_rate": 0,
      "effective_tax_rate_percent": "0.0%"
    }
  ]
}
POST /api/v1/compare Pro+

Compare tax across up to 20 countries in a single request. All monetary values are in each country's local currency. Allow 2–5 seconds for large requests.

curl -X POST https://api.countrytaxcalc.com/api/v1/compare \
  -H "X-API-Key: ctc_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "income": 100000,
    "currency": "USD",
    "countries": [
      { "country": "US", "jurisdiction": "CA" },
      { "country": "GB" },
      { "country": "DE" },
      { "country": "SG" }
    ]
  }'
The summary object in the response pre-computes: best country for net income, lowest effective rate, worst for net income, and annual / 10-year savings potential between best and worst.

Jurisdiction codes

Pass a jurisdiction parameter to include state/provincial tax.

USA — pass "country": "US"

CA CaliforniaTX Texas NY New YorkFL Florida WA WashingtonIL Illinois PA PennsylvaniaOH Ohio GA GeorgiaNC North Carolina

All 50 states + DC supported. Omit jurisdiction for federal tax only.

Canada — pass "country": "CA"

ON OntarioBC British Columbia AB AlbertaQC Quebec MB ManitobaSK Saskatchewan

All 13 provinces and territories supported.

Disambiguation: CA = California when country is US. To calculate Canadian taxes, set country to CA and optionally pass a province as jurisdiction (e.g. "jurisdiction": "ON").

Country codes

Use ISO 3166-1 alpha-2 codes (GB, DE, JP) or full country names (Germany, United Kingdom). Both are accepted everywhere a country identifier is expected.

Full country list: GET /api/v1/countries — no key required.

Error codes

CodeMeaning
400Bad request — missing required field, invalid income value, unknown currency
401Invalid or missing API key
403Your plan doesn't include this endpoint. Response includes upgrade_url.
404Country not found
422Currency conversion unavailable for this pair. Response includes supported currencies list.
429Rate limited. Check X-RateLimit-* headers or Retry-After (burst limit).
500Internal server error. Email daniel@countrytaxcalc.com if the issue persists.

Versioning

This is API version 1 (/api/v1/). When a v2 is released, v1 will remain supported for a minimum of 12 months. Breaking changes are never made within a live version — only additive changes (new optional fields, new endpoints). Deprecation notices are sent by email at least 90 days in advance.

See the changelog for rate updates and infrastructure changes.

Attribution

API usage requires a visible attribution link near any displayed tax data:

<a href="https://www.countrytaxcalc.com" rel="noopener">
  Powered by CountryTaxCalc.com
</a>

Get access

View pricing & get an API key →

Free tier: 1,000 requests/month, no time limit. Paid plans from $19/month.

Questions? Email daniel@countrytaxcalc.com

For informational and product integration use. Tax data is sourced from official government tax authorities and is intended for salary comparison tools, relocation calculators, HR platforms, and similar applications — not as a substitute for professional tax advice or payroll compliance software. If you are building a consumer-facing product using this API, you are required to include appropriate disclaimers. See the API Terms of Service and Legal Disclaimer.