Skip to main content

Send Campaign

Send a campaign immediately, or schedule it for future delivery. To send now, omit the body (or send an empty object). To schedule, include a scheduled_at ISO 8601 datetime in the future.

The campaign must be in Draft or Scheduled status with all required fields configured: sender name, message content, and at least one recipient list or tag.

Endpoint​

POST /sms/campaigns/:id/send

Returns: 200 OK

Path Parameters​

ParameterTypeRequiredDescription
idstringYesThe campaign ID.

Headers​

HeaderValueRequired
AuthorizationBearer <your-api-key>Yes
Content-Typeapplication/jsonWhen sending a body
Idempotency-KeyAny unique string, max 256 charsNo — makes a retry safe; see Idempotency

Body Parameters​

ParameterTypeRequiredDescription
scheduled_atstringNoISO 8601 datetime in the future. Omit to send immediately.
Send vs. Schedule
  • Omit scheduled_at — the campaign moves to Queued and starts sending right away.
  • Include scheduled_at — the campaign moves to Scheduled and will start sending at that time. You can change the scheduled time by calling this endpoint again with a new scheduled_at, or cancel the campaign before it sends.

Response​

{
"id": "0192a1b2-c3d4-7e5f-9000-abcdef123456"
}

Response Fields​

FieldTypeDescription
idstringThe campaign ID. Use this with GET /sms/campaigns/:id to poll the campaign status as it progresses.
tip

The campaign is queued, not yet delivered. Use GET /sms/campaigns/:id to poll the campaign status as it progresses through Queued → Sending → Sent.


Examples​

Send Now​

curl -X POST "https://api.arsel.sa/v1/sms/campaigns/0192a1b2-c3d4-7e5f-9000-abcdef123456/send" \
-H "Authorization: Bearer $ARSEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'

Schedule for Later​

curl -X POST "https://api.arsel.sa/v1/sms/campaigns/0192a1b2-c3d4-7e5f-9000-abcdef123456/send" \
-H "Authorization: Bearer $ARSEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"scheduled_at": "2026-05-01T09:00:00Z"
}'

Error Responses​

{
"status_code": 400,
"name": "bad_request",
"message": "Campaign is missing required fields and cannot be sent"
}

Related: Cancel a campaign