Calls & numbers
Who is calling me?
Coverage: Areas come from the official numbering plan of each edition’s country. Spain lists a province for every landline range; many other countries list their area codes and cities. Mobile numbers have no area in any country, and a few countries do not publish a plan we can read yet: there we only show the type of line.
Open toolOn this page
Purpose
Find out who called from an unknown number. Check community reports, verify prefixes, and protect yourself from phone scams.
Requirements
Anyone can read these guides, no account needed. Some tools require Pro, as indicated in each guide.
Enter the full number with its international code. For a national number, first check the edition country or country selector.
How to use it
Enter the full number with its international code. For a national number, first check the edition country or country selector.
Search
Risk level · Recent reports · Community comments
Read the available fields alongside their limitations. An empty result does not prove safety or identify a person.
Synthetic example
Invented example, not a real lookup. Do not call or open its links.
+44 1632 960123Interpret the result
Read the available fields alongside their limitations. An empty result does not prove safety or identify a person.
This number is not in our database. Be the first to report.
This number has reports of unwanted calls
Automatically generated from community comments.
Limitations
Information based on community reports and automated analysis. It may contain errors or be out of date, and is not legal advice or a verified accusation against the number's owner.
Formats and supported calling codes only. They do not prove a number’s location, owner or active status. Some codes are shared.
Troubleshooting
If the input is invalid, check its format and country. Retry connection errors; respect the waiting period when a limit is reached.
Invalid phone number
The security check or API connection did not respond in time. Try again in a few seconds.
Use with the API
Needs an API key and credits. Each completed call costs 1 credit, even when there is no data. An active Pro account includes 20 credits per UTC calendar month, shared by every API route and spent first; unused monthly credits do not roll over. Credits bought on your account page work without Pro and never expire.
Errors are never charged: 401 invalid_api_key (missing or invalid key), 403 pro_required (no Pro credits and no purchased credits), 422 invalid input, 429 quota_exceeded (no credits left), rate_limit_exceeded or ai_busy (the AI of sms-check is at capacity), 503 tool_warming (the data is still being prepared) or tool or provider unavailable. After a 429 or 503, retry once the seconds in the Retry-After header have passed.
Community lookup for a number: risk score and level, approved report count, categories, verification, Spanish carrier data and a verified business name.
Send the JSON body to the tool's own route, or to POST /v2/tools with the tool field added. Both routes return the same result.
POST https://api.nocall.io/v2/who-calls
POST https://api.nocall.io/v2/tools {"tool":"who-calls","phone":"+12025550123","country":"US"}Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| phone | string (1–40) | Yes | Phone number in E.164 (+34…) or national format. |
| country | string (enum, 56) | No (default: "ES") | Two-letter country code, for example ES or US, used for national input and for the country's data. |
REQUEST_ID="$(uuidgen)" && [ -n "$REQUEST_ID" ] &&
curl --request POST 'https://api.nocall.io/v2/who-calls' \
--header "Authorization: Bearer $NOCALL_API_KEY" \
--header 'Content-Type: application/json' \
--header "Idempotency-Key: $REQUEST_ID" \
--data '{"phone":"+12025550123","country":"US"}'import json
import os
import urllib.request
import uuid
api_key = os.environ.get('NOCALL_API_KEY')
if not api_key:
raise SystemExit('Set NOCALL_API_KEY')
request = urllib.request.Request(
'https://api.nocall.io/v2/who-calls',
method='POST',
data=json.dumps({'phone': '+12025550123', 'country': 'US'}).encode(),
headers={
'Authorization': 'Bearer ' + api_key,
'Content-Type': 'application/json',
'Idempotency-Key': str(uuid.uuid4()),
},
)
with urllib.request.urlopen(request, timeout=30) as response:
result = json.load(response)
print(result['data']['result'], result['meta']['unitsCharged'])import { randomUUID } from 'node:crypto';
const requestId = randomUUID();
const apiKey = process.env.NOCALL_API_KEY;
if (!apiKey) throw new Error('Set NOCALL_API_KEY');
const response = await fetch('https://api.nocall.io/v2/who-calls', {
method: 'POST',
headers: {
Authorization: 'Bearer ' + apiKey,
'Content-Type': 'application/json',
'Idempotency-Key': requestId,
},
body: JSON.stringify({ phone: '+12025550123', country: 'US' }),
});
const result = await response.json();
if (!response.ok) throw new Error(result.error?.code ?? 'request_failed');
console.log(result.data.result, result.meta.unitsCharged);Example response (200)
This is the documented example from the API reference. Lookups use a fictional number, and aggregates and AI answers show the shape of the result, not live data.
{
"data": {
"tool": "who-calls",
"result": {
"phoneNumber": "+12025550123",
"found": true,
"updatedAt": "2026-10-01T09:30:00.000Z",
"risk": {
"score": 72,
"level": "high"
},
"reportCount": 14,
"categories": [
"TELEMARKETING"
],
"verified": false,
"carrier": null,
"verifiedBusiness": null
}
},
"meta": {
"requestId": "req_example",
"unitsCharged": 1,
"usage": {
"periodStart": "2026-10-01",
"unitLimit": 20,
"unitsUsed": 3,
"unitsRemaining": 17
}
}
}Result fields (data.result)
| Field | Type | Description |
|---|---|---|
| phoneNumber | string | The number in E.164 format. |
| found | boolean | Whether NoCall has real data for this number: a named operator, a block-list or directory entry, approved reports or a verified business. Prefix data alone does not count. false is still a completed result. |
| updatedAt | string | null | When the data was last updated (ISO 8601), or null. |
| risk | object | Risk score from 0 to 100 and its level. |
| reportCount | integer | Number of approved community reports. |
| categories | array<string> | Reported categories, such as TELEMARKETING or SCAM. |
| verified | boolean | Whether the number has been verified. |
| carrier | object | null | Operator data from the Spanish CNMC registry or the country's regulator: operator, number type, prefix, region and cost category. null when unknown. |
| verifiedBusiness | object | null | The verified business that owns the number, or null. |
