APIドキュメント

言い換え、文章校正、要約、翻訳、コピペチェックを、日本語を含む56言語でご自身のアプリに組み込めます。Cloudflareのエッジから提供するシンプルなREST APIです。

Same-origin/APIキー
ブラウザからは、adeptwrite.com自身のページからのリクエストだけを受け付けます(CORSヘッダーなし)。外部のアプリからの利用には、Proプラン以上で発行できるAPIキーを使います。キーはAPIキーのページで作成し、Authorization: Bearer ヘッダーで送ります。
要点

AdeptWrite API v1には、稼働中のエンドポイントが3つあります。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回までです。

基本事項

  • ベースURL: https://adeptwrite.com/api/v1
  • 形式: リクエストもレスポンスもJSONです(Content-Type: application/json、UTF-8)。
  • 認証: adeptwrite.comのページから呼び出す場合は不要です(same-origin)。外部のアプリからは、Proプラン以上のAPIキーを Authorization: Bearer aw_live_… で送ります。キーは1回しか表示されず、AdeptWriteにはそのハッシュだけが保存されます。
  • プライバシー: text は保存もログへの記録もされません。レスポンスには Cache-Control: no-store が付きます。
  • バージョン: /v1/ のパスは、互換性のない形では変更しません。大きな変更は /v2/ で行います。

POST/api/v1/run

文章に対してAIのタスクを1つ実行し、結果をプレーンテキスト(前置きやMarkdownのブロックなし)で返します。

リクエスト

FieldTypeRequiredNotes
taskstring✓タスク名。下のタスク一覧を参照してください。
textstring✓入力する文章。1〜6,000文字。
langstring✓結果の言語。サイトの56のロケールコード(ja、en、id、pt-pt、zh-hant など。pt-BR のようなBCP 47タグも対応づけます)のいずれか、または「入力と同じ言語」を意味する auto。
modestring—そのツールで使えるモード(例:Formal、Akademik、Ringkas、Poin-poin)。モードのないタスクでは無視されます。モード名はAPI上の識別子で、日本語には訳しません。
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": "ja",
  "text": "文章の質は、大学生にとってとても大切です。",
  "options": {}
}

レスポンス

ステータス 200 で、ok: true、結果は output、実際に応答したモデルは model(予備のモデルが引き継いだ場合は異なります)、処理時間はミリ秒で返ります。長さの上限または時間切れで途中で切れた場合は、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 "Authorization: Bearer aw_live_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"task":"grammar","lang":"ja","text":"私は昨日、図書館え行って本お借りました。"}'

例: JavaScript (fetch)

