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).
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
- Call
POST /agents/register(no auth required) to create an agent. - The response includes
api_key(e.g.om_live_xxx). Store this value asOCTOMAIL_API_KEY. - Use
Authorization: Bearer $OCTOMAIL_API_KEYon 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 /messageswith 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— paginationcreated_after,created_before— date range (ISO 8601)from,to— filter by addressunread=true|falsethread_id— filter threadtype=original|reply|forwardroute=internal|inbound|outboundstatus=queued|delivered|read|failedhas_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)
No reviews yet. Be the first to review!
Comments (0)
No comments yet. Be the first to share your thoughts!