SMS & messages
Asked for a code sent by SMS?
Coverage: Works the same in every country: the scam works the same way whatever the service.
Open toolOn this page
Purpose
A quick check for verification-code scams: answer four questions to find out whether someone is trying to take over your WhatsApp, bank or payment account, and what to do.
Requirements
Anyone can read these guides, no account needed. Some tools require Pro, as indicated in each guide.
Answer four quick questions to find out whether it’s a scam and what to do. Your answers stay in your browser.
How to use it
Did you get a code by SMS without asking for one? A code you didn’t request means that someone tried to log in or sign up with your number.
Is someone asking you for that code? By message, by phone or on WhatsApp: a stranger, “customer support”, a delivery company or a friend’s account.
Is the code for WhatsApp, your bank or a payment app? The text message usually says which service it is for.
Have you already shared the code? Read it out, sent it in a message or typed it on a page someone sent you.
Synthetic example
Invented example, not a real lookup. Do not call or open its links.
Your verification code is 482913. Do not share it with anyone.Interpret the result
Act now: someone may be taking over your account: With that code, whoever has it can log in as you or confirm an operation in your name. Do this right away:
It’s a scam: don’t share the code: No company, bank or friend needs a code that was sent to you. Whoever asks for it wants to use it to get into your account.
Someone tried to use your number: A code you didn’t request means that someone tried to log in or sign up with your number. On its own it’s harmless: without the code they can’t get in.
A normal code, but keep it to yourself: If you asked for the code yourself, it’s normal to receive it. Use it only in the app or on the website where you requested it.
Limitations
Scammers can make a text message show a brand’s name or someone else’s number (spoofing), and the fake can even land in the same conversation as the real messages. What gives a fake away is where its link goes.
Your answers stay in your browser.
Troubleshooting
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.
What to do about a verification code you received, from four yes/no answers. Returns a verdict, its severity and stable step codes (never_give_payment_codes comes last for a WhatsApp, bank or payment-app code).
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/sms-code
POST https://api.nocall.io/v2/tools {"tool":"sms-code","unrequested":true,"asked":true,"sensitive":true,"shared":false}Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| unrequested | boolean | Yes | You received a code without asking for one. |
| asked | boolean | Yes | Someone is asking you for the code. |
| sensitive | boolean | Yes | The code is for WhatsApp, your bank or a payment app. |
| shared | boolean | Yes | You have already shared the code. |
REQUEST_ID="$(uuidgen)" && [ -n "$REQUEST_ID" ] &&
curl --request POST 'https://api.nocall.io/v2/sms-code' \
--header "Authorization: Bearer $NOCALL_API_KEY" \
--header 'Content-Type: application/json' \
--header "Idempotency-Key: $REQUEST_ID" \
--data '{"unrequested":true,"asked":true,"sensitive":true,"shared":false}'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/sms-code',
method='POST',
data=json.dumps({'unrequested': True, 'asked': True, 'sensitive': True, 'shared': False}).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/sms-code', {
method: 'POST',
headers: {
Authorization: 'Bearer ' + apiKey,
'Content-Type': 'application/json',
'Idempotency-Key': requestId,
},
body: JSON.stringify({ unrequested: true, asked: true, sensitive: true, shared: false }),
});
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": "sms-code",
"result": {
"verdict": "asked",
"severity": "high",
"serviceRecoverySteps": false,
"stepCodes": [
"do_not_share_code",
"stop_and_block_contact",
"call_known_contact",
"report_number",
"never_give_payment_codes"
]
}
},
"meta": {
"requestId": "req_example",
"unitsCharged": 1,
"usage": {
"periodStart": "2026-10-01",
"unitLimit": 20,
"unitsUsed": 3,
"unitsRemaining": 17
}
}
}Result fields (data.result)
| Field | Type | Description |
|---|---|---|
| verdict | "shared" | "asked" | "unrequested" | "requested" | The most serious situation found in your answers. |
| severity | "critical" | "high" | "low" | "none" | How serious the verdict is: critical, high, low or none. |
| serviceRecoverySteps | boolean | Whether the account recovery steps (WhatsApp, bank) come first. |
| stepCodes | array<string (enum, 14)> | Stable codes of the steps to follow, in order. |
Frequently asked questions
Why would anyone want my SMS code?
Many services send a code by SMS to confirm that the phone number is yours. Whoever has your code can log in to your WhatsApp or confirm an operation in your name.
A friend asked me for a code on WhatsApp. Is it a scam?
Almost certainly: it’s one of the most common ways to take over WhatsApp accounts, and your friend’s account has probably been taken over already. Call them to check, and don’t send the code.
I shared the code. Can I get my WhatsApp back?
Usually, yes. Register your number in WhatsApp again on your phone and enter the new code you receive; that signs the other person out. Then turn on two-step verification.
