Send a Transactional Email

Sends an existing draft to a single recipient as a one-off transactional email.

POSThttps://api.audienceful.com/v2/transactional
curl --location --request POST 'https://api.audienceful.com/v2/transactional' \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <your-api-key>' \
--header 'Idempotency-Key: <unique-key>' \
--data-raw '{
    "draft": "july-newsletter",
    "email": "person@example.com",
    "subject": "Your receipt",
    "event_properties": {
        "order_id": "1234"
    },
    "fields": {
        "first_name": "Jane"
    }
}'
{
  "id": "tXn3nKq8Zs4pLm9vRb2xJc",
  "operation_id": "task-abc123",
  "operation_url": "https://api.audienceful.com/v2/operations/task-abc123",
  "status": "pending",
  "draft": "july-newsletter",
  "email": "person@example.com"
}

Requires the emails:send scope. Renders an existing draft and emails it to one recipient — ideal for receipts, password resets, welcome emails, and other one-off, event-driven sends.

The send is processed asynchronously: the response returns 202 Accepted with an operation_id you can poll, plus the id of the created transactional email record.

Auto-added recipients. By default, an email that isn't already a contact is added as an active subscriber (source api) and triggers your "Subscribed" automations, so the send always has a deliverable target. An existing contact is left as-is, and an unsubscribed contact still receives the email. Pass add_contact: false to send without adding anyone to your list.

Transactional sends are kept separate from campaigns: they do not appear in the Send Reports list. Track an individual send by polling its operation; opens, clicks, and bounces are attributed back to the send and show up in the contact's activity.

Requirements

Sending requires a verified workspace — one with a valid payment method and no failed payment, the same billing gate the bulk campaign path enforces. An unverified, delinquent, or blocked workspace receives a 403.

Monthly limit

The Free plan includes 100 transactional sends per calendar month; paid plans are unlimited. The count resets at the start of each month.

Once the allowance is spent, further requests return a 403 with the error code transactional_quota_exceeded (a permission_error — distinct from the 429 you'd get for rate limiting, so you can tell "out of quota this month" apart from "slow down"). Only sends that were actually attempted count against the limit — a send that ends up suppressed or failed is refunded and doesn't consume quota.

Body

draftstringrequired
The id or slug of the draft to send. The slug is derived from the draft's title, slugified (e.g. a draft titled "July Newsletter" has the slug july-newsletter) — a readable handle that's unique within your workspace. The id is matched first, so it always wins if a slug ever collides with another draft's id.

Must belong to the API key's workspace — an unknown id or slug returns a 404. A draft flagged as spam returns a 400.

A draft's slug is assigned from its title the first time it's saved and is stable — renaming the draft later doesn't change it, so both the id and the slug are safe to hard-code in an integration. (An untitled draft has no slug; address it by id.)

emailstringrequired
The recipient's email address. Added to the workspace as an active subscriber if not already a contact.
subjectstring
The email subject. Defaults to the draft's title when omitted. Truncated to 255 characters.
preheaderstring
Preview text shown after the subject in most inboxes. Up to 255 characters.
event_propertiesobject
An optional dictionary exposed to the email's merge tokens for this send — exactly like an automation trigger's event payload. Use it to inject per-send values (an order number, a reset link, etc.) into the draft's content.
Properties
example_propertystring
An example property. This value is inserted into the email wherever the body references a matching data variable.
fieldsobject
Custom field values to set on the recipient contact before sending, keyed by each field's data_name. Merged into an existing contact's fields. When add_contact is false and the recipient isn't already a contact, these values still feed this send's merge tags but nothing is saved.
Properties
custom_fieldstring | boolean | number
An example custom field. The data_name for each field is used as the key.
add_contactbooleandefault: true
Whether to add the recipient to your contact list. Defaults to true — a recipient who isn't already a contact is added as an active subscriber so the send has a deliverable target. Set it to false to send without adding them to your list: a recipient who isn't already a contact is emailed without being saved (no contact is created and no "Subscribed" automation fires), and an existing contact's list membership is left untouched. Use this for one-off sends to addresses you don't want to keep — a confirmation to a would-be signup who hasn't opted in, for example.

Pass an Idempotency-Key header so a retried request never double-sends. A repeat of the same key returns the original response.

Response

Returns 202 Accepted.

idstring
The id of the created transactional email record.
operation_idstring
The id of the async send operation.
operation_urlstring
The full URL of the operation — poll it to watch the send progress from pendingprocessingsucceeded (or failed). When it reaches succeeded, the operation's result carries the send's terminal outcome.
Result status values
sent
Accepted by the mail provider. The result also includes the provider_message_id.
suppressed
The recipient was not emailed because their address had previously hard-bounced or was list-cleaned. Retrying won't help until the address recovers.
failed
The provider rejected the send, or the draft was flagged as spam. The result includes an error message.
statusstring
The initial status of the send, pending.
draftstring
The id of the draft being sent. Always the canonical id, even when you addressed the draft by its slug in the request — so you can confirm which draft a slug resolved to.
emailstring
The recipient the email is being sent to.
Last updated: August 17, 2026