# Why your Telnyx calls show Spam Likely, and how to check

**If your Telnyx calls hang up unanswered, or end with a SIP 603 in the `call.hangup` webhook, carriers are probably labeling or blocking your number.** A check shows what AT&T, Verizon and T-Mobile actually display. Your Telnyx 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 Telnyx.*

## What it looks like in Telnyx

With the Voice API (Call Control), Telnyx sends webhooks as a call progresses: `call.initiated`, then `call.answered` or `call.hangup`. The `call.hangup` event carries a `hangup_cause` and a `sip_hangup_cause`.

- **Blocked calls** never ring. Look for a 6xx `sip_hangup_cause`. 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](/guides/sip-603-plus-608-network-blocked)
- **Labeled calls** ring normally. If nobody picks up before your timeout, Telnyx ends the call with a `hangup_cause` of `timeout`. Nothing in the webhook says "spam."

If you use SIP trunking from your own dialer or PBX, the same SIP codes appear in your switch's logs and call records.

## Why Telnyx numbers get flagged

- **High volume from one number**, especially fast dialing bursts.
- **Short calls and low answer rates.**
- **New or recycled numbers** with no history, or a bad one.
- **Missing registration or weak STIR/SHAKEN attestation.** Ask Telnyx which attestation level your calls get.
- **Unexpected calls** that people report or block.

[Why numbers get flagged](/guides/why-number-shows-spam-likely)

## Place the test call from Telnyx

The check call must come **from the number being checked**. We never spoof numbers, so Telnyx dials it.

Use the Dial command with your Voice API application's `connection_id`, our test line as `to`, and the number you're checking as `from`. Our phone rings for a few seconds and then sends the call to voicemail, so cap the call length:

```bash
curl -X POST https://api.telnyx.com/v2/calls \
  -H "Authorization: Bearer $TELNYX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "connection_id": "YOUR_CONNECTION_ID",
    "to": "+14695550123",
    "from": "+12145550100",
    "time_limit_secs": 30,
    "webhook_url": "https://yourserver.example.com/telnyx-webhooks"
  }'
```

You can also hang up from your webhook handler once `call.answered` arrives. On a SIP trunk, dial the test line from your PBX or dialer with the same caller ID.

## Run the check with Spam I Am

The first check on any number is free and needs no signup or key.

```bash
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 Node:

```js
const SIA = "https://ismynumberspam.com/v1";
const NUMBER = "+12145550100";            // your Telnyx number
const key = process.env.SIA_API_KEY;      // optional for the first check
const h = { "Content-Type": "application/json", ...(key && { Authorization: `Bearer ${key}` }) };
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));

const check = await (await fetch(`${SIA}/checks`, {
  method: "POST", headers: h, body: JSON.stringify({ number: NUMBER }),
})).json();
const q = key ? "" : `?token=${check.token}`;
const getCheck = async () => (await fetch(`${SIA}/checks/${check.id}${q}`, { headers: h })).json();

for (const line of check.calls) {
  await fetch("https://api.telnyx.com/v2/calls", {
    method: "POST",
    headers: { Authorization: `Bearer ${process.env.TELNYX_API_KEY}`, "Content-Type": "application/json" },
    body: JSON.stringify({
      connection_id: process.env.TELNYX_CONNECTION_ID,
      to: line.dial,
      from: NUMBER,
      time_limit_secs: 30,
    }),
  });
  // wait for this carrier's result before dialing the next line
  while ((await getCheck()).calls.find((c) => c.carrier === line.carrier).status === "waiting") {
    await sleep(5000);
  }
}

for (const c of (await getCheck()).calls) {
  console.log(c.carrier, c.status, c.label, c.caller_name, c.screenshot_url);
}
```

These examples are a starting point. Check field names against Telnyx'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. Look at that call's `call.hangup` webhook: a 6xx `sip_hangup_cause` means the carrier blocked it, which is more urgent than a label. Incomplete carriers are free.

You can also pass `webhook_url` when you start the check. We POST the finished check, signed with a `Spamiam-Signature` header.

### Use MCP

Telnyx lists a hosted MCP server at `https://api.telnyx.com/v2/mcp` with Bearer auth, and its tools include placing outbound calls. Connect it next to ours in your coding agent:

