API
Riferimento API
In questa pagina
Autenticazione
Ti servono dei crediti: i 20 al mese inclusi in un account Pro attivo, o crediti acquistati nella pagina del tuo account. Un account senza né gli uni né gli altri riceve 403 pro_required.
Questa chiave viene mostrata una sola volta. Conservala in modo sicuro sul tuo server.
Crea una API key nel tuo account e copia il valore mostrato una sola volta. Configura NOCALL_API_KEY come segreto sul server. Usa HTTPS; non inserire mai la chiave nel codice del browser, repository, screenshot o log.
Invia la chiave completa in Authorization: Bearer, con uno spazio dopo Bearer. Non usare X-API-Key e non inserire la chiave nell’URL.
Su /v1/data/* + /v2/*, una chiave valida sostituisce la prova ByteGuard del browser. Scadenza, revoca, abbonamento, crediti e limiti vengono comunque verificati. Non autorizza altre rotte. openapi.json e products sono pubblici.
Authorization: Bearer <NOCALL_API_KEY>La prima richiesta
Tutti i 44 tool sono disponibili tramite API: chiama POST /v2/<tool-id>, oppure POST /v2/tools con il campo tool nel corpo. Ogni tool ha il proprio corpo JSON, documentato nella sua guida. data.result contiene il risultato del tool. Usa gli identificatori riportati nella tabella.
Genera una nuova Idempotency-Key per ogni nuova operazione. Mantienila solo per ripetere la stessa operazione con gli stessi dati.
REQUEST_ID="$(uuidgen)" && [ -n "$REQUEST_ID" ] &&
curl --request POST 'https://api.nocall.io/v2/tools' \
--header "Authorization: Bearer $NOCALL_API_KEY" \
--header 'Content-Type: application/json' \
--header "Idempotency-Key: $REQUEST_ID" \
--data '{"tool":"who-calls","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/tools',
method='POST',
data=json.dumps({'tool': 'who-calls', '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/tools', {
method: 'POST',
headers: {
Authorization: 'Bearer ' + apiKey,
'Content-Type': 'application/json',
'Idempotency-Key': requestId,
},
body: JSON.stringify({ tool: 'who-calls', 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);API v2 · tools
Tutti i 44 tool sono disponibili tramite API: chiama POST /v2/<tool-id>, oppure POST /v2/tools con il campo tool nel corpo. Ogni tool ha il proprio corpo JSON, documentato nella sua guida. data.result contiene il risultato del tool. Usa gli identificatori riportati nella tabella.
| tool | A cosa serve | POST | Esempio inventato |
|---|---|---|---|
| who-calls | Chi mi chiama? | /v2/who-calls | {"phone":"+12025550123","country":"US"} |
| phone-exposure | Il mio numero è stato divulgato? | /v2/phone-exposure | {"phone":"+12025550123","country":"US"} |
| phone-intelligence | Intelligence telefonica | /v2/phone-intelligence | {"phone":"+12025550123","country":"US"} |
| phone-risk | Rischio telefonico | /v2/phone-risk | {"phone":"+12025550123","country":"US"} |
| carrier-lookup | Ricerca operatore | /v2/carrier-lookup | {"phone":"+12025550123","country":"US"} |
| verified-business | Ricerca inversa azienda verificata | /v2/verified-business | {"phone":"+12025550123","country":"US"} |
| phone-formats | Formati dei numeri | /v2/phone-formats | {"phone":"+34912345678","country":"ES"} |
| callback-cost | Quanto costa richiamare? | /v2/callback-cost | {"phone":"806123456","country":"ES"} |
| prefix-origin | Di dove è questo prefisso? | /v2/prefix-origin | {"phone":"910","country":"ES"} |
| number-validator | Verifica e formatta un numero di telefono | /v2/number-validator | {"phone":"+12025550123","country":"US"} |
| line-type | È un cellulare o un fisso? | /v2/line-type | {"phone":"+34600111222","country":"ES"} |
| premium-rate | È un numero a sovrapprezzo? | /v2/premium-rate | {"phone":"806","country":"ES"} |
| wangiri | Controllo wangiri: questa chiamata persa è una truffa? | /v2/wangiri | {"phone":"+216","country":"ES"} |
| commercial-400 | Questa chiamata commerciale è legale? | /v2/commercial-400 | {"phone":"+34400000000","country":"ES"} |
| number-research | Analizza un numero con l’IA | /v2/number-research | {"phone":"+12025550123","country":"US","language":"en"} |
| dial-code | Ti chiedono di digitare un codice? | /v2/dial-code | {"code":"**21*+34600000000#","country":"ES"} |
| call-scam-check | Questa chiamata è una truffa? | /v2/call-scam-check | {"answers":{"impersonation":true,"sms_code":true,"pressure":true},"country":"ES"} |
| sms-check | Controlla se un SMS è una truffa | /v2/sms-check | {"message":"Your parcel is held. Pay the fee at https://example.invalid/pay","sender":"Correos","language":"en","country":"GB"} |
| sms-brand | Questo SMS di un marchio è autentico? | /v2/sms-brand | {"brand":"correos","link":"https://correos-envio.example.invalid/pago","country":"ES"} |
| sms-sender | Chi mi ha mandato questo SMS? | /v2/sms-sender | {"sender":"Correos","country":"ES"} |
| sms-code | Ti chiedono un codice ricevuto via SMS? | /v2/sms-code | {"unrequested":true,"asked":true,"sensitive":true,"shared":false} |
| sms-report | Dove segnalare un SMS truffa | /v2/sms-report | {"sender":"Correos","tapped":false,"gaveData":false,"country":"ES"} |
| sms-campaigns | Campagne di SMS truffa | /v2/sms-campaigns | {} |
| sms-redact | Togli i tuoi dati da un SMS | /v2/sms-redact | {"message":"BBVA: su tarjeta 4111 1111 1111 1111 ha sido bloqueada. Llame al +34 612 34 56 78 o entre en https://bbva-seguro.com/login"} |
| callback-number | Devo chiamare il numero di questo messaggio? | /v2/callback-number | {"text":"Your account is locked. Call us now on 0909 879 0000 or +216 71 123 456","country":"GB"} |
| prefix-directory | Prefissi | /v2/prefix-directory | {"country":"ES","serviceClass":"premium","page":1,"limit":3} |
| operator-directory | Operatori | /v2/operator-directory | {"country":"ES","operator":"Movistar"} |
| calling-codes | Prefissi internazionali | /v2/calling-codes | {"query":"216","language":"en"} |
| spam-directory | Numeri spam | /v2/spam-directory | {"country":"US","category":"SCAM","page":1,"limit":20} |
| trends | Approfondimenti | /v2/trends | {"country":"ES"} |
| smishing | Che cos’è lo smishing? | /v2/smishing | {"message":"CORREOS: su paquete está retenido. Pague urgente las tasas en https://correos-entrega.info/pago","country":"ES"} |
| link-check | Controlla un link | /v2/link-check | {"url":"http://192.168.1.1/login","country":"ES"} |
| safety-tools | Strumenti di sicurezza | /v2/safety-tools | {"text":"URGENTE: su cuenta BBVA ha sido bloqueada, verifique en https://bbva-seguro.com/login","mode":"email","country":"ES"} |
| sms-filter | Filtro spam SMS | /v2/sms-filter | {"country":"ES"} |
| qr-check | Questo codice QR è sicuro? | /v2/qr-check | {"payload":"BCD\n002\n1\nSCT\n\nAparcamientos Ejemplo SL\nES9121000418450200051332\nEUR49.90\n\n\nMulta de aparcamiento 4471","country":"ES"} |
| email-headers | Questa email è autentica? | /v2/email-headers | {"headers":"Delivered-To: [email protected]\nReceived: from mail.bank.example (mail.bank.example [192.0.2.10]) by mx.google.com with ESMTPS id x1 for <[email protected]>; Tue, 27 Oct 2026 09:00:00 -0700\nAuthentication-Results: mx.google.com; dkim=pass [email protected] header.s=s1; spf=pass (google.com: domain of [email protected] designates 192.0.2.10 as permitted sender) [email protected]; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bank.example\nFrom: \"Bank Alerts\" <[email protected]>\nReply-To: [email protected]\nSubject: Your statement is ready\nMessage-ID: <[email protected]>","country":"ES"} |
| mx-lookup | Record MX di un dominio | /v2/mx-lookup | {"domain":"example.com"} |
| spf-check | Verifica SPF | /v2/spf-check | {"domain":"example.com"} |
| dmarc-check | Verifica DMARC | /v2/dmarc-check | {"domain":"example.com"} |
| dkim-check | Verifica DKIM | /v2/dkim-check | {"domain":"example.com","selector":"s1"} |
| email-verify | Verifica indirizzo email | /v2/email-verify | {"email":"[email protected]"} |
| website-age | Da quanto esiste questo sito? | /v2/website-age | {"url":"https://www.example.com/login","country":"ES"} |
| domain-popularity | Popolarità di un dominio | /v2/domain-popularity | {"url":"https://shop.example.com/cart","country":"ES"} |
| website-legit | Questo sito è affidabile? | /v2/website-legit | {"url":"https://[email protected]/login","country":"ES"} |
Endpoint disponibili
Mostriamo solo dati tecnici verificati o pubblici. Identità private e segnali di protezione restano nascosti.
API v1 · phone è obbligatorio: una stringa fino a 64 caratteri, preferibilmente in formato E.164. country è un codice paese supportato di due lettere, facoltativo con valore predefinito ES. Content-Type deve essere application/json.
| HTTP | URL | A cosa serve | Requisiti |
|---|---|---|---|
| POST | /v2/tools | Usare con l’API | Authorization: Bearer · Pro |
| GET | /v2/tools | Catalogo prodotti NoCall | Authorization: Bearer · Pro |
| GET | /v2/openapi.json | OpenAPI 3.1 | — |
| POST | /v2/who-calls | Chi mi chiama? | Authorization: Bearer · Pro |
| POST | /v2/phone-exposure | Il mio numero è stato divulgato? | Authorization: Bearer · Pro |
| POST | /v2/phone-intelligence | Intelligence telefonica | Authorization: Bearer · Pro |
| POST | /v2/phone-risk | Rischio telefonico | Authorization: Bearer · Pro |
| POST | /v2/carrier-lookup | Ricerca operatore | Authorization: Bearer · Pro |
| POST | /v2/verified-business | Ricerca inversa azienda verificata | Authorization: Bearer · Pro |
| POST | /v2/phone-formats | Formati dei numeri | Authorization: Bearer · Pro |
| POST | /v2/callback-cost | Quanto costa richiamare? | Authorization: Bearer · Pro |
| POST | /v2/prefix-origin | Di dove è questo prefisso? | Authorization: Bearer · Pro |
| POST | /v2/number-validator | Verifica e formatta un numero di telefono | Authorization: Bearer · Pro |
| POST | /v2/line-type | È un cellulare o un fisso? | Authorization: Bearer · Pro |
| POST | /v2/premium-rate | È un numero a sovrapprezzo? | Authorization: Bearer · Pro |
| POST | /v2/wangiri | Controllo wangiri: questa chiamata persa è una truffa? | Authorization: Bearer · Pro |
| POST | /v2/commercial-400 | Questa chiamata commerciale è legale? | Authorization: Bearer · Pro |
| POST | /v2/number-research | Analizza un numero con l’IA | Authorization: Bearer · Pro |
| POST | /v2/dial-code | Ti chiedono di digitare un codice? | Authorization: Bearer · Pro |
| POST | /v2/call-scam-check | Questa chiamata è una truffa? | Authorization: Bearer · Pro |
| POST | /v2/sms-check | Controlla se un SMS è una truffa | Authorization: Bearer · Pro |
| POST | /v2/sms-brand | Questo SMS di un marchio è autentico? | Authorization: Bearer · Pro |
| POST | /v2/sms-sender | Chi mi ha mandato questo SMS? | Authorization: Bearer · Pro |
| POST | /v2/sms-code | Ti chiedono un codice ricevuto via SMS? | Authorization: Bearer · Pro |
| POST | /v2/sms-report | Dove segnalare un SMS truffa | Authorization: Bearer · Pro |
| POST | /v2/sms-campaigns | Campagne di SMS truffa | Authorization: Bearer · Pro |
| POST | /v2/sms-redact | Togli i tuoi dati da un SMS | Authorization: Bearer · Pro |
| POST | /v2/callback-number | Devo chiamare il numero di questo messaggio? | Authorization: Bearer · Pro |
| POST | /v2/prefix-directory | Prefissi | Authorization: Bearer · Pro |
| POST | /v2/operator-directory | Operatori | Authorization: Bearer · Pro |
| POST | /v2/calling-codes | Prefissi internazionali | Authorization: Bearer · Pro |
| POST | /v2/spam-directory | Numeri spam | Authorization: Bearer · Pro |
| POST | /v2/trends | Approfondimenti | Authorization: Bearer · Pro |
| POST | /v2/smishing | Che cos’è lo smishing? | Authorization: Bearer · Pro |
| POST | /v2/link-check | Controlla un link | Authorization: Bearer · Pro |
| POST | /v2/safety-tools | Strumenti di sicurezza | Authorization: Bearer · Pro |
| POST | /v2/sms-filter | Filtro spam SMS | Authorization: Bearer · Pro |
| POST | /v2/qr-check | Questo codice QR è sicuro? | Authorization: Bearer · Pro |
| POST | /v2/email-headers | Questa email è autentica? | Authorization: Bearer · Pro |
| POST | /v2/mx-lookup | Record MX di un dominio | Authorization: Bearer · Pro |
| POST | /v2/spf-check | Verifica SPF | Authorization: Bearer · Pro |
| POST | /v2/dmarc-check | Verifica DMARC | Authorization: Bearer · Pro |
| POST | /v2/dkim-check | Verifica DKIM | Authorization: Bearer · Pro |
| POST | /v2/email-verify | Verifica indirizzo email | Authorization: Bearer · Pro |
| POST | /v2/website-age | Da quanto esiste questo sito? | Authorization: Bearer · Pro |
| POST | /v2/domain-popularity | Popolarità di un dominio | Authorization: Bearer · Pro |
| POST | /v2/website-legit | Questo sito è affidabile? | Authorization: Bearer · Pro |
| GET | /v1/data/account | Chiave API e crediti | Authorization: Bearer |
| POST | /v1/data/phone-lookups | Intelligence telefonica | Authorization: Bearer · Pro |
| POST | /v1/data/phone-risk-checks | Rischio telefonico | Authorization: Bearer · Pro |
| POST | /v1/data/carrier-lookups | Ricerca operatore | Authorization: Bearer · Pro |
| POST | /v1/data/reverse-phone-lookups | Ricerca inversa azienda verificata | Authorization: Bearer |
| POST | /v1/data/phone-exposure-checks | Il mio numero è stato divulgato? | Authorization: Bearer · Pro |
| POST | /v1/data/bulk-lookups | Ricerche telefoniche massive | Authorization: Bearer |
| GET | /v1/data/products | Catalogo prodotti NoCall | — |
| GET | /v1/data/openapi.json | OpenAPI 3.1 | — |
Risposte
Esempio inventato, non una ricerca reale. Non chiamare e non aprire i suoi link.
data contiene il risultato; meta include requestId, unitsCharged e l’utilizzo se pertinente. L’estratto fittizio mostra il saldo dopo una richiesta. Anche un risultato valido senza dati costa 1 credito; errori di convalida o del fornitore e lettura del saldo sono gratuiti. L’assenza di dati non prova che il numero sia sicuro. Consulta OpenAPI per gli schemi completi.
{
"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
}
}
}| tool | data.result |
|---|---|
| who-calls | phoneNumber, found, updatedAt, risk, reportCount, categories, verified, carrier, verifiedBusiness |
| phone-exposure | atRisk |
| phone-intelligence | phoneNumber, found, updatedAt, risk, reportCount, categories, verified, carrier, verifiedBusiness, commentCount, aiRiskLevel, prefixRisk |
| phone-risk | phoneNumber, found, updatedAt, risk, signals |
| carrier-lookup | phoneNumber, found, updatedAt, carrier |
| verified-business | phoneNumber, found, updatedAt, verifiedBusiness |
| phone-formats | e164, national, international, callingCode, country, valid |
| callback-cost | tier, scope, callingCode, registry |
| prefix-origin | kind, planLoaded, numberType, foreignCode, national, row, complete, rows, factsType |
| number-validator | valid, possible, country, callingCode, type, e164 |
| line-type | e164, valid, type, lineKind |
| premium-rate | category, callbackRisk, prefix, callingCode, source |
| wangiri | verdict, code, nanpArea, entry |
| commercial-400 | verdict, prefix |
| number-research | answer, sources, countryCode, language, cached |
| dial-code | code, kind, action, service, forwardsTo, calls, risk, undo, operator |
| call-scam-check | verdict, signals, actions, reportChannel |
| sms-check | verdict, confidence, reason |
| sms-brand | verdict, host, brand, officialDomains, sightings |
| sms-sender | kind, tooLong, brand, lookalike, digits, code |
| sms-code | verdict, severity, serviceRecoverySteps, stepCodes |
| sms-report | channel, verified, stepCodes, reportFields |
| sms-campaigns | totalCampaigns, totalSightings, topBrands, topDomains |
| sms-redact | text, counts, total |
| callback-number | numbers, signals, attention |
| prefix-directory | countryCode, callingCode, planVersion, total, page, limit, hasMore, rows |
| operator-directory | operators, specialPrefixes |
| calling-codes | rows, total |
| spam-directory | view, totals, categories, topReported, category, total, page, limit, hasMore, rows |
| trends | totals, activity24h, verification, freshness, categoryDistribution, phoneTypes, topOperators, growthTimeline, topPrefixes, searchTrends, communityDistribution, impersonationRanking, aiBreakdown |
| smishing | verdict, score, attention, signals, hosts, linkFlags, brand, brandSlug |
| link-check | host, hostAscii, official, brand, hosts, linkFlags, signals, attention |
| safety-tools | attention, signals, hosts, linkFlags |
| sms-filter | country, version, updatedAt, source, counts |
| qr-check | payload, signals, attention, hosts, linkFlags, link, numbers |
| email-headers | fromDomain, fromDomainAscii, displayName, replyToDomain, returnPathDomain, senderDomain, subject, auth, authenticated, brand, official, freeMail, signals, attention |
| mx-lookup | domain, domainAscii, found, records, nullMx, implicitMx, acceptsMail, provider, signals, attention |
| spf-check | domain, domainAscii, found, record, recordCount, terms, allResult, lookups, includes, signals, valid, attention |
| dmarc-check | domain, domainAscii, found, record, foundAt, inherited, policy, subdomainPolicy, effectivePolicy, percentage, alignment, reports, signals, valid, attention |
| dkim-check | domain, domainAscii, selectorGiven, selectorsTried, keys, signals, attention |
| email-verify | domain, domainAscii, status, syntaxValid, acceptsMail, mx, disposable, role, freeMail, suggestion, signals, attention |
| website-age | domain, domainAscii, rdapAvailable, found, registeredDomain, registered, updated, expires, ageDays, registrar, status, campaigns, signals, attention |
| domain-popularity | domain, domainAscii, ranked, rank, rankedDomain, refSubnets, refIps, listSize, updated, source |
| website-legit | domain, domainAscii, verdict, official, brand, ageDays, registered, ranked, rank, campaigns, signals, linkFlags, attention, checks |
Crediti e limiti
Con Pro hai 20 crediti gratis ogni mese
Ogni chiamata all'API costa 1 credito. Si usano prima quelli mensili.
La rigenerazione disattiva le chiavi precedenti. Il saldo dei crediti resta invariato.
curl 'https://api.nocall.io/v1/data/account' \
--header "Authorization: Bearer $NOCALL_API_KEY"Tentativi successivi e richieste in blocco
Genera una nuova Idempotency-Key per ogni nuova operazione. Mantienila solo per ripetere la stessa operazione con gli stessi dati.
Idempotency-Key è facoltativo per richieste singole e obbligatorio per i blocchi: 8–128 caratteri (lettere, cifre, punti, trattini, underscore o due punti). Per riprovare, conserva la stessa chiave, rotta, API key e corpo. Una risposta ripetuta non viene addebitata di nuovo. Controlla il saldo dopo una risposta ambigua.
Un blocco accetta fino a 50 elementi. product seleziona una delle operazioni dell’esempio. Prima di iniziare serve saldo per tutti gli elementi validi; vengono addebitati solo i risultati validi completati. Le richieste simultanee condividono il saldo: se finisce prima dell’addebito finale, la richiesta restituisce 429 senza addebito.
8–128 ASCII: A–Z a–z 0–9 . _ : -
TTL: 24 hphone-lookup
phone-risk
carrier-lookup
reverse-phone-lookup
phone-exposureREQUEST_ID="$(uuidgen)" && [ -n "$REQUEST_ID" ] &&
curl --request POST 'https://api.nocall.io/v1/data/bulk-lookups' \
--header "Authorization: Bearer $NOCALL_API_KEY" \
--header 'Content-Type: application/json' \
--header "Idempotency-Key: $REQUEST_ID" \
--data '{"product":"phone-risk","inputs":[{"phone":"+12025550123","country":"US"}]}'Risoluzione dei problemi
| HTTP | Interpretare il risultato |
|---|---|
| 401 | Chiave assente, formato Bearer errato, chiave scaduta o revocata. Controlla l’header o genera una nuova chiave nel tuo account. |
| 403 | Ti servono dei crediti: i 20 al mese inclusi in un account Pro attivo, o crediti acquistati nella pagina del tuo account. Un account senza né gli uni né gli altri riceve 403 pro_required. |
| 400 / 422 | Controlla JSON, phone, country e Idempotency-Key. Gli errori di convalida non consumano crediti. |
| 409 | La chiave di idempotenza è già stata usata con un altro corpo oppure la richiesta è in corso. Per ripetere la stessa operazione, conserva il corpo e attendi. |
| 429 | Crediti esauriti o limite di richieste raggiunto. Consulta /account e X-RateLimit-Remaining. Rispetta Retry-After se presente. ai_busy indica che l’IA è occupata: la richiesta non viene addebitata; riprova dopo Retry-After. |
| 500 / 503 | Servizio o fornitore non disponibile, oppure beta disattivata. Attendi e riprova con la stessa Idempotency-Key; evita cicli di tentativi immediati. tool_warming indica che il tool è ancora in avvio: la richiesta non viene addebitata; riprova dopo Retry-After. |
