IOSOR Learn
When an embedded tenant cap must stop send
Fair-share caps inside an ISV product must hard-stop send for that tenant — never return a fake delivered API 200 when the cap is hit.
Embedded multi-tenant SaaS needs fair-share caps so one noisy tenant cannot burn the shared prepaid ledger or starve siblings. A cap that only paints a dashboard warning while the API still accepts submit is theater. When the tenant hits the limit, send for that tenant must stop with an explicit product error and a mapped non-success API status. Fake delivered 200 responses destroy reconciliation and train abuse.
Caps live in the ISV product layer — not a substitute for Partner subtenant rate limits, and not silent queue drops. Honest stop: SaaS UI shows paused or capped, the embed service refuses new submits for that tenant id, and ops can export who hit the ceiling.
Write the stop contract before pilot traffic: cap unit (messages / spend / day), reset window, who may raise, and what the end user sees.
Cap hit means refuse submit, not soft-warn forever
Soft warnings are early alerts only. At the hard ceiling, the embed service returns a tenant-capped error and does not call the messaging API for new intents. In-flight messages already held may finish; new OTP and campaign submits wait for reset or an approved raise.
Log refuse with tenant id, cap rule, and timestamp. Support needs that row when a customer claims Send is broken.
Never mint delivered success on a capped path
| Response | When allowed | Forbidden when |
|---|---|---|
| Product capped / paused | Hard ceiling reached | Cap refuse path |
| HTTP non-success / mapped error | Cap refuse | — |
| Delivered / 200 success | Real accept + hold path | Cap refuse |
| Silent drop | Never | Always |
Silent drop and fake 200 match queue overflow that pretends success. Scale adjacency covers overflow stop; here the trigger is the tenant fair-share rule inside the ISV.
Align product caps with wallet stop lines
A tenant can sit under its fair-share cap while the ISV wallet stop line is already red. Then the whole embed path pauses — not only the noisy tenant. Wallet green does not waive a tenant that already burned its share. Share one status language: tenant capped vs account paused vs both.
Raise requests need a named approver. Self-serve unlimited raises defeat fair share.
Test the stop in staging with a noisy tenant
Before production, run a staging drill: one tenant floods OTP until the cap trips, siblings keep sending, exports show refuse rows without delivered fakes. If siblings stall, the cap is mis-scoped. If the noisy tenant still sees green checks, the stop is broken.
Related ops paths
- Subtenant rate limits and fair share
- Queue overflow: stop, not silent drop
- Wallet stop lines before production
Start with IOSOR
Open the IOSOR console and set your subtenant fair-share limits to enforce hard refusals at the submit gate when caps are reached. Configure your API response mapping so capped tenants receive an explicit status error instead of an accepted payload. Run a staging test with a noisy tenant to ensure sibling traffic flows freely while capped submits are recorded as explicit refusal log entries.
IOSOR takeaway
Soft warnings fail to protect downstream queues when a single subtenant surges. This operational guide proved that fair-share caps must act as an immediate submit gate refusal, maintaining clear separation between tenant cap hits and global wallet stop lines.
Do return distinct capped status responses to your application layer so subtenants can request limit increases appropriately. Do not return fake 200 acceptance or delivered DLRs for capped attempts, as minting false success masks real delivery failures and ruins tenant auditability.
Was this guide helpful?
Related guides
- Embedding the API vs a white-label partner portal
SaaS products that embed messaging stay on the ISV surface. White-label partner portals stay under Partner — do not mix brand, keys, and ops ownership.
- End-user send still hits one prepaid ledger
Embedded Send still debits the ISV prepaid wallet. Do not invent a second ledger the product does not fund — holds, retries, and idempotency stay honest.