API 文件

改寫、文法檢查、摘要、翻譯與抄襲檢查,涵蓋 56 種語言。簡單的 REST 介面,由 Cloudflare 的邊緣節點提供服務。

僅限同源
API 目前只處理來自 adeptwrite.com 本身的請求(沒有 CORS 標頭)。使用 API 金鑰的外部存取預計隨 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、pt-pt、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-hant",
  "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-hant","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-hant', 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 個有特色的片語,在該文字語言的開放來源中搜尋(Wikipedia、Wikisource、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-hant", "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-hant","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文法與拼字更正。
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一行 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 頁面的請求。使用 API 金鑰的外部存取預計隨 Pro 方案推出,開放時會更新這份文件。

傳送到 API 的文字會被儲存嗎?

不會。文字轉交給模型產生答案後就丟棄。日誌只含中繼資料(狀態碼、任務、處理時間)。完整細節請見隱私權政策。

為什麼輸出是純文字,而不是結構化的 JSON?

每項任務都產生一段可直接使用的文字,沒有開場白,也沒有 Markdown 程式碼框,可以直接顯示在編輯器中。額外的結構(例如修改清單)預計在後續版本提供,不會改變 v1。

API 要多少錢?

從 adeptwrite.com 呼叫是免費的,上限是每個 IP 每分鐘 30 次 AI 請求。外部存取的價格會隨 Pro 方案公布;在那之前不會收取任何費用。

是哪個模型回答我的請求?

依語言而定:英文與印尼文交給 SEA-LION,其他語言交給 Qwen3-30B。如果該模型忙碌或失敗,會由備援鏈中的下一個模型回答,回應的 model 欄位會標明是哪一個。