What you get on the free tier
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 headers —
X-RateLimit-RemainingandX-RateLimit-Usedon 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:
- Email daniel@countrytaxcalc.com with the subject line "API Access - Free Tier"
- Include a brief note about what you're building — this helps prioritise support if you have questions
- 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.
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
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.