把页面质量审核接入你的工作流
Convertos 内容审核 API 接收纯文本、HTML 或公开 URL,异步运行 page-quality-review 的完整审核流程,并返回可编程处理的评分、门禁、证据和 findings。
认证
Bearer API Key
输入
Text · HTML · URL
交付
202 + 状态查询
文档目录
Overview
先了解这套 API 做什么
这是一套面向外部开发者的异步完整页面质量审核接口。text、html 和公开 URL 都执行同一套 page-quality-review.full.v1 规则;公开 URL 还会补充桌面端、移动端、浏览器交互和可见加载证据。服务不会登录目标页面,也不会转发你的 Cookie 或登录态。
选择来源
按 sourceType 明确告诉 API 你提交的是 text、html 还是 url。
异步处理
创建任务后立即返回 202 和 job ID,不阻塞你的请求。
读取结果
轮询状态接口,完成后读取 verdict、score、dimensions 和 findings。
认证
文档公开可见;只有创建和管理 API Key 的控制台需要登录。登录后在个人中心创建 Key,Secret 只会显示一次。
curl https://convertos.ai/api/v1/reviews/page-quality/REVIEW_ID \
-H "Authorization: Bearer cvt_live_YOUR_KEY"三步发出第一个请求
- 01
登录并创建一个 API Key。
- 02
提交 text、html 或公开 url,所有请求统一执行完整审核。
- 03
保存 job ID,轮询 statusUrl 直到 completed 或 failed。
curl -X POST https://convertos.ai/api/v1/reviews/page-quality \
-H "Authorization: Bearer cvt_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: review-001" \
-d '{
"sourceType": "url",
"url": "https://example.com/article",
"language": "en",
"mode": "standard",
"pageType": "blog_article",
"targetJob": "Answer the searcher’s question and give them a next action."
}'{
"ok": true,
"job": {
"id": "8c1b...",
"status": "queued",
"creditCost": 20,
"statusUrl": "/api/v1/reviews/page-quality/8c1b..."
}
}创建审核任务
/api/v1/reviews/page-quality提交成功返回 202。任务会进入队列,积分在任务被接受时扣除;如果队列或审核失败,会自动退回本次积分。
| Field | Type | 说明 |
|---|---|---|
| sourceType | text | html | url | 必填。决定 API 从哪个字段读取来源。 |
| content | string | text 或 html 必填;最大 2 MiB。 |
| url | string | url 必填;必须是公开的绝对 http(s) URL。 |
| language | en | zh | 可选,默认 en。 |
| mode | standard | 可选但只有 standard 被支持;省略时也会执行完整审核。quick 已移除,传入 quick 会返回 INVALID_MODE。 |
| pageType / targetJob | string | 建议填写,用于 contracts、搜索意图、商业角色和发布门槛判断。 |
| competitiveBaseline | object | 可选。提供竞品难度、优势和证据;不提供时会使用 Unknown/Medium 的暂估门槛并降低 confidence。 |
请求头 Idempotency-Key 可选但推荐使用:网络重试时复用同一个 Key,不会重复创建任务或重复扣费。
输入类型与分析边界
| 类型 | 积分 | 传什么 | 会检查什么 |
|---|---|---|---|
| text | 4 | 纯文本内容 | AI 判断内容意图、准确性、证据、原创性、行动价值和 E-E-A-T;规则只负责输入和安全底线。 |
| html | 10 | HTML 源码 | AI 审核页面内容和 E-E-A-T;同时检查 title、description、H1、canonical、链接、图片 alt、Schema 等技术事实。 |
| url | 20 | 公开网页 URL | AI 审核实际页面内容、事实、证据和 E-E-A-T,并补桌面/移动渲染、布局、性能、链接和控制台证据。 |
会检查
内容意图、标题结构、SEO 元数据(HTML)、证据与信任信号、内部泄漏信号,以及基于同一证据的 AI 分析。
边界
不会访问登录态内容;text 和 html 没有可渲染 URL,因此布局和浏览器证据标记为不适用;没有提供竞品证据时不会虚构竞品结论。
批量审核
/api/v1/reviews/page-quality/batchbatch 需要提交 3 到 5 个相关页面。每个页面都执行同一套完整审核,再执行跨页面结构相似度检查。批量结果可能因为页面重复而 Fail,即使单页分数都不错。
curl -X POST https://convertos.ai/api/v1/reviews/page-quality/batch \
-H "Authorization: Bearer cvt_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: batch-001" \
-d '{
"mode": "batch",
"language": "en",
"pages": [
{"label":"Page A","sourceType":"url","url":"https://example.com/a","mode":"standard","pageType":"programmatic"},
{"label":"Page B","sourceType":"url","url":"https://example.com/b","mode":"standard","pageType":"programmatic"},
{"label":"Page C","sourceType":"url","url":"https://example.com/c","mode":"standard","pageType":"programmatic"}
]
}'查询审核状态
/api/v1/reviews/page-quality/:id使用创建任务返回的 job.id 或 statusUrl 查询。只有创建该任务的同一个 API Key 能读取它。
| Status | 含义 | 客户端动作 |
|---|---|---|
| queued | 已接受,等待执行。 | 按退避策略继续轮询。 |
| running | 正在执行静态审核和 AI 分析。 | 继续轮询。 |
| completed | 结果已写入 result。 | 读取并保存结果。 |
| failed | 任务失败,带 error.code 和 message。 | 记录错误;本次任务积分会退回。 |
curl https://convertos.ai/api/v1/reviews/page-quality/REVIEW_ID \
-H "Authorization: Bearer cvt_live_YOUR_KEY"审核结果
completed 任务的 result 对象包含 preflight、contracts、competitiveBaseline、七个维度、gates、caps、threshold、evidence、findings 和 aiAnalysis。固定规则负责技术事实和安全底线;AI 根据实际页面内容判断意图、准确性、证据、原创性和 E-E-A-T,并参与最终 verdict。
{
"version": "page-quality-review.v1",
"reviewProtocol": "page-quality-review.full.v1",
"verdict": "iterate",
"score": 74,
"confidence": "medium",
"mode": "standard",
"sourceType": "html",
"summary": "...",
"gates": [{"name":"rendered_experience","outcome":"pass","reason":"..."}],
"caps": {"applied": [], "finalScoreCap": null},
"threshold": {"scoreRequired": 85, "minCoreDimension": 75, "coreDimensionsMeetMinimum": true},
"aiAnalysis": {
"provider": "agentsflare",
"scope": "content_quality",
"status": "completed",
"verdict": "iterate",
"score": 78,
"summary": "...",
"findings": [{
"code": "AI_CONTENT_NEXT_STEP",
"message": "The opening explains the topic but does not make the next action explicit.",
"recommendation": "Add one concrete next step after the opening answer.",
"evidence": "The opening section states the topic but contains no action instruction."
}],
"eeat": {
"experience": {"score": 72, "status": "partial", "note": "Some practical examples are present, but first-hand experience is not established.", "evidence": "The page gives examples but does not identify a first-hand source."},
"expertise": {"score": 80, "status": "partial", "note": "The topic is explained with relevant detail.", "evidence": "The page explains the criteria and tradeoffs."},
"authoritativeness": {"score": 65, "status": "not_evidenced", "note": "No accountable authority is supplied.", "evidence": "No author organization or external citation is visible."},
"trustworthiness": {"score": 74, "status": "partial", "note": "Claims are mostly bounded but proof is limited.", "evidence": "The page contains claims without nearby attributable sources."}
}
},
"dimensions": {
"contentIntent": { "score": 82, "status": "inspected", "notes": [] },
"seoIndexability": { "score": 68, "status": "inspected", "notes": [] },
"geoExtractability": { "score": 76, "status": "inspected", "notes": [] }
},
"metrics": {
"wordCount": 820,
"headingCount": 9,
"h1Count": 1,
"hasTitle": true,
"hasDescription": true
},
"findings": [
{
"severity": "warning",
"code": "IMAGE_ALT",
"message": "...",
"recommendation": "..."
}
]
}每条 finding 都有 severity、code、message 和 recommendation,适合直接映射到你自己的 issue、工单或发布门禁。
积分与计费
按输入类型计费,不按结果长度计费;所有输入都执行完整审核。任务被 API 接受时扣除;队列不可用或审核失败时自动退回。
| 输入 | 每次消耗 | 适合场景 |
|---|---|---|
| text | 4 credits | 完整审核纯文本内容。 |
| html | 10 credits | 完整审核 HTML 源码和内容。 |
| url | 20 credits | 抓取并完整审核一个公开页面。 |
| batch | 5 + pages | 基础 5 积分,加上每个页面的完整审核费用。 |
限制与并发
这些限制用于保护共享队列和积分账户。页面和接口都应该明确处理 429、402、413 等状态。
| 项目 | 当前值 | 说明 |
|---|---|---|
| 每个账户的激活 Key | 20 | 个人中心可创建、禁用和删除。 |
| 每个 Key 的执行并发 | 2 | 超过后应在客户端排队;这是服务端实际同时执行的上限。 |
| 每个 Key 每分钟接受量 | 60 | 重复幂等请求不会重复创建任务。 |
| 文本/HTML 内容大小 | 2 MiB | 按 UTF-8 字节数计算。 |
| URL 长度 | 2048 chars | 只接受公开 http(s),不接受内嵌账号密码。 |
部署提示:完整 URL 审核需要生产环境配置 PAGE_REVIEW_BROWSER_WS_URL 或 BROWSERLESS_URL。未配置远程浏览器时不会伪造渲染结果,也不会返回 500;结果会明确标记浏览器证据未完成并保持 iterate。
错误与重试
错误统一返回 JSON:ok=false、error.code、error.message,部分错误还会带 details。只有网络超时或 5xx 适合自动重试;参数错误和认证错误不要盲目重试。
| Code | HTTP | 处理建议 |
|---|---|---|
| INVALID_API_KEY | 401 | 检查 Bearer Key 是否正确、激活且未泄露。 |
| INVALID_MODE | 400 | 只支持完整 standard 审核;省略 mode 也会执行完整审核。 |
| INVALID_SOURCE_TYPE | 400 | 只允许 text、html、url。 |
| CONTENT_REQUIRED / URL_REQUIRED | 400 | 按 sourceType 补齐 content 或 url。 |
| INVALID_URL / INPUT_TOO_LARGE | 400 / 413 | 修正绝对 URL 或缩小内容。 |
| INSUFFICIENT_CREDITS | 402 | 购买或补充积分后再提交。 |
| RATE_LIMITED | 429 | 等待当前窗口结束,并降低发送速率。 |
| IDEMPOTENCY_CONFLICT | 409 | 同一个幂等 Key 不要用于不同请求。 |
| DATABASE_UNAVAILABLE / QUEUE_UNAVAILABLE | 503 | 等待 retryAfterSeconds 后退避重试;本次不会扣积分。 |
| REVIEW_FAILED | 500 | 使用退避策略重试查询;已接受但失败的任务会退回积分。 |
{
"ok": false,
"error": {
"code": "RATE_LIMITED",
"message": "This API key has reached 60 accepted reviews per minute.",
"details": { "retryAfterSeconds": 60 }
}
}