API 文档

改写、语法检查、摘要、翻译和查重,支持 56 种语言。简洁的 REST 接口,由 Cloudflare 边缘节点提供服务。

仅限同源
API 目前只处理来自 adeptwrite.com 本站的请求(不返回 CORS 头)。带密钥的外部访问计划与 Pro 套餐一起推出。我们提前发布这份文档,让接口约定公开透明,方便你提前准备。
摘要

AdeptWrite v1 API 目前有三个可用接口。POST /api/v1/run 接收包含 task、mode、lang 和 text(最多 6,000 个字符)的 JSON,返回由 Cloudflare Workers AI 按语言选择的模型生成的纯文本结果;POST /api/v1/plagiarism 把文本与公开来源比对,并列出实际检索过的每个来源;GET /api/v1/health 返回服务状态。文字不会被保存或记录,AI 请求限制为每个 IP 每分钟 30 次。

基本信息

  • 基础地址: https://adeptwrite.com/api/v1
  • 格式: 请求和响应都是 JSON(Content-Type: application/json,UTF-8)。
  • 认证: 暂无;请求必须来自 adeptwrite.com 的页面(同源)。API 密钥随 Pro 套餐推出。
  • 隐私: text 字段不会被保存或记录;响应带有 Cache-Control: no-store。
  • 版本: /v1/ 路径不会发生不兼容的变更;破坏性变更将使用 /v2/。

POST/api/v1/run

对一段文字执行一个 AI 任务,并以纯文本返回结果(没有开场白,没有 Markdown 代码围栏)。

请求

FieldTypeRequiredNotes
taskstring✓任务名称;见下方任务列表。
textstring✓输入文字,1–6,000 个字符。
langstring✓结果的语言:56 个站点语言代码之一(如 en、id、ja、zh-hans、zh-hant……;pt-BR 这样的 BCP 47 标签会被映射),或 auto,表示“与输入相同的语言”。
modestring—该工具可用的模式,例如 Formal、Akademik、Ringkas、Poin-poin(模式名称是注册表中的印尼语标签,调用时照写即可)。没有模式的任务会忽略它。
optionsobject—任务专用选项:translate 的 from / to(任意受支持语言互译;from 可以是 auto;sr-Cyrl 表示请求西里尔字母的塞尔维亚语)、caption 的 platform(instagram / tiktok / linkedin),以及 bio、coverletter 和 meta 的可选带标签 fields。其他键会被忽略。
POST /api/v1/run HTTP/1.1
Content-Type: application/json

{
  "task": "paraphrase",
  "mode": "Formal",
  "lang": "zh-hans",
  "text": "好的写作对学生来说非常重要。",
  "options": {}
}

响应

状态码 200,ok: true,结果在 output 中,实际作答的模型在 model 中(启用备用模型时会不同),处理耗时(毫秒)在 ms 中。如果回答触及长度预算或时间限制而被截断,会加上 truncated: true。

{
  "ok": true,
  "output": "写作质量对学生而言至关重要。",
  "model": "@cf/qwen/qwen3-30b-a3b-fp8",
  "ms": 812
}

示例: curl

curl -X POST https://adeptwrite.com/api/v1/run \
  -H "Content-Type: application/json" \
  -d '{"task":"grammar","lang":"zh-hans","text":"我们明天去图书管借书。"}'

示例: JavaScript (fetch)

const res = await fetch('/api/v1/run', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ task: 'summarize', mode: 'Poin-poin', lang: 'zh-hans', text }),
});
const data = await res.json();
if (!data.ok) throw new Error(data.error.code + ': ' + data.error.message);
console.log(data.output);

POST/api/v1/plagiarism

从文本中挑出 4–8 个有代表性的短语,用文本所用的语言在公开来源(维基百科、维基文库、Internet Archive 全文、Europe PMC、DOAJ、arXiv;只有在已配置且请求时才使用网页搜索服务)中检索,并计算重合程度。只有这些短短的短语会离开服务器。

请求

