Spam I Am

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.

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:

Why numbers get flagged

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" }
  }'

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

If it's flagged

Pause calls from that number. Then:

  1. Fix the cause. Slow down, call people who expect you, and make sure the agent speaks promptly.
  2. 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.
  3. Register with the Free Caller Registry at freecallerregistry.com, which reaches Hiya, First Orion and TNS.
  4. Request a review for each flagged carrier: AT&T · Verizon · T-Mobile
  5. 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.
  6. 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

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.

Check your number free