Plan campaign volume under carrier-assigned 10DLC throughput
Once TCR vets your brand, the mobile network operators assign it real send limits: T-Mobile a per-brand daily cap on message parts, AT&T a per-campaign messages-per-minute class. Orbit reads both from the registry and returns them, derived from your brand’s TCR trust score, onGET /api/v1/compliance/10dlc/brands/:id/throughput. This guide walks
reading that assignment and planning campaign volume against it.
Two tables: the pre-submit estimate and the carrier-assigned grant
The 10DLC path has two distinct throughput tables. Keep them separate:- Pre-submit, per-number estimate. Before you file, the preflight linter checks the expected volume you declare against a per-number estimate and warns when the two disagree. It is a filing aid: it scores the payload, it grants nothing.
- Post-registration, carrier-assigned grant. After the brand is vetted, the MNOs assign the limits below, keyed to the TCR trust score. These are the ceilings production traffic actually runs under, and they are what this page plans against.
Two structural facts shape every plan you build on these tables:
- The daily cap is per brand: it covers every campaign and number on the brand, so campaigns on one brand share one cap. The MPM class is per campaign: each campaign on the brand gets it independently.
- The cap counts message parts. A message that segments into three parts consumes three of your daily cap.
If TCR has not returned a score yet, the read reports the provisional
standard grant (Low tier, Class C) with
provisional: true. Plan on
the provisional grant until the score lands, then re-read before you
raise any pacing ceiling.Reading the assignment
Request the grant for a brand, passing the registered entity type and, optionally, how many parts the brand has already sent in the current 24h window:200 OK):
consumption block is the read-back you get
only when you pass sent_today; without it, consumption is null.
What “silently drops” means operationally. T-Mobile does not return
an error when a brand crosses its daily cap. Parts above the cap are
filtered without a hard failure your send path can react to, so the
first symptom is downstream: delivery rates sag while sends report
accepted. The consumption read-back is how you see the approach
before it happens, in four bands: ok below 80% of the cap, warning
at 80%, critical at 95%, exceeded at 100%. Treat warning as your
planning signal, not exceeded: by the time the cap is consumed, the
overage is already being dropped.
Sizing daily volume and pacing under the assigned tiers
Run both ceilings and plan to the lower one:- Daily volume against the brand daily cap. Sum the parts you
expect across every campaign on the brand (messages times average
segments) and keep the total inside the cap. On the Medium tier
above, 40,000 parts/day is the outer bound for all campaigns on
brand
B7F3A2combined. - Per-campaign pacing against the MPM class. Each campaign may not exceed its class sustained. Class B’s 240 MPM is 345,600 messages/day in principle, so for most brands the daily cap binds long before the MPM class does; the MPM class binds when a single campaign bursts, for example a batch send at 09:00.
- Keep an internal target below the cap. The carriers’ filtering
starts at the cap itself; schedule so a normal day lands in the
okband (below 80%) and a peak day stays under 100%. - Splitting campaigns across a shared brand cap. Because the cap
is per brand, two campaigns on one brand compete for the same parts.
Either budget daily volume per campaign and monitor the shared
consumptionread-back, or place high-volume traffic families on separate brands so each gets its own cap. Adding numbers to a campaign does not raise the daily cap; only a higher score or a different entity type does (see Raising your tier).
Raising your tier
The score floors are the ladder: clear the next floor and the grant rises with it (50 moves you to Medium and Class B, 75 to High and Class A, 100 to the unlimited tier). When a re-vet helps.POST /api/v1/compliance/10dlc/brands/:id/revet
requests a fresh grading of the brand. It helps when the underlying
brand record has genuinely changed since the last vetting: more traffic
history on the brand, corrected entity data, or a resolved rejection
pattern. The re-vet re-grades the brand against the same score-to-tier
contract shown above.
When a re-vet cannot help.
- It never changes the contract itself: the same score always maps to the same tier, on every brand, for every sender. If your score is stable, a re-vet returns a stable score and spends the re-vet fee for nothing.
- It does not lift the Sole Proprietor ceiling. A
SOLE_PROPRIETORbrand is held at the 2,000-part daily cap and Class D regardless of score; that is a function of the entity type, not the grading.
PRIVATE_PROFIT, with
the EIN the brand schema requires) so the score-derived tiers apply.
That is an entity-type change on a new filing, walked in the
10DLC registration guide, not a re-vet of
the sole-prop brand.
Planning around review latency
TCR sends no webhook when a re-vet completes. Orbit reconciles non-webhook provider state every three hours, so the score, and with it the tier the throughput read returns, updates on the next pass after the registry re-grades the brand. The brand and campaign profiles walkthrough covers the same cadence for profile status; the manualPOST /api/v1/compliance/compliance-profiles/:id/resync forces a
re-read when you do not want to wait for the next pass.
Plan the sequence backwards from the date you need the volume: request
the re-vet days ahead of a ramp, confirm the new score on the vetting
read, confirm the new tier on the throughput read, and only then raise
the pacing ceilings you enforce on the send side. Raising pacing before
the tier read confirms the grant puts traffic into the silent-drop zone
on a cap that has not moved.
What Orbit does not do
- Orbit reads and displays the carrier-assigned tier; it does not set, negotiate, or appeal it. The assignment is between your brand and the registry and the MNOs.
- Caps and silent filtering are MNO behavior. Orbit never guarantees deliverability at any tier; the read-back tells you where you stand, and the planning above keeps you inside it.
- There is no platform-side pacing mandate beyond what you configure. Per-campaign ceilings, schedule windows, and rate overrides are tenant settings; Orbit enforces exactly those and nothing hidden on top. Your registration posture stays tenant-owned, as on brand and campaign profiles.
See also
- 10DLC registration — brand and campaign filing, and the trust-score tier table
- Free tool: 10DLC throughput & cost calculator — the pre-registration estimator over the same tier tables
- 10DLC rejections and re-vet — the decoder and the raw throughput read
- 10DLC preflight linter — the pre-submit expected-volume warning
- 10DLC brand and campaign profiles — the filing lifecycle and the 3-hour reconciliation cadence
- Cross-schedule planner walkthrough — spreading scheduled volume across send windows
- Channel rate overrides — the tenant-configured per-channel rate caps