Why your Bland AI calls show Spam Likely, and how to check
If your Bland calls go unanswered, or fail with "Service Provider Blocked Call due to Spam or Number Reputation," the number you're calling from has a reputation problem. A check shows exactly what AT&T, Verizon and T-Mobile display for it: the label, the caller name and a screenshot from a real phone on each carrier, about 5 seconds after the call rings.
Platform details checked October 2026. Spam I Am isn't affiliated with Bland AI.
What it looks like in Bland
Bland's Call Details API (GET /v1/calls/{call_id}) returns a status of completed, failed, busy, no-answer, canceled or unknown.
- Blocked calls come back as
failed. Bland's docs list thiserror_messagefor a carrier spam block: "Service Provider Blocked Call due to Spam or Number Reputation. Try a different number." - Bland's agent quickstart warns that a call a carrier blocked as spam can still come back
completed, so checkanswered_byanderror_messagetoo. - Labeled calls ring normally. They usually end as
no-answer, or as short calls. No field says "spam."
If you send calls over your own SIP trunk, your carrier logs may also show SIP 603+ ("Network Blocked"), the code US carriers must use for analytics-based blocking since March 25, 2026. What 603+ and 608 mean
Why Bland numbers get flagged
First, know which number you're calling from. By default, Bland sends outbound calls from its own pool of numbers. Unless you set from, you don't control the caller ID, and you can't check it. To check a number, it must be one you own in Bland or an imported Twilio number (BYOT).
Then the usual causes apply:
- High volume from one number, especially batch dispatch.
- Short calls and low answer rates. Bland hangs up on voicemail by default, which keeps calls short.
- New or recycled numbers with thin or bad history.
- Missing registration and STIR/SHAKEN attestation on the number's carrier.
- Unexpected calls that people report or block.
Place the test call from Bland
The check call must come from the number being checked. We never spoof numbers, so Bland places it, using from.
curl -X POST https://api.bland.ai/v1/calls \
-H "Authorization: Bearer $BLAND_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"phone_number": "+14695550123",
"from": "+12145550100",
"task": "This is a short test call. If anyone answers, say: Test call, goodbye. Then end the call.",
"max_duration": 1,
"voicemail": { "action": "hangup" },
"metadata": { "purpose": "spam-label-check" }
}'
phone_numberis our test line (dialfrom the check).fromis the number you're checking.max_durationis in minutes."action": "hangup"is Bland's default voicemail behavior anyway. Our phone sends the call to voicemail after a few seconds, so Bland will hang up.
Using your own Twilio account? Add the encrypted_key header. The from number must belong to that Twilio account.
Run the check with Spam I Am
The first check on any number is free and needs no key.
curl -X POST https://ismynumberspam.com/v1/checks \
-H "Content-Type: application/json" \
-d '{"number": "2145550100"}'
The answer includes an id, a token and a calls list with one dial number per carrier. Call them within 2 minutes for one carrier, plus 1 minute per extra carrier.
The full flow in Python:
import os, time, requests
SIA = "https://ismynumberspam.com/v1"
NUMBER = "+12145550100" # your Bland or BYOT number
key = os.environ.get("SIA_API_KEY") # optional for the first check
h = {"Authorization": f"Bearer {key}"} if key else {}
bland = {"Authorization": f"Bearer {os.environ['BLAND_API_KEY']}"}
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"]:
requests.post("https://api.bland.ai/v1/calls", headers=bland, json={
"phone_number": line["dial"],
"from": NUMBER,
"task": "Short test call. Say 'Test call, goodbye' and end the call.",
"max_duration": 1,
})
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)
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 Bland's current docs before you rely on them.
Each carrier comes back complete, with flagged, label, caller_name and a screenshot, or incomplete. If it's incomplete with reason: "no_call", look up the Bland call. A failed status with the spam error_message means the call was blocked before it rang. That's more serious than a label. Incomplete carriers are free.
Want a push instead of polling? Pass webhook_url when you start the check. We POST the finished check, signed with a Spamiam-Signature header.
Use MCP
Bland runs a hosted MCP server at https://api.bland.ai/v1/mcp that can place and inspect calls. Connect it next to ours in your coding agent:
claude mcp add --transport http spam-i-am https://ismynumberspam.com/mcp
claude mcp add --transport http bland https://api.bland.ai/v1/mcp \
--header "Authorization: Bearer $BLAND_API_KEY"
Then ask: "Start a spam check for +1 214 555 0100. Use Bland to call each test line from that number, then report each carrier." Our get_check tool can wait up to 25 seconds for results. When the agent needs to spend beyond the free check, it calls request_approval and sends you a link. It never pays on its own.
Pre-campaign checklist
- **Set
fromon every campaign.** If you rely on Bland's pool, you can't see or manage the reputation of the numbers calling for you. - Check each number before a campaign. $0.40 covers all three carriers.
- Re-check after volume spikes or when
no-answerrates climb. - **Watch
error_message** for the spam-block text, grouped byfromnumber. - Check active numbers on a schedule. Weekly is a good default.
- One check per number per hour.
If it's flagged
Pause calls from that number. Then:
- Fix the cause. Slow down, call people who expect you, and make sure the agent speaks promptly.
- Work with the number's carrier. For BYOT numbers, that's your Twilio account, which offers STIR/SHAKEN, CNAM and Voice Integrity registration through Trust Hub. Bland's public docs don't list a paid spam-remediation or branded-caller-ID add-on, so ask Bland support what's available for Bland-owned numbers.
- Register with the Free Caller Registry at freecallerregistry.com, which reaches Hiya, First Orion and TNS.
- Request a review for each flagged carrier: AT&T · Verizon · T-Mobile
- Rest the number. Bland's error text suggests trying a different number. That gets calls out today, but a fresh number with the same calling pattern usually ends up flagged too. Fix the cause before you swap.
- Consider a reputation-management provider if you run many numbers. None can guarantee a label is removed.
Re-check every few days. Reviews commonly take days to weeks. We only check. We don't remove labels.
FAQ
Can I check the numbers in Bland's default pool?
Not usefully. The check must come from a specific number, and you don't choose which pool number Bland uses. Set from to a number you control.
Bland says the call completed. Why is the result incomplete?
Bland's docs note that blocked calls can still show completed. Check error_message and answered_by for that call.
Does local dialing help?
Bland's dialing_strategy with local picks a number matching the callee's area code. It's a paid add-on. Each number still has its own reputation, so check each one.
Does the test call cost anything on Bland?
Yes. It's a short outbound call billed at your normal Bland rate.
What does a check cost?
The first check on a number is free. Then $0.25 for one carrier or $0.40 for two or three.
Sources
- Bland: Send Call API
- Bland: Call Details API
- Bland: Agent quickstart
- Bland: Bring your own Twilio
- Bland: MCP server
- Twilio: Voice Integrity
- 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.