// adeptwrite.comのページ上のスクリプトから呼び出す場合(キーは不要)
const res = await fetch('/api/v1/run', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ task: 'summarize', mode: 'Poin-poin', lang: 'ja', 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": "ja", "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://ja.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 "Authorization: Bearer aw_live_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"lang":"ja","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言い換え。mode:Standar、Formal、Santai、Akademik、Kreatif、Ringkas、Panjangkan(標準・フォーマル・カジュアル・アカデミック・クリエイティブ・短く・長く)。
grammar文章校正(誤字脱字、助詞の誤り、不自然な表現)。日本語では文化庁の表記ルールに沿います。
tone文体・敬語の変換。mode:Formal、Kantor、Santai(フォーマル・ビジネス・カジュアル)。
rewrite硬い文やねじれた文の推敲。mode:Standar、Formal。
resize文章を短く・長くする。mode:Ringkas、Panjangkan。
essayメモから段落や作文・小論文の下書きを作る。mode:Akademik、Kreatif、Panjangkan。
summarize要約。mode:Poin-poin、Paragraf、Satu kalimat(箇条書き・文章・一文)。
translate対応する2つの言語間の翻訳。options.from(または auto)と options.to。mode:Alami(既定)、Formal、Santai。
thesis卒業論文のタイトル案と章立て。
abstract研究の概要から、構成の整った論文要旨を作る。
captionSNSのキャプション。options.platform:instagram、tiktok、linkedin。
emailメールと手紙。mode:Lamaran kerja、Surat resmi、Follow-up(応募メール・ビジネス文書・フォローアップ)。
headline記事のタイトルと見出し。mode:Kreatif、Ringkas。
product商品説明文。mode:Marketplace、Toko online(ECモール・自社ネットショップ)。
synonym1つの言葉やフレーズの類語リスト。
humanize硬くて型どおりの文章を、より自然に読めるように書き直す。mode:Alami、Pribadi、Profesional(自然・パーソナル・ビジネス)。
metaタイトルとメタディスクリプションの組を3つ。mode:Artikel、Produk、Halaman。
hashtagハッシュタグを1行で。mode:Instagram、TikTok、LinkedIn、X。
bioプロフィール文を3つ。mode:Instagram、LinkedIn、X、TikTok。
outlineサブ項目つきの番号つき構成案。mode:Artikel、Esai、Skripsi、Presentasi(記事・小論文・卒業論文・プレゼン資料)。
sloganスローガン案を10個。mode:Merek、Kampanye、Produk。
paragraphテーマから段落を1つ。mode:Pembuka、Isi、Penutup(序論・本論・結論)。
coverletterカバーレターの下書き。mode:Fresh graduate、Berpengalaman、Magang(新卒・経験者・インターン)。
poem短い詩。mode:Bebas、Berima、Akrostik、Haiku(自由詩・押韻・折句・俳句)。

制限

文章の長さ
1リクエストにつき最大6,000文字(超えると 413 too_long)。
IPアドレスごと
1分あたり30リクエスト。
サービス全体
1分あたり100リクエスト。AI機能には1日あたりの上限もあります。
コピペチェック
IPアドレスごとに1分あたり5回、サービス全体で1分あたり60回。30語以上が必要です。
出力
タスクごとに長さの枠が決まっており、2,048トークンを超えることはありません。途中で切れた応答には 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のページから送られていない(有効なAPIキーもない)。
429rate_limitedIPアドレスごと、またはサービス全体の1分あたりの上限を超えた。Retry-After の秒数だけ待ってください。
429quota_exceededAI機能の1日の上限に達した。翌日(UTC)にもう一度お試しください。
502upstream予備を含むすべてのモデルが、時間内に応答しなかった。
502empty_outputモデルは応答したが、結果が空だった。
503disabled運営者によりサービスが一時的に停止されている、または(/api/v1/aidetect では)まだ導入されていない。

エラーの形式

すべてのエラーは、対応するHTTPステータスコードと同じ形のJSONで返ります。

{ "ok": false, "error": { "code": "rate_limited", "message": "リクエストが多すぎます。しばらくしてからもう一度お試しください。" } }

まず ok を確認し、プログラムで処理する場合は error.code を読んでください。error.message は、そのまま利用者に表示できます。

おすすめの使い方

  • 長い文書を1回で送るより、段落などの単位に分けて送るほうが、速く、結果も確認しやすくなります。
  • 429 には、すぐに再試行せず、指数的に間隔をあけて再試行してください。
  • 不要な個人情報や機密情報は送らないでください。当サイトは保存しませんが、データは最小限にするのが原則です。
  • AIの出力には誤りがありえます。最終的な正解としてではなく、確認できる提案として表示してください。
  • APIキーは、サーバー側で管理してください。ブラウザに配布するコードの中に書かないでください。

よくある質問

自分のアプリやドメインからAPIを使えますか?

使えます。ただし、外部からの利用にはAPIキーが必要です。Proプラン以上のアカウントでAPIキーのページからキーを作成し、サーバー側から Authorization: Bearer ヘッダーを付けて呼び出してください。キーのないリクエストは、adeptwrite.com自身のページからのものしか受け付けません。

APIに送った文章は保存されますか?

いいえ。文章はモデルに渡して結果を生成するためだけに使い、その後は破棄します。ログに残るのは、ステータスコード、タスク名、処理時間などのメタデータだけで、文章の内容は一切含まれません。詳しくはプライバシーポリシーをご覧ください。

なぜ結果が、構造化されたJSONではなくプレーンテキストなのですか?

どのタスクも、前置きやMarkdownのブロックのない、そのまま使える1つのテキストを返します。エディタにすぐ表示できるようにするためです。変更箇所の一覧のような追加の構造は、v1を変えずに次のバージョンで追加する予定です。

APIの利用料金はいくらですか?

adeptwrite.comのサイトから使う分は無料で、IPアドレスごとにAIのリクエストは1分あたり30回までです。外部からの利用に使うAPIキーは有償プランの機能で、料金は料金ページに記載のとおりです。

どのモデルがリクエストに応答しますか?

言語によって異なります。インドネシア語と英語はSEA-LION、日本語を含むほかの言語はQwen3-30Bが担当します。そのモデルが混雑していたり失敗したりした場合は、予備のモデルの順番で次のモデルが応答し、レスポンスの model フィールドに実際に応答したモデルが入ります。