Can an AI agent use Resend?

As of 6 Oct 2026, an AI agent can't use Resend on its own: Sign-up fails with a generic error, no reason given.

Level 1 · Needs a personAgents can't get in on their own.
  • Find: Docs for agents: llms.txt, an OpenAPI and an MCP server.
  • Access: Can't sign up.
  • Use: Work not reached.
  • Pay: Payment not reached.
  • Leave: Leaving not reached.

To reach L2 · Gets in: let an agent sign up on its own.

With an account set up by a person: not measured yet.

What the levels mean

Driven 6 Oct 2026Same level in 4 drives in a rowRules of 15 Oct 2026Claim this page

Written and checked by our agents from this drive's record. How we write.

Who gets in

  • Agents on a serverTurned away when they send the sign-up form.
  • Signed agentsThe sign-up page opens. The check on the form still applies.
  • Agents in a person's browserNot measured yet.

Sign-up page checked 12 Oct 2026. Signed agents: the ones Cloudflare verifies. Where agents come from

What an agent can do in Resend.

On its own

  • Read all the documentation, including machine-readable versions
  • Find the service's technical entry points (API spec, chat-assistant server, command-line tool)

What it can't, and why

  • Create an accountThe sign-up page gave a vague error with no explanation each time it tried
  • Send any email, manage contacts, or anything else the service offersNo account means no access key to do any of it
  • Cancel a plan or delete an account on its ownThose actions only exist in the website's dashboard
Blocked

Can an AI agent sign up for Resend on its own?

No. Sign-up: blocked. No headless route (auth.md: 'Resend does not support agentic registration today'). The browser form was submitted twice and both times gave the generic server error 'Something went wrong while processing your request. Please try again later.' No visible challenge; the page loads hCaptcha (passive, via a Stripe Radar session) and Fingerprint visitor data, which the sign-up action sends along.

Official server · no call worked

Does Resend have an MCP server, and can an agent connect to it?

Yes. Resend has an official MCP server.

A new agent can't get in on its own: in the drive of 6 Oct 2026, our agent stopped at sign up (it was blocked). Through the MCP server, 0 of our agent's 1 attempt worked.

What the drive found

APIOpenAPIMCP · officialCLISDKllms.txtWebhooks–Sandbox

Not reached in this drive: the API key, deleting the account and paying. Every checkpoint, in detail

For the team behind Resend.

Where agents stop in Resend today, and the fixes that get them further, highest impact first.

Stops at sign up

The fixes, highest impact first

  1. Let verified agents create an accountStep-by-step guide
  2. Return a specific sign-up rejection error
  3. Add device-flow login to the CLIStep-by-step guide
2 more fixes
  1. Align MCP server card and PRM Step-by-step guide
  2. Add team delete and cancel to API
  • Claim it free and reply next to the result.
  • A Drive, $49: your private report, with where agents stop, the evidence and the fixes that move your level.
  • Fixed something? Order a Drive ($49) any time, or the Monthly drive ($29/month).
See the example report
Details

Your API, MCP server or CLI is the product? An Audit ($299) also checks every documented route, MCP tool and CLI command against your docs. Compare plans.

Already claimed it? Open it in your dashboard.

Rather not be driven? Block AgentDrivesAgent in robots.txt or write to us. We stop driving it ourselves; this page stays, with its date.

Embed the badge on your site

Driven · L1 · Needs a person badge

Behind the level.

Our agent couldn't get into Resend, so the work, its reliability and the crash test aren't measured. The part scores are what it could judge from the outside.

Part scores · level history

Part scores

Agent-ready setup

  • llms.txt: found
  • OpenAPI: found
  • MCP server: found
  • CLI: found

Not measured in this drive: Holds up, Docs match (part of an Audit).

Level history

  1. 1 Oct 20263 drivesL1Needs a person
  2. 6 Oct 2026L1Needs a person

For agents and builders.

The drive as data, every checkpoint and all 57 attempts.

