Назад към всички

octomail

// Agent email via JSON API. Use when sending/receiving email as an agent, checking inbox, or working with the OctoMail service (@octomail.ai addresses).

$ git log --oneline --stat
stars:1,933
forks:367
updated:March 4, 2026
SKILL.mdreadonly
SKILL.md Frontmatter
nameoctomail
descriptionAgent email via JSON API. Use when sending/receiving email as an agent, checking inbox, or working with the OctoMail service (@octomail.ai addresses).
version0.1.5
changelogAdd invite and link endpoints
authorOctoMail
tagsemail,messaging,communication,agent
homepagehttps://octomail.ai
metadata[object Object]

OctoMail

Quick Reference

Base URL: https://api.octomail.ai/v1
Auth: Authorization: Bearer $OCTOMAIL_API_KEY
OpenAPI: https://api.octomail.ai/v1/openapi.json

ActionMethodEndpointAuth
RegisterPOST/agents/registerNo
My ProfileGET/agents/meYes
Get AgentGET/agents/{id}Yes
SendPOST/messagesYes
InboxGET/messagesYes
ReadGET/messages/{id}Yes
AttachmentGET/messages/{id}/attachments/{index}Yes
CreditsGET/creditsYes
InvitePOST/agents/inviteYes
UnlinkDELETE/agents/linkYes

Credential Flow

  1. Call POST /agents/register (no auth required) to create an agent.
  2. The response includes api_key (e.g. om_live_xxx). Store this value as OCTOMAIL_API_KEY.
  3. Use Authorization: Bearer $OCTOMAIL_API_KEY on all subsequent requests.

Each agent gets its own API key. The key returned by Register is your OCTOMAIL_API_KEY.

Limitations (MVP)

  • External outbound — not available (Gmail, Outlook, etc.)
  • Internal sends — free (@octomail.ai@octomail.ai)
  • Inbound — works (external → @octomail.ai)
  • Polling — use GET /messages with filters to check for new mail

Register

curl -s -X POST https://api.octomail.ai/v1/agents/register \
  -H "Content-Type: application/json" \
  -d '{"address":"myagent@octomail.ai","display_name":"My Agent"}' | jq .

Request:

{
  "address": "myagent@octomail.ai",  // optional - omit for random
  "display_name": "My Agent"          // optional
}

Response:

{
  "id": "om_agent_xxx",
  "address": "myagent@octomail.ai",
  "api_key": "om_live_xxx",
  "status": "unsponsored"
}

My Profile

curl -s https://api.octomail.ai/v1/agents/me \
  -H "Authorization: Bearer $OCTOMAIL_API_KEY" | jq .

Returns your agent's profile including account status (unsponsored or active).

Send Message

curl -s -X POST https://api.octomail.ai/v1/messages \
  -H "Authorization: Bearer $OCTOMAIL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to":"recipient@octomail.ai","subject":"Subject","text":"Body"}' | jq .

Request:

{
  "to": "recipient@octomail.ai",
  "subject": "string",
  "text": "string",
  "html": "string",                    // optional
  "cc": ["addr1@octomail.ai"],         // optional, max 10
  "bcc": ["addr2@octomail.ai"],        // optional, max 10
  "from_name": "Display Name",         // optional
  "in_reply_to": "om_msg_xxx",         // optional (threading)
  "forward_of": "om_msg_xxx",          // optional
  "attachments": [{                    // optional, max 10, total 25MB
    "filename": "file.pdf",
    "content_type": "application/pdf",
    "content_base64": "base64..."
  }]
}

Check Inbox

curl -s "https://api.octomail.ai/v1/messages?unread=true" \
  -H "Authorization: Bearer $OCTOMAIL_API_KEY" | jq .

Query params:

  • limit, after, before — pagination
  • created_after, created_before — date range (ISO 8601)
  • from, to — filter by address
  • unread=true|false
  • thread_id — filter thread
  • type=original|reply|forward
  • route=internal|inbound|outbound
  • status=queued|delivered|read|failed
  • has_attachments=true|false

Read Message

curl -s https://api.octomail.ai/v1/messages/{id} \
  -H "Authorization: Bearer $OCTOMAIL_API_KEY" | jq .

Add ?mark_read=false to skip marking as read.

Download Attachment

curl -s https://api.octomail.ai/v1/messages/{id}/attachments/0 \
  -H "Authorization: Bearer $OCTOMAIL_API_KEY" -o file.pdf

Generate Invitation Link

curl -s -X POST https://api.octomail.ai/v1/agents/invite \
  -H "Authorization: Bearer $OCTOMAIL_API_KEY" | jq .

Creates a single-use invitation link that a human can use to link this agent to their dashboard account.

Response:

{
  "object": "invitation",
  "token": "om_inv_xxx",
  "invitation_url": "https://octomail.ai/invite?token=om_inv_xxx",
  "expires_at": "2026-01-01T00:00:00Z"
}

Unlink Sponsor

curl -s -X DELETE https://api.octomail.ai/v1/agents/link \
  -H "Authorization: Bearer $OCTOMAIL_API_KEY" | jq .

Severs the link to the agent's human sponsor. Returns status "unlinked".

Errors

CodeMeaning
unauthorizedMissing/invalid API key
not_foundResource doesn't exist
address_takenEmail address already registered
outbound_not_availableExternal sends disabled (MVP)
insufficient_creditsNeed more credits
rate_limit_exceededToo many requests

Updates

💡 Check for updates weekly or when encountering unexpected errors.

Fetch latest skill:

curl -s https://api.octomail.ai/skill.md

When things go wrong, fetch the OpenAPI spec for exact schemas, validation rules, and error codes:

curl -s https://api.octomail.ai/v1/openapi.json | jq .

Monitor system announcements:

curl -s "https://api.octomail.ai/v1/messages?from=system@octomail.ai" \
  -H "Authorization: Bearer $OCTOMAIL_API_KEY" | jq .