Send an SMS campaign

Send an SMS campaign

POST/api/v1/sms/campaigns/{id}/send

POST /sms/campaigns/{id}/send
curl -X POST 'https://www.unitpost.com/api/v1/sms/campaigns/cmp_123/send' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'User-Agent: my-app/1.0' \
  -H 'Content-Type: application/json' \
  -d '{ }'
Response · 200
{
  "object": "sms_campaign",
  "id": "id_123",
  "name": "Example",
  "status": "draft",
  "type": "marketing",
  "template_id": "template_123",
  "segment_id": "segment_123",
  "sender_id": "sender_123",
  "topic_id": "topic_123",
  "routing": "automatic",
  "scheduled_at": "2026-01-01T00:00:00.000Z",
  "hold": {
    "reason": "scheduled",
    "until": "string"
  },
  "projected_recipients": {
    "total": 1,
    "reachable": 0,
    "skipped": 0
  },
  "recipient_count": 1,
  "variable_fallbacks": {},
  "excluded_contact_ids": [
    "string"
  ],
  "started_at": "2026-01-01T00:00:00.000Z",
  "completed_at": "2026-01-01T00:00:00.000Z",
  "canceled_at": "2026-01-01T00:00:00.000Z",
  "created_at": "2026-01-01T00:00:00.000Z",
  "updated_at": "2026-01-01T00:00:00.000Z"
}

Send a draft SMS campaign. Omit scheduled_at to use the draft's saved send time when it is still in the future (otherwise it sends now), pass null to send now, or a time to schedule it. API sends run the same checks as the dashboard: plan, schedule window, carrier registration and content rules, topic, and sending limits. Anything that blocks the send returns 409 with each reason in error.details[]: field names the request field to fix (template_id, segment_id, sender_id, topic_id) and code the reason (e.g. template_not_published). A sender registered for a non-marketing use case returns 422 use_case_mismatch, and a daily sending limit returns 429 with Retry-After. Consent and recipient-local quiet hours are applied per recipient: people without marketing consent are skipped, and messages that would land in quiet hours wait for the window to open. Requires the campaigns:send capability.

Parameters1 field
FieldTypeDescription
idrequiredstring · path—
Request body1 field
FieldTypeDescription
scheduled_atstring | null—
Response · 200 fields21 fields
FieldTypeDescription
objectrequiredstring—
idrequiredstring—
namerequiredstring—
statusrequiredenumdraft | scheduled | sending | paused | sent | canceled | failed—
typerequiredenummarketing | transactional—
template_idrequiredstring—
segment_idrequiredstring—
sender_idrequiredstring | null—
topic_idrequiredstring | null—
routingrequiredenumautomatic | fixed | pool—
scheduled_atrequiredstring | null—
holdrequiredobject | null—
projected_recipientsrequiredobject | null—
recipient_countrequirednumber—
variable_fallbacksrequiredobject—
excluded_contact_idsrequiredstring[]—
started_atrequiredstring | null—
completed_atrequiredstring | null—
canceled_atrequiredstring | null—
created_atrequiredstring—
updated_atrequiredstring—
200400401403404409422429

Search docs and guides

Search the docs and product guides.