Endpoint
| Method | GET |
| URL | https://areacodecheck.com/api/phone/{number} |
| Auth | None required for the free per-IP allowance. An IPNOVA API key (free account at api.ipnova.com) applies your plan allowance instead: send it as the X-Api-Key header or the ?key= query parameter. Keyed responses carry X-Credits-Remaining and X-Credits-Used. |
| Rate limit | 100 requests a day and 30 a minute, per IP (see X-RateLimit-Remaining) |
| CORS | Access-Control-Allow-Origin: * |
| Privacy | Numbers are never stored or logged; responses are no-store |
Plans
One key. Twelve APIs.
A free IPNOVA API account gives you 5,000 lookups a month across every API below, 60 a minute, no card, for evaluation and small projects. Paid plans from $19 a month for production volumes, with a commercial licence and a hard cap instead of overage billing.
Takes a minute. Send it as X-Api-Key or ?key=.
Without a key this API answers 100 requests a day per IP address, for evaluation and personal use. Try it: curl https://areacodecheck.com/api/phone/14155552671
Example Request
| curl | curl "https://areacodecheck.com/api/phone/+14155552671" |
| JavaScript | const r = await fetch('https://areacodecheck.com/api/phone/%2B14155552671').then(r => r.json()); |
| PHP | $r = json_decode(file_get_contents('https://areacodecheck.com/api/phone/14155552671'), true); |
| Python | r = requests.get('https://areacodecheck.com/api/phone/+14155552671').json() |
Numbers can be sent with or without the + (URL-encode it as %2B when in doubt). Bare 10-digit numbers are treated as North American.
Response Fields
| Field | Type | Description |
|---|---|---|
data.input | string | The number as received, unmodified |
data.e164 | string | The number in E.164 format |
data.country_code / data.country | string | Calling code and country / region name |
data.region_iso | string | ISO 3166-1 alpha-2 of the primary region |
data.shared_note | string|null | Set when the calling code is shared by several countries or territories (e.g. NANP's +1); null otherwise |
data.area_code / area_location / area_country | string|null | NANP area code details when applicable |
data.timezone | string|null | Primary IANA timezone of the area code |
data.nanp_valid | boolean|null | Whether a North American number matches the valid format |
page | string|null | Human-readable guide page for the detected code |
Errors
Every non-200 response uses the same envelope: success: false, an error flag, a machine-readable reason, a human message, and a docs link back to this page.
| Status | Reason | Meaning |
|---|---|---|
400 | invalid_input | Input is not number-shaped |
401 | invalid_key | The supplied API key is unknown or revoked |
404 | unknown_endpoint | Path under /api/ does not match a published endpoint |
429 | rate_limit | Too many requests in the last minute (Retry-After: 60) |
429 | daily_limit | Keyless per-IP daily cap reached |
429 | credits_exhausted | Keyed monthly allowance used up |
Example, input that is not number-shaped:
{"success": false, "error": true, "reason": "invalid_input", "message": "Provide a value shaped like a phone number.", "docs": "https://areacodecheck.com/phone-api"}
Fair Use & Attribution
- 100 requests per day per IP, 30 per minute. For form validation, combine with client-side checks first.
- This API identifies prefixes, not people. It cannot and does not reveal caller identity.
Frequently Asked Questions
Is the API really free?
Yes. No API key, no registration, no credit card. Each IP address can make up to 100 requests per day, and CORS is enabled so you can call it directly from the browser.
Are numbers stored?
No. The lookup is a prefix match against public ITU and NANPA assignments; numbers are never written to disk or logged, and responses are served with Cache-Control: no-store.
Can I test it right now?
Try /api/phone/14155552671 in your browser.
What does the API return?
The country calling code and country, and for North American numbers the area code, its location and country, the primary timezone, and whether the number matches the valid NANP format.