```bash
claude mcp add --transport http spam-i-am https://ismynumberspam.com/mcp
claude mcp add --transport http telnyx https://api.telnyx.com/v2/mcp \
  --header "Authorization: Bearer $TELNYX_API_KEY"
```

Then ask: "Check +1 214 555 0100 on all three carriers. Use Telnyx to call each test line from that number, then report each carrier." Our `get_check` tool waits up to 25 seconds for results. If the agent needs to spend beyond the free check, it calls `request_approval` and sends you a link.

## Pre-campaign checklist

- **Check every new number** before it goes into a campaign or dialer pool.
- **Check before each campaign.** All three carriers cost $0.40.
- **Re-check after volume spikes**, and when `timeout` hangups or 6xx codes rise.
- **Group `call.hangup` events by `from` number** so you know which number to check.
- **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:

1. **Fix the cause.** Slow down, clean the list, and stop calling people who don't expect you.
2. **Use Telnyx's options.** Both are US-only and need your business registered as an Enterprise in Telnyx, which is free.
   - **Reputation remediation**, part of **Telnyx Number Reputation**, asks the call-analytics networks to re-evaluate a flagged number. It's only available to Telnyx customers who subscribe to Number Reputation: **$100 per month per Enterprise**, plus **$1.00 per number submitted**. Its reputation lookups are also subscriber-only, at **$0.10 per check** on top of the monthly fee.

     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.
   - **Branded Calling** shows your business name, logo and call reason on US mobiles on T-Mobile and Verizon. Telnyx lists **$50 one-time plus $50 per month per brand**, and **$0.075 per call** that displays your brand.
3. **Register with the Free Caller Registry** at [freecallerregistry.com](https://freecallerregistry.com), which reaches Hiya, First Orion and TNS.
4. **Request a review** for each flagged carrier: [AT&T](/guides/remove-spam-label-att) · [Verizon](/guides/remove-spam-label-verizon) · [T-Mobile](/guides/remove-scam-likely-tmobile)
5. **Rest the number.** Swapping in fresh numbers whenever one is flagged usually gets them flagged too.
6. **Consider a reputation-management provider** for large fleets. None can guarantee removal.

Re-check every few days. Reviews commonly take days to weeks. We only check. We don't remove labels.

## FAQ

### Does Telnyx's `call.hangup` webhook show spam labels?
No. It shows blocks as SIP codes. A labeled call rings normally and looks like any unanswered call.

### Can I check a number on a Telnyx SIP trunk?
Yes. Dial the test lines from your PBX or dialer, as long as the call presents the number you're checking.

### Will the test call cost anything on Telnyx?
Yes, a few seconds of an outbound call at your normal Telnyx rate.

### Does Branded Calling stop the spam label?
It shows who's calling on supported networks. It doesn't control what each carrier's analytics decide, so check before and after.

### 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

- [Telnyx: Voice API getting started](https://developers.telnyx.com/docs/voice)
- [Telnyx: Call Commands (Dial)](https://developers.telnyx.com/api-reference/call-commands)
- [Telnyx: Number Reputation overview](https://developers.telnyx.com/docs/number-reputation/overview)
- [Telnyx: Number Reputation pricing](https://developers.telnyx.com/docs/number-reputation/pricing)
- [Telnyx: Branded Calling pricing](https://developers.telnyx.com/docs/branded-calling/pricing)
- [Telnyx: Branded Calling release note](https://telnyx.com/release-notes/branded-calling-now-available)
- [Telnyx: Getting started for agents (MCP server)](https://telnyx.com/getting-started.md)
- [Spam I Am API docs](/docs) · [MCP server](/docs/mcp)
