Skip to main content

Send Campaign

Queue a ready campaign to send immediately.

The campaign must be in a startable status — draft, failed, or scheduled — and pass its readiness report. Sending a campaign in any other status returns 409 CAMPAIGN_NOT_SENDABLE. A campaign that is not yet ready returns 422 CAMPAIGN_NOT_READY, with the outstanding requirements in details. See Readiness.

On success the campaign moves to queued and the full campaign detail is returned. Email delivery happens afterward in the background; the call returns as soon as the campaign is queued.

Sending a failed campaign retries it, and sending a scheduled campaign sends it now instead of waiting for its scheduled time.

Request

POST /campaigns/{uuid}/send

This endpoint takes no request body.

Path Parameters

ParameterTypeDescription
uuidstringCampaign's UUID

Example Request

curl -X POST "https://email.easy.tools/api/v1/campaigns/550e8400-e29b-41d4-a716-446655440000/send" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"

Response

Success Response (200 OK)

Returns the full campaign, identical in shape to Get Campaign, with status now queued.

{
"data": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"name": "Spring Sale",
"status": "queued",
"subject": "Up to 40% off this week",
"preheader": "Our biggest sale of the season",
"from_name": "Acme",
"reply_to": "support@acme.com",
"from_identity": "8f14e45f-ceea-467a-9575-1a1b2c3d4e5f",
"from_email": "hello@acme.com",
"content": "## Spring sale\n\nUp to **40% off**. [Shop now](https://acme.com/sale)",
"content_editable_via_api": true,
"content_overwrite_required": false,
"audience": {
"list_uuid": "660e8400-e29b-41d4-a716-446655440001",
"segment_uuid": null
},
"readiness": {
"can_send": true,
"missing": []
},
"created_at": "2026-06-24T10:00:00Z",
"updated_at": "2026-06-26T08:00:00Z",
"last_updated_at": "2026-06-24T10:05:00Z"
}
}

See Get Campaign for the full field reference.

Error Responses

Not Found Error (404)

{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "Campaign with UUID '550e8400-e29b-41d4-a716-446655440000' not found"
}
}

Conflict Error (409 — Not Sendable)

The campaign's status is not startable. Only a draft, failed, or scheduled campaign can be sent.

{
"error": {
"code": "CAMPAIGN_NOT_SENDABLE",
"message": "Campaign cannot be sent because of its current status"
}
}

Conflict Error (409 — Quota Exceeded)

The account's daily sending limit has been reached, so the campaign could not be queued. The campaign is left failed and can be sent again once the limit resets.

{
"error": {
"code": "CAMPAIGN_QUOTA_EXCEEDED",
"message": "The daily sending limit has been reached. Try again later."
}
}

Conflict Error (409 — Send Failed)

The send was rejected for some other reason. The campaign is left failed and can be sent again later.

{
"error": {
"code": "CAMPAIGN_SEND_FAILED",
"message": "The campaign could not be sent. Please try again later."
}
}

Conflict Error (409 — Transition In Progress)

Another change to the same campaign is already in flight. Retry after a moment.

{
"error": {
"code": "CAMPAIGN_TRANSITION_IN_PROGRESS",
"message": "Another transition is already in progress for this campaign"
}
}

Validation Error (422 — Not Ready)

The campaign does not meet every requirement to be sent. details carries the readiness report: can_send is false and missing lists the outstanding requirements. See Readiness for each requirement and how to satisfy it.

{
"error": {
"code": "CAMPAIGN_NOT_READY",
"message": "Campaign is not ready to be sent",
"details": {
"can_send": false,
"missing": ["sender_email", "content", "audience"]
}
}
}