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
| Parameter | Type | Description |
|---|---|---|
uuid | string | Campaign'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"]
}
}
}