The Tax Brief real effective rates for 111+ countries — bi-weekly, free.
API GUIDE

Free Income Tax API — 1,000 Requests/Month, No Credit Card

CountryTaxCalc Research Team · About Updated July 2026
Tax data in examples is for informational and product integration purposes only, sourced from official government tax authorities. Consumer-facing products must include appropriate disclaimers — see the API Terms of Service and Legal Disclaimer.

What you get on the free tier

Free tier summary: 1,000 requests/month · No credit card · No time limit · All 111 countries · POST /calculate + GET /countries · Email to request key

The free tier gives you everything you need to fully evaluate the API and build a working prototype. 1,000 requests/month is enough to handle hundreds of user sessions per month, or tens of thousands if you implement basic caching (which you should).

What the free tier includes:

  • All 111 countries — the same data that paid plans access
  • Full response detail — complete breakdown including deductions, brackets applied, social contributions, effective rate, net income, and monthly equivalent
  • Currency conversion — pass any ISO 4217 currency code and the API converts the income before calculating
  • Rate limit headersX-RateLimit-Remaining and X-RateLimit-Used on every response so you can monitor usage
  • Hard monthly cap — no surprise bills; you simply get a 429 when the limit is reached

What requires a paid plan:

  • Country detail and raw rates endpoints (/countries/{country_code}, /countries/{country_code}/rates) — Starter+
  • Historical tax year data — Growth+
  • Bulk summary ranking across all 111 countries (/summary) — Growth+
  • Multi-country comparison in a single call (/compare) — Pro+

Getting your free API key

Free keys are provisioned manually. To request yours:

  1. Email daniel@countrytaxcalc.com with the subject line "API Access - Free Tier"
  2. Include a brief note about what you're building — this helps prioritise support if you have questions
  3. You'll receive your API key by reply email, typically within a few hours during UK business hours

The key is a long random string — keep it private. Do not commit it to GitHub, hardcode it in client-side JavaScript, or share it publicly. If you accidentally expose it, contact us immediately to rotate it.

Security note: Your API key is a secret credential. Always use it server-side only — in a backend API, serverless function, or environment variable. Never put it in browser-facing JavaScript code where it can be extracted and abused. See the JavaScript integration guide for a detailed explanation of how to safely proxy API calls.

Your first API call

Once you have your key, here's the fastest path to a working response. The example below calculates UK income tax for a £50,000 gross salary.

cURL

curl -X POST https://api.countrytaxcalc.com/api/v1/calculate \
  -H "Content-Type: application/json" \
  -H "X-API-Key: your_api_key_here" \
  -d '{
    "income": 50000,
    "currency": "GBP",
    "country": "GB"
  }'

Python

import requests

response = requests.post(
    "https://api.countrytaxcalc.com/api/v1/calculate",
    headers={
        "Content-Type": "application/json",
        "X-API-Key": "your_api_key_here"
    },
    json={
        "income": 50000,
        "currency": "GBP",
        "country": "GB"
    }
)

data = response.json()
print(f"Net income: £{data['totals']['net_income']:,.2f}")
print(f"Effective rate: {data['totals']['effective_tax_rate']}%")

JavaScript (Node.js)

const response = await fetch(
  "https://api.countrytaxcalc.com/api/v1/calculate",
  {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "X-API-Key": process.env.COUNTRYTAXCALC_API_KEY  // server-side only
    },
    body: JSON.stringify({
      income: 50000,
      currency: "GBP",
      country: "GB"
    })
  }
);

const data = await response.json();
console.log(`Net income: £${data.totals.net_income.toLocaleString()}`);
console.log(`Effective rate: ${data.totals.effective_tax_rate}%`);

What the response looks like

{
  "country": "United Kingdom",
  "country_code": "GB",
  "tax_year": 2026,
  "currency": "GBP",
  "currency_symbol": "£",
  "gross_income": 50000,
  "breakdown": {
    "deductions": [
      { "name": "Personal Allowance", "amount": 12570 }
    ],
    "taxable_income": 37430,
    "national_income_tax": {
      "amount": 7486,
      "effective_rate": 0.1497,
      "marginal_rate": 0.20,
      "brackets_applied": [
        { "threshold": 0, "rate": 0.20, "tax": 7486 }
      ]
    },
    "social_contributions": [
      {
        "name": "National Insurance",
        "type": "social_security",
        "amount": 2984,
        "rate": 0.08,
        "capped": false
      }
    ]
  },
  "totals": {
    "total_deductions": 12570,
    "total_tax": 10470,
    "net_income": 39530,
    "effective_tax_rate": 20.94,
    "take_home_percentage": 79.06,
    "monthly_net_income": 3294.17
  },
  "metadata": {
    "calculation_date": "2026-07-08T10:00:00.000Z",
    "data_source": "HMRC",
    "last_updated": "2026-04-06",
    "accuracy_confidence": 0.95
  }
}

