SMS & messages
Is this text from a brand real?
Coverage: Brands impersonated in Spain. Each page lists the official domains in NoCall’s SMS rules, the same ones our SMS checker uses.
Open toolOn this page
Purpose
How to tell a real text message from Correos, the DGT, the Agencia Tributaria, the Seguridad Social, BBVA, Santander, CaixaBank, DHL, SEUR or Amazon from a fake: their official web addresses and what the fakes look like.
Requirements
Anyone can read these guides, no account needed. Some tools require Pro, as indicated in each guide.
The brands that scammers impersonate by SMS in Spain. Pick one to see its official web addresses, what the fake messages look like and what to do.
How to use it
The brands that scammers impersonate by SMS in Spain. Pick one to see its official web addresses, what the fake messages look like and what to do.
Look at the link, not the sender: a real message only links to the brand’s own domain. Don’t trust any other address, including a shortened link.
Be wary of urgency and small payments: a held parcel, a pending fine, a blocked account or a refund that expires today are the usual hooks.
Never use the link to check: open the brand’s app or type its address yourself.
Synthetic example
Invented example, not a real lookup. Do not call or open its links.
https://delivery.example/noticeInterpret the result
Brands impersonated in Spain. Each page lists the official domains in NoCall’s SMS rules, the same ones our SMS checker uses.
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.
Brands impersonated in Spain. Each page lists the official domains in NoCall’s SMS rules, the same ones our SMS checker uses.
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.
Whether a link really belongs to the Spanish brand it claims (official, unconfirmed, lookalike, shortener, other). sightings counts every eligible community campaign for the brand, not only the public top 10. ES only.
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-brand
POST https://api.nocall.io/v2/tools {"tool":"sms-brand","brand":"correos","link":"https://correos-envio.example.invalid/pago","country":"ES"}Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| brand | "correos" | "dgt" | "agencia-tributaria" | "seguridad-social" | "bbva" | "santander" | "caixabank" | "dhl" | "seur" | "amazon" | Yes | Brand the SMS claims to come from. |
| link | string (1–300) | Yes | Link or domain from the SMS. It is never opened. |
| country | "ES" | No (default: "ES") | Country of the data. Only ES is supported. |
REQUEST_ID="$(uuidgen)" && [ -n "$REQUEST_ID" ] &&
curl --request POST 'https://api.nocall.io/v2/sms-brand' \
--header "Authorization: Bearer $NOCALL_API_KEY" \
--header 'Content-Type: application/json' \
--header "Idempotency-Key: $REQUEST_ID" \
--data '{"brand":"correos","link":"https://correos-envio.example.invalid/pago","country":"ES"}'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-brand',
method='POST',
data=json.dumps({'brand': 'correos', 'link': 'https://correos-envio.example.invalid/pago', 'country': 'ES'}).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-brand', {
method: 'POST',
headers: {
Authorization: 'Bearer ' + apiKey,
'Content-Type': 'application/json',
'Idempotency-Key': requestId,
},
body: JSON.stringify({ brand: 'correos', link: 'https://correos-envio.example.invalid/pago', country: 'ES' }),
});
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-brand",
"result": {
"verdict": "lookalike",
"host": "correos-envio.example.invalid",
"brand": {
"slug": "correos",
"name": "Correos",
"category": "delivery"
},
"officialDomains": [
"correos.es",
"correos.com",
"correosexpress.com"
],
"sightings": 0
}
},
"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 | "official" | "unconfirmed" | "lookalike" | "shortener" | "other" | Whether the link really belongs to the brand. |
| host | string | Host name taken from the link. |
| brand | object | The brand being checked: slug, name and category. |
| officialDomains | array<string> | The brand's official domains. |
| sightings | integer | Eligible community campaigns for the brand (privacy format 2, at least 3 observers), not only the public top 10. |
Frequently asked questions
Why these brands?
They are the brands that NoCall’s SMS campaign detection follows and whose official domains are in our SMS rules. We will add more as we verify their domains.
Do you list the sender names these brands use?
No. Our data doesn’t record which sender name each brand uses, and a sender name can be faked anyway. The official domain is the fact we can verify.
I got a text message from one of these brands. What do I do?
Don’t tap the link. Compare its address with the official domains on that brand’s page, check the whole message with our SMS checker and, if in doubt, contact the brand through its app or website.
