curl --request POST \
--url https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"labels": [
"<string>"
],
"reply_to": [
"<string>"
],
"to": [
"<string>"
],
"cc": [
"<string>"
],
"bcc": [
"<string>"
],
"subject": "<string>",
"text": "<string>",
"html": "<string>",
"attachments": [
{
"filename": "<string>",
"content_type": "<string>",
"content_id": "<string>",
"content": "<string>",
"url": "<string>"
}
],
"in_reply_to": "<string>",
"forward_of": "<string>",
"reply_all": true,
"send_at": "2023-11-07T05:31:56Z",
"client_id": "<string>"
}
'import requests
url = "https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts"
payload = {
"labels": ["<string>"],
"reply_to": ["<string>"],
"to": ["<string>"],
"cc": ["<string>"],
"bcc": ["<string>"],
"subject": "<string>",
"text": "<string>",
"html": "<string>",
"attachments": [
{
"filename": "<string>",
"content_type": "<string>",
"content_id": "<string>",
"content": "<string>",
"url": "<string>"
}
],
"in_reply_to": "<string>",
"forward_of": "<string>",
"reply_all": True,
"send_at": "2023-11-07T05:31:56Z",
"client_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
labels: ['<string>'],
reply_to: ['<string>'],
to: ['<string>'],
cc: ['<string>'],
bcc: ['<string>'],
subject: '<string>',
text: '<string>',
html: '<string>',
attachments: [
{
filename: '<string>',
content_type: '<string>',
content_id: '<string>',
content: '<string>',
url: '<string>'
}
],
in_reply_to: '<string>',
forward_of: '<string>',
reply_all: true,
send_at: '2023-11-07T05:31:56Z',
client_id: '<string>'
})
};
fetch('https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'labels' => [
'<string>'
],
'reply_to' => [
'<string>'
],
'to' => [
'<string>'
],
'cc' => [
'<string>'
],
'bcc' => [
'<string>'
],
'subject' => '<string>',
'text' => '<string>',
'html' => '<string>',
'attachments' => [
[
'filename' => '<string>',
'content_type' => '<string>',
'content_id' => '<string>',
'content' => '<string>',
'url' => '<string>'
]
],
'in_reply_to' => '<string>',
'forward_of' => '<string>',
'reply_all' => true,
'send_at' => '2023-11-07T05:31:56Z',
'client_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts"
payload := strings.NewReader("{\n \"labels\": [\n \"<string>\"\n ],\n \"reply_to\": [\n \"<string>\"\n ],\n \"to\": [\n \"<string>\"\n ],\n \"cc\": [\n \"<string>\"\n ],\n \"bcc\": [\n \"<string>\"\n ],\n \"subject\": \"<string>\",\n \"text\": \"<string>\",\n \"html\": \"<string>\",\n \"attachments\": [\n {\n \"filename\": \"<string>\",\n \"content_type\": \"<string>\",\n \"content_id\": \"<string>\",\n \"content\": \"<string>\",\n \"url\": \"<string>\"\n }\n ],\n \"in_reply_to\": \"<string>\",\n \"forward_of\": \"<string>\",\n \"reply_all\": true,\n \"send_at\": \"2023-11-07T05:31:56Z\",\n \"client_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"labels\": [\n \"<string>\"\n ],\n \"reply_to\": [\n \"<string>\"\n ],\n \"to\": [\n \"<string>\"\n ],\n \"cc\": [\n \"<string>\"\n ],\n \"bcc\": [\n \"<string>\"\n ],\n \"subject\": \"<string>\",\n \"text\": \"<string>\",\n \"html\": \"<string>\",\n \"attachments\": [\n {\n \"filename\": \"<string>\",\n \"content_type\": \"<string>\",\n \"content_id\": \"<string>\",\n \"content\": \"<string>\",\n \"url\": \"<string>\"\n }\n ],\n \"in_reply_to\": \"<string>\",\n \"forward_of\": \"<string>\",\n \"reply_all\": true,\n \"send_at\": \"2023-11-07T05:31:56Z\",\n \"client_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"labels\": [\n \"<string>\"\n ],\n \"reply_to\": [\n \"<string>\"\n ],\n \"to\": [\n \"<string>\"\n ],\n \"cc\": [\n \"<string>\"\n ],\n \"bcc\": [\n \"<string>\"\n ],\n \"subject\": \"<string>\",\n \"text\": \"<string>\",\n \"html\": \"<string>\",\n \"attachments\": [\n {\n \"filename\": \"<string>\",\n \"content_type\": \"<string>\",\n \"content_id\": \"<string>\",\n \"content\": \"<string>\",\n \"url\": \"<string>\"\n }\n ],\n \"in_reply_to\": \"<string>\",\n \"forward_of\": \"<string>\",\n \"reply_all\": true,\n \"send_at\": \"2023-11-07T05:31:56Z\",\n \"client_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"inbox_id": "<string>",
"draft_id": "<string>",
"labels": [
"<string>"
],
"updated_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"client_id": "<string>",
"reply_to": [
"<string>"
],
"to": [
"<string>"
],
"cc": [
"<string>"
],
"bcc": [
"<string>"
],
"subject": "<string>",
"preview": "<string>",
"text": "<string>",
"html": "<string>",
"attachments": [
{
"attachment_id": "<string>",
"size": 123,
"filename": "<string>",
"content_type": "<string>",
"content_disposition": "inline",
"content_id": "<string>"
}
],
"in_reply_to": "<string>",
"forward_of": "<string>",
"references": [
"<string>"
],
"send_status": "scheduled",
"send_at": "2023-11-07T05:31:56Z"
}列出草稿
在某个收件箱里写一封草稿但不发送。
curl --request POST \
--url https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"labels": [
"<string>"
],
"reply_to": [
"<string>"
],
"to": [
"<string>"
],
"cc": [
"<string>"
],
"bcc": [
"<string>"
],
"subject": "<string>",
"text": "<string>",
"html": "<string>",
"attachments": [
{
"filename": "<string>",
"content_type": "<string>",
"content_id": "<string>",
"content": "<string>",
"url": "<string>"
}
],
"in_reply_to": "<string>",
"forward_of": "<string>",
"reply_all": true,
"send_at": "2023-11-07T05:31:56Z",
"client_id": "<string>"
}
'import requests
url = "https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts"
payload = {
"labels": ["<string>"],
"reply_to": ["<string>"],
"to": ["<string>"],
"cc": ["<string>"],
"bcc": ["<string>"],
"subject": "<string>",
"text": "<string>",
"html": "<string>",
"attachments": [
{
"filename": "<string>",
"content_type": "<string>",
"content_id": "<string>",
"content": "<string>",
"url": "<string>"
}
],
"in_reply_to": "<string>",
"forward_of": "<string>",
"reply_all": True,
"send_at": "2023-11-07T05:31:56Z",
"client_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
labels: ['<string>'],
reply_to: ['<string>'],
to: ['<string>'],
cc: ['<string>'],
bcc: ['<string>'],
subject: '<string>',
text: '<string>',
html: '<string>',
attachments: [
{
filename: '<string>',
content_type: '<string>',
content_id: '<string>',
content: '<string>',
url: '<string>'
}
],
in_reply_to: '<string>',
forward_of: '<string>',
reply_all: true,
send_at: '2023-11-07T05:31:56Z',
client_id: '<string>'
})
};
fetch('https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'labels' => [
'<string>'
],
'reply_to' => [
'<string>'
],
'to' => [
'<string>'
],
'cc' => [
'<string>'
],
'bcc' => [
'<string>'
],
'subject' => '<string>',
'text' => '<string>',
'html' => '<string>',
'attachments' => [
[
'filename' => '<string>',
'content_type' => '<string>',
'content_id' => '<string>',
'content' => '<string>',
'url' => '<string>'
]
],
'in_reply_to' => '<string>',
'forward_of' => '<string>',
'reply_all' => true,
'send_at' => '2023-11-07T05:31:56Z',
'client_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts"
payload := strings.NewReader("{\n \"labels\": [\n \"<string>\"\n ],\n \"reply_to\": [\n \"<string>\"\n ],\n \"to\": [\n \"<string>\"\n ],\n \"cc\": [\n \"<string>\"\n ],\n \"bcc\": [\n \"<string>\"\n ],\n \"subject\": \"<string>\",\n \"text\": \"<string>\",\n \"html\": \"<string>\",\n \"attachments\": [\n {\n \"filename\": \"<string>\",\n \"content_type\": \"<string>\",\n \"content_id\": \"<string>\",\n \"content\": \"<string>\",\n \"url\": \"<string>\"\n }\n ],\n \"in_reply_to\": \"<string>\",\n \"forward_of\": \"<string>\",\n \"reply_all\": true,\n \"send_at\": \"2023-11-07T05:31:56Z\",\n \"client_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"labels\": [\n \"<string>\"\n ],\n \"reply_to\": [\n \"<string>\"\n ],\n \"to\": [\n \"<string>\"\n ],\n \"cc\": [\n \"<string>\"\n ],\n \"bcc\": [\n \"<string>\"\n ],\n \"subject\": \"<string>\",\n \"text\": \"<string>\",\n \"html\": \"<string>\",\n \"attachments\": [\n {\n \"filename\": \"<string>\",\n \"content_type\": \"<string>\",\n \"content_id\": \"<string>\",\n \"content\": \"<string>\",\n \"url\": \"<string>\"\n }\n ],\n \"in_reply_to\": \"<string>\",\n \"forward_of\": \"<string>\",\n \"reply_all\": true,\n \"send_at\": \"2023-11-07T05:31:56Z\",\n \"client_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"labels\": [\n \"<string>\"\n ],\n \"reply_to\": [\n \"<string>\"\n ],\n \"to\": [\n \"<string>\"\n ],\n \"cc\": [\n \"<string>\"\n ],\n \"bcc\": [\n \"<string>\"\n ],\n \"subject\": \"<string>\",\n \"text\": \"<string>\",\n \"html\": \"<string>\",\n \"attachments\": [\n {\n \"filename\": \"<string>\",\n \"content_type\": \"<string>\",\n \"content_id\": \"<string>\",\n \"content\": \"<string>\",\n \"url\": \"<string>\"\n }\n ],\n \"in_reply_to\": \"<string>\",\n \"forward_of\": \"<string>\",\n \"reply_all\": true,\n \"send_at\": \"2023-11-07T05:31:56Z\",\n \"client_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"inbox_id": "<string>",
"draft_id": "<string>",
"labels": [
"<string>"
],
"updated_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"client_id": "<string>",
"reply_to": [
"<string>"
],
"to": [
"<string>"
],
"cc": [
"<string>"
],
"bcc": [
"<string>"
],
"subject": "<string>",
"preview": "<string>",
"text": "<string>",
"html": "<string>",
"attachments": [
{
"attachment_id": "<string>",
"size": 123,
"filename": "<string>",
"content_type": "<string>",
"content_disposition": "inline",
"content_id": "<string>"
}
],
"in_reply_to": "<string>",
"forward_of": "<string>",
"references": [
"<string>"
],
"send_status": "scheduled",
"send_at": "2023-11-07T05:31:56Z"
}to、cc、bcc、subject、text、html、labels、attachments,以及用于挂会话的 in_reply_to / references。返回含 draft_id 的完整草稿。在调用 post_agentmail_inbox_draft_send 之前不会有任何东西离开账号,所以这是把待发邮件先摆出来给人审的安全做法。写入的是共享 AgentMail 工作区:所有 AIsa 调用方共用同一个 AgentMail 账号,因此这里会触及其他调用方创建的收件箱,你写进去的东西下一个调用方也看得到、改得动。
示例
curl -X POST "https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY"
// 把整段复制给 Claude Code、Codex、Cursor 或任意 coding agent。
// 连接、授权、跑通这个例子需要的东西都在里面 ——
// 不用粘贴任何 key,浏览器里点一次 Allow 就好。
{
"operation_id": "post_agentmail_inbox_draft",
"arguments": {},
"max_price_usd": 0.05
}
// ── for the agent ─────────────────────────────────────────────────────────
// Register the AIsa MCP server, then call its `use` tool with the JSON above.
// name aisa
// endpoint https://mcp.aisa.one/mcp
// transport streamable-http
// auth OAuth. The server publishes RFC 9728 metadata, so open a
// browser and the user clicks Allow once — nothing to paste.
// If AISA_API_KEY is set, send it as a bearer header instead.
// Use your own MCP mechanism, not a hand-edited config file:
// Codex codex mcp add aisa --url https://mcp.aisa.one/mcp
// Claude Code claude mcp add --transport http -s user aisa https://mcp.aisa.one/mcp
// Cursor / VS Code a "url" entry for https://mcp.aisa.one/mcp in the MCP config
// The server lists five tools over https://mcp.aisa.one/servers worth of APIs:
// search, get_details, use, batch_use, list_categories. search and
// get_details are free; use is billed per call and max_price_usd refuses
// anything above the cap before spending. This operation's full contract —
// every argument, the response shape, the price and the pitfalls — is at
// https://aisa.one/docs/zh/api-reference/agentmail/post_agentmail-inboxes-inbox-id-drafts.md
// Then run the call and show me the result.
https://mcp.aisa.one/mcp —— Claude Code、
Codex、Cursor、VS Code 都可以。鉴权走 OAuth:客户端打开浏览器,你点一次
Allow,不需要粘贴任何 key。各客户端的具体命令和每次调用的价格见
aisa.one/zh-cn/mcp。授权
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
路径参数
收件箱的 ID。
请求体
Body for creating a draft. Supports plain, reply, reply-all, and forward drafts:
- Plain draft: supply
to,subject,text, etc. - Reply: set
in_reply_toto a message ID. Recipients, subject, and threading are derived from that message. Setreply_allto address the whole thread (you then cannot also passto,cc, orbcc). - Forward: set
forward_ofto a message ID. The subject and threading are derived from the source message, whose body and attachments are merged in at send time.
in_reply_to and forward_of are mutually exclusive, and reading the
referenced message requires message_read permission.
草稿标签。
回复地址。格式为 username@domain.com 或 Display Name <username@domain.com>。
收件人地址。格式为 username@domain.com 或 Display Name <username@domain.com>。
抄送收件人的地址。格式为 username@domain.com 或 Display Name <username@domain.com>。
BCC 收件人的地址。格式为 username@domain.com 或 Display Name <username@domain.com>。
草稿主题。
草稿的纯文本正文。
草稿的 HTML 正文。
草稿中要包含的附件。
Show child attributes
Show child attributes
被回复消息的 ID。
ID of message being forwarded.
回复原始消息的所有收件人。
计划发送草稿的时间。
草稿的客户端 ID。
响应
状态码为 200 的响应
收件箱的 ID。
草稿 ID。
草稿标签。
草稿的最后更新时间。
草稿创建时间。
草稿的客户端 ID。
回复地址。格式为 username@domain.com 或 Display Name <username@domain.com>。
收件人地址。格式为 username@domain.com 或 Display Name <username@domain.com>。
抄送收件人的地址。格式为 username@domain.com 或 Display Name <username@domain.com>。
BCC 收件人的地址。格式为 username@domain.com 或 Display Name <username@domain.com>。
草稿主题。
草稿文本预览。
草稿的纯文本正文。
草稿的 HTML 正文。
草稿中的附件。
Show child attributes
Show child attributes
被回复消息的 ID。
ID of message being forwarded.
会话串中先前消息的 ID。
草稿的定时发送状态。
scheduled, sending, failed 计划发送草稿的时间。