Skip to main content

Number Health & Reputation

Monitor the operational health of each number: its 10DLC warming ramp, deliverability health score, carrier-displayed reputation, usage rollups, and branded-calling answer-rate uplift. Every endpoint is a pure read of locally-persisted snapshots — no live carrier call, no outbound voice/SMS path.

Warming

Per-number 10DLC warming-tier state, so a warming-progress card can render the ramp meter.
Returns the current daily_cap, live current_day_count, warming_phase (initial | ramp | steady | verified), trust_score, and warming_started_at. Returns null for non-10DLC numbers. For the growth-curve forecast:
Returns the warming_state + warming_started_at + warming_max_daily_sms columns plus a 15-day forecast.

Health (deliverability)

The latest deliverability health snapshot — delivery rate and complaint rate — from the daily health-score scheduler.
This scores internal deliverability (complaint-coded message error codes). For the carrier-displayed spam label, use Reputation below.

Health trend & forecast (predictive)

The point-in-time health snapshot tells you where a number stands today; it does not tell you where it is heading. The trend endpoint answers the predictive question — is this number sliding toward a poor delivery outcome, and how soon — so you can rotate it before deliverability collapses. GET /api/v1/numbers/num_abc123/health/trend
  • direction is improving, declining, or stable. Movement smaller than 0.2 score points per day counts as stable so week-to-week noise does not read as a trend.
  • forecast extrapolates the trend line: projected_score (clamped to 0–100) and projected_tier, mapped onto the same tier bands the point-in-time score uses. When projected_tier falls to poor or critical, that number is a rotation candidate — pair the forecast with the Closed-Loop Reputation Remediation playbook below to quarantine, replace, and retire it.
  • anomaly catches what a slow slope would smear away: detected: true when the latest period drops 12+ points below the mean of the periods before it — the signature of a spam flag landing between ticks.
  • Low-traffic periods stay honest: a period under min_sample_size outbound messages returns score: null, tier: "unknown" and is excluded from the trend fit (its sample_size is still returned so you can render the gap). With fewer than three scored periods, direction returns insufficient_data and the forecast is null — Orbit will not project a line through one or two points.

Predictive spam-likelihood scoring & remediation playbook

The trend forecast above projects a deliverability score; the spam-likelihood endpoint answers a different question — how likely is this number to draw a carrier spam label, and what to do about it before the label lands. Where the trend endpoint tracks a health trajectory, this one blends the signals carriers actually filter on into a single forward-looking risk score and pairs it with an ordered remediation playbook. Use it as the early-warning threshold: act on high/severe here, before the carrier ecosystem publishes the label you see under Reputation. GET /api/v1/numbers/:id/spam-likelihood
contributing_factors names which drivers pushed the risk up: the outbound failure_rate, the complaint-coded complaint_rate (carrier rejections with a spam or opt-out error code), the health trend direction, and any anomaly_detected step-change. The four *_component values sum to the score, so you can see exactly which lever to pull. remediation_playbook is the ordered set of steps to take before the label lands: pause outbound, re-verify the registered campaign, and — once the score reaches moderate or worse — reduce volume and warm a replacement. Labels band as low (< 25), moderate (< 50), high (< 75), severe (75+); a window with too little signal returns spam_likelihood_score: null with label unknown rather than a noisy small-sample number, and min_sample_size echoes the threshold. Tie to action. When the playbook returns reduce_volume, put the rest behind send gating and quiet hours: lower the campaign’s pacing cap on this number, tighten its quiet-hours window, and let warmed DIDs absorb the traffic. When the playbook returns warm_replacement, fold it into the Closed-Loop Reputation Remediation policy below — the same quarantine → replace → migrate → retire loop, triggered early instead of after a support ticket. For the fleet-wide view of numbers already flagged, poll /api/v1/numbers/reputation-alerts; the spam-likelihood score is the per-number drill-down that surfaces the risk before it reaches that alert list.

Reputation

Per-number carrier spam-label reputation — how Hiya / TNS / First Orion / Free Caller Registry / Nomorobo label your own outbound number — plus a registration/dispute remediation plan to clear a false “Spam Likely” / “Scam Likely” tag.
Returns monitored: false / status: "unknown" until the probe scheduler covers the number. See CNAM & Caller ID for spam-label remediation.

Fleet-wide reputation alerts (dashboard)

Checking numbers one at a time doesn’t scale once you own more than a handful of DIDs. GET /api/v1/numbers/reputation-alerts rolls up every monitored owned DID (at least one carrier observation recorded) and returns only the ones that still need action — currently flagged, at risk, or missing branded-caller registration, and with no open tracked remediation submission covering it yet. This powers the reputation-alerts banner on the Numbers dashboard.
The scan is capped at 500 monitored DIDs per call; truncated: true means only the first 500 were scanned, so the counts are a lower bound. A number drops off this list as soon as an operator lodges a tracked submission for every flagged provider via POST .../reputation/submissions — the alert surface only ever shows what still genuinely needs attention.

Closed-Loop Reputation Remediation

Configure and preview an automated healing plan for degraded numbers — quarantine the number, order a clean replacement, migrate its inbound routing / dialer campaigns / SMS sender pools, re-attest, then retire the original — instead of manually swapping a flagged DID after a support ticket.

Read the policy

GET /api/v1/numbers/reputation-remediation-policy
Returns the current policy plus the server-side defaults (bounds for cooldown hours and the per-run cap). auto_remediate defaults to false — remediation is opt-in.

Configure the policy

PUT /api/v1/numbers/reputation-remediation-policy
Requires the numbers:write scope (owner / admin).

Preview the plan

GET /api/v1/numbers/reputation-remediation-plan
Returns the ordered closed-loop steps (quarantineprovision_replacementmigrate_inbound_routes / migrate_dialer_campaigns / migrate_sender_poolsreattestretire) the current policy would run for every currently-degraded (poor/critical) owned DID, plus a summary of how many would be remediated, deferred (cooldown), capped, or skipped. This is a preview only — it never mutates routing, orders a replacement, or retires a number, regardless of the auto_remediate flag.

Usage Analytics

Per-number usage rollup over a configurable window.
Returns call + message counts, durations, and delivery outcomes scoped to the number and window.

Branded-Calling Analytics

Per-number Rich Call Data (RCD) answer-rate uplift: compares the number’s outbound answer rate for the requested window against the immediately-preceding equal-length baseline, alongside your organization’s branded-calling status — so a customer who registered a brand profile can see the contact-center answer-rate lift.