API 接口文档

所有接口返回 JSON 格式,Content-Type 为 application/json


1. 查询库存

GET
/api/stock

无需参数,返回当前可用邮箱库存。

// 响应示例
{
  "success": true,
  "data": [
    {"category": "hotmail", "stock": 3500},
    {"category": "outlook", "stock": 1200}
  ],
  "refresh_interval": 30
}

2. 查询卡密余额

POST
/api/card/query
参数类型必填说明
codestring卡密
// 请求
{"code": "A1B2C3D4E5F67890..."}

// 成功响应
{
  "success": true,
  "data": {
    "remaining": 88,
    "total": 100,
    "used": 12
  }
}

// 失败响应
{"success": false, "message": "Card not found or has been depleted"}

3. 提取邮箱

POST
/api/extract
参数类型必填说明
codestring卡密
categorystring类别:hotmail 或 outlook,默认 hotmail
quantityint提取数量(1-5000)
// 请求
{
  "code": "A1B2C3D4E5F67890...",
  "category": "hotmail",
  "quantity": 10
}

// 成功响应
{
  "success": true,
  "data": {
    "log_id": 1,
    "quantity": 10,
    "emails": "xxx@hotmail.com----pass----token...\nyyy@hotmail.com----pass----token...",
    "file_name": "abc123def.txt",
    "remaining": 78
  }
}

// 失败响应
{"success": false, "message": "库存不足,请减少数量或稍后再试"}

邮箱格式:邮箱----密码----access_token----refresh_token----thunderbird_client_id----graph_access_token----graph_refresh_token


4. 下载提取文件

GET
/api/download/{file_name}

直接返回 TXT 文件下载。file_name 来自提取接口返回的 data.file_name


5. 查询提取记录

POST
/api/card/logs
参数类型必填说明
codestring卡密
// 请求
{"code": "A1B2C3D4E5F67890..."}

// 响应
{
  "success": true,
  "data": [
    {
      "id": 1,
      "category": "hotmail",
      "quantity": 10,
      "created_at": "2026-05-04T18:30:00",
      "file_name": "abc123def.txt",
      "has_file": true
    }
  ]
}

调用示例

Python

import requests

BASE = "http://你的域名:8001"
CARD_CODE = "你的卡密"

# 查询余额
r = requests.post(f"{BASE}/api/card/query", json={"code": CARD_CODE})
print(r.json())

# 提取 10 个 hotmail
r = requests.post(f"{BASE}/api/extract", json={
    "code": CARD_CODE,
    "category": "hotmail",
    "quantity": 10
})
data = r.json()
if data["success"]:
    print(f"提取成功,剩余: {data['data']['remaining']}")
    print(data["data"]["emails"])
else:
    print(f"失败: {data['message']}")

cURL

# 查库存
curl http://你的域名:8001/api/stock

# 查余额
curl -X POST http://你的域名:8001/api/card/query \
  -H "Content-Type: application/json" \
  -d '{"code":"你的卡密"}'

# 提取邮箱
curl -X POST http://你的域名:8001/api/extract \
  -H "Content-Type: application/json" \
  -d '{"code":"你的卡密","category":"hotmail","quantity":10}'

JavaScript

const BASE = "http://你的域名:8001";

// 提取邮箱
const resp = await fetch(`${BASE}/api/extract`, {
    method: "POST",
    headers: {"Content-Type": "application/json"},
    body: JSON.stringify({
        code: "你的卡密",
        category: "hotmail",
        quantity: 10
    })
});
const data = await resp.json();
if (data.success) {
    console.log("邮箱:", data.data.emails);
    console.log("剩余:", data.data.remaining);
} else {
    console.log("失败:", data.message);
}