Send a Transactional Email
Sends an existing draft to a single recipient as a one-off transactional email.
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
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.)
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.
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.
pending → processing → succeeded (or failed). When it reaches succeeded, the operation's result carries the send's terminal outcome.
pending.