Key Takeaways
- Scheduling campaigns by timezone via the Android SMS gateway API means you convert local civil time to ISO-8601 (usually UTC) before POST.
- scheduleAt is on the send body. It is refused beyond 38 days. PATCH /campaigns/{id} can re-time a campaign.
- The control plane does not know “9am in Lagos” unless you send that instant.
- A scheduled job still needs a charged, Doze-exempt phone at fire time.
- You bring airtime. Pricing is devices plus send volume.
Android sms gateway api how to schedule campaigns by timezone is clock math plus a radio that is still online at T. Ops without API: schedule campaigns by timezone. Feature: scheduled SMS.
Developer Center. You bring the phone and airtime. We meter devices and volume.
Store UTC. Speak local. Fire when the SIM is awake.
Convert timezone in your code
Recipients in IST vs EST are different instants. DST shifts. Your worker uses a tz database; the send body carries the instant.
“9:00” without a zone is how you text someone at 02:00 and earn a STOP.
scheduleAt on POST /messages
curl -X POST "https://app.sms-gateway.app/api/v1/messages" \
-H "Authorization: Bearer $SMS_GATEWAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"to":["+14155552671"],"text":"Reminder: your invoice is due tomorrow.","type":"sms","scheduleAt":"2026-09-01T09:00:00Z"}'
# Times are ISO-8601 UTC unless the string carries an offset.
# scheduleAt is refused beyond 38 days. PATCH /campaigns/{id} can re-time a campaign.Bulk lists: CSV/Excel campaigns or POST /campaigns per docs. API.
Timezone pitfalls
| Mistake | Result | Fix |
|---|---|---|
| Server local time as UTC | Shifted by the VPS zone | Always UTC in logs + payload |
| Ignore DST | An hour off twice a year | IANA tz in conversion |
| One timestamp for a global list | Night traffic in half the file | Per-row local → UTC |
| Schedule > 38 days | Refused | Re-POST or PATCH campaign later |
Civil time is a standards mess; start from IANA tz.
38-day horizon
The public send note: refused beyond 38 days. Long campaigns need a re-schedule job you own.
Quiet hours are your policy
The API will fire at the instant you send. Quiet hours, consent, STOP: blacklist.
The phone must be alive at T
Doze · failover limits. A 09:00 campaign on a dead battery is a 00:00 backlog.
Scheduled still burns airtime
Free: 300 SMS lifetime. Developer: 25,000/year. Starter/Pro/Business uncap platform volume, devices 2/5/15. Pause on Free/Developer at allowance. No unlimited carrier SMS. Pricing.
Checklist
- Per-recipient tz → UTC unit tests around DST.
- Idempotency-Key per scheduled logical send.
- Canary 10 minutes ahead on a staff phone.
- Horizon < 38 days or a re-queue worker.
Next steps
Schedule one staff SMS for 5 minutes ahead in a non-UTC zone and watch the lock screen. C# samples · setup.
Related product pages
Jump to the live product docs for this topic—not another long-form article.
- bulk SMS from Excel and CSVSpreadsheet campaigns
- bulk SMS with consent best practicesHigh-volume outreach
- scheduled SMS campaignsSend later windows
- SMS API documentationLive endpoint reference





