生产环境 Base URL:
https://sms.iosmq.xyz
所有请求和响应均使用 JSON。除激活接口外,外部 API 都需要签名鉴权。
Content-Type: application/json Accept: application/json
用邮箱API额度卡换取 apiKey 和 apiSecret。同一张卡重复激活会返回同一组密钥,不会重新生成。
curl -X POST https://sms.iosmq.xyz/api/v1/external/cards/activate \
-H "Content-Type: application/json" \
-d '{"cardCode":"XXXX-XXXX-XXXX-XXXX"}'
{
"cardCode": "XXXX-XXXX-XXXX-XXXX"
}
{
"code": 0,
"data": {
"apiKey": "pk_xxx",
"apiSecret": "sk_xxx",
"productName": "ChatGPT",
"totalQuota": 100,
"usedQuota": 0,
"remainingQuota": 100,
"expiresAt": "2026-08-02T13:22:46"
}
}
除激活接口外,其余外部接口都需要以下请求头:
X-API-Key: pk_xxx X-Timestamp: 1783056837659 X-Signature: hmac_sha256_signature
X-API-Key:激活卡密后返回的 API Key。X-Timestamp:当前时间戳,支持毫秒或秒,允许约 5 分钟误差。X-Signature:使用 API Secret 计算的 HMAC-SHA256 签名。签名原文:
METHOD + "\n" + PATH + "\n" + TIMESTAMP + "\n" + SHA256(BODY)
算法:HMAC_SHA256(apiSecret, signText)。GET 请求 body 为空,空 body 的 SHA256 为:
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
注意:签名中的 PATH 只包含路径,不包含域名。例如 /api/v1/external/email/sessions/2。
查询当前 API Key 的总额度、已用额度、剩余额度和卡密状态。查询额度不扣次数。
{
"code": 0,
"data": {
"productName": "ChatGPT",
"totalQuota": 100,
"usedQuota": 1,
"remainingQuota": 99,
"cardStatus": "active",
"expiresAt": "2026-08-02T13:22:46"
}
}
成功创建 1 个邮箱会话扣 1 次额度,并从后台 API额度邮箱池绑定 1 个未分配邮箱。项目由卡密固定绑定,调用方不需要传项目。创建失败或 API邮箱库存不足不扣次数。
curl -X POST https://sms.iosmq.xyz/api/v1/external/email/sessions \
-H "Content-Type: application/json" \
-H "X-API-Key: pk_xxx" \
-H "X-Timestamp: 1783056837659" \
-H "X-Signature: your_signature" \
-d '{"externalSessionNo":"order-001"}'
{
"externalSessionNo": "order-001"
}
externalSessionNo 可选,用于传入调用方自己的订单号;同一个 API Key 下不能重复。
注意:邮箱地址由服务端 API额度邮箱池分配,调用方不能指定邮箱;同一个邮箱只会绑定一个会话,禁止复用。
{
"code": 0,
"data": {
"sessionId": 2,
"externalSessionNo": "order-001",
"emailAddress": "demo@gmail.com",
"productName": "ChatGPT",
"status": "active",
"expiresAt": "2026-07-03T17:34:05",
"remainingQuota": 99,
"codes": []
}
}
查询当前 API Key 创建的邮箱会话和验证码。查询验证码不扣次数。接口会尽量拉取最新验证码;暂未收到时 codes 为空数组。
curl https://sms.iosmq.xyz/api/v1/external/email/sessions/2 \ -H "X-API-Key: pk_xxx" \ -H "X-Timestamp: 1783056837659" \ -H "X-Signature: your_signature"
{
"code": 0,
"data": {
"sessionId": 2,
"emailAddress": "demo@gmail.com",
"status": "active",
"codes": [
{
"id": 1,
"code": "123456",
"receivedAt": "2026-07-03T13:40:00"
}
]
}
}
返回当前 API Key 最近创建的 100 个邮箱会话。查询列表不扣次数。
0:成功。1001:请求参数错误。1002:资源不存在。2001:卡密不存在。2002:额度已用完。2003:卡密已过期。2005:卡密状态不正确。5001:API Key 无效、签名错误或请求已过期。{
"code": 5001,
"msg": "签名错误",
"success": false
}
const crypto = require('crypto')
function sign(method, path, body, apiSecret) {
const timestamp = String(Date.now())
const bodyText = body ? JSON.stringify(body) : ''
const bodyHash = crypto.createHash('sha256').update(bodyText).digest('hex')
const signText = [method.toUpperCase(), path, timestamp, bodyHash].join('\n')
const signature = crypto.createHmac('sha256', apiSecret).update(signText).digest('hex')
return { timestamp, signature, bodyText }
}
创建邮箱时,bodyText 必须和实际发送的请求体完全一致。
apiSecret 是私钥,请勿放在浏览器前端、公开仓库或客户端 App 中。