FieldTypeRequiredNotes
textstring✓至少 30 个词,最多 6,000 个字符。
langstring✓站点语言代码或 auto。
optionsobject—web: true 表示在运营方配置了网页搜索服务时也查询它;响应中的 webSearched 说明它是否真的作了回答。
POST /api/v1/plagiarism HTTP/1.1
Content-Type: application/json

{ "text": "……至少 30 个词……", "lang": "zh-hans", "options": { "web": false } }

响应

状态码 200,包含 score(匹配词数 ÷ 总词数,0–1)、按来源列出的 matches(带高亮的 passages,为你文本中的字符偏移量)、sourcesSearched(恰好是其回答已计入结果的来源)、附带原因的 sourcesSkipped,以及 webSearched。

{
  "ok": true,
  "score": 0.42,
  "words": 52,
  "matchedWords": 22,
  "matches": [{ "source": "wikipedia", "title": "…", "url": "https://zh.wikipedia.org/wiki/…",
                "matchedWords": 22, "passages": [{ "start": 0, "end": 131, "text": "…" }] }],
  "sourcesSearched": ["wikipedia", "wikisource", "internet-archive-fts", "europepmc", "doaj"],
  "sourcesSkipped": [],
  "webSearched": false,
  "ms": 2310
}

示例: curl

curl -X POST https://adeptwrite.com/api/v1/plagiarism \
  -H "Content-Type: application/json" \
  -d '{"lang":"zh-hans","text":"……至少 30 个词……"}'

GET/api/v1/health

报告哪些服务处于开启状态。不需要请求体,也不计入配额。

响应

状态码 200。AI 紧急关闭开关打开时 ai 为 false;plagiarism 列出查重工具可查询的来源;aidetect 描述 AI 检测器的服务端深度分析,该功能尚未部署(POST /api/v1/aidetect 返回 503 disabled;站点上的检测器在你的浏览器里运行)。

{
  "ok": true,
  "ai": true,
  "plagiarism": { "enabled": true, "sources": ["wikipedia", "wikisource", "internet-archive-fts", "europepmc", "doaj", "arxiv"], "web": false },
  "aidetect": { "enabled": false, "judge": false }
}

示例: curl

curl https://adeptwrite.com/api/v1/health

Task list

taskWhat it does
paraphrase改写;模式:Standar(标准)、Formal(正式)、Santai(口语)、Akademik(学术)、Kreatif(创意)、Ringkas(精简)、Panjangkan(扩写)。
grammar语法和拼写纠正(中文按《通用规范汉字表》与 GB/T 15834 的用字和标点规范)。
tone转换语气;模式:Formal(正式)、Kantor(职场)、Santai(轻松)。
rewrite修改生硬或别扭的句子;模式:Standar(标准)、Formal(正式)。
resize缩写或扩写句子;模式:Ringkas(缩写)、Panjangkan(扩写)。
essay把要点写成段落或文章;模式:Akademik(学术)、Kreatif(创意)、Panjangkan(扩写)。
summarize摘要;模式:Poin-poin(要点)、Paragraf(一段话)、Satu kalimat(一句话)。
translate任意两种受支持语言之间的翻译;options.from(或 auto)和 options.to;模式:Alami(自然,默认)、Formal(正式)、Santai(口语)。
thesis毕业论文题目思路和章节大纲。
abstract根据研究概述生成结构化摘要。
caption社交媒体配文;options.platform:instagram、tiktok、linkedin。
email邮件和公函;模式:Lamaran kerja(求职邮件)、Surat resmi(正式公函)、Follow-up(跟进邮件)。
headline文章标题;模式:Kreatif(创意)、Ringkas(简洁)。
product商品描述;模式:Marketplace(电商平台)、Toko online(独立网店)。
synonym一个词或短语的近义词列表。
humanize让生硬、套路化的文字读起来更自然;模式:Alami(自然)、Pribadi(个人风格)、Profesional(专业)。
meta三组 meta 标题和描述;模式:Artikel(文章)、Produk(商品)、Halaman(任意网页)。
hashtag一行话题标签;模式:Instagram、TikTok、LinkedIn、X。
bio三条个人简介;模式:Instagram、LinkedIn、X、TikTok。
outline带分点的编号大纲;模式:Artikel(文章)、Esai(作文)、Skripsi(毕业论文)、Presentasi(演示文稿)。
slogan十条广告语思路;模式:Merek(品牌)、Kampanye(活动)、Produk(产品)。
paragraph根据主题写一个段落;模式:Pembuka(开头段)、Isi(主体段)、Penutup(结尾段)。
coverletter求职信草稿;模式:Fresh graduate(应届毕业生)、Berpengalaman(有工作经验)、Magang(实习)。
poem短诗;模式:Bebas(自由诗)、Berima(押韵诗)、Akrostik(藏头诗)、Haiku(俳句)。

