Campaigns
Transactional email
Send a confirmed email to one recipient from your product API.
Transactional emails are automated, API-triggered messages to one recipient after something happens in your product — receipts, invites, password resets, magic links.
They are not campaigns and not Journey enrollments. You design the email once in Audryo, confirm it, then your backend calls transactional_send whenever you need to deliver that template.
Reference: sendTransactionalEmail Scope: deliver Always send: Idempotency-Key derived from your business id (order id, reset token id, …)
How it works
- Compose a Message Document in the product (or via API) with merge tags.
- Confirm the revision (
status: "confirmed"). - Send from your backend with recipient email + optional data variables.
- Audryo queues delivery through your connected ESP and records the delivery.
Prerequisites
- A verified sending identity (Resend recommended).
- A Message Document with
status: "confirmed"— see Emails. - A workspace API token that includes
deliver.
Personalization
- Contact properties:
{{ contact.first_name }} - Fallback when empty:
{{ contact.first_name | "there" }} - Data variables from the send call:
{{ data.order_id }}or{{ order_id }}
Malformed filters are linted when you revise/confirm — fix them before going live. Data variable names are case-sensitive.
Send
email is required. Optionally pass:
externalId— upsert/link a contactdataVariables— merge-tag values for this sendcontactProperties— update properties on the contact
curl -X POST "$AUDRYO_API_BASE/projects/$PROJECT_ID/message_documents/$MESSAGE_ID/transactional_send" \
-H "Authorization: Bearer $AUDRYO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: receipt-$ORDER_ID" \
-d '{
"email": "amelia@example.com",
"externalId": "usr_9f1c2a",
"dataVariables": {
"order_id": "ord_1842",
"total": "$42.00",
"receipt_url": "https://app.example.com/orders/ord_1842"
}
}'Eligibility and suppressions
Transactional sends still fail closed on hard suppressions (bounce, complaint, manual block, blocklist). Connect your ESP webhook so provider feedback stays fresh.
Unsubscribed marketing contacts may still receive genuine transactional mail when policy allows — but promotional content must not use this path.
Testing safely
- Use Audryo’s test delivery on the Message Document for visual checks.
- For API integration tests, send with a stable
Idempotency-Keyso retries
do not duplicate.
- Prefer internal addresses first; watch ESP logs and Audryo recipient
reports before production traffic.
Common errors
| Situation | What to do |
|---|---|
| Domain not verified | Finish ESP setup |
| Message not confirmed | Revise with status: "confirmed" |
Missing deliver scope | Create a token that includes deliver |
| Missing merge data | Include every required dataVariables key |
409 with Retry-After | Idempotent request still in flight — wait and retry same key |