OPEN API · 面向所有 GEO 优化产品

一次接入,把内容递给大模型

你们的 GEO 产品负责内容整理、事实核实与问题设计,用户点「发布」后调用本接口即可。 答源只承担展示职责:生成带核实时间与来源凭证的结构化事实卡,维护机器可读入口, 让内容更容易被豆包、DeepSeek、通义千问等大模型检索与引用。

写入目标dan_source·永不写归档区老文
无需 WP 账号按产品签 API Key,租户由服务端强制隔离
先试后发validate 免密钥跑同一套质量门禁,不落库
幂等重试external_id / canonical_url / title 三级去重
发布即可读页面、JSON-LD、llms、sitemap 自动同步
FOUR STEPS

四步走通闭环

不需要 WordPress 后台账号,也不需要理解本站的主题与插件结构。你们只负责在「发布」按钮后面发一个 JSON。

STEP 01

拿一把 Key

按 client_id 签发,密钥只以 sha256 摘要存服务端;申请与签发见下方「申请 API Key」。

STEP 02

先用 validate 试接

免密钥调用,返回的 ok / checks / warnings 与正式发布用的是同一套门禁。

STEP 03

POST publish

带 X-DAN-API-Key 发布,拿回 id、url、version;页面即刻对抓取器可见。

STEP 04

度量回流

按 batch_id 看这批内容的引用率,结果回流指导下一批内容整理。

红线不变:发任何正式内容之前,先跑完 20 题 × 5 模型的引用基线;否则无法判断引用率是不是这批内容的功劳。
ENDPOINTS

端点一览

所有路径以 https://www.dandroid.cn/wp-json/dan/v1 为前缀,请求与响应均为 UTF-8 JSON。

方法路径鉴权作用
GET/capabilities匿名能力清单、门禁阈值、限流、写入目标、机器可读入口
GET/openapi.json匿名OpenAPI 3.0.3 描述,可直接导入 Postman / Apifox / 代码生成器
POST/validate匿名只跑质量门禁,不落库;永远 200,用 ok 判断
POST/publishAPI Key 或 Basic唯一写入口;201 新建 / 200 更新,只写 dan_source
GET/stats管理员站点治理、分区计数、过期事实卡
GET/api-status管理员密钥数量、当日调用数、最近 20 条调用日志
LIVE TRY

在线试接(不写库)

下面这段 payload 已经填好,点「运行校验」就会调用 /validate。它只做字段检查,不会发布任何内容,也不需要密钥。

请求体 · application/jsonPOST https://www.dandroid.cn/wp-json/dan/v1/validate
点「运行校验」查看结果。
校验通过与正式发布用的是同一套门禁规则。
i
正式发布只需换端点:把上面的路径换成 https://www.dandroid.cn/wp-json/dan/v1/publish,加上 X-DAN-API-Key 头即可。响应里的 url 就是可被大模型引用的事实卡页面。
CODE SAMPLES

四种语言的最小示例

零第三方依赖;生产环境请务必走 HTTPS,并把 Key 放在环境变量里,不要写进代码或日志。

curl -X POST 'https://www.dandroid.cn/wp-json/dan/v1/publish' \
  -H 'Content-Type: application/json; charset=UTF-8' \
  -H 'X-DAN-API-Key: YOUR_API_KEY' \
  -d @card.json

# 免密钥试接:换成 /validate,去掉 Key 头即可
curl -X POST 'https://www.dandroid.cn/wp-json/dan/v1/validate' \
  -H 'Content-Type: application/json' -d @card.json
import json, os, urllib.request

card = json.load(open("card.json", encoding="utf-8"))
req = urllib.request.Request(
    "https://www.dandroid.cn/wp-json/dan/v1/publish",
    data=json.dumps(card, ensure_ascii=False).encode("utf-8"),
    headers={
        "Content-Type": "application/json; charset=UTF-8",
        "X-DAN-API-Key": os.environ["DAN_API_KEY"],
    },
    method="POST",
)
with urllib.request.urlopen(req, timeout=20) as r:
    result = json.load(r)
    print(result["url"], result["version"])  # 可引用页面地址
import fs from "node:fs";

