Key Takeaways
- A bulk campaign checklist for a gateway server is consent, STOP, funded SIMs, and a device pool that is not your login radio.
- Contact-list sends use POST /campaigns. Ad-hoc bursts can POST /messages with several numbers in to[]. Spreadsheet upload stays in the panel.
- HTTP 2xx is accepted. DLR and webhooks are delivered or failed. A green progress bar is not a telco receipt.
- OEM rate ceilings and carrier fair-use still bind you. Raising Android SMS limits is not unlimited operator send.
- Service pricing is based on device count and total SMS sent through the gateway. You need a working Android phone with a SIM and SMS credit from your mobile operator. Operator message costs are yours—we do not sell carrier SMS balance.
This bulk campaign checklist for a gateway server is a meeting you hold before anyone clicks send. The control plane can queue tens of thousands of rows. The Android radios cannot. If the list is “everyone who ever checked out,” you do not have a campaign — you have a complaint queue with a progress bar.
Service pricing is based on device count and total SMS sent through the gateway. Architecture: server guide. Product: bulk SMS. Lists: contacts.
If login OTP shares this SIM, the campaign is already a production incident. You just have not sent it yet.
Go / no-go before the CSV
Sign the table. Name an on-call. Delay beats a barred MSISDN. API production-readiness covers keys and webhooks; this page covers the blast itself.
Campaign gates
| Gate | Pass | Fail |
|---|---|---|
| Consent | Recorded opt-in, purpose matches copy | Purchased list, “they bought shoes once” |
| STOP | Reply path + suppression before next chunk | One-way blast, no inbox owner |
| Copy | Local language, no spam bait words | ALL CAPS prize + shortened mystery URL |
| Radio | Promo deviceIds, spare charged, airtime | OTP phone, 4% battery, empty prepaid |
| Pace | OEM ceiling respected, quiet hours by TZ | Cron as fast as HTTP allows |
Consent, STOP, language
Two-way inbox and opt-out handling: auto-reply / STOP. STOP on the API. Segment before you schedule: list segments.
POST /campaigns vs to[]
Documented bulk shape (docs win if this snippet drifts):
curl -X POST "https://app.sms-gateway.app/api/v1/messages" \
-H "Authorization: Bearer $SMS_GATEWAY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: bulk-inv-1042" \
-d '{"to":["+14155552671","+14155552672"],"text":"Hi — invoice INV-1042 of BDT 2,400 is due on 12 Aug.","type":"sms","dedupe":true}'
# Contact lists: POST https://app.sms-gateway.app/api/v1/campaigns (see https://docs.sms-gateway.app/).
# Panel CSV upload remains available for spreadsheet campaigns.Panel CSV remains for spreadsheet operators. OpenAPI owns field names. Do not invent /api/send-bulk-sms.
Pace the phones
You need a working Android phone with a SIM and SMS credit from your mobile operator. Operator message costs are yours—we do not sell carrier SMS balance. Count docks including failover. Multi-device. Backup device. Quiet hours by recipient timezone, not your office clock.
OTP stays off this pool
Login codes on a promo SIM die the hour you import 80,000 rows. OTP. Webhooks: delivery events.
Checklist
- Consent file exists; STOP tested on a staff handset.
- Promo
deviceIdsonly. - Airtime and chargers for peak hour.
- Canary 20 numbers, then 2%, then the rest.
- HMAC on inbound DLR.
- Rollback: pause campaign, do not “retry all failed” blindly.
Next steps
Run the table as a go/no-go. If any row is red, the CSV waits. Pricing if device count is the blocker — not a fake unlimited carrier SKU.
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
- SMS API documentationLive endpoint reference
- device and SMS volume pricingPlans and allowances