Monitoring your usage

Every response includes rate limit headers. Read them to keep track of how much of your free allocation you've used:

# Response headers
X-RateLimit-Limit: 1000
X-RateLimit-Used: 47
X-RateLimit-Remaining: 953
X-RateLimit-Reset: 1754006400   # Unix timestamp: 1 Aug 2026 00:00 UTC

Free tier endpoint reference

On the free tier, two endpoints are available:

POST /api/v1/calculate Free

Full tax calculation for a specific income and country. Supports all 111 countries, optional jurisdiction (US states, Canadian provinces), and optional currency conversion.

Required fields: income (positive number), country (country name or ISO code)

Optional fields: currency (ISO 4217), jurisdiction (state/province code), tax_year (Growth+ only)

GET /api/v1/countries Free (no key needed)

Returns the list of all 111 supported countries with their codes, currencies, and whether they have sub-jurisdictions. This endpoint is publicly accessible — no API key required — useful for populating your country selector.

curl https://api.countrytaxcalc.com/api/v1/countries

What to build with a free API key

1,000 requests/month is more than enough for:

  • A salary comparison tool — if you cache per country+income combination, 1,000 unique requests covers a huge range of combinations
  • A job listing page — show after-tax salary for each country where a role is available
  • A relocation calculator — let users compare their current country against a few target destinations
  • An offer letter generator — calculate net income for a candidate's location before sending
  • Internal HR tooling — a spreadsheet or internal dashboard to compare compensation packages
Caching tip: For most products, the same country+income calculation will be requested many times by different users. Cache responses server-side for up to 24 hours (permitted by the Terms of Service). A £60,000 UK calculation requested 500 times in a day becomes 1 API request with smart caching — leaving your full free allocation for unique combinations.

When to upgrade from the free tier

The free tier is intentionally generous for development and low-traffic use. Here's when to consider a paid plan:

Situation Recommended plan
Approaching 1,000 requests/month regularly Starter ($19/month — 50,000 req)
Need raw tax brackets and rates data Starter ($19/month)
Need historical tax year data for year-over-year comparisons Growth ($49/month)
Need the bulk summary endpoint (/summary) to rank all 111 countries at once Growth ($49/month)
Need multi-country comparison in a single call (/compare) Pro ($149/month)
High volume (>500k req/month) or SLA requirements Pro or Enterprise

All paid plans include a 7-day money-back guarantee. See the pricing page for full plan details.

Frequently asked questions

Q: Is the free tier really free with no credit card?

Yes. The free tier is 1,000 requests/month with no credit card required. You email daniel@countrytaxcalc.com and receive a key manually. There's no subscription, no trial period, and no automatic charge — it remains free indefinitely unless you choose to upgrade.

Q: What happens when I hit 1,000 requests?

The free tier is hard-capped. When you reach 1,000 requests in a calendar month, additional requests return a 429 Monthly rate limit exceeded response. The counter resets on the 1st of the following month. The response body includes reset_at (ISO 8601 timestamp) so you can tell users when access will resume.

Q: Which endpoints are available on the free tier?

POST /api/v1/calculate (all 111 countries) and GET /api/v1/countries (country list) are available on the free tier. Endpoints that require Starter or higher include: GET /api/v1/countries/{country_code}, GET /api/v1/countries/{country_code}/rates. Growth+ endpoints include GET /api/v1/summary. Pro+ only: POST /api/v1/compare.

Q: How long does it take to get a free API key?

Keys are provisioned manually, typically within a few hours during business hours (UK time). In the subject line use 'API Access - Free Tier' so the request is routed correctly. If you need a key urgently outside business hours, note that in your email.

Q: Can I cache API responses on the free tier?

Yes, and you should. The API Terms of Service permit caching responses for up to 24 hours. Caching the same country calculation result (e.g. UK at £60,000) avoids consuming a request every time a user loads your page. Most country tax rates don't change more than once a year — 24-hour caching is very conservative.

Q: What do I tell my users about the accuracy of the calculations?

You are required under the API Terms of Service to include a disclaimer in any consumer-facing product. Recommended language: "Tax estimates are approximate and for informational purposes only. Consult a qualified tax professional for advice specific to your situation." The API itself also returns an accuracy_confidence field — you can use this to label lower-confidence results as approximate.

Q: Is there a rate limit per minute on the free tier?

The burst rate limit applies to all tiers. If you exceed the per-minute limit, you'll receive a 429 with retry_after_seconds indicating how many seconds until the minute window resets. The free tier's burst limit is set at the time of key provisioning — contact us if you're running into burst limits during development.

Ready to integrate? 1,000 requests/month free. No credit card required.
Get your free API key →