const card = JSON.parse(fs.readFileSync("card.json", "utf8"));
const res = await fetch("https://www.dandroid.cn/wp-json/dan/v1/publish", {
  method: "POST",
  headers: {
    "Content-Type": "application/json; charset=UTF-8",
    "X-DAN-API-Key": process.env.DAN_API_KEY,
  },
  body: JSON.stringify(card),
});
const result = await res.json();
if (!res.ok) throw new Error(result.code + ": " + result.message);
console.log(result.url, result.version);
<?php
$card = json_decode(file_get_contents('card.json'), true);
$ch = curl_init('https://www.dandroid.cn/wp-json/dan/v1/publish');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Content-Type: application/json; charset=UTF-8',
        'X-DAN-API-Key: ' . getenv('DAN_API_KEY'),
    ],
    CURLOPT_POSTFIELDS     => json_encode($card, JSON_UNESCAPED_UNICODE),
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
echo $result['url'] ?? $result['message'];
CONTRACT

字段与质量门禁

接口收的是结构化字段,不是一篇散文。内容整理、事实核实、问题设计都在你们的产品侧完成,本站不替客户生产内容。

必填字段

字段要求
title非空,≤120 字;也是幂等键之一
summary≥20 字可读摘要,不要堆关键词
verified_atYYYY-MM-DD 真实核实日期
facts≥5 项基础实体字段(对象)
unique_facts≥3 项独家核实事实(数组)

unique_facts 是被 AI 引用的唯一理由。名称、地址、电话属于公共事实,AI 有更权威的源;只有自己打电话、实地核实才拿得到的字段才构成引用价值。

建议字段

字段作用
faq≤20 组问答,自动输出 FAQPage,抬升「可命中」
canonical_url指向客户官网原页,本页仅作结构化副本
external_id产品侧稳定 ID,最强幂等键(租户内唯一)
industry行业频道名,不存在自动创建
batch_id按批次归因「这一批有没有被引用」
source_url核实依据链接,增强可信度

client_id 与 content_zone 在 API Key 路径下由服务端强制写入,payload 里传了也不生效,避免串租户、灌演示数据。

i
字段与门禁已在本页列全。生产环境请走 HTTPS,把密钥放在你们自己的环境变量里;unique_facts 是被 AI 引用的核心,请务必核实后再发。更多工程细节(错误码、重试、SDK)见本页「错误码、幂等与限流」一节。
ERRORS & IDEMPOTENCY

错误码、幂等与限流

错误码

HTTP含义 / 处理
200 / 201更新 / 新建成功,记录 url、version
400缺必填参数或类型不对,修 payload,不重试
401缺 Key 或 Key 无效,检查头与 HTTPS,不重试
422未过质量门禁,按 message 补字段,不绕过
429限流,指数退避后重试
5xx / 网络退避重试;幂等保证不会重复建页

服务端保证

  • 幂等:external_id > canonical_url > title;API Key 路径下限定在本 client_id 内,命中则更新并让 version +1。
  • 租户隔离:Key 绑定 client_id,服务端覆盖 payload 值;不同产品不会因同名标题互相覆盖。
  • 限流:publish 默认 60 次/分钟/密钥;匿名 validate 20 次/分钟/IP,可用常量调整。
  • 写入边界:只写 dan_source,永不写 post 归档区,也不写 question。
  • 自动同步:落地即生成页面、JSON-LD / FAQPage、llms-full.txt、专属 sitemap 与 ?dan=plain 纯文本镜像。
GET A KEY

申请 API Key

任何 GEO 优化产品都可以接入,全程不需要你碰 WordPress 后台或服务器文件。提交申请后,平台为你签发专属密钥。

01
提交申请

留下你的产品标识(client_id)与接入用途,点「提交申请」。我们在一个工作日内审核。

02
接收密钥

审核通过后,平台为你签发专属 API Key 并安全发送给你;明文密钥仅你可见,请妥善保管。

03
开始接入

把密钥放进你们自己的环境变量,请求头带 X-DAN-API-Key;先用匿名 /validate 试接,再调 /publish。

提交申请

或直接邮件至 417750747@qq.com,注明产品名称、client_id 与接入用途即可。

i
关于密钥:明文密钥只发给你,服务端仅保存其 sha256 摘要;传输必须 HTTPS,密钥请放在你们自己的环境变量里,不要写进代码或日志。需要轮换或停用,联系我们即可即时吊销。

接入之后,内容去哪儿

发布成功后内容进入 /source 与 /industry/{slug}/,这是本站唯一的 AI 引用范围;本页与归档区都不计引用率。

显示验证码
没有账号?注册  忘记密码?