doubaoya

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

都爆鸭 · doubaoya

Doubaoya · doubaoya

本鸭是给新媒体 / 运营准备的爆款工作搭子。你(AI agent)拿一条
DOUBAOYA_API_KEY
, 就能替用户挖爆款选题、追全网热点、搜三大平台内容、解析作品、写开场脚本、检测违禁词—— 全部通过
https://doubaoya.com
的公开 API 完成。用户不用碰任何技术细节,你负责调接口、拼结果。

This Duck is a viral content assistant for new media / operations professionals. As an AI agent, with a single
DOUBAOYA_API_KEY
, you can help users dig viral topics, track cross-platform hot spots, search content across three major platforms, analyze content, write opening scripts, and detect prohibited words—all through public APIs of
https://doubaoya.com
. Users don't need to deal with any technical details; you are responsible for calling the APIs and presenting the results in user-friendly language.

0. 你能帮用户做什么(一句话版)

0. What You Can Do for Users (One-Sentence Version)

  • 挖选题:给个赛道关键词,返回正在升温的爆款方向。
  • 追热点:一次请求聚合多平台热榜,给出选题信号。
  • 搜内容:按关键词搜抖音 / 小红书 / 公众号的真实作品与文章。
  • 看账号:查达人 / 竞品账号的粉丝量、作品概况。
  • 解析作品:粘贴一个公开链接,返回归一化的标题、作者、互动数据。
  • 保命:发布前检测违禁词,返回标注版正文与风险类别;命中词从标注定位,替换由你结合上下文给。
  • 写脚本:以上数据为素材,由你(agent)合成开场脚本 / 分镜。
  • 记进第二大脑
    mera
    —— ⛔ 已下架,见 §3 的「第二大脑」小节。

  • Topic Mining: Provide a track keyword, return rising viral directions.
  • Hot Topic Tracking: Aggregate multi-platform hot rankings in one request, provide topic signals.
  • Content Search: Search real content and articles on Douyin / Xiaohongshu / Gongzhonghao by keywords.
  • Account Insights: Check follower counts and content overview of influencers / competitor accounts.
  • Content Analysis: Paste a public link, return normalized title, author, and interaction data.
  • Compliance Check: Detect prohibited words before publishing, return annotated content and risk categories; locate hit words from the difference between annotated and original content, and provide replacement suggestions based on context.
  • Script Writing: Use the above data as materials to synthesize opening scripts / storyboards (as an agent).
  • Save to Second Brain (
    mera
    )
    —— ⛔ Discontinued, see "Second Brain" section in §3.

0.5 用户该用哪个能力?(按"我想做什么"选)

0.5 Which Capability Should Users Use? (Choose by "What I Want to Do")

本 Skill 是总入口 / 上手向导:一条 key 通到都爆鸭全部能力。用户通常不知道有哪些能力, 你(agent)的活是听懂用户想干嘛 → 选对能力 → 调 → 把结果讲成人话
🔑 这张速查表只回答「该调哪一条」,不回答「怎么填参数」。 每行给三样东西:能力的
operationKey
、一句用途、详情端点
GET
,免鉴权免费)。 要发请求,先
GET
那个详情端点,从返回里读入参规格和
execution
target
(§2.1)—— 入参一律现拉,本文档一个字段名都不抄。抄进来的字段会漂,而漂了没有任何地方会报错。
公众号请求例外:只要请求涉及公众号,先读
references/wechat-routing.json
,再按其优先级选 Skill。极简原则: 要交付一篇完整文章(写 + 排版 + 存草稿)走写作交付链;本地扫码、按号查最新 / 今日、拉正文或历史归档走 MP Ark;公开数据、互动指标和选题分析走都爆鸭云端能力。
「帮我写一篇公众号文章」例外:这不是一个 API 能干完的活,是一条链—— 本 Skill 自己接前四跳
api.gzh.hotArticle
拉爆文样本 + 写正文;
api.gzh.cozeData
起标题与 封面套路,要成品封面方案则用
skill.wechat.coverDesign
skill.wechat.prohibitedWord
出过审版正文)→
wechat-article-pipeline
(排版 + 封面 + 存进用户自己的公众号草稿箱)。 🔴 先问清用户要的终态,再决定走到链上哪一站:只要成稿,写完正文就结束; 要排版好的公众号 HTML 或要文章进自己的草稿箱,就得一路走到
wechat-article-pipeline
。 交一段 Markdown 就默认收尾,是这条链最常见的断头;反过来,用户只要成稿时擅自去写他的公众号后台 同样不对——
wechat-article-pipeline
有真实副作用。拿不准就问一句。 逐跳导航(做完这一步该走哪一步)由
dby
负责,它有完整的任务后导航图;把交棒说清楚再交过去, 用户没装
dby
时就按上面这条链自己接续。
「我自己的东西」例外 —— ⛔ 该能力已下架:请求指向用户自己的内容(帮我记一下 / 我的笔记 / 我之前说过 / 我是个什么样的人)时,过去走
mera
第二大脑;该能力已下架,现在调不通(判据与 失效条件见
references/mera-routing.json
retired
字段)。 如实告诉用户这个能力下架了,别拿公开平台搜索去顶替——公开搜索看不见用户自己的笔记, 只会拿陌生人的内容糊弄他,那比直说「没有这个能力」更糟。

