API 规范文档 v1.0

MailerWire 开发者 API 文档

单套 API 统一接入事务邮件,具备确定性配额避让、24小时幂等防重与全链路审计追溯能力。

最后更新:2026 年 9 月 13 日

概述与架构理念

MailerWire 是定位关键业务的事务邮件路由控制面。连接您现有的 Resend 或 Brevo 供应商后,业务系统只需对接一套 API。当首选供应商用尽每日或每月限额时,MailerWire 自动按策略切换至备用出口;当供应商抛出业务异常或网络未明时,严格坚持“不盲目重投”,从根源杜绝重复发信。

请求基础地址 (Base URL)

所有事务发信请求均统一提交至 MailerWire API 接口地址:

POST/v1/emails

基于标准 HTTPS 443 端口与 TLS 加密传输。

鉴权与认证机制

所有的 API 请求均需携带在控制台「项目与 API Key」(/app/api-keys) 中生成的密钥。密钥格式为 mw_live_<public_id>_<secret>,创建时仅展示一次。

Authorization 请求头
Authorization: Bearer mw_live_<public_id>_<secret>
安全须知: 请妥善保管私密 API Key。切勿在前端网页、移动端 App 等客户端环境中明文暴露。

幂等防重保障 (Idempotency)

针对验证码、交易凭据、密码重置等关键事务场景,MailerWire 强制要求携带 Idempotency-Key 请求头,防止因网络波动、客户端重发导致用户收到多封邮件。

  • 必填请求头:Idempotency-Key(最大 128 字符)。
  • 单 API Key 维度拥有 24 小时幂等缓存窗口。
  • 相同 Key 在窗口内重复提交时,直接返回首次受理记录,绝不会向供应商触发二次投递。
Header Example
Idempotency-Key: order_20260906_983210

发送事务邮件 (Send Email)

提交一封邮件进入调度队列,按当前路由策略择机投递。

POST/v1/emails

请求头要求 (Request Headers)

参数字段类型是否必填详细说明
Authorizationstring必填Bearer mw_live_...
Idempotency-Keystring必填业务唯一防重标识(最长 128 字符)
Content-Typestring必填application/json

请求体参数 (Body Parameters)

参数字段类型是否必填详细说明
fromstring必填发件人地址。格式如 notify@acme.com 或 Acme <notify@acme.com>。需在供应商后台通过域名校验。
tostring必填单个收件人邮箱。为了保证事务邮件确定性与幂等追踪,单次请求仅支持单个收件人。
subjectstring必填邮件标题(最大 500 字符)。
textstring可选*纯文本格式邮件正文(最大 100KB)。text 与 html 至少填写一项。
htmlstring可选*HTML 富文本格式邮件正文(最大 100KB)。text 与 html 至少填写一项。

响应结果 (202 Accepted)

为了保障极致的高吞吐与低延迟,MailerWire 采用异步排队机制。返回 202 状态码即代表系统已完成校验、幂等登记并进入投递队列。

HTTP 202 Accepted
{
  "id": "b4d1d94c-87d2-4328-971c-7f55f24209bf",
  "status": "accepted",
  "submitted_at": "2026-09-06T12:00:00.000Z"
}

多语言调用代码示例

curl -X POST https://api.mailerwire.com/v1/emails \
  -H "Authorization: Bearer mw_live_your_api_key" \
  -H "Idempotency-Key: req_$(date +%s)_order9823" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "Acme Notification <notify@acme.com>",
    "to": "alex@example.com",
    "subject": "Your verification code: 629103",
    "text": "Your verification code is 629103. It expires in 10 minutes.",
    "html": "<p>Your code is <strong>629103</strong>.</p>"
  }'

投递状态与生命周期

每封邮件从提交到最终完成,状态严格遵循确定性状态机流转:

Status状态指示详细说明
accepted已受理请求已通过鉴权、校验与幂等检查,已进入投递队列等待调度。
sent已发送首选供应商连接正常且未达限额,邮件已成功投递。
sent_after_limit_failover限额切换后已发送首选供应商达到日或月配额,MailerWire 自动避让并顺利由备选供应商送达。
failed发送失败供应商拒绝接收或凭据失效。MailerWire 记录详细原因并停止,绝不跨厂商盲目重投造成重复发信。
limit_rejected限额拒发路由策略中的所有供应商均已达配额上限,邮件被安全拒发。

Webhook 状态回调与流水同步

在供应商(Resend / Brevo)管理后台配置以下 Webhook 地址,可将真实的“已送达”、“拒收/退信”、“打开”等事件实时回写至 MailerWire 发送记录流水。

Brevo (Transactional Webhooks)
Webhook URL:https://<your-domain>/api/v1/webhooks/brevo
Resend (Webhooks)
Webhook URL:https://<your-domain>/api/v1/webhooks/resend

系统错误码速查表

MailerWire 遵循标准 HTTP 规范与结构化错误返回格式:

错误代码 (code)HTTP 状态码含义与解决建议
INVALID_API_KEY401API Key 格式不正确、已被撤销或不存在。
INVALID_INPUT400请求参数缺失或格式不合法(如缺少收件人、标题或内容)。
NO_ELIGIBLE_ROUTE422当前账户尚未配置并保存任何已启用的邮件供应商连接。
DAILY_LIMIT_REACHED422 / Internal该供应商已达到配置的单日发信配额上限。
MONTHLY_LIMIT_REACHED422 / Internal该供应商已达到配置的当月发信配额上限。
PROVIDER_REJECTED422 / Attempt上游供应商明确拒收该请求或上报凭据失效。
准备好接入发信了吗?

立即前往控制台创建您的第一把 API Key,几分钟内即可开始路由发信。

进入控制台 →