Daily spend limit
A limit in rupees for one India day. Once today's spend reaches it, new broadcasts are refused until midnight. The account owner reads and sets it from a signed-in panel session.
GET /api/v1/rcs/spend-limit
PUT /api/v1/rcs/spend-limitA day runs midnight to midnight, India time (IST). Today's spend is what was charged today, on prepaid and postpaid accounts alike: the same figure as the spend on your dashboard. Money held for a broadcast that has not sent yet is not spend.
Who can call it
Only the account owner, from a signed-in panel session. Operators and viewers get 403
not_owner. An API key gets 403 api_key_endpoint_not_allowed at any scope, so a leaked key
cannot lift the guard on your spending.
Read the limit
/api/v1/rcs/spend-limit
{
"success": true,
"daily_limit": 5000,
"today_spend": 4120.5,
"spend_known": true,
"percent": 82.41,
"state": "near",
"day": "2026-09-27",
"resets_at": "2026-09-27T18:30:00Z"
}With no limit set:
{
"success": true,
"daily_limit": null,
"today_spend": 4120.5,
"spend_known": true,
"percent": null,
"state": "none",
"day": "2026-09-27",
"resets_at": "2026-09-27T18:30:00Z"
}Set or turn off the limit
/api/v1/rcs/spend-limit
PUT /api/v1/rcs/spend-limit
{ "daily_limit": 5000 }- A number from
1to10000000(₹1 to ₹1,00,00,000) sets the limit. It is rounded to 2 decimals. nullor0turns the limit off.
The change counts at once, and the answer is the same body as the GET. After
a change, the owner is told again if the new limit is crossed that day; the
email still comes at most once a day. Every change is recorded in the audit
log as settings.spend_limit_updated, with the new and the previous limit.
What the limit refuses
Once state is reached, these calls answer HTTP 409 before the
broadcast itself is checked. Nothing is saved, started or held.
{
"success": false,
"error": "spend_limit_reached",
"code": "spend_limit_reached",
"message": "Today's spend limit of ₹5,000 is reached. New broadcasts can start again after midnight, or the account owner can raise the limit in Settings.",
"daily_limit": 5000,
"today_spend": 5012.4,
"resets_at": "2026-09-27T18:30:00Z"
}Branch on code. Wait until resets_at, or ask the owner to raise the
limit.
While the limit is reached, the send side also acts on its own:
- A
scheduledbroadcast that has never sent and falls due does not start. It endsfailedwithstatus_reason: "spend_limit_reached"on Get. Nothing is sent, and a prepaid hold is released. Send it again with a new Create. - A recurring run that falls due is skipped: no child broadcast, and the schedule carries on at its next time.
Not refused and not stopped:
- A broadcast that is already
running, including one paused overnight by the promotional time window. A day's spend can pass the limit. - Single messages from send message, and test sends.
- Retarget, which only builds a list.
- Creating, updating, pausing or resuming a recurring broadcast.
It fails open
The limit guards your budget. If the limit or today's spend cannot be read at that moment, the call goes through rather than refusing a send. A charge that is reported very late can also be left out of that day's total, so a day can pass the limit by that amount.
Live event
When today's spend passes 80% or 100% of the limit, the panel's live event
stream carries a spend.alert event:
{
"type": "spend.alert",
"data": {
"state": "near",
"daily_limit": 5000,
"today_spend": 4120.5,
"percent": 82.41,
"day": "2026-09-27"
}
}state is near or reached. Each crossing is sent once a day, and again
after the limit is changed. Today's spend is checked every few minutes, so
the event can come a few minutes after the line is crossed.