Key Takeaways
- API how-to for segmenting contact lists: keep OTP, receipts, and promo in separate lists (and separate deviceIds). Confirm campaign/list fields in OpenAPI — do not invent segment=vip.
- Spreadsheet upload stays in the panel; bulk to[] is POST /messages; list campaigns are POST /campaigns.
- Suppression (STOP) is a segment of its own: exclude it from every promo send.
- Airtime follows every row you actually send, including retries.
- 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 Hub C how-to is how to segment contact lists when you send through an Android SMS gateway API. Segmentation is your data model plus whichever list/campaign objects the OpenAPI actually exposes. Guessing field names from a blog is how you 4xx on launch day.
Service pricing is based on device count and total SMS sent through the gateway. Contacts and lists, API docs.
A “VIP segment” that still blasts from the OTP SIM is not a segment. It is a routing bug with a marketing name.
Hub C: lists in your app vs the panel
Many teams keep source-of-truth in the CRM and only push E.164 slices at send time. Others use panel lists. Both need STOP exclusion. STOP how-to.
Segment table
| Slice | List | deviceIds | STOP? |
|---|---|---|---|
| Login / 2FA | Never a promo export | OTP SIM | N/A (not a campaign) |
| Order / shipping | Transactional | Ops SIM | Usually no |
| Consented promo | Marketing minus suppression | Promo SIM | Yes |
| Suppression | Do-not-send | — | Already out |
POST /campaigns, not a mystery segment API
Contact-list campaigns: POST /campaigns. Ad-hoc numbers: POST /messages with to[]. Spreadsheet upload stays in the panel. Sample bulk shape:
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.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.
OTP never rides a promo list
OTP verification. Peak CSV: bulk consent.
CSV is still a list
Excel eating plus signs is a format incident. Invalid number format. Deduplicate before you burn airtime.
Checklist
- Lists named by purpose, not “all.”
- STOP excluded from promo exports.
- Campaign fields from docs, not this article.
- OTP contacts never in the blast CSV.
- Device pool matches the slice.
Next steps
Confirm list/campaign objects in the docs, pair via downloads, canary one slice of five staff numbers.
Related product pages
Jump to the live product docs for this topic—not another long-form article.
- SMS API documentationLive endpoint reference
- device and SMS volume pricingPlans and allowances
- contacts, lists, and segmentsAudience hygiene
- Android SMS gateway product guideDefinition, product, and how to buy





