API referenceAutomations
Create a draft automation
POST
name + a valid trigger_kind are required; everything else can be filled in via PATCH before activation. steps (default []) is validated by email_core::validate_steps when supplied — see AutomationStep for the per-type shape and forward-only jump rule (loops are structurally impossible).
bearerAuthheader
AuthorizationBearer <token>API key sent as Authorization: Bearer <key>. Looked up by SHA-256
hash (email_core::sha256_hex) against api_keys.hash; revoked
keys and keys belonging to a suspended tenant are rejected. See the
top-level Authentication section for permission levels.
application/json- body
name*stringtrigger_kind*stringValue in
"contact_created""audience_added""manual"trigger_config?{"audience_id": "<owned audience id>"} when trigger_kind is audience_added; ignored/{} otherwise.
Default
{}from_domain_id?stringA verified sending domain id — required before activate will succeed.
steps?array<|||>Items
items <= 50Default
[]Created.
application/json- response
id?stringname?stringtrigger_kind?stringValue in
"contact_created""audience_added""manual"trigger_config?from_domain_id?string|nullsteps?array<|||>status?stringValue in
"draft""active""paused""archived"created_at?integerFormat
int64updated_at?integerFormat
int64curl -X POST "https://example.com/v1/automations" \ -H "Content-Type: application/json" \ -d '{ "name": "string", "trigger_kind": "contact_created" }'{ "id": "string", "name": "string", "trigger_kind": "contact_created", "trigger_config": {}, "from_domain_id": "string", "steps": [ { "type": "send", "subject": "string", "body_html": "string", "body_text": "string" } ], "status": "draft", "created_at": 0, "updated_at": 0}