Surge

Send to Many People

Surge has two mechanisms for sending to multiple recipients: Blasts for one-time sends and Audiences for reusable contact lists. The choice between them depends on whether the same group of people will receive messages more than once.

Blasts vs Audiences

Use a Blast when you have a list of recipients you're assembling specifically for this send. You pass the recipient list at send time and don't need to maintain it afterward — weekly flash sales, event announcements, one-time notifications.

Use an Audience when the same group of people receives messages regularly. You maintain the audience over time (adding and removing contacts), then blast the whole audience. Think weekly newsletters, customer cohorts, or geographic segments.

Both send the same underlying message; the difference is how you manage the recipient list.


Blasts

Send to a list of phone numbers

The simplest case: pass E.164 phone numbers directly in the to array.

curl -X POST https://api.surge.app/accounts/YOUR_ACCOUNT_ID/blasts \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "pn_01jrzhe8d9enptypyx360pcmxm",
    "body": "Flash sale: 30% off everything this weekend. Shop at acme.com/sale",
    "to": ["+18015551234", "+18025551234", "+18035551234"]
  }'

Send to contacts

Pass contact IDs (with ctc_ prefix) instead of phone numbers. This links the blast to your contact records for tracking and opt-out management.

curl -X POST https://api.surge.app/accounts/YOUR_ACCOUNT_ID/blasts \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "pn_01jrzhe8d9enptypyx360pcmxm",
    "body": "Your subscription renews tomorrow. Manage it at acme.com/account",
    "to": [
      "ctc_01jrzhe8d9enptypyx360pcmxa",
      "ctc_01jrzhe8d9enptypyx360pcmxb",
      "ctc_01jrzhe8d9enptypyx360pcmxc"
    ]
  }'

Schedule a blast

Add send_at to queue the blast for a future time:

curl -X POST https://api.surge.app/accounts/YOUR_ACCOUNT_ID/blasts \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "April sale launch",
    "from": "pn_01jrzhe8d9enptypyx360pcmxm",
    "body": "Acme Corp: Our biggest sale of the year starts now. Shop: acme.com/spring",
    "to": ["aud_01jrzhe8d9enptypyx360pcmxz"],
    "send_at": "2026-06-01T09:00:00Z"
  }'

Audiences

Create an audience

An audience is a named contact list. Create it first, then populate it.

curl -X POST https://api.surge.app/accounts/YOUR_ACCOUNT_ID/audiences \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Premium subscribers"
  }'
{
  "id": "aud_01jrzhe8d9enptypyx360pcmxz",
  "name": "Premium subscribers"
}

Add contacts to the audience

curl -X POST https://api.surge.app/audiences/aud_01jrzhe8d9enptypyx360pcmxz/contacts \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "ctc_01jrzhe8d9enptypyx360pcmxa"
  }'

Repeat for each contact, or build this into the workflow that creates or updates contacts.

Blast the audience

Pass the audience ID in the to array. Surge expands the audience at send time, applying opt-out status so messages only go to contactable recipients.

curl -X POST https://api.surge.app/accounts/YOUR_ACCOUNT_ID/blasts \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "pn_01jrzhe8d9enptypyx360pcmxm",
    "body": "Your monthly update from Acme Corp: acme.com/newsletter/april",
    "to": ["aud_01jrzhe8d9enptypyx360pcmxz"]
  }'

You can mix audience IDs, contact IDs, and raw phone numbers in the same to array.


Volume caps

Campaign volume limits apply to all sends, including blasts:

Campaign volumeT-Mobile limit
low2,000 SMS segments per day
highUp to 200,000 segments per day (subject to TCR trust score)

Surge queues messages within your daily cap and delivers them in order. If you regularly approach the low cap, request a volume increase through support after your campaign is approved.


Tracking a blast

Blast-level delivery metrics (deliverability rate, opt-out rate) are available in the dashboard under the Blasts section. Per-message delivery status comes through the message.delivered and message.failed webhook events.