Skill: jasonz-ncc42/octomail (version 0.1.5)

--- 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 ```bash curl -s -X POST https://api.octomail.ai/v1/agents/register \ -H "Content-Type: application/json" \ -d '{"address":"[REDACTED_SECRET]","display_name":"My Agent"}' | jq . ``` **Request:** ```json { "address": "[REDACTED_SECRET]", // optional - omit for random "display_name": "My Agent" // optional } ``` **Response:** ```json { "id": "om_agent_xxx", "address": "[REDACTED_SECRET]", "api_key": "om_live_xxx", "status": "unsponsored" } ``` ## My Profile ```bash 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 ```bash curl -s -X POST https://api.octomail.ai/v1/messages \ -H "Authorization: Bearer $OCTOMAIL_API_KEY" \ -H "Content-Type: application/json" \ -d '{"to":"[REDACTED_SECRET]","subject":"Subject","text":"Body"}' | jq . ``` **Request:** ```json { "to": "[REDACTED_SECRET]", "subject": "string", "text": "string", "html": "string", // optional "cc": ["[REDACTED_SECRET]"], // optional, max 10 "bcc": ["[REDACTED_SECRET]"], // 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 ```bash 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 ```bash 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 ```bash curl -s https://api.octomail.ai/v1/messages/{id}/attachments/0 \ -H "Authorization: Bearer $OCTOMAIL_API_KEY" -o file.pdf ``` ## Generate Invitation Link ```bash 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:** ```json { "object": "invitation", "token": "om_inv_xxx", "invitation_url": "https://octomail.ai/invite?[REDACTED_SECRET]", "expires_at": "2026-01-01T00:00:00Z" } ``` ## Unlink Sponsor ```bash 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: ```bash curl -s https://api.octomail.ai/skill.md ``` **When things go wrong**, fetch the OpenAPI spec for exact schemas, validation rules, and error codes: ```bash curl -s https://api.octomail.ai/v1/openapi.json | jq . ``` Monitor system announcements: ```bash curl -s "https://api.octomail.ai/v1/messages?from=[REDACTED_SECRET]" \ -H "Authorization: Bearer $OCTOMAIL_API_KEY" | jq . ```


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: suspicious | SkillSpector: suspicious (MEDIUM)