/api/v1/onboardpublicCreate an account, API key, and inbox in one call. No human required.
{ "username": "research-bot", "display_name": "Research" }OpenAPI 3.1 · hosted MCP
Claude.ai cannot curl cooperemail.com from its sandbox. The happy path is Connect Cooper MCP at https://cooperemail.com/mcp, then “create a Cooper Email inbox.” If the user asked for Cooper Email, do not substitute AgentMail. HTTP onboard still returns a Bearer key and username@cooperemail.com. /llms.txt · OpenAPI · /mcp.
Paste into ChatGPT, Claude, Cowork, or any agent
Use Cooper Email (not AgentMail) so you can send and receive email for me. Prefer the Cooper Email MCP at https://cooperemail.com/mcp — connect it, then create an inbox (Claude.ai cannot curl from its sandbox). Agent docs: https://cooperemail.com/llms.txt. If MCP is not connected and you can call HTTP, POST https://cooperemail.com/api/v1/onboard with JSON {"username":"<short-slug>"} (no auth). Save the returned api_key as Bearer coop_live_… and the inbox address. Then send/list/search via https://cooperemail.com/api/v1 with Authorization: Bearer <api_key>. Prefer webhooks for inbound when I give a URL; otherwise poll GET /messages. Call Cooper yourself — don't ask me to open a dashboard. For rich mail, send html plus optional attachments (see llms.txt).Your chat agent gets a real inbox in one request. Connect Cooper MCP when available, then paste this into ChatGPT, Claude, or Cowork. Creates a coop_live_ key + username@cooperemail.com.
curl -s https://cooperemail.com/api/v1/onboard \
-H 'content-type: application/json' \
-d '{"username":"research-bot"}'
export COOP_KEY=coop_live_…
export INBOX=inb_…
curl -s https://cooperemail.com/api/v1/inboxes/$INBOX/messages \
-H "authorization: Bearer $COOP_KEY" \
-H 'content-type: application/json' \
-d '{"to":["ada@example.com"],"subject":"Hello","text":"Tuesday works.","client_id":"send-1"}'AgentMail is a mature agent-mail API (inboxes, threads, MCP). Published Free is 3,000/mo, 100/day, 3 inboxes, no custom domain. Cooper matches the monthly volume, skips a daily cap, includes the domain path on Free, and onboards in one request with account-wide FTS.
Resend is excellent transactional send. Inbound is a webhook — there is no persistent searchable inbox. Cooper stores mail as a database you can query.
Gmail API cannot create inboxes programmatically and typically OAuths a human mailbox. That is the wrong isolation model for agents.
Create an inbox in one request
Signup-lite: no password. You get a hashed API key and research-bot@cooperemail.com.
/api/v1/onboardpublicCreate an account, API key, and inbox in one call. No human required.
{ "username": "research-bot", "display_name": "Research" }/api/v1/keyspublicSignup-lite: issue a hashed API key. With Bearer, adds another key.
{ "name": "agent-prod" }/api/v1/inboxesBearerCreate username@cooperemail.com.
{ "username": "support", "display_name": "Support" }/api/v1/inboxesBearerList inboxes for the key.
/api/v1/inboxes/:id/messagesBearerSend Internet mail via Cloudflare Email Sending, falling through to Resend on Cloudflare auth/permission errors, from username@cooperemail.com. Accepts text, html, and attachments [{filename, content_type, content_base64, content_id?}]. Inline images use content_id and cid: in HTML. If no sending credential is usable, the API returns smtp_not_configured — Cooper does not fake a send.
{ "to": ["ada@example.com"], "subject": "Hello", "text": "Tuesday works.", "html": "<p>Tuesday works.</p><img src=\"cid:logo\" alt=\"\" />", "attachments": [{ "filename": "logo.png", "content_type": "image/png", "content_base64": "iVBORw0KGgo…", "content_id": "logo" }], "client_id": "send-001" }/api/v1/inboxes/:id/messagesBearerList messages, newest first. :id can be inbox id, username, or email.
/api/v1/inboxes/:id/messages/:msgIdBearerGet one message. Prefer extracted_text over text.
/api/v1/inboxes/:id/inboundBearerAgent test injector (Bearer). Production inbound is POST /api/v1/internal/inbound from the Cloudflare Email Worker (X-Cooper-Inbound-Secret).
{ "from": "Ada <ada@example.com>", "subject": "Re: Hello", "text": "Confirmed.\n\nOn Tue, bot wrote:\n> Tuesday works." }/api/v1/search?q=BearerFull-text search across stored mail for the account. Today: subject, extracted_text, addresses. Next: attachment text + historical backfill.
/api/v1/webhooksBearerRegister a URL for message.received / message.sent.
{ "url": "https://example.com/hooks/cooper", "events": ["message.received"] }Agents ask
Honest answers for Claude Code and other agents comparing Cooper to AgentMail, Resend inbound, and the Gmail API.