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 address, subject, email content (via a template), and at least one recipient list or tag.

Endpoint

POST /email/campaigns/:id/send

Returns: 200 OK

Path Parameters

ParameterTypeRequiredDescription
idstringYesThe campaign ID.

Headers

HeaderValueRequired
AuthorizationBearer <your-api-key>Yes
Content-Typeapplication/jsonYes

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"
}
tip

The campaign is queued, not yet delivered. Use GET /email/campaigns/:id to poll the campaign status as it progresses through QueuedSendingSent.


Examples

Send Now

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

Schedule for Later

curl -X POST "https://api.arsel.sa/v1/email/campaigns/0192a1b2-c3d4-7e5f-9000-abcdef123456/send" \
-H "Authorization: Bearer be_your_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