Bulk send & campaigns
Two ways to reach many people:
- Bulk send — the same text to up to 500 numbers in one call.
- Campaigns — personalised text (
{{first_name}}) to up to 10,000 recipients or contact tags, with scheduling, pause and resume.
Bulk send
POST /v1/messages/bulk-send
curl -X POST https://api.99billingsolutions.com/v1/messages/bulk-send \
-H "x-api-key: $SMS_BRIDGE_KEY" \
-H "Content-Type: application/json" \
-d '{
"from_number": "+15550100001",
"to_numbers": ["+15550100002", "+15550100003"],
"content": "Store closes early today at 5pm."
}'Fields: from_number (required), to_numbers (1–500 E.164 numbers), content (required), optional device_id. The response lists the new message ids:
{ "status": "success", "data": { "count": 2, "message_ids": ["…", "…"] } }Campaigns
POST /v1/campaigns
curl -X POST https://api.99billingsolutions.com/v1/campaigns \
-H "x-api-key: $SMS_BRIDGE_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Order shipped",
"from_number": "+15550100001",
"body": "Hi {{first_name}}, your order {{order_id}} has shipped.",
"recipients": [
{ "to": "+15550100002", "vars": { "first_name": "Ali", "order_id": "A12" } },
{ "to": "+15550100003", "vars": { "first_name": "Sana", "order_id": "A13" } }
],
"launch_now": true
}'| Field | Notes |
|---|---|
name | Required, up to 120 characters. |
from_number | Required. One of your paired phones. |
body | Required. {{variable}} tokens are filled from each recipient's vars, then from the matching contact (first_name, last_name, email, custom fields). Missing values become empty. |
recipients | List of { "to", "vars" }. |
contact_tags | Also send to every contact with any of these tags. |
scheduled_for | Optional start time (ISO 8601). |
launch_now | false saves a draft. |
Opted-out contacts and premium-rate numbers are skipped automatically; the response says how many. Control a running campaign with POST /v1/campaigns/{id}/pause, /resume and /cancel, and read progress from GET /v1/campaigns/{id}.
Pace
Each phone sends at most 6 messages a minute and 25 per 30 minutes (about 1,200 a day) so Android does not block it. Large sends simply take longer — pair more phones to go faster.
In the portal
Campaigns → New campaign builds the same request with a form: paste numbers (with optional key=value variables per line), pick contact tags, and launch or schedule it.