# AgentiSend > Transactional and marketing email for AI agents, built to reach the inbox of the person expecting > it. Send over REST or MCP. Every sender takes a budget it cannot exceed, risky sends wait > for approval, one kill switch stops all of them, and every 4xx names the fix and its endpoint. Base URL: https://api.agentisend.com Auth: `Authorization: Bearer as_…` on every request. MCP server: https://api.agentisend.com/mcp (streamable HTTP, bearer auth) Docs: https://agentisend.com/docs Sign up: https://agentisend.com/#get-started ## Reading this site as a machine Every page is complete static HTML with no JavaScript required, and there is no user-agent branching: you get the same bytes a browser gets. Every page also has a Markdown twin at `.md`. Content negotiation (`Accept: text/markdown` on the HTML URL) is origin configuration and is not live until applied. - https://agentisend.com/openapi.json — OpenAPI 3.1 for every operation. The docs are generated from it. - https://agentisend.com/llms-full.txt — Every page on this site as Markdown, concatenated. - https://agentisend.com/pricing.json — List prices. Money is integer minor units, never a formatted string. - https://agentisend.com/status.json — Where to read availability: the live per-component feed and the daily-uptime history. ## Figures - 167 API operations, 71 error codes, 48 webhook event types. - Batch: up to 500 messages in one `POST /emails/batch`; each item succeeds or fails on its own. - Rate ceiling: 600 requests per key per 60 seconds by default. - A new key is created with a budget already on it: the plan's inclusion per monthly period (3,000 during the trial). - List endpoints page at up to 100 rows. - Retention: 30d/90d/180d. - Enforcement acts on bounce rate at 2% (warn) then 4% (pause). No step until 100 delivered-or-bounced sends in the window. - Complaint rate at 0.05% (warn) then 0.08% (pause). The ladder never enters a throttle rung. - A webhook is retried 10 times at 1, 5, 15, 60, 180, 360, 720, 1440, 2880, 4320 minutes, then dead-lettered. - SLA: 99.9% monthly uptime on Scale, credits 10% / 25% / 50% below 99.9% / 99.5% / 99%. Write to support to apply a credit; there is no automated credit job. ## Plans There is no free plan. A new account can run the 14-day Pro trial, no card, up to 3,000 emails, once. Without a plan only test (simulation) sends are accepted. - Starter ($9/month, or $4.05/month billed yearly at $48.60 (55% off)): 30,000 emails/month, 30-day log retention, unlimited domains, sending pauses at the inclusion, no extra charge. - Pro ($22/month, or $9.90/month billed yearly at $118.80 (55% off)): 100,000 emails/month, 90-day log retention, unlimited domains, sending pauses at the inclusion, no extra charge, starts with a 14-day Pro trial, no card, up to 3,000 emails. - Scale ($59/month, or $26.55/month billed yearly at $318.60 (55% off)): 100,000 emails/month, 180-day log retention, 1,000 domains, sending pauses at the inclusion, no extra charge. ## For agents Pages written for a model to read: the question each one answers is its first sentence. - https://agentisend.com/agents — Agent quickstart: Six numbered steps from no account to a delivered email, with the exact request and the exact response shape for each. - https://agentisend.com/how-agents-see-this-site — How agents see this site: What a crawler or a model gets when it fetches these pages, and the exact curl that proves each claim. - https://agentisend.com/email-for-ai-agents — Email for AI agents: An AI agent should send email through an API that caps it, detects its loops, can be stopped by a human and explains its own refusals. This page names the endpoint for each of those. - https://agentisend.com/agent-email-budgets — Agent email budgets: To cap how much email an AI agent can send, give it its own API key and set a budget on that key with PATCH /limits/keys/{id}. The ceiling is enforced before the send. - https://agentisend.com/agent-email-loop-detection — Agent email loop detection: To stop an AI agent from sending the same email in a loop, send through a key whose recent history is checked before every send. The guard refuses the repeat, records it for a human, and reports the key's loop state. - https://agentisend.com/agent-email-approvals — Agent email approvals: To require human approval before an AI agent sends email, let the send be held: it becomes a row in the approval queue that a person approves or rejects with one request, and the agent is told to wait rather than that it failed. ## Guides - https://agentisend.com/docs/guides/quickstart — Quickstart: Verify a domain, create a key, send the first email — in Node, Python or curl. - https://agentisend.com/docs/guides/agents — Agents — MCP and the CLI: Connect Claude Code, Cursor, Windsurf, VS Code or any remote-MCP client to the same API your code uses. - https://agentisend.com/docs/guides/budgets-and-the-kill-switch — Budgets and the kill switch: Per-key spend ceilings, what happens when one is reached, and the one request that stops everything. - https://agentisend.com/docs/guides/approvals — Approvals: When a send waits for a person, how the queue behaves, and what an agent sees while it waits. - https://agentisend.com/docs/guides/deliverability — Deliverability: The published thresholds, what happens at each one, and how to read the reputation panel. - https://agentisend.com/docs/guides/trust-and-enforcement — Trust and enforcement: The enforcement ladder, what each rung does, how to appeal, and what we will not do. - https://agentisend.com/docs/guides/support — Support: How to open a request in the console, what Scale gets, and where replies land. - https://agentisend.com/docs/guides/webhooks — Webhooks: Signing, verification, the retry schedule, replay, and what happens to a dead letter. - https://agentisend.com/docs/guides/domains-and-dns — Domains and DNS: The records to publish, what verification checks, the US / EU region choice, and the customer return-path host. - https://agentisend.com/docs/guides/templates — Templates: Storing a template, rendering it, versioning, and why the variables are declared. - https://agentisend.com/docs/guides/migrating-from-resend — Migrating from Resend: What is identical, what the error names map onto, and the two things that behave differently on purpose. - https://agentisend.com/docs/guides/mcp — MCP server: Every tool with the scopes it needs, the rate-limit table, the JSON-RPC error codes, and what an agent cannot do. ## Operations - `GET /account` — This account: lifecycle status, the reason it is in that state, and when it was created. → https://agentisend.com/docs/api/get-account - `DELETE /account` — Close this account: revoke every key, pause every budget, suspend sending. → https://agentisend.com/docs/api/delete-account - `GET /account/export` — Everything this account owns, as a zip: emails.csv (inside your retention window), suppressions.csv and domains.json. → https://agentisend.com/docs/api/get-account-export - `PATCH /account/onboarding` — Console: the onboarding answers — your name, the company (which becomes the account name), the website, what you will send and roughly how much. → https://agentisend.com/docs/api/patch-account-onboarding - `GET /agent-actions` — Every held agent action, newest first — nothing waits invisibly. → https://agentisend.com/docs/api/get-agent-actions - `POST /agent-actions/{id}/approve` — Execute the held send through the normal accept path. → https://agentisend.com/docs/api/post-agent-actions-id-approve - `POST /agent-actions/{id}/reject` — Refuse the held send. → https://agentisend.com/docs/api/post-agent-actions-id-reject - `GET /api-keys` — List API keys with 30-day request counts. → https://agentisend.com/docs/api/get-api-keys - `POST /api-keys` — Create an API key. → https://agentisend.com/docs/api/post-api-keys - `PATCH /api-keys/{id}` — Rename a key or change its domain scope and scopes. → https://agentisend.com/docs/api/patch-api-keys-id - `DELETE /api-keys/{id}` — Revoke an API key immediately. → https://agentisend.com/docs/api/delete-api-keys-id - `POST /api-keys/{id}/rotate` — Rotate an API key. → https://agentisend.com/docs/api/post-api-keys-id-rotate - `GET /audit-log` — Everything anyone changed on this account: keys, the kill switch, domains, approvals, standing, team and notification settings — with what each one looked like before. → https://agentisend.com/docs/api/get-audit-log - `GET /automations` — Every automation on the account. → https://agentisend.com/docs/api/get-automations - `POST /automations` — Draft an automation: a trigger plus ordered steps (email, webhook, A/B split). → https://agentisend.com/docs/api/post-automations - `GET /automations/{id}` — One automation. → https://agentisend.com/docs/api/get-automations-id - `PATCH /automations/{id}` — Edit a draft or disabled automation. → https://agentisend.com/docs/api/patch-automations-id - `POST /automations/{id}/disable` — Stop firing. → https://agentisend.com/docs/api/post-automations-id-disable - `POST /automations/{id}/enable` — Snapshot trigger+steps as an immutable version and start firing. → https://agentisend.com/docs/api/post-automations-id-enable - `GET /automations/{id}/runs` — Every time this automation fired, newest first — the answer to "did it run?", which the engine used to throw away. → https://agentisend.com/docs/api/get-automations-id-runs - `GET /automations/{id}/runs/{run_id}` — One run with every step: what it did, what it returned, and the sentence for the ones that failed. → https://agentisend.com/docs/api/get-automations-id-runs-run-id - `GET /automations/{id}/versions` — Every immutable version, oldest first. → https://agentisend.com/docs/api/get-automations-id-versions - `GET /billing` — Plan, usage against each published limit, and what the next tier changes. → https://agentisend.com/docs/api/get-billing - `POST /billing/checkout` — Console: start a Stripe Checkout for a tier and billing term (monthly, or yearly once it is on sale). → https://agentisend.com/docs/api/post-billing-checkout - `GET /billing/plan` — The plan in force, the 14-day Pro trial, the plans and terms on offer, and whether the signed-in person must choose a plan now. → https://agentisend.com/docs/api/get-billing-plan - `POST /billing/portal` — Console: open the Stripe customer portal (plan changes, card, invoices). → https://agentisend.com/docs/api/post-billing-portal - `GET /billing/subscription` — Console: the signed-in account’s plan and subscription state. → https://agentisend.com/docs/api/get-billing-subscription - `POST /billing/trial` — Console: start the 14-day Pro trial — no card, up to 3,000 emails, once per account. → https://agentisend.com/docs/api/post-billing-trial - `GET /broadcasts` — Every broadcast, newest first — archived included. → https://agentisend.com/docs/api/get-broadcasts - `POST /broadcasts` — Draft a broadcast to a segment. → https://agentisend.com/docs/api/post-broadcasts - `GET /broadcasts/{id}` — One broadcast. → https://agentisend.com/docs/api/get-broadcasts-id - `PATCH /broadcasts/{id}` — Edit a DRAFT — or rename ANY broadcast. → https://agentisend.com/docs/api/patch-broadcasts-id - `POST /broadcasts/{id}/archive` — Archive — reversible, any time, sent or draft. → https://agentisend.com/docs/api/post-broadcasts-id-archive - `POST /broadcasts/{id}/cancel` — Cancel a scheduled broadcast before it sends. → https://agentisend.com/docs/api/post-broadcasts-id-cancel - `GET /broadcasts/{id}/messages` — Per-member delivery state for this broadcast. → https://agentisend.com/docs/api/get-broadcasts-id-messages - `POST /broadcasts/{id}/send` — Send now. → https://agentisend.com/docs/api/post-broadcasts-id-send - `GET /contacts` — List contacts, newest first. → https://agentisend.com/docs/api/get-contacts - `POST /contacts` — Create or update a contact by email. → https://agentisend.com/docs/api/post-contacts - `GET /contacts/{id}` — One contact with its properties. → https://agentisend.com/docs/api/get-contacts-id - `PATCH /contacts/{id}` — Edit one contact by id: address, status, properties. → https://agentisend.com/docs/api/patch-contacts-id - `DELETE /contacts/{id}` — Delete one contact and its properties. → https://agentisend.com/docs/api/delete-contacts-id - `GET /contacts/{id}/topics` — What this contact has said about every topic. → https://agentisend.com/docs/api/get-contacts-id-topics - `PATCH /contacts/{id}/topics` — Record this contact’s answer for one or more topics. → https://agentisend.com/docs/api/patch-contacts-id-topics - `GET /dedicated-ips` — This account dedicated IPs with live warmup percentages. → https://agentisend.com/docs/api/get-dedicated-ips - `POST /dedicated-ips` — Provision a dedicated IP for this account. → https://agentisend.com/docs/api/post-dedicated-ips - `GET /dedicated-ips/ramp` — The PUBLISHED warmup curve — exactly how volume moves and when. → https://agentisend.com/docs/api/get-dedicated-ips-ramp - `GET /dedicated-ips/route-decision/{messageId}` — Which route this message would take RIGHT NOW — reproducible, the same math the send path uses. → https://agentisend.com/docs/api/get-dedicated-ips-route-decision-messageid - `DELETE /dedicated-ips/{id}` — Release a dedicated IP. → https://agentisend.com/docs/api/delete-dedicated-ips-id - `GET /deliverability/dmarc` — Aggregate authentication reports for your domains. → https://agentisend.com/docs/api/get-deliverability-dmarc - `GET /deliverability/domains` — Every sending domain with its standing over the window, worst first — the failing domain is the first row, not one you have to find. → https://agentisend.com/docs/api/get-deliverability-domains - `GET /deliverability/domains/{id}` — Per-domain reputation: live rates over the rolling window, daily snapshots, the thresholds those rates are judged against, the bounce breakdown by class with its remediation, and the receiving domains rejecting the most. → https://agentisend.com/docs/api/get-deliverability-domains-id - `POST /deliverability/domains/{id}/snapshot` — Persist today rates as a snapshot row. → https://agentisend.com/docs/api/post-deliverability-domains-id-snapshot - `GET /domains` — List domains. → https://agentisend.com/docs/api/get-domains - `POST /domains` — Register a sending domain. → https://agentisend.com/docs/api/post-domains - `GET /domains/{id}` — One domain, with the DNS to publish and what each record last resolved to. → https://agentisend.com/docs/api/get-domains-id - `PATCH /domains/{id}` — Turn click or open tracking on, or change the tracking subdomain. → https://agentisend.com/docs/api/patch-domains-id - `DELETE /domains/{id}` — Remove a domain and its records. → https://agentisend.com/docs/api/delete-domains-id - `GET /domains/{id}/connect` — Domain Connect: detect the DNS provider from the live nameservers and hand back the exact records to add. → https://agentisend.com/docs/api/get-domains-id-connect - `POST /domains/{id}/verify` — Re-check every record and update the domain’s status. → https://agentisend.com/docs/api/post-domains-id-verify - `GET /emails` — List messages. → https://agentisend.com/docs/api/get-emails - `POST /emails` — Send an email. → https://agentisend.com/docs/api/post-emails - `POST /emails/batch` — Send up to 500 emails. → https://agentisend.com/docs/api/post-emails-batch - `POST /emails/bulk-cancel` — Cancel many emails at once: by explicit ids or every scheduled/queued email before a time. → https://agentisend.com/docs/api/post-emails-bulk-cancel - `GET /emails/export.csv` — The message log as CSV — yours, take it with you. → https://agentisend.com/docs/api/get-emails-export-csv - `POST /emails/lint` — Deliverability lint without sending: a 0-100 placement score plus every finding with its fix. → https://agentisend.com/docs/api/post-emails-lint - `POST /emails/preflight` — Run EVERY send gate without sending: domain, sandbox, trust, suppression, budget, loop, content, verifier. → https://agentisend.com/docs/api/post-emails-preflight - `GET /emails/receiving` — Mail received at this account’s domains, newest first. → https://agentisend.com/docs/api/get-emails-receiving - `GET /emails/receiving/{id}` — One received email: headers, text and HTML bodies as data, and the attachments it carried. → https://agentisend.com/docs/api/get-emails-receiving-id - `GET /emails/receiving/{id}/attachments` — What this received email carried. → https://agentisend.com/docs/api/get-emails-receiving-id-attachments - `GET /emails/receiving/{id}/attachments/{aid}` — The bytes of one received attachment, as an inert download — always octet-stream, never the sender’s declared type. → https://agentisend.com/docs/api/get-emails-receiving-id-attachments-aid - `GET /emails/receiving/{id}/raw` — The stored RFC 5322 source, byte for byte. → https://agentisend.com/docs/api/get-emails-receiving-id-raw - `GET /emails/{id}` — Fetch one message with its current status and last event. → https://agentisend.com/docs/api/get-emails-id - `PATCH /emails/{id}` — Move a scheduled email to a new time — the same act as POST /emails/:id/reschedule, under the verb a Resend integration already uses. → https://agentisend.com/docs/api/patch-emails-id - `GET /emails/{id}/attachments` — What this email carried. → https://agentisend.com/docs/api/get-emails-id-attachments - `GET /emails/{id}/attachments/{aid}` — The bytes of one attachment, exactly as they were sent. → https://agentisend.com/docs/api/get-emails-id-attachments-aid - `POST /emails/{id}/cancel` — Cancel a scheduled or queued email. → https://agentisend.com/docs/api/post-emails-id-cancel - `GET /emails/{id}/eml` — Download this email as .eml. → https://agentisend.com/docs/api/get-emails-id-eml - `GET /emails/{id}/events` — Every event recorded for one message, oldest first, with the provider detail. → https://agentisend.com/docs/api/get-emails-id-events - `GET /emails/{id}/explain` — What happened to this email, the evidence, and the exact calls that fix it — machine-readable remediation. → https://agentisend.com/docs/api/get-emails-id-explain - `GET /emails/{id}/mime` — The exact RFC 5322 source of this email — what Resend never shows you. → https://agentisend.com/docs/api/get-emails-id-mime - `POST /emails/{id}/reschedule` — Move an email to a new time. → https://agentisend.com/docs/api/post-emails-id-reschedule - `GET /events` — Every custom event this account has declared, with its typed schema and when it was last seen. → https://agentisend.com/docs/api/get-events - `POST /events` — Ingest a custom event. → https://agentisend.com/docs/api/post-events - `GET /events/{id}` — One event definition. → https://agentisend.com/docs/api/get-events-id - `PATCH /events/{id}` — Declare or re-declare an event’s fields. → https://agentisend.com/docs/api/patch-events-id - `DELETE /events/{id}` — Forget an event definition. → https://agentisend.com/docs/api/delete-events-id - `GET /health` — Liveness probe. → https://agentisend.com/docs/api/get-health - `POST /invite/{token}/accept` — Accept an invitation. → https://agentisend.com/docs/api/post-invite-token-accept - `GET /limits/keys` — The fleet: every key with its budget, ceiling, consumption, identity and current loop state. → https://agentisend.com/docs/api/get-limits-keys - `GET /limits/keys/{id}` — Budget, ceiling and current consumption for one key. → https://agentisend.com/docs/api/get-limits-keys-id - `PATCH /limits/keys/{id}` — Set or clear this key’s period budget and per-minute ceiling. → https://agentisend.com/docs/api/patch-limits-keys-id - `POST /limits/keys/{id}/kill` — Stop this key from sending, immediately. → https://agentisend.com/docs/api/post-limits-keys-id-kill - `POST /limits/keys/{id}/resume` — Undo the kill switch. → https://agentisend.com/docs/api/post-limits-keys-id-resume - `POST /limits/kill-all` — Pause every key on this account at once. → https://agentisend.com/docs/api/post-limits-kill-all - `POST /limits/resume-all` — Undo the global kill switch. → https://agentisend.com/docs/api/post-limits-resume-all - `GET /logs` — Every API request this account made: method, route, status, duration and the refusal code. → https://agentisend.com/docs/api/get-logs - `GET /logs/{id}` — One request, by log id. → https://agentisend.com/docs/api/get-logs-id - `GET /metrics` — Send/delivery/engagement KPIs with a daily series, computed from the event spine over a window. → https://agentisend.com/docs/api/get-metrics - `GET /notifications` — Conditions this account should know about. → https://agentisend.com/docs/api/get-notifications - `GET /notifications/preferences` — Which channels each notification type uses. → https://agentisend.com/docs/api/get-notifications-preferences - `PATCH /notifications/preferences` — Turn a notification type on or off per channel. → https://agentisend.com/docs/api/patch-notifications-preferences - `POST /notifications/read` — Mark notifications read. → https://agentisend.com/docs/api/post-notifications-read - `POST /notifications/{id}/read` — Mark one notification read. → https://agentisend.com/docs/api/post-notifications-id-read - `GET /openapi.json` — OpenAPI 3.1 document generated from the same schemas that validate. → https://agentisend.com/docs/api/get-openapi-json - `GET /segments` — Every segment on the account. → https://agentisend.com/docs/api/get-segments - `POST /segments` — Create a dynamic segment. → https://agentisend.com/docs/api/post-segments - `GET /segments/{id}` — One segment. → https://agentisend.com/docs/api/get-segments-id - `PATCH /segments/{id}` — Rename or change the rules. → https://agentisend.com/docs/api/patch-segments-id - `DELETE /segments/{id}` — Delete a segment. → https://agentisend.com/docs/api/delete-segments-id - `GET /segments/{id}/members` — The segment evaluated RIGHT NOW — live member ids, never a snapshot. → https://agentisend.com/docs/api/get-segments-id-members - `GET /status` — Public per-component health. → https://agentisend.com/docs/api/get-status - `GET /status/history` — Daily uptime per component over the last 90 days, aggregated from the scheduled probe's own samples. → https://agentisend.com/docs/api/get-status-history - `GET /support` — Support requests on this account, newest activity first. → https://agentisend.com/docs/api/get-support - `POST /support` — Open a support request. → https://agentisend.com/docs/api/post-support - `GET /support/attachments/{id}/download` — Download an attachment on a request this account owns. → https://agentisend.com/docs/api/get-support-attachments-id-download - `GET /support/config` — Topics, hours and attachment limits for opening a support request. → https://agentisend.com/docs/api/get-support-config - `POST /support/uploads` — Stage files to attach to a support message. → https://agentisend.com/docs/api/post-support-uploads - `GET /support/{ref}` — One support request and its public thread. → https://agentisend.com/docs/api/get-support-ref - `POST /support/{ref}/csat` — Rate a resolved support request, 1 to 5. → https://agentisend.com/docs/api/post-support-ref-csat - `POST /support/{ref}/messages` — Reply on a support request. → https://agentisend.com/docs/api/post-support-ref-messages - `POST /support/{ref}/reopen` — Reopen a resolved request within 14 days. → https://agentisend.com/docs/api/post-support-ref-reopen - `POST /support/{ref}/resolve` — Mark a support request resolved. → https://agentisend.com/docs/api/post-support-ref-resolve - `GET /suppressions` — Every suppressed address or domain for this account (global platform rows included). → https://agentisend.com/docs/api/get-suppressions - `POST /suppressions` — Suppress an address or a whole domain (send "@example.com"). → https://agentisend.com/docs/api/post-suppressions - `POST /suppressions/batch/add` — Suppress up to 500 addresses in one call. → https://agentisend.com/docs/api/post-suppressions-batch-add - `POST /suppressions/batch/remove` — Lift up to 500 suppressions by address. → https://agentisend.com/docs/api/post-suppressions-batch-remove - `DELETE /suppressions/{id}` — Remove one suppression row. → https://agentisend.com/docs/api/delete-suppressions-id - `GET /team/invites` — Invitations that have not been accepted, cancelled or expired. → https://agentisend.com/docs/api/get-team-invites - `POST /team/invites` — Invite an address at a role. → https://agentisend.com/docs/api/post-team-invites - `DELETE /team/invites/{id}` — Cancel a pending invitation. → https://agentisend.com/docs/api/delete-team-invites-id - `GET /team/me` — Your membership on this account: your role, and the seats the plan allows. → https://agentisend.com/docs/api/get-team-me - `GET /team/members` — Everyone on this account and the role each one holds. → https://agentisend.com/docs/api/get-team-members - `POST /team/members` — Add someone to this account. → https://agentisend.com/docs/api/post-team-members - `PATCH /team/members/{id}` — Change a member’s role. → https://agentisend.com/docs/api/patch-team-members-id - `DELETE /team/members/{id}` — Remove a member. → https://agentisend.com/docs/api/delete-team-members-id - `GET /templates` — List this account templates, newest first. → https://agentisend.com/docs/api/get-templates - `POST /templates` — Create a template draft. → https://agentisend.com/docs/api/post-templates - `GET /templates/{id}` — One template. → https://agentisend.com/docs/api/get-templates-id - `PATCH /templates/{id}` — Edit the draft. → https://agentisend.com/docs/api/patch-templates-id - `GET /templates/{id}/diff` — Structured diff between two versions, or between a version and the draft. → https://agentisend.com/docs/api/get-templates-id-diff - `POST /templates/{id}/duplicate` — Copy a template into a new editable draft. → https://agentisend.com/docs/api/post-templates-id-duplicate - `POST /templates/{id}/publish` — Snapshot the draft as an immutable published version. → https://agentisend.com/docs/api/post-templates-id-publish - `POST /templates/{id}/render` — Render a version with variables (defaults to the current published one; pass "draft" for the working copy). → https://agentisend.com/docs/api/post-templates-id-render - `POST /templates/{id}/rollback` — Rollback creates a NEW draft from an older version and puts the template back into draft - history is never rewritten, and what is live does not move until that draft is published. → https://agentisend.com/docs/api/post-templates-id-rollback - `GET /templates/{id}/versions` — Every immutable version, oldest first. → https://agentisend.com/docs/api/get-templates-id-versions - `GET /templates/{id}/versions/{n}` — One version. → https://agentisend.com/docs/api/get-templates-id-versions-n - `GET /topics` — Every subscription topic on the account, newest first. → https://agentisend.com/docs/api/get-topics - `POST /topics` — Create a subscription topic. → https://agentisend.com/docs/api/post-topics - `GET /topics/{id}` — One topic. → https://agentisend.com/docs/api/get-topics-id - `PATCH /topics/{id}` — Rename a topic or change its default. → https://agentisend.com/docs/api/patch-topics-id - `DELETE /topics/{id}` — Delete a topic and every recorded answer about it. → https://agentisend.com/docs/api/delete-topics-id - `POST /trust/appeal` — File an appeal against the current standing. → https://agentisend.com/docs/api/post-trust-appeal - `GET /trust/remediation` — The remediation checklist ticks for this account. → https://agentisend.com/docs/api/get-trust-remediation - `POST /trust/remediation` — Tick or untick one remediation item. → https://agentisend.com/docs/api/post-trust-remediation - `GET /trust/standing` — This account’s standing, machine-readable. → https://agentisend.com/docs/api/get-trust-standing - `GET /trust/thresholds` — The published enforcement thresholds and the ladder they drive. → https://agentisend.com/docs/api/get-trust-thresholds - `GET /usage` — This period usage, per key: budget, consumed, remaining, rate window, last used. → https://agentisend.com/docs/api/get-usage - `GET /webhooks` — List endpoints. → https://agentisend.com/docs/api/get-webhooks - `POST /webhooks` — Register an endpoint. → https://agentisend.com/docs/api/post-webhooks - `POST /webhooks/stripe` — Stripe → AgentiSend: signature-verified, deduplicated by event id. → https://agentisend.com/docs/api/post-webhooks-stripe - `GET /webhooks/{id}` — Fetch one endpoint. → https://agentisend.com/docs/api/get-webhooks-id - `PATCH /webhooks/{id}` — Update url, subscribed events, or the disabled flag. → https://agentisend.com/docs/api/patch-webhooks-id - `DELETE /webhooks/{id}` — Delete an endpoint and its queued deliveries. → https://agentisend.com/docs/api/delete-webhooks-id - `GET /webhooks/{id}/dead-letters` — Deliveries this endpoint exhausted every retry on, with the payload to inspect. → https://agentisend.com/docs/api/get-webhooks-id-dead-letters - `GET /webhooks/{id}/deliveries` — Every delivery to this endpoint, with each attempt and what the receiver answered (A9). → https://agentisend.com/docs/api/get-webhooks-id-deliveries - `POST /webhooks/{id}/replay` — Re-send past events to this endpoint, by time range and/or a single event id (PRD B2). → https://agentisend.com/docs/api/post-webhooks-id-replay - `POST /webhooks/{id}/rotate-secret` — Mint a new signing secret. → https://agentisend.com/docs/api/post-webhooks-id-rotate-secret ## Errors Every 4xx and 5xx carries `code`, `message`, `fix` and `docs_url`. The codes are listed here with their statuses; each one's message and fix are in the catalogue at https://agentisend.com/docs/errors, and in full in llms-full.txt. - `validation_error` (400) - `invalid_idempotency_key` (400) - `missing_required_field` (422) - `invalid_from_address` (422) - `invalid_parameter` (422) - `invalid_cursor` (400) - `invalid_attachment` (422) - `invalid_region` (422) - `tracking_subdomain_unverified` (422) - `tracking_subdomain_cannot_be_removed` (422) - `domain_field_immutable` (422) - `open_tracking_on_transactional` (422) - `domain_already_exists` (409) - `domain_verified_elsewhere` (409) - `domain_not_verified` (403) - `service_unavailable` (503) - `account_suspended` (403) - `account_sandboxed` (403) - `trust_throttled` (429) - `suppressed_recipient` (422) - `missing_api_key` (401) - `session_required` (401) - `human_action_required` (403) - `csrf_origin_rejected` (403) - `mfa_required` (401) - `billing_not_configured` (503) - `plan_not_purchasable` (400) - `plan_required` (402) - `trial_already_used` (409) - `plan_already_active` (409) - `term_not_on_sale` (409) - `subscription_active` (409) - `billing_customer_missing` (404) - `stripe_signature_invalid` (400) - `invalid_api_key` (403) - `restricted_api_key` (403) - `insufficient_role` (403) - `last_owner_required` (422) - `seat_limit_reached` (422) - `invite_not_valid` (422) - `invite_email_mismatch` (403) - `already_in_account` (409) - `domain_scope_violation` (403) - `not_found` (404) - `session_expired` (404) - `payload_too_large` (413) - `unsupported_media_type` (415) - `method_not_allowed` (405) - `idempotency_in_flight` (409) - `idempotency_payload_mismatch` (409) - `agent_budget_exceeded` (402) - `plan_limit_reached` (402) - `key_budget_exceeds_plan` (422) - `domain_limit_reached` (422) - `rate_ceiling_exceeded` (429) - `daily_quota_exceeded` (429) - `monthly_quota_exceeded` (429) - `rate_limiter_unavailable` (503) - `rate_limit_exceeded` (429) - `approval_required` (403) - `trust_paused` (403) - `kill_switch_active` (403) - `internal_server_error` (500) - `support_ticket_not_found` (404) - `support_closed` (409) - `support_reopen_expired` (409) - `support_merge_conflict` (409) - `support_upload_rejected` (400) - `support_upload_too_large` (413) - `support_attachment_expired` (410) - `support_rate_limited` (429) ## Events Subscribe any of these on a webhook endpoint. The full catalogue is https://agentisend.com/docs/events. - Email: `email.queued`, `email.sent`, `email.delivered`, `email.delivery_delayed`, `email.bounced`, `email.complained`, `email.opened`, `email.clicked`, `email.failed`, `email.scheduled`, `email.canceled`, `email.suppressed` - Domain: `domain.created`, `domain.verified`, `domain.failed`, `domain.updated`, `domain.deleted` - Suppression: `suppression.added`, `suppression.removed` - Limit: `limit.warning`, `limit.exceeded` - Agent: `agent.approval_requested`, `agent.approved`, `agent.rejected`, `agent.killed` - Audience and campaigns: `contact.created`, `contact.updated`, `contact.deleted`, `segment.joined`, `segment.left`, `segment.created`, `segment.updated`, `segment.deleted`, `broadcast.scheduled`, `broadcast.sent`, `broadcast.updated`, `automation.triggered`, `email.received`, `topic.created`, `topic.updated`, `topic.deleted`, `contact.subscribed`, `contact.unsubscribed` - Trust: `trust.warning`, `trust.throttled`, `trust.paused`, `trust.appealed`, `trust.restored` ## What this service will not do - No cold outreach. There is no lead database, no scraping, and no bulk import of addresses nobody asked to receive mail at. A request that looks like unsolicited sending is refused. - No silent overage. When a budget is spent, sends stop and the API says so; nothing is auto-charged.