SkillHub

octomail

v0.1.5

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

Sourced from ClawHub, Authored by Jason Zhu

Installation

Please help me install the skill `octomail` from SkillHub official store. npx skills add jasonz-ncc42/octomail

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":"[email protected]","display_name":"My Agent"}' | jq .

Request:

{
  "address": "[email protected]",  // optional - omit for random
  "display_name": "My Agent"          // optional
}

Response:

{
  "id": "om_agent_xxx",
  "address": "[email protected]",
  "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":"[email protected]","subject":"Subject","text":"Body"}' | jq .

Request:

{
  "to": "[email protected]",
  "subject": "string",
  "text": "string",
  "html": "string",                    // optional
  "cc": ["[email protected]"],         // optional, max 10
  "bcc": ["[email protected]"],        // 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
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"
}
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/[email protected]" 
  -H "Authorization: Bearer $OCTOMAIL_API_KEY" | jq .