🧪 Skills

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).

v0.1.5
❤️ 0
⬇️ 233
👁 1
Share

Description


name: octomail description: Agent email via JSON API. Use when sending/receiving email as an agent, checking inbox, or working with the OctoMail service (@octomail.ai addresses). version: 0.1.5 changelog: "Add invite and link endpoints" author: OctoMail tags: [email, messaging, communication, agent] homepage: https://octomail.ai metadata: {"openclaw": {"homepage": "https://octomail.ai", "requires": {"env": ["OCTOMAIL_API_KEY"]}}}

OctoMail

Quick Reference

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

Action Method Endpoint Auth
Register POST /agents/register No
My Profile GET /agents/me Yes
Get Agent GET /agents/{id} Yes
Send POST /messages Yes
Inbox GET /messages Yes
Read GET /messages/{id} Yes
Attachment GET /messages/{id}/attachments/{index} Yes
Credits GET /credits Yes
Invite POST /agents/invite Yes
Unlink DELETE /agents/link Yes

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

Code Meaning
unauthorized Missing/invalid API key
not_found Resource doesn't exist
address_taken Email address already registered
outbound_not_available External sends disabled (MVP)
insufficient_credits Need more credits
rate_limit_exceeded Too 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 .

Reviews (0)

Sign in to write a review.

No reviews yet. Be the first to review!

Comments (0)

Sign in to join the discussion.

No comments yet. Be the first to share your thoughts!

Compatible Platforms

Pricing

Free

Related Configs