Skip to main content

POST /campaigns/:id/schedule

Schedule a draft campaign. This populates the send queue with all subscribed contacts from the target contact book.

Authentication

JWT Bearer token (dashboard auth)

Request Body

FieldTypeRequiredDescription
scheduledAtstringNoISO 8601 datetime to schedule for
batchSizenumberNoEmails per batch (1-100000, default 100)
sendNowbooleanNoStart sending immediately
If neither scheduledAt nor sendNow is provided, the campaign is scheduled for immediate processing.

Response

{
  "success": true,
  "data": {
    "campaign": {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "status": "scheduled",
      "scheduled_at": "2026-03-08T14:00:00Z",
      "batch_size": 100
    }
  }
}

Example

curl -X POST "https://app.usesendi.com/api/campaigns/CAMPAIGN_ID/schedule" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "sendNow": true
  }'

Errors

StatusErrorCause
400Can only schedule draft campaignsCampaign is not in draft status
404Campaign not foundInvalid ID or not owned by user