A sender identity is a real email address on a verified domain —Documentation Index
Fetch the complete documentation index at: https://docs.actionlayer.dev/llms.txt
Use this file to discover all available pages before exploring further.
assistant@yourcompany.com, mia@yourcompany.com, etc. Identities own their own approval channels, signatures, and behavior toggles.
| Method | Path | Purpose |
|---|---|---|
POST | /v1/identities | Create an identity |
GET | /v1/identities | List identities |
GET | /v1/identities/{id} | Get one identity |
PATCH | /v1/identities/{id} | Update an identity |
DELETE | /v1/identities/{id} | Delete an identity (threads/messages preserved) |
POST | /v1/identities/{id}/test-email | Send a test email from this identity |
Create
The domain must have all four DNS records verified before you can create an identity on it.Request body
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
domain_id | UUID | yes | — | Must be a verified domain |
local_part | string | yes | — | Lowercase, alphanumerics + . _ + -. Combined with the domain to form email_address. |
display_name | string | yes | — | The “From: Display Name” that recipients see |
assistant_id | UUID | no | null | Link to an Assistant record (for multi-agent setups) |
reply_to_email | string | no | null | Override the Reply-To header |
signature_text / signature_html | string | no | null | Auto-appended on sends |
thread_history_depth | int | no | 10 | How many prior messages your agent gets when reading a thread (max 20) |
approval_channel | object | no | null | Where draft notifications go — see Approval Channels below |
can_send_cold | bool | no | false | If false, identity can only reply on existing threads |
auto_approve_replies | bool | no | false | If true, drafts auto-approve and queue for delivery on submission |
email_address is derived from local_part + domain. Do not send it directly. Once an identity is created, the address cannot be changed.
Response (201 Created)
List
domain_id, status (active | disabled), limit, offset.
Update
All fields optional. Only provided fields change.approval_channel.type is telegram and a bot_token is present, the Telegram webhook is auto-registered (you don’t have to call BotFather’s setWebhook).
status accepts "active" or "disabled". Disabled identities cannot send.
Approval Channels
Each identity routes draft notifications through one channel (and optionally a secondary for escalation).Telegram
Slack
Secrets in
approval_channel.config (bot tokens, webhook URLs) are masked in API responses. The full value lives encrypted server-side. To rotate a secret, send a new approval_channel object with the updated value.secondary_approval_channel and escalation_delay_minutes to route to a backup if the primary doesn’t act in time.
Delete
Test email
Sends a deliverability test from this identity.202 with a task_id. Identity must have status: "active". Rate-limited to 10/min.
Errors
| HTTP | error | When |
|---|---|---|
| 402 | plan_limit_reached | Workspace at the identities cap (1 / 10 / 50 by plan) |
| 409 | invalid_request (already in use) | local_part@domain already exists |
| 422 | invalid_request | local_part failed validation, domain not verified, etc. |
| 422 | identity_not_active | Tried to send from a disabled identity |