快速开始
本页带你从零发出第一个请求:创建 API Key → 查询可用平台 → 提交问题 → 轮询结果 → 读取回答。全程只需要一个终端。
-
创建 API Key
Section titled “创建 API Key”登录开发者控制台,进入 API Key 页,点「创建 API Key」,填写名称(如「本地测试」)并选择有效期。
创建成功后弹窗会显示完整 Key(形如
gdev_开头的一串字符)。完整 Key 只显示这一次,复制后保存到环境变量:Terminal window export MAXAEO_API_KEY="gdev_你的完整Key"更多 Key 管理操作见管理 API Key。
-
查询可用平台
Section titled “查询可用平台”先用最简单的请求确认 Key 可用,同时拿到各平台的标识和单价:
Terminal window curl -X POST "https://maxaeo.cn/geoapi/geodata/developer/platforms/get" \-H "Authorization: Bearer $MAXAEO_API_KEY" \-H "Content-Type: application/json" \-d '{}'返回(节选):
{"ret": 1,"data": {"ent": {"platforms": ["kimi", "doubao", "yuanbao", "deepseek", "…"],"items": [{"platform": "doubao","region": "domestic","platform_status": "normal","p1_credits": 6,"p2_credits": 3,"has_stats": true,"success_rate": 0.96,"p50_duration_seconds": 52,"sample_count": 124,"stats_updated_at": 1793018400}]}}}ret为1表示成功。提交任务时platform填platforms里的标识(platform_status为maintenance的平台暂停接单);p1_credits/p2_credits是两档优先级每次成功调用的点数(上面数值仅为示例,以实际返回为准)。如果返回
{"ret":1030, …},说明 Key 无效,检查环境变量是否完整、Key 是否被停用,见认证与 API Key。 -
向豆包提问。不传
priority时按 P2 标准档执行和计价:Terminal window curl -X POST "https://maxaeo.cn/geoapi/geodata/developer/task/submit" \-H "Authorization: Bearer $MAXAEO_API_KEY" \-H "Content-Type: application/json" \-d '{"platform": "doubao", "query": "适合程序员的机械键盘推荐"}'接口立即返回任务,状态为
queued:{"ret": 1,"data": {"ent": {"task_id": "task_3f6c1d2e-8a4b-4c1f-9e2d-7b5a0c9d1e23","platform": "doubao","query": "适合程序员的机械键盘推荐","status": "queued","priority": 2,"credits": 3,"…": "…"}}}记下
task_id。此时credits是预占的点数:任务成功才真正扣除,失败或取消会退回。 -
每隔 15 秒查询一次,直到
status变为succeeded、failed或canceled:Terminal window curl -X POST "https://maxaeo.cn/geoapi/geodata/developer/task/get" \-H "Authorization: Bearer $MAXAEO_API_KEY" \-H "Content-Type: application/json" \-d '{"task_id": "task_3f6c1d2e-8a4b-4c1f-9e2d-7b5a0c9d1e23"}'抓取本身通常需要几十秒到两分钟,排队时间另算;平台繁忙时可能要等更久。中间状态
dispatching、pending、running都是正常的,继续轮询即可,详见任务生命周期。 -
任务成功后,响应里:
answer:AI 回答原文(Markdown),保留平台自己的引用标记。raw_result.references:引用来源列表,cited: true表示被回答正文引用。share_link:平台分享链接(平台未提供时为空)。credits:本次实际扣除的点数。
下面的脚本串起提交、轮询和读取三步。API Key 从环境变量 MAXAEO_API_KEY 读取。
import osimport time
import requests
BASE_URL = "https://maxaeo.cn/geoapi/geodata/developer"HEADERS = {"Authorization": f"Bearer {os.environ['MAXAEO_API_KEY']}"}TERMINAL = ("succeeded", "failed", "canceled")
def call(path, body): resp = requests.post(BASE_URL + path, headers=HEADERS, json=body, timeout=30) resp.raise_for_status() data = resp.json() if data["ret"] != 1: raise RuntimeError(f"ret={data['ret']}: {data.get('msg')}") return data["data"]["ent"]
task = call("/task/submit", {"platform": "doubao", "query": "适合程序员的机械键盘推荐"})print("已提交", task["task_id"])
while task["status"] not in TERMINAL: time.sleep(15) task = call("/task/get", {"task_id": task["task_id"]}) print("当前状态", task["status"])
if task["status"] == "succeeded": print(task["answer"]) for ref in (task.get("raw_result") or {}).get("references", []): if ref.get("cited") is True: print(ref.get("rank"), ref.get("title"), ref.get("url")) print("扣除点数", task["credits"])else: print("任务未成功", task["error_code"], task["error_message"])运行:pip install requests && python quickstart.py
const BASE_URL = "https://maxaeo.cn/geoapi/geodata/developer";const headers = { Authorization: `Bearer ${process.env.MAXAEO_API_KEY}`, "Content-Type": "application/json",};const TERMINAL = ["succeeded", "failed", "canceled"];
async function call(path, body) { const resp = await fetch(BASE_URL + path, { method: "POST", headers, body: JSON.stringify(body) }); if (!resp.ok) throw new Error(`HTTP ${resp.status}`); const data = await resp.json(); if (data.ret !== 1) throw new Error(`ret=${data.ret}: ${data.msg}`); return data.data.ent;}
let task = await call("/task/submit", { platform: "doubao", query: "适合程序员的机械键盘推荐" });console.log("已提交", task.task_id);
while (!TERMINAL.includes(task.status)) { await new Promise((resolve) => setTimeout(resolve, 15_000)); task = await call("/task/get", { task_id: task.task_id }); console.log("当前状态", task.status);}
if (task.status === "succeeded") { console.log(task.answer); for (const ref of task.raw_result?.references ?? []) { if (ref.cited === true) console.log(ref.rank, ref.title, ref.url); } console.log("扣除点数", task.credits);} else { console.log("任务未成功", task.error_code, task.error_message);}运行:node quickstart.mjs(需要 Node.js 18 及以上,自带 fetch)
# 1. 提交,取出 task_id(需要 jq)TASK_ID=$(curl -s -X POST "https://maxaeo.cn/geoapi/geodata/developer/task/submit" \ -H "Authorization: Bearer $MAXAEO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"platform": "doubao", "query": "适合程序员的机械键盘推荐"}' | jq -r '.data.ent.task_id')echo "已提交 $TASK_ID" # 输出 null 说明提交失败,单独执行提交命令查看 ret 与 msg
# 2. 每 15 秒查询一次,直到终态while true; do RESP=$(curl -s -X POST "https://maxaeo.cn/geoapi/geodata/developer/task/get" \ -H "Authorization: Bearer $MAXAEO_API_KEY" \ -H "Content-Type: application/json" \ -d "{\"task_id\": \"$TASK_ID\"}") STATUS=$(echo "$RESP" | jq -r 'if .ret == 1 then .data.ent.status else "error" end') echo "当前状态 $STATUS" case "$STATUS" in succeeded|failed|canceled) break ;; error) echo "$RESP"; break ;; esac sleep 15done
# 3. 输出回答echo "$RESP" | jq -r '.data.ent.answer'