Spam I Am

Why your Synthflow calls show Spam Likely, and how to check

**If your Synthflow agent's calls end with a spam status, a 603 or 608 error, or just go unanswered, carriers are likely labeling or blocking your number.** A check shows what AT&T, Verizon and T-Mobile actually display. Your Synthflow number calls our test lines, and real phones on each carrier 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 Synthflow.

What it looks like in Synthflow

Synthflow's Get a call API (GET /v2/calls/{call_id}) returns a status for each call. The allowed values include **spam**, alongside no-answer, busy, failed, hangup_on_voicemail and left_voicemail. Synthflow's API reference lists spam as a status but doesn't describe when it's set.

Failed calls also carry an error_message. Synthflow's telephony errors page lists the ones that matter here:

The telephony_disconnect_reason field can also read forbidden.

Since March 25, 2026, US carriers must use SIP 603+ ("Network Blocked") for analytics-based blocking, so a 603 is now a likely sign of a spam block. What 603+ and 608 mean

Labels leave no trace. A call that rings with "Spam Likely" on screen and goes unanswered looks like a normal no-answer.

Why Synthflow numbers get flagged

Synthflow's help center says carriers and their analytics partners (Hiya, First Orion and TNS) label numbers whose patterns look like spoofing or high-volume bursts. In practice:

Why numbers get flagged

Place the test call from Synthflow

The check needs a real call from the number you're checking. We never spoof numbers, so Synthflow has to place it.

Use an outbound agent and the Make a call endpoint. Set from_phone_number to the number you're checking. It must be attached to the outbound agent. If you leave it out, Synthflow picks the agent's default number, which may not be the one you meant to check.

curl -X POST https://api.synthflow.ai/v2/calls \
  -H "Authorization: Bearer $SYNTHFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model_id": "YOUR_OUTBOUND_AGENT_ID",
    "phone": "+14695550123",
    "name": "Spam check",
    "from_phone_number": "+12145550100"
  }'

phone is our test line's dial value. name is required by Synthflow, so use any label. Our phone rings for a few seconds and then sends the call to voicemail, so a simple agent that ends the call on voicemail is enough.

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 one dial number per carrier. You have 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"               # attached to your outbound agent
key = os.environ.get("SIA_API_KEY")   # optional for the first check
h = {"Authorization": f"Bearer {key}"} if key else {}
sf = {"Authorization": f"Bearer {os.environ['SYNTHFLOW_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.synthflow.ai/v2/calls", headers=sf, json={
        "model_id": os.environ["SYNTHFLOW_AGENT_ID"],
        "phone": line["dial"],
        "name": "Spam check",
        "from_phone_number": NUMBER,
    })
    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 Synthflow's current docs before you rely on them.

A complete carrier has flagged, label, caller_name and a screenshot_url. An incomplete carrier with reason: "no_call" got no call in time. Look up the Synthflow call. A spam status, a 603 or a 608 means the carrier blocked it, which is more urgent than a label. Incomplete carriers are free.

To skip polling, pass webhook_url when you start the check. We POST the result, signed with a Spamiam-Signature header.

Use MCP

Synthflow agents can call tools on an external MCP server through MCP Connectors. Create an MCP server in your workspace with the URL https://ismynumberspam.com/mcp (it must be HTTPS), add an Authorization: Bearer sia_... header if you have a key, click Discover Tools, and attach only the tools you need. Synthflow notes Flow Designer support is planned, so this works on prompt-based agents today.

For agent builders, add our server to your coding agent and drive Synthflow through its API:

claude mcp add --transport http spam-i-am https://ismynumberspam.com/mcp \
  --header "Authorization: Bearer sia_..."

Without a key, the agent can run free first checks. When it needs to spend, it calls request_approval and sends you a link to approve a spending limit.

Pre-campaign checklist

If it's flagged

Pause calls from that number. Then:

  1. Fix the cause. Synthflow's own advice: keep volume steady with no sudden spikes, space out short bursts, use dedicated numbers per team, and honor opt-outs.
  2. Register the number with each analytics partner. Synthflow's help center links Hiya (AT&T), First Orion (T-Mobile), TNS and Verizon's feedback form. The free Free Caller Registry covers Hiya, First Orion and TNS in one form.
  3. Set CNAM. For Twilio numbers, Synthflow points to the Twilio Console under the number's Caller ID Name setting. Synthflow's docs don't list a paid branded-caller-ID or spam add-on of their own.
  4. Request a review for each flagged carrier: AT&T · Verizon · T-Mobile
  5. Rest the number. Number pooling spreads normal volume across numbers. Don't use it to swap in fresh numbers whenever one gets flagged. That hides the problem, and the new numbers inherit the same pattern.
  6. Consider a reputation-management provider for large fleets. None can guarantee removal.

Synthflow says registration changes typically take 24 hours to a few days, sometimes up to three weeks. Re-check every few days. We only check. We don't remove labels.

FAQ

What does Synthflow's spam status mean?

Synthflow lists it as a call status but doesn't define it in the API reference. Treat it as a sign the call didn't get through, and run a check to see each carrier.

My calls show no-answer, not spam. Could I still be flagged?

Yes. A labeled call rings normally, so it looks like any unanswered call in your logs.

Do I need to set from_phone_number?

For a check, yes. Without it, Synthflow uses the agent's default number selection, and the call has to come from the number you're checking.

What does "608 Termination needs STI IDHDR" mean?

The carrier wanted STIR/SHAKEN caller verification. Make sure your number's carrier signs your calls.

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

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