Troubleshooting: number warming caps
A brand-new US/CA 10DLC number cannot send at full volume on day one. Carriers have no delivery history for a fresh sender, so Orbit enforces a warming ramp on the number’s behalf: a per-day send ceiling that grows as the number proves out. When your send crosses today’s ceiling, the API refuses it before any carrier is attempted and returns a429 with one of the warming codes below. This page tells you which gate fired, how to watch the ramp advance, and what to do besides retrying.
Number warming vs. email IP warmup
These are two separate ramps that share one reputation principle:- Number warming (this page) ramps SMS/MMS volume per phone number. It applies to newly acquired 10DLC long codes and resets at midnight UTC per number. Definitions: Warmup (Number and Sender Registration).
- Email IP warmup ramps email volume per sending IP/domain and is enforced by the email deliverability API (
GET /api/v1/email/warmup-plan,/warmup-status). Definition: IP Warmup in the glossary.
The three gates and their codes
Three distinct 429 codes guard a warming number. They stack: a send can clear one gate and trip the next.DAILY_CAP_EXCEEDED and WARMING_QUOTA_EXCEEDED are per-day gates keyed on one sender — wait for midnight UTC or switch senders. NUMBER_MPS_EXCEEDED is a per-second gate — a one-second backoff clears it. Do not confuse them: retrying a daily-cap 429 every second burns your queue without clearing anything. Generic cooldown and throughput 429s from other surfaces are covered on Troubleshooting: cooldown and rate-limit 429s.
How to observe warming progress
Two read-only endpoints expose exactly where a number stands. Both are pure reads of locally persisted state — no live carrier call. Current warming state:daily_cap, the live current_day_count (sourced from the pre-send gate’s counter, so it reflects sends as they happen, not an overnight snapshot), the warming_phase (initial | ramp | steady | verified), trust_score, and days_warmed. Non-10DLC numbers return null — there is nothing to warm.
Growth-curve forecast:
off | warming | warmed), the mirrored warming_max_daily_sms ceiling, the live day count, and a 15-day forecast of how the daily ceiling grows — enough to render a progression chart or plan a campaign launch date without a per-day round-trip.
Field reference and response shapes: Number health, warming, and carrier reputation tracking.
Fix paths
Work these in order; the first one that fits is the right answer.- Stay under today’s cap. Read
daily_capversuscurrent_day_counton the warming endpoint and pace your sender so the day never crosses the cap. The ramp advances on its own clock —initial→ramp→steady→verified— and each phase step raises the cap. - Spread traffic over more numbers. If your real volume exceeds what one warming number allows, add senders and let several numbers warm in parallel. Warming is per-number, so a fleet ramps faster than one number ever will.
- Do not retry-loop within the same day. A warming 429 carries
retry_afterpointing at the next UTC midnight. That is a reset hint, not a backoff schedule — retrying every few seconds re-trips the gate, counts nothing new, and can trip the per-second gate on top. Queue the overflow for the next window or for a warmed sender. - Leave dangerous overrides alone. Do not try to raise a single number’s cap to outrun the ramp — the daily cap is derived from the phase and trust score, and forcing volume past carrier guidance is how fresh numbers earn spam flags. An operator can set a cap to
0to disable a number, not to accelerate it.
When warming completes — and when to escalate
Warming completes when the progression endpoint reportswarmed (lifecycle) and the warming endpoint settles into the verified phase with a high trust_score. From then on, the daily-cap gate no longer constrains the number; only the per-second throughput gate and your tenant-level limits apply.
A typical progression reaches warmed inside about two weeks of steady, accepted traffic. Escalate to support when:
- a number stays in the same
warming_phasefor more than 10 days with nolast_phase_advance_atmovement, or - the phase advances but the daily cap does not rise with it, or
warming_stateflips back fromwarmedtowarming.
A warming 429 is the ramp working, not an outage. Retry against the next UTC day or re-route to a warmed sender; a retry loop on the same number never clears a daily gate.