Send a Test Email
Send a one-off test email of a campaign to a single address.
A test email lets you preview a campaign in a real inbox while you are still
building it. The campaign's current subject, body, and sender are rendered and
sent to the address you provide, with placeholder contact data — personalization
merge tags show sample values (such as a name like John Doe) rather than a real
contact's details.
A test is a preview only. It does not start the real send, does not reach the
campaign's audience, does not record recipients, and does not change the
campaign's status. You can send a test from a campaign in any status. A test is
still a real outbound email, so if the send is rejected the call returns
409 TEST_SEND_FAILED.
Because it is a real outbound email, your account must be allowed to send. If it
is not, the call returns 403 PLAN_INACTIVE and no test email goes out. See
Active plan required.
Testability
A campaign can be tested once it has the three things needed to render the email:
a subject, a body (content), and a sender identity (from_identity). If any
are missing, the request returns 422 CAMPAIGN_NOT_TESTABLE, and details.missing
lists which are absent — a subset of subject, content, and sender_identity.
This is a smaller set than the readiness a real send
requires: a test does not need an audience or a from_name.
| Missing key | How to satisfy |
|---|---|
subject | Set subject on the campaign. |
content | Set the email body with the content field. See Campaign body. |
sender_identity | Set from_identity to a sender identity. |
The sender identity must also be ready to send from. A campaign whose sender is
not returns 409 SENDER_NOT_SENDABLE — check is_sendable on the identity, and
see Sending readiness.
Rate Limit
Test sends are limited to 20 per hour and 100 per day per account, counted across
every campaign and automation test. Exceeding either limit returns
429 TEST_MESSAGE_RATE_LIMITED.
Request
POST /campaigns/{uuid}/test
Path Parameters
| Parameter | Type | Description |
|---|---|---|
uuid | string | Campaign's UUID |
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
email | string | Yes | The single address that receives the test email. A missing or invalid address returns 422 VALIDATION_ERROR. |
language | string | No | An ISO 639-1 language code (two letters) to preview a specific translation. Omit to use the campaign's own language. A value that is not a valid code returns 422 VALIDATION_ERROR. |
To send a test to several inboxes, call this endpoint once per address.
Example Requests
curl -X POST "https://email.easy.tools/api/v1/campaigns/c0578a15-1b1d-41e4-8dd3-caa3ac7ccf47/test" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"email": "you@example.com"
}'
To preview a specific translation, include language:
curl -X POST "https://email.easy.tools/api/v1/campaigns/c0578a15-1b1d-41e4-8dd3-caa3ac7ccf47/test" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"email": "you@example.com",
"language": "en"
}'
Response
Success Response (204 No Content)
On success the API returns 204 No Content with an empty body. The test email is
sent to the address you provided.
Error Responses
Forbidden Error (403 — Plan Inactive)
The account is not allowed to send. No test email goes out and the campaign is unchanged. See Active plan required.
{
"error": {
"code": "PLAN_INACTIVE",
"message": "Sending is not allowed for this account."
}
}
Not Found Error (404)
The campaign UUID is unknown or malformed.
{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "Campaign with UUID 'c0578a15-1b1d-41e4-8dd3-caa3ac7ccf47' not found"
}
}
Validation Error (422 Unprocessable Entity)
email is missing or invalid, or language is not a valid ISO 639-1 code.
{
"error": {
"code": "VALIDATION_ERROR",
"message": "The given data was invalid",
"details": {
"email": ["The email field is required."]
}
}
}
Validation Error (422 — Not Testable)
The campaign is missing one or more of the fields a test needs to render.
details.missing lists which of subject, content, and sender_identity are
absent. See Testability.
{
"error": {
"code": "CAMPAIGN_NOT_TESTABLE",
"message": "Campaign is not complete enough to send a test",
"details": {
"missing": ["subject", "content"]
}
}
}
Conflict Error (409 — Sender Not Sendable)
The campaign's sender identity is not ready to send from. See Testability.
{
"error": {
"code": "SENDER_NOT_SENDABLE",
"message": "The sender identity of this campaign is not enabled for sending."
}
}
Conflict Error (409 — Test Send Failed)
The test email could not be delivered — for example because a sending quota was exhausted. Retry later.
{
"error": {
"code": "TEST_SEND_FAILED",
"message": "The test email could not be sent. Please try again later."
}
}
Rate Limit Error (429 Too Many Requests)
The account exceeded 20 test sends per hour or 100 per day. See Rate Limit.
{
"error": {
"code": "TEST_MESSAGE_RATE_LIMITED",
"message": "Too many test messages have been sent. Please try again later."
}
}
Service Unavailable Error (503)
The account's plan could not be verified. No test email goes out and the campaign is unchanged. Retry the request. See Active plan required.
{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "The request could not be completed. Try again shortly."
}
}