# SendForAI > Transactional and broadcast email for AI agents. Like Resend, at cost: one API for one-to-one transactional sends (receipts, sign-in links, resets) and broadcasts to a list (newsletters, launches). Amazon SES underneath, unlimited contacts, zero markup on sending. ## Pricing (machine readable: GET /v1/pricing) - Free: 3,000 emails/month, 100/day, 1 domain, no card. - Member: $20/month (or $200/year) includes 200,000 emails/month and unlimited contacts. Beyond that, Amazon SES at cost: $0.10 per 1,000. No markup. - Over 1,000,000 emails/month: dedicated IP ($24.95/mo, AWS's price) and $0.02 per 1,000 infrastructure on the overage. Both passed through at cost. ## Identity There are no API keys. Generate an Ed25519 keypair, publish the public key as a DNS TXT record at `_sendforai.` with value `v=sfa1; k=ed25519; p=`, and sign requests. Control of the domain proves the right to send from it. First verified request creates the account. GET /v1/domains/{domain}/setup?p= returns the exact record. ## Endpoints (all JSON; every response carries `cost` and `capacity` where relevant; every error carries `fix`) - POST /v1/emails — send. Fields: from, to, subject, html|markdown|text, reply_to, headers, idempotency_key, dry_run, max_cost_usd, stream. - GET /v1/capacity — daily cap, sent today, remaining, warmup stage. - GET /v1/usage — month to date sends, cost, projection. - GET /v1/pricing — public pricing. - GET /v1/domains/{domain} · POST /v1/domains/{domain}/verify — SES identity, DKIM and MAIL FROM records. - POST /v1/broadcasts — create; defaults to awaiting_approval and returns approval_url for a human. GET /v1/broadcasts/{id} (includes progress: sent, queued, failed, cancelled, resumes_at), POST /v1/broadcasts/{id}/send (202, sends in the background), POST /v1/broadcasts/{id}/cancel (also stops a broadcast mid-send). - Large broadcasts send in the background at the SES rate limit. On Member, a broadcast larger than today's warmup cap continues automatically after the daily reset (event broadcast.deferred). On Free, a broadcast must fit inside today's 100-email cap. - POST /v1/account/upgrade {interval: "month"|"year"} — returns checkout_url for a human to pay; account.upgraded appears in /v1/events when done. GET /v1/account/billing — Stripe billing portal link for a human. - POST /v1/contacts (upsert one) · GET /v1/contacts · POST /v1/contacts/import (Member) · POST /v1/contacts/unsubscribe. - GET /v1/events?cursor= — pullable event log (email.sent, email.delivered, email.bounced, email.complained, broadcast.*, contact.unsubscribed). ## Guides - /docs — Human-readable quickstart: domain identity, sending, dry_run/max_cost_usd/idempotency_key, contacts, broadcasts with approval, events, errors, MCP config. - /pricing — Pricing in full: Free vs Member, what "at cost" means, the over-1M pass-throughs, and monthly totals from 3,000 to 2.5M emails. - /amazon-ses-pricing — Amazon SES pricing explained: the 2026 Essentials/Pro/Enterprise plans vs $0.10 à la carte, add-ons, a calculator, and what SES doesn't include. - /resend-pricing — Resend pricing explained: every transactional and marketing plan, overage rates, and what 7 workloads cost on Resend vs SendForAI. ## Agent tooling - npm: @sendforai/sdk (client + key generation + request signing), @sendforai/mcp (MCP server, stdio).