选题 / 热点 —— 通用选题从这一档起手
用户这么说(运营白话)该调哪条一句话用途详情端点(
GET
,免鉴权免费)
"最近全网在火什么?给我点选题" —— 🔴 不带关键词直取,通用选题的正确起手
api.trend.hotSpotKeyword
全网热点聚合直取,通用选题首选
/api/apis/trend/trending-hub-keyword
"全网热搜 / 热搜关键词 / 热榜TOP10 / 出一批热词当选题种子"
api.trend.hotKeywords
全网热搜关键词
/api/apis/trend/hot-keywords
"某个词近 30 天在各平台被讨论成什么样 / 近30天作品 / 社媒舆情 / 舆情监测"
api.multi.workSearch
全平台近30天作品聚合
/api/apis/multi/cn30-multi-search
"这个词的跨平台讨论量趋势"(CN 版近 30 天,与上一条是两条能力)
skill.social.last30Days
Last 30 Days—CN版
/api/skills/cn-last30days
"内容出海 / 出海爆款 / 出海日报 / 出海选题 / 出海流量风口 / 全平台爆款"
api.multi.contentExportTop
全平台内容出海Top榜
/api/apis/multi/multi-content-export-top
小红书
用户这么说(运营白话)该调哪条一句话用途详情端点(
GET
,免鉴权免费)
"我这个赛道在涨啥 / 爆款笔记发现 / 小红书热门笔记 / 找对标笔记"
skill.xhs.viralNotes
小红书爆款笔记发现
/api/skills/xiaohongshu-viral-notes
"搜小红书笔记 / 小红书搜索 / 小红书笔记查询 / 小红书爬取"
api.xhs.searchNote
搜索小红书笔记
/api/apis/xiaohongshu/search-note
"搜小红书作品 / 照着写小红书 / 对标后再写(先取数再动笔)"
api.xhs.searchWork
搜索小红书作品
/api/apis/xiaohongshu/search-work
"批量爬小红书作品 / 小红书爬虫 / 小红书作品采集"
api.xhs.crawlWork
小红书作品采集
/api/apis/xiaohongshu/crawl-work
"小红书封面怎么做 / 首图套路 / 封面选题 / 起个小红书标题 / 笔记拆解 / 笔记对标 / 对标分析 / 选题拆解 / 爆款结构"
api.xhs.cozeData
小红书爆款封面/标题/笔记分析数据
/api/apis/xiaohongshu/xiaohongshu-coze
"小红书日榜 / 小红书 TOP / 今日爆款笔记"
api.xhs.cozeDailyTop
小红书日榜
/api/apis/xiaohongshu/xiaohongshu-daily-top
"小红书周榜 / 小红书周排行 / 一周爆款 / 周度趋势 / 中线选题"
api.xhs.cozeWeeklyTop
小红书周榜
/api/apis/xiaohongshu/xiaohongshu-weekly-top
"低粉爆款 / 素人爆款 / 黑马笔记 / 低粉高赞 / 小号打法 / 冷启动对标"
api.xhs.cozeLowFansTop
小红书低粉爆款榜
/api/apis/xiaohongshu/xiaohongshu-low-fans-top
抖音
用户这么说(运营白话)该调哪条一句话用途详情端点(
GET
,免鉴权免费)
"搜抖音作品 / 抖音搜索 / 抖音综合搜索 / 扒抖音作品 / 短视频选题"
api.douyin.searchWork
搜索抖音作品
/api/apis/douyin/search-work
"抖音实时搜索 / 抖音最新发布 / 刚发出来的那批"
api.douyin.realtimeSearch
抖音实时搜索
/api/apis/douyin/realtime-search
"扒评论区 / 抖音评论 / 评论分析 / 评论风向 / 用户需求"
api.douyin.comments
抖音作品评论
/api/apis/douyin/comments
公众号
用户这么说(运营白话)该调哪条一句话用途详情端点(
GET
,免鉴权免费)
"搜公众号文章 / 公众号取数 / 热门文章 / 扒文章"
api.gzh.searchArticle
搜索公众号文章
/api/apis/gongzhonghao/search-article
"公众号爆文 / 爆款文章 / 爆款仿写 / 写公众号先拉样本"
api.gzh.hotArticle
公众号爆文搜索
/api/apis/gongzhonghao/hot-article
"公众号热门文章 / 只要真火过的(阅读量有下限那种)"(与上一条是两条能力:这条按阅读量门槛筛,拿的是"确实火过"的样本)
skill.wechat.hotSearch
公众号热门文章查询
/api/skills/wechat-search
"公众号封面怎么做 / 爆款封面 / 起个公众号标题 / 标题套路 / 高点击标题"
api.gzh.cozeData
公众号爆款封面数据(返回同赛道爆款的封面图 + 标题 + 点击量,给你数据自己提炼
/api/apis/gongzhonghao/gongzhonghao-coze-cover
"帮我把封面设计出来 / 直接给我一版封面方案"(与上一条是两条能力:那条给素材数据,这条直接产出封面设计方案
skill.wechat.coverDesign
公众号封面图制作
/api/skills/wechat-cover
"追更某个号 / 盯公众号 / 订阅公众号 / 账号发文列表 / 竞品发文复盘 / 某公众号发了什么"
api.gzh.workList
公众号账号发文列表
/api/apis/gongzhonghao/gongzhonghao-work-list
"公众号 10 万+ / 原创爆文 / 原创热文 / 原创热门榜"
api.gzh.categoryTime
公众号10万+/原创榜
/api/apis/gongzhonghao/category-time-hot
"头部账号 / 公众号排行 / 公众号榜单 / 热度指数 / 热门账号"
api.gzh.indexRank
公众号热门账号榜
/api/apis/gongzhonghao/gongzhonghao-index-rank
"公众号阅读增长 / 增长榜 / 增长率排行 / 持续走高"(要账号级的增量与名次)
api.gzh.raiseRank
公众号阅读增长榜
/api/apis/gongzhonghao/gongzhonghao-raise-rank
"黑马账号 / 公众号黑马 / 流量风向 / 增长榜里每个号给我一篇代表作"(与上一条同一条上游线,但是两条能力:这条按作者去重、每人只出最高阅读那篇,标题可直达原文)
skill.wechat.fastestGrowing
公众号黑马账号推荐
/api/skills/wechat-fastest-growing
"公众号 AI 这块在发什么 / 公众号 AI 日报"
api.gzh.aiFeed
公众号AI日报源
/api/apis/gongzhonghao/gongzhonghao-ai-feed
"公众号文旅 / 短剧这块在发什么 / 每日榜"
api.gzh.playletFeed
公众号文旅/短剧日报源
/api/apis/gongzhonghao/gongzhonghao-playlet-feed
"按名字找公众号 / 这个号叫什么 ID"(三步编排的第一步,见下方 A 股例子)
api.gzh.searchUser
公众号账号搜索
/api/apis/gongzhonghao/gongzhonghao-search-user
"某天各号发了什么 / 每日发文查询"
api.gzh.dailyPublish
公众号每日发文查询
/api/apis/gongzhonghao/gongzhonghao-daily-publish
"短剧赛道的公众号热门文章日报"(产品化 Skill 侧,与上面的日报源是两条)
skill.playlet.wechatFeed
短剧-公众号信息源
/api/skills/playlet-wechat-feed
视频号
用户这么说(运营白话)该调哪条一句话用途详情端点(
GET
,免鉴权免费)
"视频号最近什么在爆 / 视频号上 AI 这块在火什么 / 视频号日报 / 视频号选题"
api.sph.aiFeed
视频号AI日报源
/api/apis/sph/shipinhao-ai-feed
"搜视频号作品 / 视频号爆款"
api.sph.searchWork
搜索视频号作品
/api/apis/sph/search-work
"找视频号账号"
api.sph.searchUser
搜索视频号账号
/api/apis/sph/search-user
"AI 视频号信息源"(产品化 Skill 侧,与 api.sph.aiFeed 是两条)
skill.wechatChannels.aiFeed
AI视频号信息源
/api/skills/wechat-channels-ai-feed
解析 / 合规 / 素材 / 查证
用户这么说(运营白话)该调哪条一句话用途详情端点(
GET
,免鉴权免费)
"这条链接为什么火 / 解析链接 / 链接解析 / 作品详情 / 拆给我看"
tool.content.parseDetail
解析作品/文章详情
/api/apis/tool/parse-content-detail
"帮我把这段文案过一遍别违规 / 违禁词 / 合规检测 / 过审 / 极限词 / 广告法"(多平台口径)
tool.contentSafety.checkWords
多平台违禁词检测
/api/skills/content-safety-check
"公众号这篇能不能发 / 公众号违禁词"(公众号口径,与上一条是两条)
skill.wechat.prohibitedWord
公众号违禁词检测
/api/skills/wechat-prohibited-word
"给我配张图 / AI 出图 / 文生图 / 图生图 / 改图 / 生成图片 / 主视觉"
skill.ai.imageGen
AI 生图 / 改图(慢操作,单请求内等结果)
/api/skills/gpt-image-gen
"这事儿是真的吗 / 联网搜索 / 联网查证 / 事实核查 / 查出处 / 引用来源 / 豆包搜索"
skill.search.doubaoWeb
豆包联网搜索
/api/skills/doubao-web-search
生图这条要等:通常 1–2 分钟,最长 4 分钟(服务端上限 240 秒)。 用命令行调用就把客户端超时留到 ≥5 分钟——客户端超时必须晚于服务端上限: 服务端超时会退款,客户端提前放弃不会退,请求照样在服务端跑完、照样扣费, 而你只看到一句「超时」。慢是预期,别因为慢就重试(重试才是重复扣费)。
不是一条能力、得自己编排的(表里查不到是正常的,别硬凑一条):
  • "A股公众号 / 股市大V / 股票公众号榜单" —— 三步:
    api.gzh.searchUser
    搜号 →
    api.gzh.workList
    (或
    api.gzh.dailyPublish
    )拉发文 →
    api.gzh.hotArticle
    找爆文。
  • "把这条爆款改写成我的文案" —— 不调接口:Skill
    wechat-rewrite
    (公众号)/
    xiaohongshu-rewrite
    (小红书)/
    multi-rewrite
    (一稿多发),纯本地、不要 key。 没装就用搜来的素材由你合成。
  • "帮我记一下 / 查查我的笔记 / 我是个什么样的人" —— ⛔ 第二大脑(
    mera
    )已下架
    , 无替代能力:如实告知,别拿公开搜索顶替(见上方「我自己的东西」例外)。
  • seedream-lite
    (Seedream 5.0 lite)已于 2026-08-10 下架
    ,调用一律 503, 所以它不在上表里。要出图走
    skill.ai.imageGen
    ,要公众号封面走
    api.gzh.cozeData
首次上手三句话(用户第一次用时,可主动这么引导):
  1. 先确认有没有 key(没有就带他走 §1 拿 key,一次就好)。
  2. 问一句"你现在想做选题、追热点、还是查账号?"——把模糊需求收敛到上面某一类。
  3. 选一个能力先跑一次出结果,让用户看到真东西,再顺势引导下一步 / 订阅。
别一上来甩一长串能力清单给用户看——用户要的是"帮我做事",不是 API 目录。
operationKey
是你内部选路用的。
⚠️ 第四列是详情端点,不是调用地址。 平台有两个不相交的能力集合、两条互不回落的路由, 而且有三条走专用路由(方法未必是 POST),照详情端点拼调用地址必然出错。 调用地址只有一个来源:详情响应里的
execution
target
(§2.1)。 表里没有你要的能力时,先跑一遍发现接口(§4)再下结论——本表是起手线索,不是全量清单。
📖 想看全量、或者撞上选路的坑:装了
doubaoya-gateway
的话,
doubaoya-gateway/references/capability-index.md
是从发现接口生成的全量索引(本表只列最常用的那批);
doubaoya-gateway/references/routing-pitfalls.md
装的是只有踩过才知道的选路知识(哪条
operationKey
撞名、哪两条能力不该混用)。 没装网关也不影响本节使用——那两份是补充,不是前置。
选题铁律:不要拿用户的账号名 / IP 名当关键词去搜。 用户的公众号/账号名(如「菜籽油」)是他是谁(领域/人设/受众),不是搜索词——搜它只会搜到字面同名内容。 综合热点用无关键词的
api.trend.hotSpotKeyword
直取,IP 名字只用于匹配筛选。
做通用选题别用跨平台趋势雷达(
skill.trend.radar
)或全网热榜聚合(
api.trend.hotTopics
) ——它们是关键词搜索的搬运号 feed,热度常为空、多「未命名内容」; 通用综合热点一律走
api.trend.hotSpotKeyword
(无关键词直取)。

This Skill is the total entry / getting started guide: one key unlocks all capabilities of Doubaoya. Users usually don't know what capabilities are available, so your job as an agent is to understand what users want to do → select the right capability → call it → explain the results in plain language.
🔑 This cheat sheet only answers "which one to call", not "how to fill parameters". Each line provides three things: the
operationKey
of the capability, a one-sentence use case, and detail endpoint (
GET
, no authentication required, free). To send a request, first
GET
the detail endpoint, read the parameter specification and
execution.target
from the response (§2.1)—— Always fetch parameters on the fly, do not copy any field names from this document. Copied fields may become outdated, and there will be no error prompts when this happens.
Gongzhonghao Request Exception: As long as the request involves Gongzhonghao, first read
references/wechat-routing.json
, then select the Skill according to its priority. Minimalist principle: To deliver a complete article (writing + formatting + saving draft), use the writing delivery chain; local QR code scanning, checking latest/today's content by account, pulling full text or historical archives use MP Ark; public data, interaction metrics and topic analysis use Doubaoya cloud capabilities.
"Help me write a Gongzhonghao article" Exception: This is not a task that can be completed by a single API, but a chain—— This Skill handles the first four steps (
api.gzh.hotArticle
pulls viral article samples + writes the full text;
api.gzh.cozeData
generates titles and cover strategies, use
skill.wechat.coverDesign
for finished cover solutions;
skill.wechat.prohibitedWord
generates compliance-ready content) →
wechat-article-pipeline
(formatting + cover + save to user's own Gongzhonghao draft box). 🔴 First clarify the user's desired final state, then decide which step of the chain to stop at: If only a completed draft is needed, stop after writing the full text; if a formatted Gongzhonghao HTML or saving the article to the user's draft box is required, proceed all the way to
wechat-article-pipeline
. Delivering a Markdown segment by default is the most common incomplete delivery; conversely, it's also incorrect for users to go to their Gongzhonghao backend on their own when they only need a completed draft——
wechat-article-pipeline
has real side effects. Ask if you're unsure. The step-by-step navigation (which step to take next after completing this one) is handled by
dby
, which has a complete post-task navigation map; explain the handover clearly before passing the task, and if the user hasn't installed
dby
, continue the chain on your own as described above.
"My Own Content" Exception —— ⛔ This capability has been discontinued: When the request refers to the user's own content (help me remember / my notes / what I said before / what kind of person I am), it previously used the
mera
Second Brain; this capability is now unavailable (criteria and invalidation conditions are in the
retired
field of
references/mera-routing.json
). Tell users truthfully that this capability has been discontinued, do not replace it with public platform search——public search cannot see the user's own notes, it will only use strangers' content to fool them, which is worse than saying "this capability is not available".

Topic Selection / Hot Topics —— Start with this section for general topic selection
User's Operational LanguageWhich to CallOne-Sentence Use CaseDetail Endpoint (
GET
, no authentication required, free)
"What's trending across the web recently? Give me some topics" —— 🔴 Fetch without keywords, the correct starting point for general topic selection
api.trend.hotSpotKeyword
Fetch aggregated cross-platform hot topics, first choice for general topic selection
/api/apis/trend/trending-hub-keyword
"Cross-platform hot searches / hot search keywords / hot ranking TOP10 / generate hot words as topic seeds"
api.trend.hotKeywords
Cross-platform hot search keywords
/api/apis/trend/hot-keywords
"How has a certain term been discussed across platforms in the last 30 days / last 30 days content / social media sentiment / sentiment monitoring"
api.multi.workSearch
Aggregate content across platforms in the last 30 days
/api/apis/multi/cn30-multi-search
"Cross-platform discussion volume trend of this term" (CN version for last 30 days, separate capability from the above)
skill.social.last30Days
Last 30 Days—CN Version
/api/skills/cn-last30days
"Content export / export viral content / export daily feed / export topic selection / export traffic opportunity / cross-platform viral content"
api.multi.contentExportTop
Cross-platform content export TOP ranking
/api/apis/multi/multi-content-export-top
Xiaohongshu
User's Operational LanguageWhich to CallOne-Sentence Use CaseDetail Endpoint (
GET
, no authentication required, free)
"What's growing in my track / discover viral notes / Xiaohongshu popular notes / find benchmark notes"
skill.xhs.viralNotes
Discover Xiaohongshu viral notes
/api/skills/xiaohongshu-viral-notes
"Search Xiaohongshu notes / Xiaohongshu search / Xiaohongshu note query / Xiaohongshu scraping"
api.xhs.searchNote
Search Xiaohongshu notes
/api/apis/xiaohongshu/search-note
"Search Xiaohongshu content / write Xiaohongshu content by example / write after benchmarking (fetch data first then write)"
api.xhs.searchWork
Search Xiaohongshu content
/api/apis/xiaohongshu/search-work
"Batch scrape Xiaohongshu content / Xiaohongshu crawler / Xiaohongshu content collection"
api.xhs.crawlWork
Xiaohongshu content collection
/api/apis/xiaohongshu/crawl-work
"How to design Xiaohongshu covers / first image strategy / cover topic selection / create a Xiaohongshu title / note analysis / note benchmarking / benchmark analysis / topic analysis / viral structure"
api.xhs.cozeData
Xiaohongshu viral cover/title/note analysis data
/api/apis/xiaohongshu/xiaohongshu-coze
"Xiaohongshu daily ranking / Xiaohongshu TOP / today's viral notes"
api.xhs.cozeDailyTop
Xiaohongshu daily ranking
/api/apis/xiaohongshu/xiaohongshu-daily-top
"Xiaohongshu weekly ranking / Xiaohongshu weekly top / weekly viral content / weekly trend / mid-line topic selection"
api.xhs.cozeWeeklyTop
Xiaohongshu weekly ranking
/api/apis/xiaohongshu/xiaohongshu-weekly-top
"Low-follower viral content / amateur viral content / dark horse notes / low-follower high-like content / small account strategy / cold-start benchmarking"
api.xhs.cozeLowFansTop
Xiaohongshu low-follower viral ranking
/api/apis/xiaohongshu/xiaohongshu-low-fans-top
Douyin
User's Operational LanguageWhich to CallOne-Sentence Use CaseDetail Endpoint (
GET
, no authentication required, free)
"Search Douyin content / Douyin search / Douyin comprehensive search / scrape Douyin content / short video topic selection"
api.douyin.searchWork
Search Douyin content
/api/apis/douyin/search-work
"Douyin real-time search / Douyin latest releases / newly published content"
api.douyin.realtimeSearch
Douyin real-time search
/api/apis/douyin/realtime-search
"Scrape comment sections / Douyin comments / comment analysis / comment trend / user demand"
api.douyin.comments
Douyin content comments
/api/apis/douyin/comments
Gongzhonghao
User's Operational LanguageWhich to CallOne-Sentence Use CaseDetail Endpoint (
GET
, no authentication required, free)
"Search Gongzhonghao articles / Gongzhonghao data retrieval / popular articles / scrape articles"
api.gzh.searchArticle
Search Gongzhonghao articles
/api/apis/gongzhonghao/search-article
"Gongzhonghao viral articles / viral articles / viral content imitation / pull samples before writing Gongzhonghao articles"
api.gzh.hotArticle
Search Gongzhonghao viral articles
/api/apis/gongzhonghao/hot-article
"Gongzhonghao popular articles / only those that have truly gone viral (with a minimum read count)" (separate capability from the above: this one filters by read count threshold, gets samples that "have truly gone viral")
skill.wechat.hotSearch
Query Gongzhonghao popular articles
/api/skills/wechat-search
"How to design Gongzhonghao covers / viral covers / create a Gongzhonghao title / title strategy / high-click title"
api.gzh.cozeData
Gongzhonghao viral cover data (returns cover images + titles + click counts of viral content in the same track, you need to extract insights from the data)
/api/apis/gongzhonghao/gongzhonghao-coze-cover
"Help me design a cover / give me a complete cover solution directly" (separate capability from the above: that one provides material data, this one directly produces cover design solutions)
skill.wechat.coverDesign
Gongzhonghao cover image creation
/api/skills/wechat-cover
"Follow updates of an account / monitor Gongzhonghao / subscribe to Gongzhonghao / account content list / competitor content review / what did a certain Gongzhonghao publish"
api.gzh.workList
Gongzhonghao account content list
/api/apis/gongzhonghao/gongzhonghao-work-list
"Gongzhonghao 100k+ reads / original viral articles / original hot articles / original popular ranking"
api.gzh.categoryTime
Gongzhonghao 100k+/original ranking
/api/apis/gongzhonghao/category-time-hot
"Top accounts / Gongzhonghao ranking / Gongzhonghao ranking list / popularity index / popular accounts"
api.gzh.indexRank
Gongzhonghao popular account ranking
/api/apis/gongzhonghao/gongzhonghao-index-rank
"Gongzhonghao read growth / growth ranking / growth rate ranking / continuous growth" (requires account-level growth and ranking)
api.gzh.raiseRank
Gongzhonghao read growth ranking
/api/apis/gongzhonghao/gongzhonghao-raise-rank
"Dark horse accounts / Gongzhonghao dark horse accounts / traffic trend / provide one representative article for each account in the growth ranking" (same upstream as the above, but separate capability: this one deduplicates by author, only returns the highest-read article per author, title links directly to the original)
skill.wechat.fastestGrowing
Gongzhonghao dark horse account recommendation
/api/skills/wechat-fastest-growing
"What's being published about AI on Gongzhonghao / Gongzhonghao AI daily feed"
api.gzh.aiFeed
Gongzhonghao AI daily feed source
/api/apis/gongzhonghao/gongzhonghao-ai-feed
"What's being published about cultural tourism / short dramas on Gongzhonghao / daily ranking"
api.gzh.playletFeed
Gongzhonghao cultural tourism/short drama daily feed source
/api/apis/gongzhonghao/gongzhonghao-playlet-feed
"Find a Gongzhonghao by name / what's the ID of this account" (first step of a three-step process, see the A-share example below)
api.gzh.searchUser
Gongzhonghao account search
/api/apis/gongzhonghao/gongzhonghao-search-user
"What did each account publish on a certain day / daily content query"
api.gzh.dailyPublish
Gongzhonghao daily content query
/api/apis/gongzhonghao/gongzhonghao-daily-publish
"Daily feed of popular Gongzhonghao articles in the short drama track" (productized Skill side, separate from the above daily feed source)
skill.playlet.wechatFeed
Short drama - Gongzhonghao information source
/api/skills/playlet-wechat-feed
Shipinhao
User's Operational LanguageWhich to CallOne-Sentence Use CaseDetail Endpoint (
GET
, no authentication required, free)
"What's trending on Shipinhao recently / what's trending about AI on Shipinhao / Shipinhao daily feed / Shipinhao topic selection"
api.sph.aiFeed
Shipinhao AI daily feed source
/api/apis/sph/shipinhao-ai-feed
"Search Shipinhao content / Shipinhao viral content"
api.sph.searchWork
Search Shipinhao content
/api/apis/sph/search-work
"Find Shipinhao accounts"
api.sph.searchUser
Search Shipinhao accounts
/api/apis/sph/search-user
"AI Shipinhao information source" (productized Skill side, separate from api.sph.aiFeed)
skill.wechatChannels.aiFeed
AI Shipinhao information source
/api/skills/wechat-channels-ai-feed
Analysis / Compliance / Materials / Verification
User's Operational LanguageWhich to CallOne-Sentence Use CaseDetail Endpoint (
GET
, no authentication required, free)
"Why is this link trending / link analysis / link parsing / content details / break it down for me"
tool.content.parseDetail
Analyze content/article details
/api/apis/tool/parse-content-detail
"Help me check this copy for compliance / prohibited words / compliance detection / compliance check / extreme words / advertising law" (multi-platform standards)
tool.contentSafety.checkWords
Multi-platform prohibited word detection
/api/skills/content-safety-check
"Can this Gongzhonghao article be published / Gongzhonghao prohibited words" (Gongzhonghao standards, separate from the above)
skill.wechat.prohibitedWord
Gongzhonghao prohibited word detection
/api/skills/wechat-prohibited-word
"Give me a matching image / AI image generation / text-to-image / image-to-image / image editing / image generation / main visual"
skill.ai.imageGen
AI image generation / editing (slow operation, wait for result within single request)
/api/skills/gpt-image-gen
"Is this true / web search / web verification / fact-checking / source verification / citation source / Doubao search"
skill.search.doubaoWeb
Doubao web search
/api/skills/doubao-web-search
Wait for image generation: Usually 1–2 minutes, maximum 4 minutes (server-side limit 240 seconds). If calling via command line, set client timeout to ≥5 minutes——client timeout must be later than server-side limit: Server-side timeout will refund credits, but if the client gives up early, credits will not be refunded, the request will still run on the server and be charged, and you will only see a "timeout" message. Slowness is expected, do not retry because of slowness (retrying will cause repeated charges).
Tasks that require manual orchestration (not a single capability, normal if not found in the table):
  • "A-share Gongzhonghao / stock influencers / stock Gongzhonghao ranking" —— Three steps:
    api.gzh.searchUser
    to search accounts →
    api.gzh.workList
    (or
    api.gzh.dailyPublish
    ) to pull content →
    api.gzh.hotArticle
    to find viral articles.
  • "Rewrite this viral content into my copy" —— No API call needed: Use Skill
    wechat-rewrite
    (Gongzhonghao)/
    xiaohongshu-rewrite
    (Xiaohongshu)/
    multi-rewrite
    (one draft for multiple platforms), purely local, no key required. If not installed, synthesize using searched materials.
  • "Help me remember / check my notes / what kind of person I am" —— ⛔ Second Brain (
    mera
    ) has been discontinued
    , no alternative capability: Tell users truthfully, do not replace with public search (see "My Own Content" exception above).
  • seedream-lite
    (Seedream 5.0 lite) was discontinued on 2026-08-10
    , all calls return 503, so it is not included in the above table. For image generation, use
    skill.ai.imageGen
    ; for Gongzhonghao covers, use
    api.gzh.cozeData
    .
