Sender warming and reputation
Carrier abuse filters punish one pattern above all others: a fresh origination identity ramping straight to full volume. Orbit’s answer is a two-layer warming system — a graduated daily-volume ramp that grows a new sender’s ceiling over its first weeks, and two scores (trust and reputation) that decide how fast the ramp advances and when it holds. This page explains what warming is, how the curve moves, and how the scores differ. The endpoint-by-endpoint contract lives in Number health, warming, and carrier reputation tracking; this page is the model behind it. For the step-by-step ramp walkthrough, see the number warming guide. Warming is advisory rate-limiting, not a carrier guarantee. The ramp meters a sender toward volumes the carrier ecosystem tolerates; it does not promise acceptance, and it never blocks a send the carriers themselves would carry.What warming means in Orbit
When a new number starts sending in the US 10DLC ecosystem, The Campaign Registry and the downstream carriers cap daily throughput to a tier your brand has earned. Orbit runs two complementary ramps on top of that:- The trust-tier cap — the carrier-published phase table (
initial→ramp→steady→verified). Each phase carries a daily SMS ceiling, and phase advancement is driven by your 10DLC trust score: registration is incomplete at first, and the ceiling climbs as the trust score rises and the number ages. - The operator-driven growth curve — a geometric ramp over days-since-warming started, independent of the trust tier. It covers the early window where the carrier table still looks like a step function: day zero starts small and compounds roughly a third per day until it reaches the number’s hard ceiling, then the warming lifecycle flips from
warmingtowarmedand the gate no-ops.
DAILY_CAP_EXCEEDED; exceeding the growth curve returns WARMING_QUOTA_EXCEEDED with a retry_after.
The four phases, in canonical order:
The warming dashboard card and the
GET /api/v1/numbers/:id/warming endpoint report the current phase, today’s daily_cap, the live current_day_count, the trust_score, and warming_started_at.
The per-number meter
The per-DID meter has five moving parts:daily_cap— today’s ceiling after both gates: the trust-phase table intersected with the growth curve, then scaled by carrier feedback (below).current_day_count— sends so far in the current UTC day. The counter resets at 00:00 UTC; a warmed-off number keeps an idle mirror so the dashboard still renders.warming_phase— where the number sits in the trust table above.trust_score— the 10DLC trust score the registration ecosystem assigned your brand; it moves the phase ceiling, and nothing else.warming_started_at— the anchor the growth curve compounds from. Re-toggling warming does not rewind the anchor.
GET /api/v1/numbers/:id/warming/progression returns warming_state, warming_started_at, warming_max_daily_sms, and a 15-day forecast of the daily ceiling. Worked example — a fresh DID with the default curve (day 0 = 50, ~35% daily compounding, hard cap 3,000):
If the forecast line flattens below its base curve, carrier feedback is holding the ramp — read the health tier before assuming a bug.
Alphanumeric sender-ID and international long-code warming
The per-DID engine keys onphone_numbers rows, so it never covered the origination identities that dominate EMEA/MENA corridors: alphanumeric sender IDs ("ACME", "OTP") and international long codes. The sender warm-up surface closes that gap with a parallel pair of endpoints:
GET /api/v1/messages/senders/warmup/lookup?sender=ACME drills into one sender and adds a day-by-day forecast of the ceiling curve for the dashboard chart.
Each row classifies the sender into a scope: alphanumeric and international_long_code are warmed here; domestic_10dlc is excluded (the number-warming engine owns it) and short_code is excluded (short codes are pre-vetted from day one). For warmable scopes the meter reports days_active, a recommended_daily_ceiling on the geometric ramp, warmup_complete once the curve has topped out, and a reputation score with tier.
Two properties make the sender meter directly comparable to the per-DID meter:
- Same reputation kernel. The sender’s reputation is computed over the same 30-day DLR window and the same delivered/failed/complaint semantics the per-number health score uses. A 42 on a sender ID means the same thing as a 42 on a DID.
- Same curve shape. The graduated ramp is the same
base × growth^daysfamily, tuned to the higher steady-state volume a corridor-wide brand sender carries (a much larger day-0 base and hard cap than a single DID). The response echoes the ramp constants inramp, so a forecast stays honest across versions.
messages table with no new persisted state, the sender meter is a pure read — you get the safety net without a migration step.
Reputation score vs trust score
The two scores answer different questions, and conflating them causes real operational mistakes:
The reputation score is recomputed daily by a scheduler from delivery receipts (DLRs) and persisted onto the number as a 0–100 score plus a tier (
excellent | good | fair | poor | critical, unknown when the sample is too thin). Complaint-coded carrier rejections count heavily against it. That tier feeds the closed loop on every warming gate:
excellent/good/fair/unknown→ the ramp proceeds at the full base curve (1.00 factor).poor→ the ceiling holds at 50% of the curve (holdingstate).critical→ the ceiling throttles to 25% of the curve (throttledstate), with a floor at the day-0 base so a recovering sender can always accrue fresh receipts.
What warming is not
Keep the boundary explicit when you build on these meters:- Warming caps, it never rewrites. The gates reject an over-cap send with a quota error; they never alter the destination, the sender identity, or the route. Every outbound send still exits through the Devotel softswitch — warming sits in front of the path, it is not an alternate path.
- Scores are own-traffic only. The reputation score is derived from the tenant’s own delivery receipts; it does not read carrier-published spam labels. For the carrier-side label on your outbound numbers, pair it with the reputation surfaces and, for forward risk, the spam-likelihood endpoint.
- Sender warm-up is advisory. The sender-ID meter returns a recommended ceiling and a ramp state; it does not black-hole traffic. Treat
recommended_daily_ceilingas the pacing input for your campaign throttle, not as a hard refusal.
See also
- Number health, warming, and carrier reputation tracking — the endpoint surface
- Number warming guide — the ramp walkthrough, pacing, and quota-error handling
- Brand identity and trust score — the organization-level trust rollup, distinct from per-sender reputation
- Send gating and quiet hours — the other volume guardrails warming composes with