curl --request PATCH \
--url https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts/{draft_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"reply_to": [
"<string>"
],
"to": [
"<string>"
],
"cc": [
"<string>"
],
"bcc": [
"<string>"
],
"subject": "<string>",
"text": "<string>",
"html": "<string>",
"add_attachments": [
{
"filename": "<string>",
"content_type": "<string>",
"content_id": "<string>",
"content": "<string>",
"url": "<string>"
}
],
"remove_attachments": [
"<string>"
],
"add_labels": [
"<string>"
],
"remove_labels": [
"<string>"
],
"send_at": "2023-11-07T05:31:56Z"
}
'import requests
url = "https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts/{draft_id}"
payload = {
"reply_to": ["<string>"],
"to": ["<string>"],
"cc": ["<string>"],
"bcc": ["<string>"],
"subject": "<string>",
"text": "<string>",
"html": "<string>",
"add_attachments": [
{
"filename": "<string>",
"content_type": "<string>",
"content_id": "<string>",
"content": "<string>",
"url": "<string>"
}
],
"remove_attachments": ["<string>"],
"add_labels": ["<string>"],
"remove_labels": ["<string>"],
"send_at": "2023-11-07T05:31:56Z"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
reply_to: ['<string>'],
to: ['<string>'],
cc: ['<string>'],
bcc: ['<string>'],
subject: '<string>',
text: '<string>',
html: '<string>',
add_attachments: [
{
filename: '<string>',
content_type: '<string>',
content_id: '<string>',
content: '<string>',
url: '<string>'
}
],
remove_attachments: ['<string>'],
add_labels: ['<string>'],
remove_labels: ['<string>'],
send_at: '2023-11-07T05:31:56Z'
})
};
fetch('https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts/{draft_id}', 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/{draft_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'reply_to' => [
'<string>'
],
'to' => [
'<string>'
],
'cc' => [
'<string>'
],
'bcc' => [
'<string>'
],
'subject' => '<string>',
'text' => '<string>',
'html' => '<string>',
'add_attachments' => [
[
'filename' => '<string>',
'content_type' => '<string>',
'content_id' => '<string>',
'content' => '<string>',
'url' => '<string>'
]
],
'remove_attachments' => [
'<string>'
],
'add_labels' => [
'<string>'
],
'remove_labels' => [
'<string>'
],
'send_at' => '2023-11-07T05:31:56Z'
]),
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/{draft_id}"
payload := strings.NewReader("{\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 \"add_attachments\": [\n {\n \"filename\": \"<string>\",\n \"content_type\": \"<string>\",\n \"content_id\": \"<string>\",\n \"content\": \"<string>\",\n \"url\": \"<string>\"\n }\n ],\n \"remove_attachments\": [\n \"<string>\"\n ],\n \"add_labels\": [\n \"<string>\"\n ],\n \"remove_labels\": [\n \"<string>\"\n ],\n \"send_at\": \"2023-11-07T05:31:56Z\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts/{draft_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\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 \"add_attachments\": [\n {\n \"filename\": \"<string>\",\n \"content_type\": \"<string>\",\n \"content_id\": \"<string>\",\n \"content\": \"<string>\",\n \"url\": \"<string>\"\n }\n ],\n \"remove_attachments\": [\n \"<string>\"\n ],\n \"add_labels\": [\n \"<string>\"\n ],\n \"remove_labels\": [\n \"<string>\"\n ],\n \"send_at\": \"2023-11-07T05:31:56Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts/{draft_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\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 \"add_attachments\": [\n {\n \"filename\": \"<string>\",\n \"content_type\": \"<string>\",\n \"content_id\": \"<string>\",\n \"content\": \"<string>\",\n \"url\": \"<string>\"\n }\n ],\n \"remove_attachments\": [\n \"<string>\"\n ],\n \"add_labels\": [\n \"<string>\"\n ],\n \"remove_labels\": [\n \"<string>\"\n ],\n \"send_at\": \"2023-11-07T05:31:56Z\"\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"
}Manage Draft
改写未发送草稿的收件人、主题、正文或附件,返回改动后的完整草稿。
curl --request PATCH \
--url https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts/{draft_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"reply_to": [
"<string>"
],
"to": [
"<string>"
],
"cc": [
"<string>"
],
"bcc": [
"<string>"
],
"subject": "<string>",
"text": "<string>",
"html": "<string>",
"add_attachments": [
{
"filename": "<string>",
"content_type": "<string>",
"content_id": "<string>",
"content": "<string>",
"url": "<string>"
}
],
"remove_attachments": [
"<string>"
],
"add_labels": [
"<string>"
],
"remove_labels": [
"<string>"
],
"send_at": "2023-11-07T05:31:56Z"
}
'import requests
url = "https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts/{draft_id}"
payload = {
"reply_to": ["<string>"],
"to": ["<string>"],
"cc": ["<string>"],
"bcc": ["<string>"],
"subject": "<string>",
"text": "<string>",
"html": "<string>",
"add_attachments": [
{
"filename": "<string>",
"content_type": "<string>",
"content_id": "<string>",
"content": "<string>",
"url": "<string>"
}
],
"remove_attachments": ["<string>"],
"add_labels": ["<string>"],
"remove_labels": ["<string>"],
"send_at": "2023-11-07T05:31:56Z"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
reply_to: ['<string>'],
to: ['<string>'],
cc: ['<string>'],
bcc: ['<string>'],
subject: '<string>',
text: '<string>',
html: '<string>',
add_attachments: [
{
filename: '<string>',
content_type: '<string>',
content_id: '<string>',
content: '<string>',
url: '<string>'
}
],
remove_attachments: ['<string>'],
add_labels: ['<string>'],
remove_labels: ['<string>'],
send_at: '2023-11-07T05:31:56Z'
})
};
fetch('https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts/{draft_id}', 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/{draft_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'reply_to' => [
'<string>'
],
'to' => [
'<string>'
],
'cc' => [
'<string>'
],
'bcc' => [
'<string>'
],
'subject' => '<string>',
'text' => '<string>',
'html' => '<string>',
'add_attachments' => [
[
'filename' => '<string>',
'content_type' => '<string>',
'content_id' => '<string>',
'content' => '<string>',
'url' => '<string>'
]
],
'remove_attachments' => [
'<string>'
],
'add_labels' => [
'<string>'
],
'remove_labels' => [
'<string>'
],
'send_at' => '2023-11-07T05:31:56Z'
]),
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/{draft_id}"
payload := strings.NewReader("{\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 \"add_attachments\": [\n {\n \"filename\": \"<string>\",\n \"content_type\": \"<string>\",\n \"content_id\": \"<string>\",\n \"content\": \"<string>\",\n \"url\": \"<string>\"\n }\n ],\n \"remove_attachments\": [\n \"<string>\"\n ],\n \"add_labels\": [\n \"<string>\"\n ],\n \"remove_labels\": [\n \"<string>\"\n ],\n \"send_at\": \"2023-11-07T05:31:56Z\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts/{draft_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\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 \"add_attachments\": [\n {\n \"filename\": \"<string>\",\n \"content_type\": \"<string>\",\n \"content_id\": \"<string>\",\n \"content\": \"<string>\",\n \"url\": \"<string>\"\n }\n ],\n \"remove_attachments\": [\n \"<string>\"\n ],\n \"add_labels\": [\n \"<string>\"\n ],\n \"remove_labels\": [\n \"<string>\"\n ],\n \"send_at\": \"2023-11-07T05:31:56Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts/{draft_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\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 \"add_attachments\": [\n {\n \"filename\": \"<string>\",\n \"content_type\": \"<string>\",\n \"content_id\": \"<string>\",\n \"content\": \"<string>\",\n \"url\": \"<string>\"\n }\n ],\n \"remove_attachments\": [\n \"<string>\"\n ],\n \"add_labels\": [\n \"<string>\"\n ],\n \"remove_labels\": [\n \"<string>\"\n ],\n \"send_at\": \"2023-11-07T05:31:56Z\"\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"
}post_agentmail_inbox_draft_send 完成。写入的是共享 AgentMail 工作区:所有 AIsa 调用方共用同一个 AgentMail 账号,因此这里会触及其他调用方创建的收件箱,你写进去的东西下一个调用方也看得到、改得动。
示例
curl -X PATCH "https://api.aisa.one/apis/v1/agentmail/inboxes/{inbox_id}/drafts/{draft_id}" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY"
// 把整段复制给 Claude Code、Codex、Cursor 或任意 coding agent。
// 连接、授权、跑通这个例子需要的东西都在里面 ——
// 不用粘贴任何 key,浏览器里点一次 Allow 就好。
{
"operation_id": "patch_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/patch_agentmail-inboxes-inbox-id-drafts-draft-id.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。费用与请求规则
公开参考值不是你的账户报价或最终扣费。对于支持 X-AISA-Cost-Mode: quote 的接口,执行前请针对完整请求获取免费报价;执行后通过响应费用元数据和 Usage Logs 核对结算费用。1 USD 等于 1,000,000 个整数 micro-USD。- 默认请求参考估价(USD): 0.012
- 计费依据: explicit_zero
- 结算证据来源: request_snapshot
授权
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
请求体
Edit fields on an existing draft. A draft's kind (plain, reply, or forward)
is fixed at creation and cannot be changed here. Omitting a field leaves it
unchanged; passing null (or [] for a recipient field) clears it. Pass
send_at to schedule or reschedule the draft, or null to un-schedule it.
回复地址。格式为 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 正文。
Attachments to add to the draft.
Show child attributes
Show child attributes
IDs of attachments to remove from the draft.
附件 ID。
Label or labels to add to the draft.
Label or labels to remove from the draft.
计划发送草稿的时间。
响应
状态码为 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 计划发送草稿的时间。