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

- Skill: `modbender/octomail` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add modbender/octomail`
- Raw SKILL.md: https://api.skillmd.com/api/skills/modbender/octomail/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: modbender (https://skillmd.com/u/modbender)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/modbender/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 |
| 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 |

## 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":"myagent@octomail.ai","display_name":"My Agent"}' | jq .
```

**Request:**
```json
{
  "address": "myagent@octomail.ai",  // optional - omit for random
  "display_name": "My Agent"          // optional
}
```

**Response:**
```json
{
  "id": "om_agent_xxx",
  "address": "myagent@octomail.ai",
  "api_key": "om_live_xxx"
}
```

## 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":"recipient@octomail.ai","subject":"Subject","text":"Body"}' | jq .
```

**Request:**
```json
{
  "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

```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
```

## 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=system@octomail.ai" \
  -H "Authorization: Bearer $OCTOMAIL_API_KEY" | jq .
```