How an agent connects · 4 tips
  • Ask a human for RESEND_API_KEY; there is no agent sign-up (see https://resend.com/auth.md)
  • Use the CLI with --json, or `resend commands` for the full command tree as JSON
  • Append .md to any docs URL for markdown
  • The remote MCP at mcp.resend.com/mcp needs OAuth (CIMD supported) or a key
Every checkpoint, in detail · 9 checkpoints
  1. DocsHeadlessllms.txt, docs/llms.txt, .md pages and Accept: text/markdown, OpenAPI 3.0.3, auth.md, agent-skills index
  2. Sign upBlockedNo headless route (auth.md: 'Resend does not support agentic registration today'). The browser form was submitted twice and both times gave the generic server error 'Something went wrong while processing your request. Please try again later.' No visible challenge; the page loads hCaptcha (passive, via a Stripe Radar session) and Fingerprint visitor data, which the sign-up action sends along.
  3. VerifyNot reachedNo verification mail; sign-up did not complete
  4. KeyNot reachedAPI keys come only from the dashboard; OAuth (code+PKCE, CIMD or DCR) needs a signed-in user
  5. First callNot reachedNo key; unauthenticated calls give a clear 401 missing_api_key
  6. First actionNot reachedNo credentials
  7. PayNot reachedFree plan: 3,000 emails/mo, 100/day. Upgrades happen on the dashboard Billing page with a card (docs). No 402, x402, MPP or UCP; not listed in the x402 Bazaar or mpp.dev. The page sits behind the sign-up that rejected us, so the grade comes from the docs only.
  8. CancelNot reachedNo plan started. Docs: Billing page > Cancel Subscription, web UI only
  9. DeleteNot reachedNo account was created. Docs: Team Settings > Delete Team, web UI only; no API or CLI route
The attempt log · 57 attempts
Attempt log
CapabilityRouteResultEvidence
llms.txt: Fetch /llms.txtapidone ✓https://resend.com/llms.txt 200: H1 Resend, links to CLI, MCP, skills, OpenAPI, docs/llms.txt, auth.md
robots/aipref: Fetch robots.txtapidone ✓robots.txt: 'User-agent: * / Allow: /' and 'Content-Signal: ai-train=yes, search=yes, ai-input=yes' (Cloudflare Content-signal scheme, parses: lowercase terms, yes values). No aipref Content-Usage line or header.
markdown: Accept: text/markdown on docs page and .md URLapidone ✓GET /docs/api-reference/emails/send-email with Accept: text/markdown -> 200 content-type text/markdown, vary: Accept; the .md URL -> 200 text/markdown
openapi: Fetch OpenAPIapidone ✓https://resend.com/openapi.json declares openapi 3.0.3; 47 paths, 83 operations; no x-payment-info/x-service-info
mcp cards: Server card / AI catalog / A2A cardapidone ✓<mcp>/server-card 404; /.well-known/ai-catalog.json 404 (HTML); /.well-known/agent-card.json 404; /.well-known/agent.json 404; /.well-known/mcp/server-card.json 200 JSON (older draft location); /.well-known/mcp.json 200 JSON; /.well-known/agent-skills/index.json 200 JSON
mcp server/discover: POST server/discover 2026-07-28 to https://mcp.resend.com/mcpmcppartial ✓401 www-authenticate: Bearer resource_metadata=https://mcp.resend.com/.well-known/oauth-protected-resource; body JSON-RPC -32000 Unauthorized. initialize unauthenticated: same 401. Retry with key later.
oauth metadata: PRM + AS metadataapidone ✓api PRM 200 (scopes full_access, emails:send); mcp PRM at root 200 (resource https://mcp.resend.com), path-suffixed /mcp variant 404; AS metadata at resend.com/.well-known/oauth-authorization-server: client_id_metadata_document_supported true, registration_endpoint (DCR), S256, iss param supported; no device_authorization_endpoint; no agent_auth block
auth.md: GET /auth.mdapidone ✓200 text/markdown: 'Resend does not support agentic registration today. Credentials are issued by the user out of band'
pay step probes: 402/x402/MPP/UCP probesapidone ✓api.resend.com/emails unauth -> 401 missing_api_key (no 402); x402./mpp./agents.resend.com do not resolve; /.well-known/ucp 404; OpenAPI no x-payment-info; not in x402 Bazaar or mpp.dev/api/services; pricing.md: Free $0 3,000 emails/mo, 100/day; Pro $20/mo
docs: Find docs and API referenceapidone ✓llms.txt, docs/llms.txt (422 lines, .md pages), OpenAPI 3.0.3 JSON/YAML, auth.md, agent-skills index, CLI install.sh, MCP discovery JSON
sign up: Find a headless sign-up routenoneblocked ✓auth.md: 'Resend does not support agentic registration today.' AS metadata has no agent_auth block; no device flow; CLI `resend login` needs an existing key or opens a browser. Sign-up is web form only (email+password, Google, GitHub).
sign up: Create account in browser at https://resend.com/signup (the agent's inbox, generated password)browserblockedSubmitted form twice (first try + one retry). Both: server action POST https://resend.com/signup -> 200, toast 'Something went wrong while processing your request. Please try again later.' No visible challenge (visible_challenge false). Page loads hCaptcha, Stripe Radar session with passive hCaptcha (api.hcaptcha.com/getcaptcha, attach_hcaptcha_token) and Fingerprint visitor data (fp.resend.com) that the sign-up action sends as payload. No verification mail arrived (inbox checked at ~+1 and ~+5 min).
verify email: Read verification mailnoneblockedNo mail arrived at the agent's inbox; sign-up did not complete
api key: Get an API keynoneblockedNo account. Only credentials: API key from dashboard (auth.md) or OAuth authorization_code+PKCE (AS metadata: CIMD supported, DCR registration_endpoint) which needs a signed-in user to consent
first call: First authenticated API/MCP callapiblockedWithout a key: api.resend.com/emails 401 {'message':'Missing API Key','name':'missing_api_key'}; bad key 401 {'message':'API key is invalid','name':'validation_error','statusCode':401} (application/json, not problem+json); MCP 401 with resource_metadata
first action: Create somethingnoneblockedNo credentials
pay step: Find an agent purchase routenonedone ✓No 402/x402/MPP/UCP; billing only on dashboard Billing page (docs/dashboard/settings/billing.md: upgrade/downgrade, card); free plan exists (pricing.md). Not reachable: no account.
cancel: Cancel plannoneskippedNo plan started. Docs: cancel via Billing page three-dots menu > Cancel Subscription (web UI only)
delete: Delete account/teamnoneskippedNo account was created. Docs (knowledge-base/how-can-i-delete-my-team.md): Team Settings > Delete Team in the web UI; no API/CLI route in OpenAPI or CLI command tree
Send a transactional email: Send a transactional emailnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /emails", "mcp": "send-email", "cli": "resend emails send", "ui": "Dashboard > Emails"}
Send batch emails in one call: Send batch emails in one callnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /emails/batch", "mcp": null, "cli": "resend emails batch", "ui": null}
Schedule an email for later: Schedule an email for laternoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /emails (scheduled_at)", "mcp": "send-email", "cli": "resend emails send --scheduled-at", "ui": "Dashboard > Emails"}
Update or cancel a scheduled email: Update or cancel a scheduled emailnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "PATCH /emails/{id}; POST /emails/{id}/cancel", "mcp": null, "cli": "resend emails update <id>; resend emails cancel <id>", "ui": "Dashboard > Emails"}
Receive inbound emails to a domain: Receive inbound emails to a domainnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "GET /emails/receiving/{id}", "mcp": null, "cli": "resend emails receiving get <id>", "ui": "Dashboard > Receiving"}
Create and send a marketing broadcast: Create and send a marketing broadcastnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /broadcasts; POST /broadcasts/{id}/send", "mcp": "send-broadcast", "cli": "resend broadcasts create --send; resend broadcasts send <id>", "ui": "Dashboard > Broadcasts editor"}
Cancel a queued or scheduled broadcast: Cancel a queued or scheduled broadcastnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /broadcasts/{id}/cancel", "mcp": null, "cli": null, "ui": "Dashboard > Broadcasts"}
Build an automation workflow from custom events: Build an automation workflow from custom eventsnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /automations", "mcp": null, "cli": null, "ui": "Dashboard > Automations editor"}
Trigger an automation via a custom event: Trigger an automation via a custom eventnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /events", "mcp": null, "cli": null, "ui": "Dashboard > Automations > Custom Events"}
Add and verify a sending domain: Add and verify a sending domainnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /domains; POST /domains/{id}/verify", "mcp": "create-domain", "cli": "resend domains create; resend domains verify <id>", "ui": "Dashboard > Domains"}
Create a reusable email template: Create a reusable email templatenoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /templates", "mcp": null, "cli": null, "ui": "Dashboard > Templates editor"}
Send an email using a template with variables: Send an email using a template with variablesnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /emails (template, variables)", "mcp": null, "cli": "resend emails send --template --var", "ui": "Dashboard > Emails"}
Add and manage contacts: Add and manage contactsnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /contacts, PATCH /contacts/{id}, DELETE /contacts/{id}", "mcp": "create-contact", "cli": "resend contacts create/update/delete", "ui": "Dashboard > Contacts"}
Bulk import contacts from a file: Bulk import contacts from a filenoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /contacts/imports", "mcp": null, "cli": "resend contacts imports create --file", "ui": "Dashboard > Contacts"}
Segment contacts for targeted sends: Segment contacts for targeted sendsnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /segments; POST /contacts/{id}/segments", "mcp": null, "cli": "resend contacts add-segment", "ui": "Dashboard > Contacts > Segments"}
Define custom contact properties: Define custom contact propertiesnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /contact-properties", "mcp": null, "cli": null, "ui": "Dashboard > Contacts > Properties"}
Manage subscription topics and unsubscribes: Manage subscription topics and unsubscribesnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /topics; PATCH /contacts/{id}/topics", "mcp": null, "cli": "resend contacts update-topics", "ui": "Dashboard > Contacts > Topics"}
Add attachments to an email: Add attachments to an emailnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /emails (attachments)", "mcp": null, "cli": "resend emails send --attachment", "ui": null}
Embed inline images in an email: Embed inline images in an emailnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /emails (attachments with content_id)", "mcp": null, "cli": null, "ui": null}
Set custom headers and tags on an email: Set custom headers and tags on an emailnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /emails (headers, tags)", "mcp": null, "cli": "resend emails send --headers --tags", "ui": "Dashboard > Emails"}
Deduplicate sends with an idempotency key: Deduplicate sends with an idempotency keynoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /emails (Idempotency-Key header)", "mcp": null, "cli": "resend emails send --idempotency-key", "ui": null}
Add an unsubscribe link to transactional emails: Add an unsubscribe link to transactional emailsnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /emails (List-Unsubscribe header)", "mcp": null, "cli": null, "ui": "Dashboard > Settings > Unsubscribe Page"}
Track opens and link clicks: Track opens and link clicksnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "PATCH /domains/{id} (tracking)", "mcp": null, "cli": "resend domains update <id>", "ui": "Dashboard > Domains > Tracking"}
View deliverability insights and bounce/suppression management: View deliverability insights and bounce/suppression managementnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "GET /suppressions; POST /suppressions", "mcp": null, "cli": null, "ui": "Dashboard > Emails > Deliverability Insights"}
Create a webhook endpoint for event notifications: Create a webhook endpoint for event notificationsnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /webhooks", "mcp": null, "cli": null, "ui": "Dashboard > Webhooks"}
Replay or retry a failed webhook event delivery: Replay or retry a failed webhook event deliverynoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /webhooks/{id}/events/{event_id}/replay", "mcp": null, "cli": null, "ui": "Dashboard > Webhooks > Event log"}
Create a managed inbox and reply/forward threads: Create a managed inbox and reply/forward threadsnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /inboxes; POST /inboxes/{id}/threads/{thread_id}/reply", "mcp": null, "cli": null, "ui": "Dashboard > Inboxes"}
View API request logs: View API request logsnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "GET /logs", "mcp": null, "cli": null, "ui": "Dashboard > Logs"}
Monitor and debug automation run history: Monitor and debug automation run historynoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "GET /automations/{id}/runs", "mcp": null, "cli": null, "ui": "Dashboard > Automations > Runs"}
View broadcast performance tracking (opens, clicks): View broadcast performance tracking (opens, clicks)noneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "GET /broadcasts/{id}/recipients; GET /broadcasts/{id}/clicked-links", "mcp": null, "cli": null, "ui": "Dashboard > Broadcasts"}
Generate or edit email/automation content with AI: Generate or edit email/automation content with AInoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": null, "mcp": null, "cli": null, "ui": "Dashboard > Broadcast/Template editor; Resend assistant"}
Configure DMARC/BIMI/TLS/custom Return-Path for a domain: Configure DMARC/BIMI/TLS/custom Return-Path for a domainnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "PATCH /domains/{id}", "mcp": null, "cli": "resend domains update <id>", "ui": "Dashboard > Domains"}
Choose a sending region for a domain: Choose a sending region for a domainnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /domains (region)", "mcp": null, "cli": "resend domains create --region", "ui": "Dashboard > Domains"}
Claim a domain already verified by another team: Claim a domain already verified by another teamnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /domains/{id}/claim", "mcp": null, "cli": null, "ui": "Dashboard > Domains"}
Create, list, and revoke API keys with scoped permissions: Create, list, and revoke API keys with scoped permissionsnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": "POST /api-keys; DELETE /api-keys/{id}", "mcp": null, "cli": "resend api-keys create/list/delete", "ui": "Dashboard > API Keys"}
Manage team members and switch between teams: Manage team members and switch between teamsnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": null, "mcp": null, "cli": "resend auth switch", "ui": "Dashboard > Settings > Team"}
Enable Single Sign-On for the team: Enable Single Sign-On for the teamnoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": null, "mcp": null, "cli": null, "ui": "Dashboard > Settings > SSO"}
Customize the public unsubscribe page: Customize the public unsubscribe pagenoneblockedNo account and no API key: sign-up rejected (see signup attempt). Documented route exists: {"api": null, "mcp": null, "cli": null, "ui": "Dashboard > Settings > Unsubscribe Page"}

Also in Email infrastructure.