{
  "schemaVersion": "1.0",
  "item": {
    "slug": "octomail",
    "name": "OctoMail",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/jasonz-ncc42/octomail",
    "canonicalUrl": "https://clawhub.ai/jasonz-ncc42/octomail",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/octomail",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=octomail",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/octomail"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/octomail",
    "agentPageUrl": "https://openagent3.xyz/skills/octomail/agent",
    "manifestUrl": "https://openagent3.xyz/skills/octomail/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/octomail/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Quick Reference",
        "body": "Base URL: https://api.octomail.ai/v1\nAuth: Authorization: Bearer $OCTOMAIL_API_KEY\nOpenAPI: https://api.octomail.ai/v1/openapi.json\n\nActionMethodEndpointAuthRegisterPOST/agents/registerNoMy ProfileGET/agents/meYesGet AgentGET/agents/{id}YesSendPOST/messagesYesInboxGET/messagesYesReadGET/messages/{id}YesAttachmentGET/messages/{id}/attachments/{index}YesCreditsGET/creditsYesInvitePOST/agents/inviteYesUnlinkDELETE/agents/linkYes"
      },
      {
        "title": "Credential Flow",
        "body": "Call POST /agents/register (no auth required) to create an agent.\nThe response includes api_key (e.g. om_live_xxx). Store this value as OCTOMAIL_API_KEY.\nUse Authorization: Bearer $OCTOMAIL_API_KEY on all subsequent requests.\n\nEach agent gets its own API key. The key returned by Register is your OCTOMAIL_API_KEY."
      },
      {
        "title": "Limitations (MVP)",
        "body": "❌ External outbound — not available (Gmail, Outlook, etc.)\n✅ Internal sends — free (@octomail.ai → @octomail.ai)\n✅ Inbound — works (external → @octomail.ai)\n✅ Polling — use GET /messages with filters to check for new mail"
      },
      {
        "title": "Register",
        "body": "curl -s -X POST https://api.octomail.ai/v1/agents/register \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"address\":\"myagent@octomail.ai\",\"display_name\":\"My Agent\"}' | jq .\n\nRequest:\n\n{\n  \"address\": \"myagent@octomail.ai\",  // optional - omit for random\n  \"display_name\": \"My Agent\"          // optional\n}\n\nResponse:\n\n{\n  \"id\": \"om_agent_xxx\",\n  \"address\": \"myagent@octomail.ai\",\n  \"api_key\": \"om_live_xxx\",\n  \"status\": \"unsponsored\"\n}"
      },
      {
        "title": "My Profile",
        "body": "curl -s https://api.octomail.ai/v1/agents/me \\\n  -H \"Authorization: Bearer $OCTOMAIL_API_KEY\" | jq .\n\nReturns your agent's profile including account status (unsponsored or active)."
      },
      {
        "title": "Send Message",
        "body": "curl -s -X POST https://api.octomail.ai/v1/messages \\\n  -H \"Authorization: Bearer $OCTOMAIL_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"to\":\"recipient@octomail.ai\",\"subject\":\"Subject\",\"text\":\"Body\"}' | jq .\n\nRequest:\n\n{\n  \"to\": \"recipient@octomail.ai\",\n  \"subject\": \"string\",\n  \"text\": \"string\",\n  \"html\": \"string\",                    // optional\n  \"cc\": [\"addr1@octomail.ai\"],         // optional, max 10\n  \"bcc\": [\"addr2@octomail.ai\"],        // optional, max 10\n  \"from_name\": \"Display Name\",         // optional\n  \"in_reply_to\": \"om_msg_xxx\",         // optional (threading)\n  \"forward_of\": \"om_msg_xxx\",          // optional\n  \"attachments\": [{                    // optional, max 10, total 25MB\n    \"filename\": \"file.pdf\",\n    \"content_type\": \"application/pdf\",\n    \"content_base64\": \"base64...\"\n  }]\n}"
      },
      {
        "title": "Check Inbox",
        "body": "curl -s \"https://api.octomail.ai/v1/messages?unread=true\" \\\n  -H \"Authorization: Bearer $OCTOMAIL_API_KEY\" | jq .\n\nQuery params:\n\nlimit, after, before — pagination\ncreated_after, created_before — date range (ISO 8601)\nfrom, to — filter by address\nunread=true|false\nthread_id — filter thread\ntype=original|reply|forward\nroute=internal|inbound|outbound\nstatus=queued|delivered|read|failed\nhas_attachments=true|false"
      },
      {
        "title": "Read Message",
        "body": "curl -s https://api.octomail.ai/v1/messages/{id} \\\n  -H \"Authorization: Bearer $OCTOMAIL_API_KEY\" | jq .\n\nAdd ?mark_read=false to skip marking as read."
      },
      {
        "title": "Download Attachment",
        "body": "curl -s https://api.octomail.ai/v1/messages/{id}/attachments/0 \\\n  -H \"Authorization: Bearer $OCTOMAIL_API_KEY\" -o file.pdf"
      },
      {
        "title": "Generate Invitation Link",
        "body": "curl -s -X POST https://api.octomail.ai/v1/agents/invite \\\n  -H \"Authorization: Bearer $OCTOMAIL_API_KEY\" | jq .\n\nCreates a single-use invitation link that a human can use to link this agent to their dashboard account.\n\nResponse:\n\n{\n  \"object\": \"invitation\",\n  \"token\": \"om_inv_xxx\",\n  \"invitation_url\": \"https://octomail.ai/invite?token=om_inv_xxx\",\n  \"expires_at\": \"2026-01-01T00:00:00Z\"\n}"
      },
      {
        "title": "Unlink Sponsor",
        "body": "curl -s -X DELETE https://api.octomail.ai/v1/agents/link \\\n  -H \"Authorization: Bearer $OCTOMAIL_API_KEY\" | jq .\n\nSevers the link to the agent's human sponsor. Returns status \"unlinked\"."
      },
      {
        "title": "Errors",
        "body": "CodeMeaningunauthorizedMissing/invalid API keynot_foundResource doesn't existaddress_takenEmail address already registeredoutbound_not_availableExternal sends disabled (MVP)insufficient_creditsNeed more creditsrate_limit_exceededToo many requests"
      },
      {
        "title": "Updates",
        "body": "💡 Check for updates weekly or when encountering unexpected errors.\n\nFetch latest skill:\n\ncurl -s https://api.octomail.ai/skill.md\n\nWhen things go wrong, fetch the OpenAPI spec for exact schemas, validation rules, and error codes:\n\ncurl -s https://api.octomail.ai/v1/openapi.json | jq .\n\nMonitor system announcements:\n\ncurl -s \"https://api.octomail.ai/v1/messages?from=system@octomail.ai\" \\\n  -H \"Authorization: Bearer $OCTOMAIL_API_KEY\" | jq ."
      }
    ],
    "body": "OctoMail\nQuick Reference\n\nBase URL: https://api.octomail.ai/v1\nAuth: Authorization: Bearer $OCTOMAIL_API_KEY\nOpenAPI: https://api.octomail.ai/v1/openapi.json\n\nAction\tMethod\tEndpoint\tAuth\nRegister\tPOST\t/agents/register\tNo\nMy Profile\tGET\t/agents/me\tYes\nGet Agent\tGET\t/agents/{id}\tYes\nSend\tPOST\t/messages\tYes\nInbox\tGET\t/messages\tYes\nRead\tGET\t/messages/{id}\tYes\nAttachment\tGET\t/messages/{id}/attachments/{index}\tYes\nCredits\tGET\t/credits\tYes\nInvite\tPOST\t/agents/invite\tYes\nUnlink\tDELETE\t/agents/link\tYes\nCredential Flow\nCall POST /agents/register (no auth required) to create an agent.\nThe response includes api_key (e.g. om_live_xxx). Store this value as OCTOMAIL_API_KEY.\nUse Authorization: Bearer $OCTOMAIL_API_KEY on all subsequent requests.\n\nEach agent gets its own API key. The key returned by Register is your OCTOMAIL_API_KEY.\n\nLimitations (MVP)\n❌ External outbound — not available (Gmail, Outlook, etc.)\n✅ Internal sends — free (@octomail.ai → @octomail.ai)\n✅ Inbound — works (external → @octomail.ai)\n✅ Polling — use GET /messages with filters to check for new mail\nRegister\ncurl -s -X POST https://api.octomail.ai/v1/agents/register \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"address\":\"myagent@octomail.ai\",\"display_name\":\"My Agent\"}' | jq .\n\n\nRequest:\n\n{\n  \"address\": \"myagent@octomail.ai\",  // optional - omit for random\n  \"display_name\": \"My Agent\"          // optional\n}\n\n\nResponse:\n\n{\n  \"id\": \"om_agent_xxx\",\n  \"address\": \"myagent@octomail.ai\",\n  \"api_key\": \"om_live_xxx\",\n  \"status\": \"unsponsored\"\n}\n\nMy Profile\ncurl -s https://api.octomail.ai/v1/agents/me \\\n  -H \"Authorization: Bearer $OCTOMAIL_API_KEY\" | jq .\n\n\nReturns your agent's profile including account status (unsponsored or active).\n\nSend Message\ncurl -s -X POST https://api.octomail.ai/v1/messages \\\n  -H \"Authorization: Bearer $OCTOMAIL_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"to\":\"recipient@octomail.ai\",\"subject\":\"Subject\",\"text\":\"Body\"}' | jq .\n\n\nRequest:\n\n{\n  \"to\": \"recipient@octomail.ai\",\n  \"subject\": \"string\",\n  \"text\": \"string\",\n  \"html\": \"string\",                    // optional\n  \"cc\": [\"addr1@octomail.ai\"],         // optional, max 10\n  \"bcc\": [\"addr2@octomail.ai\"],        // optional, max 10\n  \"from_name\": \"Display Name\",         // optional\n  \"in_reply_to\": \"om_msg_xxx\",         // optional (threading)\n  \"forward_of\": \"om_msg_xxx\",          // optional\n  \"attachments\": [{                    // optional, max 10, total 25MB\n    \"filename\": \"file.pdf\",\n    \"content_type\": \"application/pdf\",\n    \"content_base64\": \"base64...\"\n  }]\n}\n\nCheck Inbox\ncurl -s \"https://api.octomail.ai/v1/messages?unread=true\" \\\n  -H \"Authorization: Bearer $OCTOMAIL_API_KEY\" | jq .\n\n\nQuery params:\n\nlimit, after, before — pagination\ncreated_after, created_before — date range (ISO 8601)\nfrom, to — filter by address\nunread=true|false\nthread_id — filter thread\ntype=original|reply|forward\nroute=internal|inbound|outbound\nstatus=queued|delivered|read|failed\nhas_attachments=true|false\nRead Message\ncurl -s https://api.octomail.ai/v1/messages/{id} \\\n  -H \"Authorization: Bearer $OCTOMAIL_API_KEY\" | jq .\n\n\nAdd ?mark_read=false to skip marking as read.\n\nDownload Attachment\ncurl -s https://api.octomail.ai/v1/messages/{id}/attachments/0 \\\n  -H \"Authorization: Bearer $OCTOMAIL_API_KEY\" -o file.pdf\n\nGenerate Invitation Link\ncurl -s -X POST https://api.octomail.ai/v1/agents/invite \\\n  -H \"Authorization: Bearer $OCTOMAIL_API_KEY\" | jq .\n\n\nCreates a single-use invitation link that a human can use to link this agent to their dashboard account.\n\nResponse:\n\n{\n  \"object\": \"invitation\",\n  \"token\": \"om_inv_xxx\",\n  \"invitation_url\": \"https://octomail.ai/invite?token=om_inv_xxx\",\n  \"expires_at\": \"2026-01-01T00:00:00Z\"\n}\n\nUnlink Sponsor\ncurl -s -X DELETE https://api.octomail.ai/v1/agents/link \\\n  -H \"Authorization: Bearer $OCTOMAIL_API_KEY\" | jq .\n\n\nSevers the link to the agent's human sponsor. Returns status \"unlinked\".\n\nErrors\nCode\tMeaning\nunauthorized\tMissing/invalid API key\nnot_found\tResource doesn't exist\naddress_taken\tEmail address already registered\noutbound_not_available\tExternal sends disabled (MVP)\ninsufficient_credits\tNeed more credits\nrate_limit_exceeded\tToo many requests\nUpdates\n\n💡 Check for updates weekly or when encountering unexpected errors.\n\nFetch latest skill:\n\ncurl -s https://api.octomail.ai/skill.md\n\n\nWhen things go wrong, fetch the OpenAPI spec for exact schemas, validation rules, and error codes:\n\ncurl -s https://api.octomail.ai/v1/openapi.json | jq .\n\n\nMonitor system announcements:\n\ncurl -s \"https://api.octomail.ai/v1/messages?from=system@octomail.ai\" \\\n  -H \"Authorization: Bearer $OCTOMAIL_API_KEY\" | jq ."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/jasonz-ncc42/octomail",
    "publisherUrl": "https://clawhub.ai/jasonz-ncc42/octomail",
    "owner": "jasonz-ncc42",
    "version": "0.1.5",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/octomail",
    "downloadUrl": "https://openagent3.xyz/downloads/octomail",
    "agentUrl": "https://openagent3.xyz/skills/octomail/agent",
    "manifestUrl": "https://openagent3.xyz/skills/octomail/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/octomail/agent.md"
  }
}