Send test copies of a template

Search Documentation

Search across all developer documentation

entities

Send test copies of a template

POST /v1/templates/{slug}/test
Auth required api.templates.test

Sends one rendered copy of the template to each address in recipients, so a person can look at the real thing in a real inbox.

This is real email from the organization's own SES account and it cannot be recalled. It goes to no audience, list or segment: at most ten individually named addresses, which need not be contacts. Consent and suppression are deliberately NOT applied — a test send reaches somebody who unsubscribed, bounced, or is on the SES suppression list. That is the point (you are showing an email to a colleague) and it means a successful test send is not evidence that a real send to the same address would go out. To mail an actual audience, use POST /v1/broadcasts and POST /v1/broadcasts/{id}/send, which apply the filtering this path skips.

The whole recipient list is validated before anything is sent, so a typo cannot leave you having delivered half the copies. The send loop does not stop at a failure: sent_to and failed partition the list, both always present, so a retry does not mail everyone else twice.

Render first with POST /v1/templates/render and check variables_unresolved — a merge field you have not supplied arrives blank, and unlike a render you cannot take this back.

Supply variables or profile_id, not both. Test sends are rate limited per organization (and per user where the credential has one).

Path parameters

slug string required

Template name (e.g. welcome).

Request body

Content type: application/json

recipients array<string<email>> required

Individually named addresses. No audience, no default.

Constraints: 1–10 items

variables object optional

Merge values for the render. Supply this or profile_id, not both.

profile_id string<uuid> optional

A stored test-data profile to render with instead of variables.

Responses

Errors follow the RFC 7807 problem format — see the error reference.

200 Per-recipient outcomes application/json
slug string required
sent_to array<object> required

Each entry in sent_to:

recipient string required
message_id string required
subject string required
failed array<object> required

Each entry in failed:

recipient string required
reason string required
warning string required

States in words that consent and suppression were not applied. A field rather than only prose, so a client rendering this result cannot drop it.

401 Missing, malformed, or unknown API key application/problem+json
403 Either the credential lacks the required scope (code: invalid_scope), or it is bound to the test environment and this operation is irreversible (code: test_environment_forbidden). Branch on code: the first is fixed by granting the scope, the second only by using a live credential. See the "Live and test credentials" section of the API description. application/problem+json
404 Resource not found application/problem+json
422 A query parameter, path value or body field failed validation. The body is a validation_failed Problem. When the refusal is about a reference — a segment key, template slug, topic or attribute name the organization does not have — it additionally carries validation_code, field, line/column, missing, candidates and next_step, so a client can correct the call without a second round of guessing. See ValidationProblem. application/problem+json
429 Per-org rate limit exceeded application/problem+json
500 Unexpected server-side failure. The code is internal_error. The request_id field can be quoted to SendOps support to investigate. application/problem+json