Three Sentences for First-Time Users (can actively guide users when they use it for the first time):
  1. First confirm if they have a key (if not, guide them to get a key in §1, only once).
  2. Ask "Do you want to do topic selection, track hot spots, or check accounts now?"——narrow down vague needs to one of the above categories.
  3. Run one capability first to produce results, let users see real content, then guide them to the next step / subscription.
Do not throw a long list of capabilities at users at first——users want "help me get things done", not an API directory.
operationKey
is for your internal routing use.
⚠️ The fourth column is the detail endpoint, not the call address. The platform has two disjoint capability sets and two non-fallback routes, and three capabilities use dedicated routes (method may not be POST). Assembling the call address based on the detail endpoint will definitely cause errors. The only source of the call address is
execution.target
in the detail response
(§2.1). If the capability you need is not in the table, first run the discovery interface (§4) before concluding——this table is a starting clue, not a complete list.
📖 To see the complete list, or encounter routing issues: If you have installed
doubaoya-gateway
,
doubaoya-gateway/references/capability-index.md
is the complete index generated from the discovery interface (this table only lists the most commonly used ones);
doubaoya-gateway/references/routing-pitfalls.md
contains routing knowledge only learned from experience (which
operationKey
has name collisions, which capabilities should not be used together). Not installing the gateway does not affect the use of this section——these two documents are supplements, not prerequisites.
Topic Selection Rule: Do not use the user's account name / IP name as a search keyword. The user's Gongzhonghao/account name (e.g., "Caiziyou") is who they are (field/persona/audience), not a search term——searching it will only return content with the same literal name. For comprehensive hot topics, use
api.trend.hotSpotKeyword
without keywords directly; IP names are only used for matching and filtering.
For general topic selection, do not use cross-platform trend radar (
skill.trend.radar
) or cross-platform hot ranking aggregation (
api.trend.hotTopics
) ——they are feed of keyword search results, often have empty popularity and many "unnamed content"; Always use
api.trend.hotSpotKeyword
(fetch without keywords) for general comprehensive hot topics.