限制

文字长度
每次请求最多 6,000 个字符(超过则返回 413 too_long)。
每个 IP 地址
每分钟 30 次请求。
全站
整个服务每分钟 100 次请求,另有 AI 功能的每日上限。
查重
每个 IP 每分钟 5 次检查,全站每分钟 60 次;至少 30 个词。
输出
每个任务有各自的长度预算,最多不超过 2,048 个 token;被截断的回答带有 truncated: true。
模型
按语言选择:英语和印尼语使用 @cf/aisingapore/gemma-sea-lion-v4-27b-it,其他所有语言(包括简体中文)使用 @cf/qwen/qwen3-30b-a3b-fp8。当模型繁忙、被限流、响应过慢或出错时,请求会转到链条中的下一个模型(Qwen3-30B,然后是 @cf/google/gemma-4-26b-a4b-it,再然后是 @cf/meta/llama-3.3-70b-instruct-fp8-fast)。model 字段始终写明实际作答的模型。

错误代码

状态代码发生时机
400invalid_requestJSON 无效、缺少必填字段,或 task、lang 未知。
413too_longtext 超过 6,000 个字符。
403forbidden请求不是来自 adeptwrite.com 的页面。
429rate_limited超过了每个 IP 或全站的每分钟限额。请等待 Retry-After 中给出的秒数。
429quota_exceededAI 功能的每日上限已用完。请第二天(UTC)再试。
502upstream链条中的所有模型都没能在时限内作答。
502empty_output模型作了回答,但结果为空。
503disabled运营方暂时关闭了服务,或(对于 /api/v1/aidetect)该功能尚未部署。

错误格式

所有错误都以 JSON 返回,带有对应的 HTTP 状态码,结构相同:

{ "ok": false, "error": { "code": "rate_limited", "message": "Too many requests. Please try again shortly." } }

先检查 ok,再读取 error.code 做程序化处理;error.message 可以放心展示给用户(目前为英文)。

使用建议

  • 分段发送文字(例如按段落),不要一次发一整篇长文;结果返回得更快,也更容易逐段核对。
  • 遇到 429 时用指数退避重试,不要立即重试。
  • 不必要的个人或机密数据不要发送——即使我们不保存,数据最小化原则依然适用。
  • AI 输出可能有误;请把它当作供核对的建议,而不是最终结论。

常见问题

我可以在自己的应用或域名下调用 API 吗?

暂时不行。Worker 目前不发送 CORS 头,只处理 adeptwrite.com 页面发来的请求。带密钥的外部访问计划与 Pro 套餐一起推出,开放后本文档会同步更新。

发送到 API 的文字会被保存吗?

不会。文字被转交给模型生成答案,之后即被丢弃。日志中只有元数据(状态码、任务、耗时)。详情见隐私政策。

为什么输出是纯文本,而不是结构化 JSON?

每个任务都生成一段可直接使用的文字,没有开场白和 Markdown 代码围栏,可以直接显示在编辑器里。额外的结构(例如修改清单)计划在以后的版本提供,不会改变 v1。

API 收费吗?

从 adeptwrite.com 调用是免费的,限制为每个 IP 每分钟 30 次 AI 请求。外部访问的价格将随 Pro 套餐一起公布;在那之前不收取任何费用。

我的请求由哪个模型作答?

取决于语言:英语和印尼语交给 SEA-LION,其他语言交给 Qwen3-30B。如果该模型繁忙或出错,则由备用链条中的下一个模型作答,响应的 model 字段会写明是哪一个。