JSON API 使用与后台一致的响应包装。code=0000 表示成功,其他 code 都应该按业务错误或校验失败处理。
{
"code": "0000",
"message": "success",
"data": "{ endpoint specific payload }"
}CBGAccount 开发者文档
面向中文开发者的公开与 Token 保护接口说明,用于读取、检查、保存和发布 SEO 友好的 CBGAccount 博客文章。
发布流程
外部系统应该复用后台编辑器同一套流程:读取分类和标签,保存完整 SEO 字段,运行发布检查,修复阻塞项,再正式发布。
https://www.cbgaccount.com媒体 URL Basehttps://media.cbgaccount.com鉴权
已发布文章、分类、标签、作者、RSS、sitemap、robots 和 OpenAPI JSON 可以公开读取。
SEO 检查、保存文章、发布、下架、删除和分类标签写入使用 API Token。第三方系统不需要、也不应该登录后台;由 CBGAccount 管理员在后台创建带权限范围的 Token,再交给集成方。
Authorization: Bearer cbg_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx X-API-Token: cbg_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
契约基础
JSON API 使用与后台一致的响应包装。code=0000 表示成功,其他 code 都应该按业务错误或校验失败处理。
{
"code": "0000",
"message": "success",
"data": "{ endpoint specific payload }"
}blog:read 用于读取审计;blog:write 用于 SEO 检查、草稿保存、分类标签、作者和媒体上传;blog:publish 用于发布、下架、删除和状态操作。
Authorization: Bearer <API_TOKEN> X-API-Token: <API_TOKEN>
每个 Token + IP 默认 120 次/分钟。Token 日志会记录所需权限、路径、状态、消息、IP 和耗时。
接口策略拒绝时返回 HTTP 200 + 业务错误码。
公开文档说明外部 /api/v1/blog/* 契约;第三方调用只使用 Token 鉴权。Token 创建、轮换、在线调试、Webhook 接收端配置、Search Console 操作和评论审核仍属于后台能力。
进入后台的“博客 API 文档与 Token 管理”。明文 Token 只在创建后显示一次,列表里只保留 maskedToken。外部开发者拿到的是 Token,不是后台账号。
只读外部系统给 blog:read;导入草稿给 blog:write;只有可信发布系统才给 blog:publish。
不要把写入或发布 Token 放进浏览器 JS、公开页面或公开仓库。建议放在后端密钥管理或环境变量中,并在人员、供应商或系统变更时轮换。
推荐顺序
最佳实践
第三方 CMS 只要显式保存这些字段,就能发布和后台编辑器一致的完整 SEO 文章。 canonical 留空表示当前文章正式 URL;CloudFlare-ImgBed HTTPS URL 可以直接保存。
language, title, summary, contentHtml, coverImage, coverAlt, categoryId, tagIds, authorId, slug, alternateSlug, seoTitle, seoDescription, canonicalUrl, robots, indexable, ogTitle, ogDescription, ogImage, answerSummary, keyTakeaways, faqBlocks, relatedProductIds, status
接口覆盖
分页返回公开文章,供博客首页、归档页、内链选择器和外部读取系统使用。
/api/v1/blog/postscurl "https://www.cbgaccount.com/api/v1/blog/posts?language=zh¤t=1&size=10"
{
"code": "0000",
"message": "success",
"data": "Result<PageBlogPostRes>"
}返回正文 HTML、meta 字段、canonical、robots、Open Graph、作者、标签、目录、相关文章和互动计数。
/api/v1/blog/posts/{slug}curl "https://www.cbgaccount.com/api/v1/blog/posts/account-infrastructure-growth-workflows-zh?language=zh"
{
"code": "0000",
"message": "success",
"data": "Result<BlogPostRes>,旧 slug 命中时返回 301"
}使用与后台编辑器相同的检查规则,返回 SEO 分、AEO 分、是否可发布、阻塞项、生成建议和目录。
/api/v1/blog/posts/checkcurl -X POST -H "Authorization: Bearer <API_TOKEN>" -H "content-type: application/json" -d @draft.json "https://www.cbgaccount.com/api/v1/blog/posts/check"
{
"code": "0000",
"message": "success",
"data": "Result<BlogSeoCheckRes>"
}保存后台编辑器暴露的全部正文与 SEO 字段。id 为空时创建草稿,id 存在时更新文章。
/api/v1/blog/posts/savecurl -X POST -H "Authorization: Bearer <API_TOKEN>" -H "content-type: application/json" -d @post-save.json "https://www.cbgaccount.com/api/v1/blog/posts/save"
{
"code": "0000",
"message": "success",
"data": "Result<BlogPostRes>"
}再次运行 SEO 检查,通过后发布草稿,并刷新公开发现产物和 Webhook。
/api/v1/blog/posts/{id}/publishcurl -X POST -H "Authorization: Bearer <API_TOKEN>" "https://www.cbgaccount.com/api/v1/blog/posts/1/publish"
{
"code": "0000",
"message": "success",
"data": "Result<BlogPostRes>"
}后台式状态操作。正常发布优先使用 publish;此接口更适合下架或迁移后修正状态。
/api/v1/blog/posts/operatecurl -H "Authorization: Bearer <API_TOKEN>" "https://www.cbgaccount.com/api/v1/blog/posts/operate?id=1&status=2"
{
"code": "0000",
"message": "success",
"data": "Result<boolean>"
}删除文章并从公开发现中移除。已有 SEO 历史时更建议下架。
/api/v1/blog/posts/deletecurl -H "Authorization: Bearer <API_TOKEN>" "https://www.cbgaccount.com/api/v1/blog/posts/delete?id=1"
{
"code": "0000",
"message": "success",
"data": "Result<boolean>"
}返回推荐数、已审核评论数和公开评论,不返回邮箱、IP、User-Agent 等审核字段。
/api/v1/blog/posts/{id}/engagementcurl "https://www.cbgaccount.com/api/v1/blog/posts/1/engagement"
{
"code": "0000",
"message": "success",
"data": "Result<BlogEngagementRes>"
}用 clientKey 做轻量幂等,增加 clap 风格推荐。
/api/v1/blog/posts/{id}/reactionscurl -X POST -H "content-type: application/json" -d '{"reactionKey":"clap","clientKey":"browser-session-1","count":1}' "https://www.cbgaccount.com/api/v1/blog/posts/1/reactions"{
"code": "0000",
"message": "success",
"data": "Result<BlogEngagementRes>"
}创建待审核评论。公开响应会隐藏邮箱、IP、User-Agent、垃圾判定原因和内部文章标题。
/api/v1/blog/posts/{id}/commentscurl -X POST -H "content-type: application/json" -d '{"authorName":"Alex","authorEmail":"[email protected]","content":"这篇很有帮助。"}' "https://www.cbgaccount.com/api/v1/blog/posts/1/comments"{
"code": "0000",
"message": "success",
"data": "Result<BlogPublicCommentRes>"
}返回启用的公开分类,用于主栏目、分类页和文章保存前选择 categoryId。
/api/v1/blog/categoriescurl "https://www.cbgaccount.com/api/v1/blog/categories"
{
"code": "0000",
"message": "success",
"data": "Result<BlogCategoryRes[]>"
}创建或更新带中英文名称和描述的分类。
/api/v1/blog/categories/savecurl -X POST -H "Authorization: Bearer <API_TOKEN>" -H "content-type: application/json" -d '{"nameZh":"增长业务剧本","nameEn":"Growth Playbooks","slug":"growth-playbooks","status":1}' "https://www.cbgaccount.com/api/v1/blog/categories/save"{
"code": "0000",
"message": "success",
"data": "Result<BlogCategoryRes>"
}返回启用标签,并支持按语言分组,让主题页和后台筛选保持一致。
/api/v1/blog/tagscurl "https://www.cbgaccount.com/api/v1/blog/tags?language=zh"
{
"code": "0000",
"message": "success",
"data": "Result<BlogTagRes[]>"
}创建或更新按语言归组的标签。
/api/v1/blog/tags/savecurl -X POST -H "Authorization: Bearer <API_TOKEN>" -H "content-type: application/json" -d '{"language":"all","nameZh":"账号业务运营","nameEn":"Account Operations","slug":"account-operations","status":1}' "https://www.cbgaccount.com/api/v1/blog/tags/save"{
"code": "0000",
"message": "success",
"data": "Result<BlogTagRes>"
}创建或更新结构化作者资料,用于作者页、Publication 卡片和 Person JSON-LD。author 文本只能兜底,authorId 的 SEO 输出更完整。
/api/v1/blog/authors/savecurl -X POST -H "Authorization: Bearer <API_TOKEN>" -H "content-type: application/json" -d '{"language":"zh","slug":"cbgaccount-editorial-team-zh","name":"CBGAccount 编辑部","title":"账号业务运营编辑团队","status":1}' "https://www.cbgaccount.com/api/v1/blog/authors/save"{
"code": "0000",
"message": "success",
"data": "Result<BlogAuthorRes>"
}返回启用作者资料,用于作者卡片、作者页和 Person JSON-LD。
/api/v1/blog/authorscurl "https://www.cbgaccount.com/api/v1/blog/authors?language=zh"
{
"code": "0000",
"message": "success",
"data": "Result<BlogAuthorRes[]>"
}公开作者资料,包含简介、资质、头像、社交链接和文章数量。
/api/v1/blog/authors/{slug}curl "https://www.cbgaccount.com/api/v1/blog/authors/cbgaccount-editorial-team-zh?language=zh"
{
"code": "0000",
"message": "success",
"data": "Result<BlogAuthorRes>"
}分页返回某个启用作者关联的已发布文章。
/api/v1/blog/authors/{slug}/postscurl "https://www.cbgaccount.com/api/v1/blog/authors/cbgaccount-editorial-team-zh/posts?language=zh¤t=1&size=10"
{
"code": "0000",
"message": "success",
"data": "Result<PageBlogPostRes>"
}返回博客首页、文章页、作者卡片和 publication 卡片使用的公开标识。不会暴露后台 SEO、AI、Search Console 或媒体服务密钥。
/api/v1/blog/publication-settingscurl "https://www.cbgaccount.com/api/v1/blog/publication-settings"
{
"code": "0000",
"message": "success",
"data": "Result<BlogPublicationSettingsRes>"
}返回公开账号资源 / 业务资源分类,让外部发布系统能做出和后台编辑器一致的资源选择器。
/api/v1/blog/resources/categoriescurl -H "Authorization: Bearer <API_TOKEN>" "https://www.cbgaccount.com/api/v1/blog/resources/categories"
{
"code": "0000",
"message": "success",
"data": "Result<BlogResourceCategoryRes[]>"
}搜索启用中的公开账号资源 / 业务资源。用返回的 id、名称、描述、分类、价格生成可读资源卡片,并把 id 写入 relatedProductIds。商品描述可能包含主站富文本 HTML,选择器摘要应去除标签,插入正文卡片时必须转义文本。商品价格沿用主站存储单位:usdtPrice 展示时要除以 10000。可抓取公开资源链接规则为英文 /en/products/{id}-{slugified nameEn},中文 /cn/products/{id}-{slugified nameZh 或 product}。
/api/v1/blog/resources/searchcurl -X POST -H "Authorization: Bearer <API_TOKEN>" -H "content-type: application/json" -d '{"current":1,"size":12,"keywords":"regional account","status":1}' "https://www.cbgaccount.com/api/v1/blog/resources/search"{
"code": "0000",
"message": "success",
"data": "Result<PageBlogResourceRes>"
}给外部发布系统上传封面图、正文图、OG 图、作者头像或 Publication 图。CBGAccount 默认使用 CloudFlare-ImgBed,data 就是最终公网 HTTPS URL,不能再额外拼接 API baseUrl。
/api/v1/blog/media/uploadcurl -X POST -H "Authorization: Bearer <API_TOKEN>" -F "file=@./cover.webp" "https://www.cbgaccount.com/api/v1/blog/media/upload"
{
"code": "0000",
"message": "success",
"data": "https://media.cbgaccount.com/file/blog-assets/account-infrastructure-growth-workflows-zh.webp"
}RSS 2.0 feed,用于订阅工具和阅读器。
/api/v1/blog/rss.xmlcurl "https://www.cbgaccount.com/api/v1/blog/rss.xml?language=zh"
{
"code": "0000",
"message": "success",
"data": "application/xml"
}给爬虫和集成系统使用的 sitemap 镜像。主公开地址仍是 /sitemap.xml。
/api/v1/blog/sitemap.xmlcurl "https://www.cbgaccount.com/api/v1/blog/sitemap.xml"
{
"code": "0000",
"message": "success",
"data": "application/xml"
}robots 规则镜像。主公开地址仍是 /robots.txt。
/api/v1/blog/robots.txtcurl "https://www.cbgaccount.com/api/v1/blog/robots.txt"
{
"code": "0000",
"message": "success",
"data": "text/plain"
}机器可读 OpenAPI 3.0 规范,包含 schema、请求体、鉴权 scope 和响应结构。
/api/v1/blog/openapi.jsoncurl "https://www.cbgaccount.com/api/v1/blog/openapi.json"
{
"code": "0000",
"message": "success",
"data": "application/json"
}文章请求体
创建新草稿时留空;更新或发布已保存文章时传已有文章 ID。
决定公开路径、语言标签、alternate 链接和本地化渲染。
文章可见标题和主 H1 来源,应使用读者能理解的话,而不是内部活动名。
公开摘要和 meta description 的兜底来源,说明文章解决什么问题。
文章 URL 英文短名。发布后尽量保持稳定;检查接口可以生成草稿 slug。
翻译版本的 slug,用于中英文 alternate 互链。
语义化正文。可包含图片、响应式图片、视频、表格、引用、代码、FAQ、内链和账号/资源卡片。
主视觉 URL 和人话 alt。优先使用 /api/v1/blog/media/upload 返回的 URL;CloudFlare-ImgBed HTTPS URL 可以直接保存。
主分类,用于导航、归档分组和相关内容匹配。
主题标签,用于公开主题页、推荐和内链发现。
尽量绑定 authorId;author 文本只作为展示兜底。
搜索结果标题和描述。为空时 /posts/check 会生成草稿,之后应显式保存。
当文章应把权重合并到另一个正式 URL 时使用。
收录控制。正常发布文章应保持 indexable=true,robots=index,follow。
Open Graph 元数据,用于社媒分享和外部预览。
短答案和要点,用于文章摘要、结构化内容和读者快速浏览。
FAQ 块会展示在正文中,并在合格时生成 FAQPage JSON-LD。
从资源搜索 API 选择真实资源 id 后写入,例如 "12,18"。
专家或编辑最后审核时间。
0 草稿,1 发布,2 下架。
示例
带 status=0 调用 POST /api/v1/blog/posts/save,创建一个已经包含后台编辑器全部 SEO 字段的草稿。
{
"language": "zh",
"title": "账号基础设施如何支持增长团队",
"summary": "说明团队如何用可运营账号支撑市场启动、区域访问、社媒运营和客服支持流程。",
"slug": "account-infrastructure-growth-workflows-zh",
"alternateSlug": "account-infrastructure-growth-workflows",
"contentHtml": "<h1>账号基础设施如何支持增长团队</h1><p>第一段直接说明业务问题和适用场景。</p><h2>先验证区域访问</h2><p>补充具体流程、证据和站内链接。</p><figure><img src=\"https://media.cbgaccount.com/file/blog-assets/account-infrastructure-growth-workflows-zh.webp\" alt=\"用于市场启动和区域访问的账号基础设施流程图\" width=\"1200\" height=\"675\" /></figure><h2>常见问题</h2>",
"coverImage": "https://media.cbgaccount.com/file/blog-assets/account-infrastructure-growth-workflows-zh.webp",
"coverAlt": "用于市场启动和区域访问的账号基础设施流程图",
"categoryId": 1,
"tagIds": [
1,
2
],
"authorId": 1,
"seoTitle": "账号基础设施如何支持增长团队 | CBGAccount",
"seoDescription": "了解账号基础设施如何支持市场启动、区域访问、社媒运营和更稳定的客服支持流程。",
"canonicalUrl": "",
"robots": "index,follow",
"indexable": true,
"ogTitle": "账号基础设施如何支持增长团队",
"ogDescription": "给市场、区域、创作者和客服账号工作流使用的实操指南。",
"ogImage": "https://media.cbgaccount.com/file/blog-assets/account-infrastructure-growth-workflows-zh.webp",
"answerSummary": "账号基础设施帮助团队在扩张账号业务前先验证访问、归属、支持路径和流程证据。",
"keyTakeaways": [
"上线前先梳理归属和恢复路径",
"让内链和证据在正文中可见",
"运营规则变化后及时复审高价值文章"
],
"faqBlocks": [
{
"question": "团队什么时候应该准备账号基础设施?",
"answer": "当团队要启动新市场、创作者流程、客服队列或依赖可重复账号访问的业务流程前,就应该先准备。"
}
],
"relatedProductIds": "12,18",
"reviewedAt": "2026-05-25 12:00:00",
"status": 0
}POST /api/v1/blog/posts/check 不保存数据。用返回建议补全 slug、meta、摘要、OG 和目录后再保存。
{
"code": "0000",
"message": "success",
"data": {
"score": 92,
"aeoScore": 88,
"canPublish": true,
"scoreSummary": "确认 canonical 和最终图片 alt 后即可发布。",
"generatedSlug": "account-infrastructure-growth-workflows-zh",
"generatedSeoTitle": "账号基础设施如何支持增长团队 | CBGAccount",
"generatedSeoDescription": "了解账号基础设施如何支持市场启动、区域访问、创作者运营和客服流程。",
"generatedOgTitle": "账号基础设施如何支持增长团队",
"generatedExcerpt": "给账号业务增长团队使用的实操运营指南。",
"toc": [
{
"id": "先验证区域访问",
"title": "先验证区域访问",
"level": 2
},
{
"id": "常见问题",
"title": "常见问题",
"level": 2
}
],
"items": [
{
"key": "title-length",
"passed": true,
"severity": "info",
"message": "SEO 标题长度合适。"
},
{
"key": "internal-links",
"passed": true,
"severity": "info",
"message": "正文包含站内链接。"
}
]
}
}POST /api/v1/blog/posts/{id}/publish 会重新运行 SEO 检查,只有阻塞项通过才会正式发布。
{
"code": "0000",
"message": "success",
"data": {
"id": 42,
"slug": "account-infrastructure-growth-workflows-zh",
"title": "账号基础设施如何支持增长团队",
"status": 1,
"publishedAt": "2026-05-25 12:30:00",
"canonicalUrl": "https://www.cbgaccount.com/zh/blog/account-infrastructure-growth-workflows-zh",
"robots": "index,follow",
"seoScore": 92,
"sitemapUpdated": true,
"rssUpdated": true,
"webhookQueued": true
}
}code 不是 0000 时不要继续发布。把 message 和 failedItems 展示给运营人员,让他们修文章。
{
"code": "BLOG_SEO_BLOCKED",
"message": "草稿无法发布,因为存在阻塞级 SEO 检查项。",
"data": {
"canPublish": false,
"failedItems": [
"missing-cover-alt",
"thin-content",
"duplicate-slug"
]
}
}自动化
Webhook 接收端在后台配置。公开文档说明契约,密钥、投递日志和失败重试仍保留在后台登录区。
X-CBG-Event: blog.post.published X-CBG-Signature: t=1710000000,v1=hex(hmac_sha256(secret, t + "." + rawBody))
接收方需要校验时间戳、原始 body 和 HMAC。失败投递按 5、10、15 分钟递增间隔重试,最多 5 次。
/api/admin/blog/webhooks/save后台专用配置接口。外部开发者只需要向 CBGAccount 管理员提供接收 URL 和 secret,不需要登录后台。/api/admin/blog/webhooks/events后台专用投递日志,用于查看状态、响应内容、重试次数和失败原因。把 /api/v1/blog/openapi.json 导入 Postman、Apifox、Swagger UI 或 SDK 生成器。自动化测试应以 OpenAPI schema 为准。
公开页不会执行 Token 写入接口。需要在线调试时,登录后台进入“博客 API 文档与 Token 管理”。
站点发布时,需要把 /blog/api 和 /zh/blog/api 暴露在公网,让合作方无需登录后台也能阅读文档。