Send test copies of a template
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.
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.
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 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 code is internal_error. The
request_id field can be quoted to SendOps support to investigate.
application/problem+json