Why your Twilio calls show Spam Likely, and how to check
**If your Twilio calls keep ending as no-answer, or fail with a SIP 603, your number is probably labeled or blocked by the carriers.** A check tells you which. Your Twilio number calls our test lines, and real phones on AT&T, Verizon and T-Mobile report the label, the caller name and a screenshot, about 5 seconds after the call rings.
Platform details checked October 2026. Spam I Am isn't affiliated with Twilio.
What it looks like in Twilio
Twilio's Call resource has a status: queued, ringing, in-progress, completed, busy, no-answer, failed or canceled. Status callbacks also include a SipResponseCode.
- Blocked calls usually end as
failed, with a 6xxSipResponseCode. Since March 25, 2026, US carriers must use SIP 603+ ("Network Blocked") for analytics-based blocking. Older logs may show 608. What 603+ and 608 mean - Labeled calls ring normally. They end as
no-answeror as very shortcompletedcalls. Twilio's logs can't show the label, because it only appears on the recipient's screen.
Twilio's Trust & engagement view (Monitor > Insights > Voice) is only available with Voice Insights Advanced Features, a paid add-on. It shows delivery, answer and blocking trends across your calls, not what a specific carrier displays for your number.
A Spam I Am check needs no subscription or package: the first check on a number is free, then $0.25 for one carrier or $0.40 for two or three.
Why Twilio numbers get flagged
- High volume from one number, especially bursts from a dialer.
- Short calls and low answer rates.
- New or recycled numbers. A freshly bought number has no history, and some carry a previous owner's.
- No STIR/SHAKEN, CNAM or Voice Integrity registration. These sit in Trust Hub and need an approved business profile.
- Unexpected calls that people report or block.
Place the test call from Twilio
The check call must come from the number you're checking, with caller ID showing. We never spoof numbers, so Twilio places the call.
Our phone lets the call ring for a few seconds, then sends it to voicemail. When voicemail answers, Twilio runs your TwiML. Keep it simple: pause, then hang up.
curl -X POST "https://api.twilio.com/2010-04-01/Accounts/$TWILIO_ACCOUNT_SID/Calls.json" \
-u "$TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN" \
--data-urlencode "To=+14695550123" \
--data-urlencode "From=+12145550100" \
--data-urlencode "Twiml=<Response><Pause length=\"5\"/><Hangup/></Response>"
To is our test line (dial). From is the Twilio number, or verified caller ID, you're checking.
If you call through Elastic SIP Trunking from your own PBX or dialer, dial the test line from that system with the same caller ID instead.
Run the check with Spam I Am
The first check on any number is free and needs no signup or key.
curl -X POST https://ismynumberspam.com/v1/checks \
-H "Content-Type: application/json" \
-d '{"number": "2145550100"}'
You get an id, a token and a dial number per carrier. Call them within 2 minutes for one carrier, plus 1 minute for each extra.
The full flow in Python with Twilio's SDK:
import os, time, requests
from twilio.rest import Client
SIA = "https://ismynumberspam.com/v1"
NUMBER = "+12145550100"
key = os.environ.get("SIA_API_KEY") # optional for the first check
h = {"Authorization": f"Bearer {key}"} if key else {}
twilio = Client(os.environ["TWILIO_ACCOUNT_SID"], os.environ["TWILIO_AUTH_TOKEN"])
check = requests.post(f"{SIA}/checks", json={"number": NUMBER}, headers=h).json()
q = {} if key else {"token": check["token"]}
def get_check():
return requests.get(f"{SIA}/checks/{check['id']}", headers=h, params=q).json()
for line in check["calls"]:
call = twilio.calls.create(
to=line["dial"], from_=NUMBER,
twiml='<Response><Pause length="5"/><Hangup/></Response>',
)
while True: # wait for this carrier before dialing the next line
c = next(x for x in get_check()["calls"] if x["carrier"] == line["carrier"])
if c["status"] != "waiting":
break
time.sleep(5)
if c["status"] == "incomplete":
print(line["carrier"], "Twilio call status:", twilio.calls(call.sid).fetch().status)
for c in get_check()["calls"]:
print(c["carrier"], c["status"], c.get("label"), c.get("caller_name"), c.get("screenshot_url"))
These examples are a starting point. Check field names against Twilio's current docs before you rely on them.
A complete carrier has flagged, label, caller_name and a screenshot. An incomplete carrier with reason: "no_call" got no call in time. If Twilio shows the call as failed, look at its SIP code. A block is more urgent than a label. Incomplete carriers are free.
Prefer a push? Pass webhook_url when you start the check. We POST the finished check, signed with a Spamiam-Signature header. Verify it by computing HMAC-SHA256 of <t>.<raw body> with your whsec_ secret.
Use MCP
If you build agents that place calls through Twilio, connect our MCP server to the agent and give it a tool that calls the Twilio API:
claude mcp add --transport http spam-i-am https://ismynumberspam.com/mcp \
--header "Authorization: Bearer sia_..."
The agent calls start_check, places one Twilio call per dial number, then calls get_check with wait_seconds (up to 25) until the status is complete. If it runs out of budget, it calls request_approval and gives you a link to approve a spending limit. It never pays by itself.
Pre-campaign checklist
- Check every newly bought number before it goes into a dialer. Checklist for new numbers
- Check before each campaign. $0.40 covers all three carriers.
- Re-check after volume spikes, and when
no-answerrates or 6xx failures rise. - **Group failures by
Fromnumber.** Blocking follows a number's reputation. - Check active numbers on a schedule. Weekly is a good default for busy numbers.
- One check per number per hour.
If it's flagged
Pause calls from that number. Then:
- Fix the cause. Slow bursts down, clean your list, and stop calling people who don't expect you.
- Register in Trust Hub. You'll need an approved business profile with an EIN or DUNS number, a US address, an authorized representative and an
https://website.- STIR/SHAKEN so your calls are signed.
- CNAM so your business name can show on landlines.
- Voice Integrity. Twilio submits your numbers to TNS (Verizon), First Orion (T-Mobile) and Hiya (AT&T), who review them and may update the label. Twilio's onboarding page puts remediation at 24 to 48 hours.
- Consider branded calling. Twilio's US Basic Branded Calling (Public Beta) shows your business name on T-Mobile and Verizon mobiles. Twilio lists a per-call price on its US voice pricing page, and you aren't charged when the brand isn't delivered.
- Register with the Free Caller Registry at freecallerregistry.com if you haven't used Voice Integrity.
- Request a review for each flagged carrier: AT&T · Verizon · T-Mobile
- Rest the number. Swapping in fresh numbers to dodge labels usually gets them flagged too, and hides the real problem.
- Consider a reputation-management provider for large fleets. None can guarantee removal.
Re-check every few days. We only check. We don't remove labels.
FAQ
Do Twilio's logs show spam labels?
No. Twilio sees blocked calls as failures with a SIP code. Labeled calls look like normal unanswered calls.
Can I check a verified caller ID, not a Twilio number?
Yes. Any number Twilio lets you call from works, as long as the call presents that number.
Will the test call cost anything on Twilio?
Yes, a few seconds of an outbound call at your normal Twilio rate.
Does Voice Integrity mean I don't need to check?
No. Registration helps, but each carrier still scores your calls. A check shows whether it worked.
What does a check cost?
First check on a number: free. Then $0.25 for one carrier or $0.40 for two or three.
Sources
- Twilio: Call resource
- Twilio: Voice Integrity
- Twilio: Increase call answer rates with Voice Integrity
- Twilio: Voice Integrity onboarding
- Twilio: US Basic Branded Calling
- Twilio: US voice pricing
- Spam I Am API docs · MCP server
See what your number shows
Call our real AT&T, Verizon and T-Mobile phones and see the label, caller name and a screenshot. The first check of any number is free.