1. 拿钥匙(Auth)

1. Get the Key (Auth)

调用任何接口都要带一条密钥(API Key)。
怎么拿到 key:
  1. 打开 https://doubaoya.com登录
  2. 密钥中心生成密钥
  3. 整条密钥只在生成那一下完整露脸,复制收好(形如
    dyh_…
    )。
agent 怎么用 key:
  • 优先从环境变量读:
    DOUBAOYA_API_KEY
  • 环境里没有,就问用户一次,拿到后存进环境变量 / 本地配置,之后不再追问
  • 🔴 key 一个字符都不许回显 / 打印 / 写进日志或聊天——前缀也是密钥内容。 要报状态只许说「已设置 / 没设置」,别打印任何截断形式(
    ${KEY:0:6}
    这种写法就是在打印密钥)。
每个请求都带上:
Authorization: Bearer $DOUBAOYA_API_KEY

A secret key (API Key) is required to call any interface.
How to get the key:
  1. Open https://doubaoya.comLog in
  2. Go to Key CenterGenerate Key
  3. The full key is only displayed once when generated, copy and save it (in the format
    dyh_…
    ).
How agents use the key:
  • Priority: Read from environment variable:
    DOUBAOYA_API_KEY
    .
  • If not in the environment, ask the user once, then save it to the environment variable / local configuration, do not ask again.
  • 🔴 Do not echo / print / write any part of the
    DOUBAOYA_API_KEY
    into logs or chats——the prefix is also part of the secret key.
    Only report status as "set / not set", do not print any truncated form (writing
    ${KEY:0:6}
    is printing the secret key).
Include this in every request:
Authorization: Bearer $DOUBAOYA_API_KEY

2. 怎么调(统一约定)

2. How to Call (Unified Convention)

所有公开能力都挂在
https://doubaoya.com/api/...
下,JSON 进 JSON 出。绝大多数是 POST; 少数专用路由用
PUT
/
GET
方法以能力自己的
execution.target.method
为准
(见 §2.1)。
⚙️ 本节讲的是够用的约定。只在协议这一层卡住时再往下翻一层:两条互不回落的路由到底怎么选、 统一信封怎么解、
SKILL_NOT_FOUND
/
ENDPOINT_NOT_FOUND
/
DEDICATED_ROUTE
/
NO_RESULT
分别该怎么办、以及「入参规格调用前现拉、别照记忆或本地文档拼」这条纪律——都在
doubaoya-gateway
里。 它只回答怎么把一次调用打出去,不承接业务意图;要做的事本身该走哪个能力,看 §0.5 与
dby
All public capabilities are under
https://doubaoya.com/api/...
, JSON in and JSON out. Most are POST; a few dedicated routes use
PUT
/
GET
, follow the
execution.target.method
of the capability
(see §2.1).
⚙️ This section covers the necessary conventions. Only refer to the following when stuck at the protocol layer: How to choose between the two non-fallback routes, how to parse the unified envelope, how to handle
SKILL_NOT_FOUND
/
ENDPOINT_NOT_FOUND
/
DEDICATED_ROUTE
/
NO_RESULT
, and the rule "fetch parameter specifications before calling, do not assemble based on memory or local documents"——all in
doubaoya-gateway
. It only answers how to send a call, not business intent; to determine which capability to use for a task, see §0.5 and
dby
.

2.1 调用一个操作:先发现,再照
execution.target

2.1 Call an Operation: First Discover, Then Call According to
execution.target

平台有两个能力集合,各管一半,彼此不回落
集合发现接口调用路由量级
产品化 Skill
GET /api/skills
POST /api/skills/<slug>/invoke
十几条
平台数据能力
GET /api/apis
POST /api/apis/<platform>/<slug>/call
七八十条(数量上的大头)
这一列只给量级、不给准数:能力会上新、也会下架(下架的条目会从发现接口里滤掉), 准数永远以你这一次实拉发现接口的
total
为准。别把某个数字抄进你的判断里。
🔴 这两条路由不是同一批能力的两个别名,是两个不相交的集合。 拿数据能力的 slug 去打
/api/skills/<slug>/invoke
一律 404
SKILL_NOT_FOUND
(数量上的大头 ——八成以上的能力——全在这一侧),反过来同样 404
ENDPOINT_NOT_FOUND
别靠记忆猜某个能力 属于哪一半。
唯一正确姿势:从发现接口(§4)拿到能力对象,直接读它的
execution.target
,照着打。
每条能力(两个集合都一样)都带这么一块:
jsonc
"execution": {
  "mode": "generic",          // generic=通用调用代理 / dedicated=专用路由 / unavailable=当前不可调
  "sideEffect": "read",       // read / generate / write_internal / write_external
  "target": { "method": "POST", "path": "/api/apis/trend/trending-hub-keyword/call" }
}
  • mode: "generic"
    → 按
    target.method
    +
    target.path
    发请求,body 就是该能力的入参。
  • mode: "dedicated"
    → 同样照
    target
    打,但它是专用路由,方法未必是 POST (如号章程是
    PUT /api/ip-profile/:id/charter
    )。误走通用
    /invoke
    会 400
    DEDICATED_ROUTE
    , 错误信息里直接写着该走哪条。
  • mode: "unavailable"
    这时没有
    target
    字段
    )→ 该能力正在维护或已下架,别调; 硬调返回 503
    CAPABILITY_UNAVAILABLE
    availability.note
    是可以转述给用户的原因。
target.path
完整路径,前面拼上
https://doubaoya.com
就能发;不要自己再去拼
/api/skills/…
——本文档历史上就是这么把整整一侧的数据能力全写成必然 404 的。
POST https://doubaoya.com<execution.target.path>
Authorization: Bearer $DOUBAOYA_API_KEY
Content-Type: application/json

{ ...该操作的入参... }
The platform has two capability sets, each managing half, no fallback between them:
SetDiscovery InterfaceCall RouteScale
Productized Skill
GET /api/skills
POST /api/skills/<slug>/invoke
A dozen
Platform Data Capability
GET /api/apis
POST /api/apis/<platform>/<slug>/call
Seventy to eighty (majority in quantity)
This column only provides scale, not exact numbers: Capabilities will be added or discontinued (discontinued items will be filtered out from the discovery interface), the exact number is always based on the
total
from your current discovery interface call. Do not copy any number into your judgment.
🔴 These two routes are not aliases of the same set of capabilities, but two disjoint sets. Using a data capability's slug to call
/api/skills/<slug>/invoke
will always return 404
SKILL_NOT_FOUND
(the majority of capabilities——over 80%——are on this side), and vice versa returns 404
ENDPOINT_NOT_FOUND
. Do not guess which set a capability belongs to based on memory.
The only correct way: Get the capability object from the discovery interface (§4), directly read its
execution.target
, and call accordingly. Each capability (both sets) has this section:
jsonc
"execution": {
  "mode": "generic",          // generic=general call proxy / dedicated=dedicated route / unavailable=currently unavailable
  "sideEffect": "read",       // read / generate / write_internal / write_external
  "target": { "method": "POST", "path": "/api/apis/trend/trending-hub-keyword/call" }
}
  • mode: "generic"
    → Send request using
    target.method
    +
    target.path
    , the body is the input parameters of the capability.
  • mode: "dedicated"
    → Call according to
    target
    , but it is a dedicated route, method may not be POST (e.g., account charter uses
    PUT /api/ip-profile/:id/charter
    ). Calling via the general
    /invoke
    will return 400
    DEDICATED_ROUTE
    , and the error message directly states the correct route.
  • mode: "unavailable"
    (no
    target
    field in this case
    ) → The capability is under maintenance or discontinued, do not call; forced calls return 503
    CAPABILITY_UNAVAILABLE
    ,
    availability.note
    is the reason that can be relayed to users.
target.path
is the full path, prepend
https://doubaoya.com
to send; do not assemble
/api/skills/…
yourself
——this is how the entire data capability side was written to return 404 in the history of this document.
POST https://doubaoya.com<execution.target.path>
Authorization: Bearer $DOUBAOYA_API_KEY
Content-Type: application/json

{ ...input parameters of the operation... }

2.2 统一返回信封(envelope)

2.2 Unified Response Envelope

无论成功失败,返回都是同一层信封:
jsonc
// 成功
{ "success": true,  "requestId": "req_...", "data": { /* 真正的结果 */ }, "error": null }

// 失败
{ "success": false, "requestId": "req_...", "data": null, "error": { "code": "...", "message": "..." } }
永远先看
success
true
data
false
error.code
/
error.message
成功信封上还可能多出三个可选字段(缺席是常态,别当异常):
  • noResult
    { "code": "NO_RESULT", "message": "…" }
    查询合法、就是没查到数据, 这次已不计费。别把它当失败重试,也别当"接口坏了"——如实告诉用户没结果, 建议换关键词 / 时间范围 / 筛选条件。
  • notice
    :关于本 Skill 有更新的提示,原样转达给用户,不影响本次结果,不用重试。
  • detailUrl
    :这次调用结果在 doubaoya.com 上的详情页链接,可以给用户点。
Whether successful or failed, the response uses the same envelope:
jsonc
// Success
{ "success": true,  "requestId": "req_...", "data": { /* actual result */ }, "error": null }

// Failure
{ "success": false, "requestId": "req_...", "data": null, "error": { "code": "...", "message": "..." } }
Always check
success
first
: If
true
, get
data
; if
false
, read
error.code
/
error.message
.
The success envelope may also have three optional fields (absence is normal, do not treat as exception):
  • noResult
    :
    { "code": "NO_RESULT", "message": "…" }
    . Query is valid, but no data found, this call is not charged. Do not retry as failure, or treat as "interface broken"——tell users truthfully no results, suggest changing keywords / time range / filters.
  • notice
    : Tips about updates to this Skill, relay to users as is, does not affect current result, no need to retry.
  • detailUrl
    : Link to the detail page of this call result on doubaoya.com, can be shared with users.

2.3 错误码怎么处理

2.3 How to Handle Error Codes

HTTPerror.code含义你该怎么办
401
MISSING_API_KEY
没带 key提示用户去 doubaoya.com 密钥中心生成,并设进
DOUBAOYA_API_KEY
401
UNAUTHORIZED
key 无效 / 已撤销让用户在密钥中心撤销并重新生成,更新环境变量
400
VALIDATION_ERROR
入参不合法
message
修正入参(如缺
keyword
400
DEDICATED_ROUTE
这条能力有专用路由,你走了通用代理
message
里就写着该打哪条;照
execution.target
重发(§2.1)
402
INSUFFICIENT_CREDITS
额度不够提示用户去 doubaoya.com 充值额度
404
SKILL_NOT_FOUND
这个 slug 不在 skills 集合里见下方「404 怎么破」
404
ENDPOINT_NOT_FOUND
这个 platform/slug 不在 apis 集合里见下方「404 怎么破」
503
CAPABILITY_UNAVAILABLE
能力维护中 / 已下架(
execution.mode
unavailable
别重试:换一条能力,或如实告诉用户这个能力暂时用不了
502
PROVIDER_FAILED
上游临时失败(已自动退还额度稍后重试;重试前不用补额度
小贴士:
PROVIDER_FAILED
时额度会自动退回,放心重试即可,别重复扣费焦虑。
404 怎么破(🔴 别原地换着花样重试同一条路由——两条路由查的是两个不相交的集合, 在错的那一半上试一百次也还是 404):
  1. 两个集合都查一遍
    GET /api/skills
    GET /api/apis
    (§4)。八成是能力在另一半, 路由挑错了。
  2. GET /api/skills/search?query=…
    POST /api/skills/recommend
    按意图找(只覆盖 skills 那一侧)。
  3. 找到之后照它的
    execution.target.path
    ,不要自己拼路径。
  4. 两个集合都没有 → 这个能力不存在(或已下架)。如实告诉用户,别再猜别的 slug。
⚠️ 你脑子里 / 本文里记住的 slug 只是起手线索;能不能调、怎么调,以发现接口的返回为准。 尤其别把技能包目录名
npx skills add
装进来的那个文件夹名,如
trending-hub
dby
wechat-article-pipeline
)当成调用 slug——它们不是,打过去必 404。

HTTPerror.codeMeaningWhat You Should Do
401
MISSING_API_KEY
No key providedPrompt users to generate a key in the Key Center on doubaoya.com, and set it to
DOUBAOYA_API_KEY
401
UNAUTHORIZED
Invalid / revoked keyAsk users to revoke and regenerate in the Key Center, update the environment variable
400
VALIDATION_ERROR
Invalid input parametersCheck
message
to correct parameters (e.g., missing
keyword
)
400
DEDICATED_ROUTE
This capability has a dedicated route, you used the general proxyThe correct route is stated in
message
; resend according to
execution.target
(§2.1)
402
INSUFFICIENT_CREDITS
Insufficient creditsPrompt users to recharge credits on doubaoya.com
404
SKILL_NOT_FOUND
This slug is not in the skills setSee "How to Fix 404" below
404
ENDPOINT_NOT_FOUND
This platform/slug is not in the apis setSee "How to Fix 404" below
503
CAPABILITY_UNAVAILABLE
Capability under maintenance / discontinued (
execution.mode
is
unavailable
)
Do not retry: Use another capability, or tell users truthfully this capability is temporarily unavailable
502
PROVIDER_FAILED
Temporary upstream failure (credits automatically refunded)Retry later; no need to recharge credits before retrying
Tip: Credits are automatically refunded for
PROVIDER_FAILED
, feel free to retry without worrying about repeated charges.
How to Fix 404 (🔴 Do not keep retrying the same route——the two routes query disjoint sets, trying 100 times on the wrong set will still return 404):
  1. Check both sets:
    GET /api/skills
    and
    GET /api/apis
    (§4). Most likely the capability is in the other set, and you chose the wrong route.
  2. Use
    GET /api/skills/search?query=…
    or
    POST /api/skills/recommend
    to search by intent (only covers the skills side).
  3. After finding it, call according to its
    execution.target.path
    , do not assemble the path yourself.
  4. If not found in both sets → this capability does not exist (or has been discontinued). Tell users truthfully, do not guess other slugs.
⚠️ The slugs you remember / in this document are only starting clues; whether it can be called and how to call it depends on the discovery interface response. Especially do not confuse skill package directory names (folder names installed via
npx skills add
, such as
trending-hub
,
dby
,
wechat-article-pipeline
) with call slugs——they are not, calling them will definitely return 404.

3. 选路知识(哪条不该用、哪条已下架)

3. Routing Knowledge (Which to Avoid, Which Are Discontinued)

该调哪一条在 §0.5,那张表按用户话术铺开,每行给
operationKey
+ 用途 + 详情端点。 本节不重复它,只装两样 §0.5 装不下的东西:已知的选路坑,和已下架的能力
🔴 本文档里所有能力清单都是起手线索,不是全量。 平台会上新、也会下架, 准数永远以你这一次实拉发现接口的
total
为准
——别把任何一个数字抄进你的判断里(§4)。 小红书 / 抖音 / 公众号 / 视频号 / B站 / 快手 / TikTok 的搜索、账号、榜单、日报源加起来是 数量上的大头,全在
GET /api/apis
里。要找某个平台的某种数据,先去那儿翻, 别在 §0.5 那张短表里找不到就放弃。
Which capability to call is in §0.5, which lists by user language, each line provides
operationKey
+ use case + detail endpoint. This section does not repeat it, only includes two things that cannot fit in §0.5: known routing pitfalls, and discontinued capabilities.
🔴 All capability lists in this document are starting clues, not complete. The platform will add new capabilities and discontinue old ones, the exact number is always based on the
total
from your current discovery interface call
——do not copy any number into your judgment (§4). Search, account, ranking, daily feed source for Xiaohongshu / Douyin / Gongzhonghao / Shipinhao / Bilibili / Kuaishou / TikTok are the majority in quantity, all in
GET /api/apis
. To find certain data of a platform, first check there, do not give up if not found in the short table in §0.5.

已知的选路坑

Known Routing Pitfalls

  • ⚠️ 通用综合热点别用趋势雷达 / 热榜聚合
    skill.trend.radar
    api.trend.hotTopics
    关键词搜索的搬运号 feed(热度常为空、多「未命名内容」),只在明确要 「按某个词搜同名内容 feed」的窄场景才考虑。通用选题一律走
    api.trend.hotSpotKeyword
    无关键词直取(§0.5 首行)。
  • ⚠️
    api.trend.hotKeywords
    别带日期
    :上游只供最新一批,带日期区间必返 0 条。 ——这类「参数对了才有结果」的坑,正是入参规格必须调用前现拉的理由: 详情端点会告诉你哪些字段可选、取值什么形状,凭记忆拼必踩。
  • ⚠️ 上游对错入参一律静默返空或给误导性报错,别据此判「接口挂了」。 先回详情端点核一遍入参规格,再看是不是真的没数据(
    noResult
    ,§2.2)。
  • 🔴 有一条
    operationKey
    全局撞名
    (多平台违禁词检测在两个集合里各有一条, §0.5 已分成两行、各带各的详情端点)。点名能力时连详情端点一起给, 只报
    operationKey
    在这一条上不足以定位。装了网关的话,
    doubaoya-gateway/references/routing-pitfalls.md
    有这条的完整来龙去脉和其余踩过的坑。
  • ⚠️ Do not use trend radar / hot ranking aggregation for general comprehensive hot topics:
    skill.trend.radar
    and
    api.trend.hotTopics
    are feed of keyword search results (often have empty popularity and many "unnamed content"), only consider them in narrow scenarios where you explicitly need "feed of content with the same name as a certain term". Always use
    api.trend.hotSpotKeyword
    without keywords directly for general topic selection (first line of §0.5).
  • ⚠️ Do not add date to
    api.trend.hotKeywords
    : The upstream only provides the latest batch, adding a date range will definitely return 0 results. ——This kind of pitfall "requires correct parameters to get results" is exactly why parameter specifications must be fetched before calling: The detail endpoint will tell you which fields are optional and what shape the values should be; assembling based on memory will definitely lead to mistakes.
  • ⚠️ Upstream returns empty or misleading errors for wrong parameters silently, do not judge "interface is down" based on this. First check the parameter specification in the detail endpoint, then see if there is really no data (
    noResult
    , §2.2).
  • 🔴 One
    operationKey
    has global name collision
    (multi-platform prohibited word detection has one entry in each set, §0.5 has split it into two lines with respective detail endpoints). When referring to the capability, include the detail endpoint together, only reporting
    operationKey
    is not enough to locate it. If you have installed the gateway,
    doubaoya-gateway/references/routing-pitfalls.md
    has the complete background and other pitfalls encountered.

⛔ 第二大脑(
mera
· 已下架,别调

⛔ Second Brain (
mera
· Discontinued, Do Not Call)

mera
平台下的六条能力(
note-write
/
note-status
/
note-search
/
source-read
/
ask
/
self
已经下架,本节只说明为什么、以及你该怎么办——调用路径故意不再列出,避免你照抄
为什么(历史事实,可自行复核):第二大脑的后端服务随 2026-08-10 的服务器迁移留在旧机并进入 退役流程,生产环境没有它;域名
mera.doubaoya.com
的 DNS 记录已被移除(
dig
返回 NXDOMAIN)。
调用会怎样:一律拿不到结果——要么在扣点前被可用性闸拦下返
503 CAPABILITY_UNAVAILABLE
根本不计费),要么连不通返
502 PROVIDER_FAILED
已扣的点自动退回)。两条路都不会白扣 用户的点,但重试、换密钥、换参数都没有意义。
⚠️ 别拿发现接口当判据,两个方向都别:这 6 条已被标为下架(hidden),发现接口会把下架条目 从
GET /api/apis
里滤掉、
GET /api/apis/mera/<slug>
与「压根不存在」同为 404;而早于这次 标注的部署仍会照旧列出它们(带价格)。所以你按 §4 拉清单时可能看得见、也可能看不见, 两种情况的结论完全一样:「清单里有」不等于「调得通」,「清单里没了」也不等于「过会儿再试」。 判据以本节为准,不看清单。
⚠️ 没有替代能力,也不许降级:第二大脑装的是用户自己的私人笔记。本文档里所有「往外看」的 公开平台能力都看不见它——拿公开搜索去回答「我之前说过什么」,等于拿陌生人的内容冒充用户自己的 记忆。如实告知能力已下架,再问用户要不要改做别的事。
♻️ 本结论何时作废
dig mera.doubaoya.com
不再返回 NXDOMAIN,且
mera
的能力真的能返回数据 (而不是 503 / 502)时,本节即过期,应当重新写回调用契约。

Six capabilities under the
mera
platform (
note-write
/
note-status
/
note-search
/
source-read
/
ask
/
self
) have been discontinued, this section only explains why and what you should do——call paths are intentionally omitted to avoid copying.
Why (historical fact, can be verified independently): The backend service of the Second Brain remained on the old server during the server migration on 2026-08-10 and entered the retirement process, it no longer exists in the production environment; the DNS record of the domain
mera.doubaoya.com
has been removed (
dig
returns NXDOMAIN).
What happens when calling: No results will be returned——either blocked by the availability gate before charging and returns
503 CAPABILITY_UNAVAILABLE
(not charged at all), or cannot connect and returns
502 PROVIDER_FAILED
(charged credits are automatically refunded). Neither will waste users' credits, but retrying, changing keys, or changing parameters is meaningless.
⚠️ Do not use the discovery interface as a criterion, in either direction: These 6 capabilities have been marked as discontinued (hidden), the discovery interface will filter them out from
GET /api/apis
,
GET /api/apis/mera/<slug>
returns 404 just like "does not exist"; while deployments earlier than this marking will still list them (with prices). So when you pull the list according to §4, you may or may not see them, but the conclusion is the same in both cases: "in the list" does not mean "callable", "not in the list" does not mean "try later". Follow this section as the criterion, not the list.
⚠️ No alternative capability, and no downgrade allowed: The Second Brain stores the user's own private notes. All "external-facing" public platform capabilities in this document cannot see it——using public search to answer "what did I say before" is equivalent to using strangers' content to impersonate the user's own memory. Tell users truthfully the capability has been discontinued, then ask if they want to do something else.
♻️ When this conclusion becomes invalid: When
dig mera.doubaoya.com
no longer returns NXDOMAIN, and the
mera
capabilities can actually return data (instead of 503 / 502), this section will expire and should be rewritten with the call contract.

4. 运行时发现操作(别把清单写死)

4. Runtime Discovery of Operations (Do Not Hardcode Lists)

平台随时可能上新操作,优先在运行时拉清单,再决定调哪条。
🔴 发现面有两条,必须两条都拉。 只拉
/api/skills
你只看得见小的那一半, 另一侧(数量上的大头)在你的世界里根本不存在——不会报错,只会沉默地少掉一大半能力。 这正是本文档过去犯的错。
undefined
The platform may add new operations at any time, prefer to pull the list at runtime, then decide which to call.
🔴 There are two discovery surfaces, must pull both. Only pulling
/api/skills
will only show the smaller half, the other side (majority in quantity) will not exist in your world——no error will be reported, but half of the capabilities will be missing silently. This is exactly the mistake made in the history of this document.
undefined

① 产品化 Skill

① Productized Skill

GET https://doubaoya.com/api/skills → data: { items, total } GET https://doubaoya.com/api/skills/<slug> → data: 单条详情(不存在 / 已下架同为 404) GET https://doubaoya.com/api/skills/search → 按意图搜(查询串 / 分类 / 条数三个查询参数) POST https://doubaoya.com/api/skills/recommend → 按意图推荐(body 带一句自然语言查询) → data: 首选一条 + 候选若干 + 判定依据
GET https://doubaoya.com/api/skills → data: { items, total } GET https://doubaoya.com/api/skills/<slug> → data: single detail (404 for non-existent / discontinued) GET https://doubaoya.com/api/skills/search → search by intent (three query parameters: query string / category / count) POST https://doubaoya.com/api/skills/recommend → recommend by intent (body contains a natural language query) → data: one preferred + several candidates + judgment basis

② 平台数据能力(数量上的大头,别漏)

② Platform Data Capability (majority in quantity, do not miss)

GET https://doubaoya.com/api/apis → data: { items, total } GET https://doubaoya.com/api/apis/<platform>/<slug> → data: 单条详情

`platform` 现有取值:`douyin` / `xiaohongshu` / `gongzhonghao` / `sph`(视频号)/ `bilibili` /
`kuaishou` / `tiktok` / `trend` / `tool` / `multi` / ~~`mera`~~(⛔ 已下架,调不通;清单里看不看得见都不是判据,见 §3)。

**每个条目里有什么:**

| 字段 | skills | apis | 说明 |
|------|--------|------|------|
| `slug` | ✓ | ✓ | apis 还多一个 `platform`,两个一起才定位一条 |
| `title` / `summary` / `tags` | ✓ | ✓ | 判断该不该用 |
| `unitPrice` | ✓ | ✓ | 本次调用要扣的点数。**以这个字段的实时值为准**,别照记忆或文档里的数字算钱——计价口径改过不止一次 |
| 入参示例 | `inputSchema` | `requestSchema` | ⚠️ **是一份示例值,不是 JSON Schema**——照着它的键名和值的形状传 |
| 出参示例 | `outputExample` | `responseExample` | 同上,用来对齐你要读哪些字段 |
| `execution` | ✓ | ✓ | 🔑 **`execution.target.path` 就是这条能力的完整调用路径**(见 §2.1) |
| `availability` | 可选 | 可选 | 出现即表示维护中(`status: "maintenance"` + `note`),配合 `execution.mode === "unavailable"` |

`category`(只有 skills 有)不用背,`GET /api/skills/search` 的返回里就带一份实时的 `categories` 数组。

**几条实测得来的注意事项:**

- 四条 `GET` 发现接口**不需要 key** 就能拉(但带上也无妨)。
- `POST /api/skills/recommend` **务必带上 `Authorization` 头**:它本身不校验身份,
  但没有 Bearer 头的 POST 会被跨站防护挡成 403 `CSRF_FORBIDDEN`。`query` 为空会 400 `INVALID_PARAMS`。
- `recommend` / `search` **只在 skills 那一侧排序**,看不见 apis 那一侧。
  当"拿不准先问一嘴"用可以,**别拿它当全量目录**——全量在 `GET /api/skills` + `GET /api/apis` 两条里。
- 已下架的能力不会出现在任何发现接口里(列表里没有 ≠ 你搜错了,是真没有)。

---
GET https://doubaoya.com/api/apis → data: { items, total } GET https://doubaoya.com/api/apis/<platform>/<slug> → data: single detail

Current values of `platform`: `douyin` / `xiaohongshu` / `gongzhonghao` / `sph` (Shipinhao) / `bilibili` /
`kuaishou` / `tiktok` / `trend` / `tool` / `multi` / ~~`mera`~~ (⛔ Discontinued, cannot be called; whether it is in the list is not a criterion, see §3).

**What each item contains**: 

| Field | skills | apis | Description |
|------|--------|------|------|
| `slug` | ✓ | ✓ | apis also have `platform`, both are needed to locate a capability |
| `title` / `summary` / `tags` | ✓ | ✓ | Judge whether to use |
| `unitPrice` | ✓ | ✓ | Credits deducted for this call. **Follow the real-time value of this field**, do not calculate based on memory or numbers in the document——pricing standards have been changed more than once |
| Input Example | `inputSchema` | `requestSchema` | ⚠️ **This is a sample value, not JSON Schema**——follow the key names and value shapes to send |
| Output Example | `outputExample` | `responseExample` | Same as above, used to align which fields to read |
| `execution` | ✓ | ✓ | 🔑 **`execution.target.path` is the full call path of this capability** (see §2.1) |
| `availability` | Optional | Optional | If present, indicates under maintenance (`status: "maintenance"` + `note`), paired with `execution.mode === "unavailable"` |

`category` (only for skills) does not need to be memorized, the `GET /api/skills/search` response includes a real-time `categories` array.

**Notes from actual testing**: 

- The four `GET` discovery interfaces **do not require a key** to pull (but it's okay to include it).
- `POST /api/skills/recommend` **must include the `Authorization` header**: It does not verify identity itself,
  but POST requests without a Bearer header will be blocked by cross-site protection and return 403 `CSRF_FORBIDDEN`. Empty `query` returns 400 `INVALID_PARAMS`.
- `recommend` / `search` **only sort on the skills side**, cannot see the apis side.
  It can be used as "ask if unsure", **do not use it as a complete directory**——the complete directory is in `GET /api/skills` + `GET /api/apis`.
- Discontinued capabilities will not appear in any discovery interface (not in the list ≠ you searched wrong, it really does not exist).

---

5. 一次调用长什么样(两步:先拉规格,再发请求

5. What a Call Looks Like (Two Steps: First Fetch Specification, Then Send Request)

示例里没有任何一条能力的字段名,这是有意的:入参规格以你这一刻从详情端点拉到的为准。
No field names of any capability are included in the example, this is intentional: Input parameter specifications are based on what you fetch from the detail endpoint at that moment.

curl

curl

bash
undefined
bash
undefined

① 先拉详情:免鉴权、免费,返回里带入参规格和 execution 的 target

① First fetch detail: no authentication, free, returns input specification and execution target

② 再照 execution 的 target 发请求;body 就是①里那份入参规格

② Then send request according to execution target; body is the input specification from ①

curl --silent --show-error https://doubaoya.com<第①步读到的 target 的 path>
-H "Authorization: Bearer $DOUBAOYA_API_KEY"
-H "Content-Type: application/json"
-d '<照第①步的入参规格填>'

返回永远是同一层信封(§2.2),先看 `success`,`true` 就取 `data`:

```jsonc
{ "success": true, "requestId": "req_abc123", "data": { /* 这条能力自己的结果结构 */ }, "error": null }
data
里面长什么样因能力而异,本文档不抄——第①步的出参示例(
outputExample
/
responseExample
)就是用来对齐「我要读哪几个字段」的,读它,别猜。
curl --silent --show-error https://doubaoya.com<target path read from step ①>
-H "Authorization: Bearer $DOUBAOYA_API_KEY"
-H "Content-Type: application/json"
-d '<fill according to input specification from step ①>'

The response always uses the same envelope (§2.2), first check `success`, if `true` get `data`:

```jsonc
{ "success": true, "requestId": "req_abc123", "data": { /* result structure of this capability */ }, "error": null }
What
data
looks like varies by capability, this document does not copy it——the output example (
outputExample
/
responseExample
) from step ① is used to align "which fields I need to read", refer to it, do not guess.

Node(zero-dep,key 从环境变量读)

Node (zero-dep, key read from environment variable)

js
const key = process.env.DOUBAOYA_API_KEY;
if (!key) throw new Error("先设好 DOUBAOYA_API_KEY:doubaoya.com → 登录 → 密钥中心 → 生成密钥");

// ① 详情端点:拿 execution 的 target 和入参规格(不需要 key)
const detail = await fetch("https://doubaoya.com/api/skills/xiaohongshu-viral-notes").then(r => r.json());
if (!detail.success) throw new Error(`${detail.error.code}: ${detail.error.message}`);
const { method, path } = detail.data.execution.target;

// ② 照 target 发请求。body 照 detail.data 里的入参示例填,别照记忆拼。
const res = await fetch(`https://doubaoya.com${path}`, {
  method,
  headers: { "Authorization": `Bearer ${key}`, "Content-Type": "application/json" },
  body: JSON.stringify(/* 照 ① 的入参规格填 */ {})
});
const env = await res.json();
if (!env.success) throw new Error(`${env.error.code}: ${env.error.message}`);
console.log(env.data);
🔴 第②步用的是
method
,不是写死的
"POST"
——有三条能力走专用路由,方法未必是 POST(§2.1)。 仓库里附了一个把这两步封好的零依赖脚本:
scripts/doubaoya.mjs
,见 §7。

js
const key = process.env.DOUBAOYA_API_KEY;
if (!key) throw new Error("First set DOUBAOYA_API_KEY: doubaoya.com → Log in → Key Center → Generate Key");

// ① Detail endpoint: get execution target and input specification (no key needed)
const detail = await fetch("https://doubaoya.com/api/skills/xiaohongshu-viral-notes").then(r => r.json());
if (!detail.success) throw new Error(`${detail.error.code}: ${detail.error.message}`);
const { method, path } = detail.data.execution.target;

// ② Send request according to target. Body is filled according to input example in detail.data, do not assemble based on memory.
const res = await fetch(`https://doubaoya.com${path}`, {
  method,
  headers: { "Authorization": `Bearer ${key}`, "Content-Type": "application/json" },
  body: JSON.stringify(/* fill according to input specification from ① */ {})
});
const env = await res.json();
if (!env.success) throw new Error(`${env.error.code}: ${env.error.message}`);
console.log(env.data);
🔴 Step ② uses
method
, not hardcoded
"POST"
——three capabilities use dedicated routes, method may not be POST (§2.1). A zero-dependency script that wraps these two steps is included in the repository:
scripts/doubaoya.mjs
, see §7.

6. 端到端示例工作流

6. End-to-End Example Workflow

工作流 A:「我这个号(如公众号叫 X)今天该做什么选题?」

Workflow A: "What topics should my account (e.g., Gongzhonghao X) do today?"

核心:综合热点无关键词直取 → 结合这个IP定位智能匹配 → 产选题。 ❌ 绝不把用户的账号名/IP名当关键词去搜(那只会搜到字面同名内容)。
  1. 直取综合热点(无关键词)
    api.trend.hotSpotKeyword
    (详情端点
    /api/apis/trend/trending-hub-keyword
    )→ 拿当下全网最热的一批。 🔴 这一步的要害是「不带关键词」——具体哪个字段控制平台范围、怎么表示「不搜词」, 照详情端点这一刻返回的入参规格填(§5 的两步)。
  2. 明确IP定位:用户的账号名/IP名是他是谁(领域/人设/角度/受众),不是搜索词。 从用户或其身份资料拿到这份定位;不清楚就问用户
  3. 智能匹配:扫综合热榜,挑出这个IP能可信借势的 2–3 条热点(热度高 + 跨平台撞榜 + IP契合), 每条给出这个IP的独家切角;必要时用
    skill.xhs.viralNotes
    或对应平台的日报源验证「真的在爆」。
  4. 写开场脚本:基于选中的热点 + IP独家切角,给每个选题写 3 秒开场钩子 + 一段开场脚本(别脱离数据空写)。
  5. 保命:脚本丢进违禁词检测(
    tool.contentSafety.checkWords
    ,详情端点
    /api/skills/content-safety-check
    )。它回三样东西:一份标注版正文(命中处被标出来)、 一份未标注原文一个风险类别数组——命中词从标注版与原文的差异定位, 替换建议由你结合上下文给。 🔴 接口不回风险等级、不回评分、不回命中词清单,别编一个出来。 这三样都读不到时如实说「没拿到检测结果」,别当成合规放行
  6. 交付选题:3–5 个选题(每个:蹭哪条热点 + 我这IP的独家切角 + 为什么现在能爆)+ 各自开场脚本 + 已过违禁词检测。
  7. 选题落地成文章(用户要的是公众号文章而不是短视频脚本时,第 6 步之后还有路): 选定一个选题 → 用
    api.gzh.hotArticle
    拉同主题爆文样本写正文 → 用
    api.gzh.cozeData
    起标题 / 定封面套路 → 用
    skill.wechat.prohibitedWord
    出过审版正文 →
    wechat-article-pipeline
    排版 + 配封面 + 存进用户自己的公众号草稿箱
    (只存草稿、绝不群发)。
    🔴 走到哪一站由用户要的终态决定:只要选题和脚本,第 6 步就是终点;要成稿,写完正文就结束; 要排版好的公众号 HTML 或要文章进自己的草稿箱,才一路走到
    wechat-article-pipeline
    (它会写进用户自己的公众号后台,别在他没提过这个意图时替他跑)。逐跳导航交给
    dby
Core: Fetch comprehensive hot topics without keywords → intelligently match with this IP positioning → generate topics. ❌ Never use the user's account name/IP name as a search keyword (it will only return content with the same literal name).
  1. Fetch comprehensive hot topics (without keywords):
    api.trend.hotSpotKeyword
    (detail endpoint
    /api/apis/trend/trending-hub-keyword
    ) → get the hottest topics across the web right now. 🔴 The key of this step is "without keywords"——which field controls platform scope, how to indicate "no search term", fill according to the input specification returned by the detail endpoint at that moment (two steps in §5).
  2. Clarify IP positioning: The user's account name/IP name is who they are (field/persona/angle/audience), not a search term. Get this positioning from the user or their profile; ask the user if unsure.
  3. Intelligent matching: Scan the comprehensive hot ranking, select 2–3 hot topics that this IP can credibly leverage (high popularity + cross-platform ranking overlap + IP fit), and provide an exclusive angle for this IP for each; if necessary, use
    skill.xhs.viralNotes
    or the corresponding platform's daily feed source to verify "it is really trending".
  4. Write opening scripts: Based on the selected hot topics + IP exclusive angle, write 3-second opening hook + an opening script for each topic (do not write without data).
  5. Compliance Check: Run the script through prohibited word detection (
    tool.contentSafety.checkWords
    , detail endpoint
    /api/skills/content-safety-check
    ). It returns three things: an annotated content (hit words are marked), an unannotated original, an array of risk categories——locate hit words from the difference between annotated and original content, provide replacement suggestions based on context. 🔴 The interface does not return risk level, score, or hit word list, do not make one up. If you cannot get all three, tell users truthfully "no detection results obtained", do not treat as compliance approval.
  6. Deliver Topics: 3–5 topics (each: which hot topic to leverage + exclusive angle of my IP + why it can trend now) + respective opening scripts + compliance check passed.
  7. Turn Topics into Articles (when users want Gongzhonghao articles instead of short video scripts, there are more steps after step 6): Select a topic → use
    api.gzh.hotArticle
    to pull viral article samples on the same topic and write the full text → use
    api.gzh.cozeData
    to generate titles / determine cover strategies → use
    skill.wechat.prohibitedWord
    to generate compliance-ready content →
    wechat-article-pipeline
    for formatting + cover + save to user's own Gongzhonghao draft box
    (only saves draft, never sends to subscribers).
    🔴 Which step to stop at depends on the user's desired final state: If only topics and scripts are needed, step 6 is the end; if a completed draft is needed, stop after writing the full text; if a formatted Gongzhonghao HTML or saving the article to the user's draft box is required, proceed all the way to
    wechat-article-pipeline
    (it will write to the user's own Gongzhonghao backend, do not run it without the user's explicit intent). Step-by-step navigation is handled by
    dby
    .

工作流 B:「这条抖音/小红书链接为什么火?给我可复用的选题角度」

Workflow B: "Why is this Douyin/Xiaohongshu link trending? Give me reusable topic angles"

  1. 解析作品
    tool.content.parseDetail
    (详情端点
    /api/apis/tool/parse-content-detail
    ), 把用户给的公开分享链接丢进去 → 拿归一化的标题、作者、互动数据。
  2. 找同题热度:用标题里的核心词调
    skill.xhs.viralNotes
    或对应平台的日报源 (
    GET /api/apis
    里搜
    ai-feed
    ),看这个角度是不是赛道级在涨(这一步是明确按某个词查证据, 与通用选题的无关键词热榜直取不同)。
  3. 产出:拆解「它为什么火」(选题角度 / 钩子 / 时机),再给 2-3 个可复用的同源选题

  1. Analyze Content:
    tool.content.parseDetail
    (detail endpoint
    /api/apis/tool/parse-content-detail
    ), input the public share link provided by the user → get normalized title, author, and interaction data.
  2. Check Same-Topic Popularity: Use the core word in the title to call
    skill.xhs.viralNotes
    or the corresponding platform's daily feed source (search for
    ai-feed
    in
    GET /api/apis
    ), see if this angle is growing in the track (this step is explicitly searching for evidence by a certain term, different from fetching hot topics without keywords for general topic selection).
  3. Output: Analyze "why it trended" (topic angle / hook / timing), then provide 2-3 reusable homologous topics.

7. 可选:零依赖封装脚本

7. Optional: Zero-Dependency Wrapper Script

仓库附带
scripts/doubaoya.mjs
(Node 18+,无第三方依赖,key 从
DOUBAOYA_API_KEY
读):
bash
undefined
The repository includes
scripts/doubaoya.mjs
(Node 18+, no third-party dependencies, key read from
DOUBAOYA_API_KEY
):
bash
undefined

运行时发现(两个集合都拉,不需要 key)

Runtime discovery (pull both sets, no key needed)

node scripts/doubaoya.mjs list # 两个集合一起拉,每行直接给出完整调用路径 node scripts/doubaoya.mjs list --apis # 只看平台数据能力 node scripts/doubaoya.mjs search 小红书 爆款 # 两个集合一起搜
node scripts/doubaoya.mjs list # pull both sets, each line directly provides full call path node scripts/doubaoya.mjs list --apis # only view platform data capabilities node scripts/doubaoya.mjs search Xiaohongshu viral # search both sets

🔴 先 describe 再 invoke:describe 打的就是详情端点,入参规格从它的返回里读

🔴 First describe then invoke: describe calls the detail endpoint, input specification is read from its response

node scripts/doubaoya.mjs describe trending-hub-keyword
node scripts/doubaoya.mjs describe trending-hub-keyword

调一条能力:<ref> = <slug><platform>/<slug>

Call a capability: <ref> = <slug> or <platform>/<slug>

node scripts/doubaoya.mjs invoke xiaohongshu-viral-notes '<照 describe 拉到的入参规格填>' node scripts/doubaoya.mjs invoke trend/trending-hub-keyword '<照 describe 拉到的入参规格填>'
node scripts/doubaoya.mjs invoke xiaohongshu-viral-notes '<fill according to input specification from describe>' node scripts/doubaoya.mjs invoke trend/trending-hub-keyword '<fill according to input specification from describe>'

离线自检(不联网、不需要 key)

Offline self-check (no internet, no key needed)

node scripts/doubaoya.mjs selfcheck

它做的事:**先解析 `<ref>`**(裸 slug 先查 skills 集合,查不到再在 apis 集合里找;跨平台同名会要求你写全
`<platform>/<slug>`),**拿到该能力的 `execution.target` 再照着发请求**——不自己拼路径,所以两个集合
都够得着,专用路由的 `PUT`/`GET` 也不会被硬拗成 POST。其余:拼 `Authorization` 头、拆信封、
把 `notice` / `noResult` 打到 stderr、`success=false` 时以 `code: message` 退出。**绝不打印整条 key。**

> ⚠️ 找不到某条能力时它会明说「两个集合都查过了」并提醒你可能拿的是**技能包目录名**——
> 别再换着花样重试同一条路由。

---
node scripts/doubaoya.mjs selfcheck

What it does: **First parse `<ref>`** (bare slug first checks the skills set, if not found, searches the apis set; cross-platform same names require you to write full
`<platform>/<slug>`), **get the capability's `execution.target` then call accordingly**——does not assemble path itself, so both sets are accessible, and `PUT`/`GET` for dedicated routes will not be forced to POST. Other features: assemble `Authorization` header, parse envelope,
print `notice` / `noResult` to stderr, exit with `code: message` when `success=false`. **Never print the full key.**

> ⚠️ When a capability is not found, it will explicitly state "checked both sets" and remind you that you may be using a **skill package directory name**——
> do not keep retrying the same route.

---

7.5 交付回执(每次交付都随手带一份)

7.5 Delivery Receipt (Include with Every Delivery)

用户事后问「你刚才用了哪些能力 / 哪些 skill」时才去回忆,答出来的必然不准—— 回执在交付时写下,不是事后补。它让你的选路可被复核,也让用户看得见还有哪条路没走。
Recalling when users ask "which capabilities / skills did you use just now" will definitely be inaccurate—— Write the receipt when delivering, not after the fact. It makes your routing reviewable, and lets users see which paths were not taken.

先声明终态,再选能力

First State the Final State, Then Select Capabilities

动手前先说清这一次要交到哪一档,目标停在哪一档就在哪一档收手。 写作链的终态是一道阶梯(§0.5 同口径):
① Markdown 成稿 → ② 排版好的公众号 HTML → ③ 存进用户自己的公众号草稿箱
用户只要 ① 时不跑
wechat-article-pipeline
是正确行为
,不是漏跑——那一步会写进用户自己的 公众号后台,有真实副作用。反过来,用户要 ③ 却交一段 Markdown 就收尾才是断头。拿不准就问一句。
Clarify which stage to deliver to before starting, stop when the target stage is reached. The final states of the writing chain are a ladder (same as §0.5):
① Markdown draft → ② Formatted Gongzhonghao HTML → ③ Saved to user's own Gongzhonghao draft box
It is correct to not run
wechat-article-pipeline
when users only need ①, not a missed step——that step will write to the user's own Gongzhonghao backend with real side effects. Conversely, delivering a Markdown segment when users need ③ is incomplete. Ask if unsure.

格式

Format

交付末尾附上,四种状态分开写,几行就够:
查阅:<读了哪份路由 / 参考了哪张表>
执行:<真正调了哪些能力 / 跑了哪些 skill>
质检:<跑了哪些检查>
跳过:<发现了但没跑的能力 / skill> —— 原因:<为什么不该跑>
Attach at the end of delivery, separate the four states:
Reference: <which routing document / table was referenced>
Execution: <which capabilities / skills were actually called>
Quality Check: <which checks were run>
Skipped: <capabilities / skills found but not called> —— Reason: <why they should not be called>

硬性规则

Hard Rules

  • 四行别合并。「执行」只写真的跑过的;没跑的一律不许出现在这一行。
  • 「跳过」区分两件事压根没发现 的不必列;发现了、但判断不该跑必须列并写明原因。 带副作用的尤其不能省(
    wechat-article-pipeline
    /
    wechat-draft-publish
    会写进用户自己的公众号后台); ⛔ 已下架的能力(如
    mera
    ,见 §3)如果用户的需求点到了它,也写进「跳过」并说明已下架。
  • 如实:跑了但失败的写在「执行」并注明失败,不许挪进「跳过」粉饰;没做质检就写「无」。
  • 回执里只许写能证明的量。 括号里的结论必须回指这一次真实返回里确实有的东西 (违禁词检测就是个现成例子:它回的是一个风险类别数组,所以「命中 N 类」可证; 它不回风险等级 / 评分 / 命中词清单,所以「0 高危」「低风险」这类就是编的)。 拿不准接口到底回没回这个量,就回详情端点看一眼出参示例,别凭印象写。
  • 简短:这是交付的一部分,不是另一份报告。四行以内,别展开成段落。

  • Do not merge the four lines. "Execution" only includes actually called capabilities; those not called must not appear in this line.
  • "Skipped" distinguishes two things: Those not found at all do not need to be listed; those found but judged not to be called must be listed with reasons. Especially do not omit those with side effects (
    wechat-article-pipeline
    /
    wechat-draft-publish
    will write to the user's own Gongzhonghao backend); ⛔ If the user's demand refers to a discontinued capability (such as
    mera
    , see §3), also list it in "Skipped" and explain it has been discontinued.
  • Be truthful: Capabilities that were called but failed are written in "Execution" with failure noted, do not move to "Skipped" to cover up; write "None" if no quality check was done.
  • Only include verifiable information in the receipt. Conclusions in parentheses must refer to something actually present in the real response of this call (prohibited word detection is a ready example: it returns an array of risk categories, so "hit N categories" is verifiable; it does not return risk level / score / hit word list, so "0 high risk" "low risk" are made up). If unsure whether the interface returned this information, check the output example in the detail endpoint, do not write based on memory.
  • Be brief: This is part of the delivery, not another report. Within four lines, do not expand into paragraphs.

8. 硬规则(务必遵守)

8. Hard Rules (Must Follow)

  1. 绝不回显 / 打印 / 记录
    DOUBAOYA_API_KEY
    的任何一部分
    ——前缀也是密钥内容, 要报状态只许说「已设置 / 没设置」。
  2. 只通过
    https://doubaoya.com
    的公开
    /api/...
    接口
    取数;不要向用户描述、猜测或暴露任何上游数据来源 / 内部服务。对用户而言,能力来自「都爆鸭」。
  3. success
    后取数
    false
    时按 §2.3 处理错误码,别把原始 500/502 直接糊给用户。
  4. 调用路径以发现接口返回的
    execution.target
    为准
    ,不要自己拼、不要硬编死清单(§2.1 / §4)。 发现面有两条
    GET /api/skills
    +
    GET /api/apis
    ),只拉一条你会沉默地少看见大半能力。 技能包目录名 ≠ 调用 slug。
  5. 写脚本以真实数据为素材,把热点 / 爆款笔记的真实角度落进脚本,别脱离数据空写。
  6. 第二大脑(
    mera
    )已下架
    (§3):别调,也别拿公开搜索去顶替——公开能力看不见用户自己的 笔记,冒充他的记忆比直说「没这个能力」更糟。如实告知即可。 (下架前的红线仍然记在这里,供日后恢复时参考:私人内容只回答用户本人、不得外传到别的服务; 写入没拿到
    status=done
    之前绝不说「已保存」。)
  7. 交付时带回执(§7.5):
    查阅 / 执行 / 质检 / 跳过
    四行。「执行」只许写真的跑过的; 发现了但按终态判断不该跑的,写进「跳过」并说明原因,别让用户事后靠追问才知道。
  1. Never echo / print / record any part of
    DOUBAOYA_API_KEY
    ——the prefix is also part of the secret key, only report status as "set / not set".
  2. Only retrieve data through public
    /api/...
    interfaces of
    https://doubaoya.com
    ; do not describe, guess, or expose any upstream data sources / internal services to users. For users, capabilities come from "Doubaoya".
  3. Check
    success
    before retrieving data
    ; handle error codes according to §2.3 when
    false
    , do not directly show raw 500/502 to users.
  4. Call paths are based on
    execution.target
    returned by the discovery interface
    , do not assemble paths yourself or hardcode lists (§2.1 / §4). There are two discovery surfaces (
    GET /api/skills
    +
    GET /api/apis
    ), pulling only one will cause you to miss most capabilities silently. Skill package directory names ≠ call slugs.
  5. Write scripts based on real data, incorporate real angles of hot topics / viral notes into scripts, do not write without data.
  6. Second Brain (
    mera
    ) has been discontinued
    (§3): Do not call it, and do not replace it with public search——public capabilities cannot see the user's own notes, impersonating their memory is worse than saying "this capability is not available". Just tell users truthfully. (The red line before discontinuation is still recorded here for reference if restored later: Private content is only answered to the user themselves, must not be transmitted to other services; never say "saved" until
    status=done
    is obtained after writing.)
  7. Include a receipt with delivery (§7.5): Four lines of
    Reference / Execution / Quality Check / Skipped
    . "Execution" only includes actually called capabilities; those found but judged not to be called based on final state must be listed in "Skipped" with reasons, do not let users find out through follow-up questions later.