Документация API

Перефразирование, проверка грамматики, краткий пересказ, перевод и проверка на плагиат на 56 языках. Простой REST, работает на периферийной сети Cloudflare.

Только свой домен
Сейчас API принимает запросы только со страниц adeptwrite.com (заголовков CORS нет). Внешний доступ по ключам API планируется вместе с тарифом Pro. Документацию мы публикуем заранее, чтобы контракт был открыт и вы могли подготовиться.
Коротко

У API AdeptWrite v1 три рабочих эндпоинта. POST /api/v1/run принимает JSON с полями task, mode, lang и text (до 6 000 символов) и возвращает простой текст от модели Cloudflare Workers AI, выбранной под язык; POST /api/v1/plagiarism сравнивает текст с открытыми источниками и перечисляет каждый источник, в котором искал; GET /api/v1/health возвращает состояние сервиса. Текст не хранится и не попадает в журналы, а запросы к ИИ ограничены 30 в минуту с одного IP-адреса.

Основные сведения

  • Базовый адрес: 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

Выполняет одну задачу ИИ над текстом и возвращает результат простым текстом (без вступления и без блоков кода Markdown).

Запрос

FieldTypeRequiredNotes
taskstring✓Название задачи; см. список задач ниже.
textstring✓Исходный текст, от 1 до 6 000 символов.
langstring✓Язык результата: один из 56 кодов локалей сайта (en, id, ru, pt-pt, zh-hant…; теги BCP 47 вроде pt-BR сопоставляются) или auto — «тот же язык, что у исходного текста».
modestring—Режим, доступный для этого инструмента, например Formal, Akademik, Ringkas, Poin-poin (названия режимов — индонезийские ключи реестра). Для задач без режимов игнорируется.
optionsobject—Параметры задачи: from / to для translate (любой поддерживаемый язык на любой другой; from может быть auto; sr-Cyrl запрашивает сербский кириллицей), platform (instagram / tiktok / linkedin) для caption и необязательные именованные fields для bio, coverletter и meta. Остальные ключи игнорируются.
POST /api/v1/run HTTP/1.1
Content-Type: application/json

{
  "task": "paraphrase",
  "mode": "Formal",
  "lang": "ru",
  "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 "Content-Type: application/json" \
  -d '{"task":"grammar","lang":"ru","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: 'ru', 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": "ru", "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://ru.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":"ru","text":"…не менее 30 слов…"}'

GET/api/v1/health

Сообщает, какие службы включены. Тела запроса нет, на квоту не влияет.

Ответ

Статус 200. Поле ai равно false, пока включён аварийный выключатель ИИ; plagiarism перечисляет источники, к которым может обращаться проверка; aidetect описывает серверный углублённый анализ детектора ИИ, который ещё не развёрнут (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Исправление грамматики, орфографии и пунктуации; для русского модели заданы нормы ИРЯ РАН (ПАС 2006).
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Три пары title и description; режимы: 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 запросов в минуту на весь сервис плюс суточный предел для функций ИИ.
Плагиат
5 проверок в минуту с одного IP-адреса и 60 в минуту на весь сервис; минимум 30 слов.
Результат
Бюджет длины на каждую задачу, но не более 2048 токенов; обрезанный ответ помечается 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_requestНекорректный JSON, не хватает обязательного поля либо неизвестное значение task или lang.
413too_longtext длиннее 6 000 символов.
403forbiddenЗапрос пришёл не со страницы adeptwrite.com.
429rate_limitedПревышен лимит в минуту с одного IP-адреса или общий лимит. Подождите число секунд из заголовка Retry-After.
429quota_exceededСуточный предел функций ИИ исчерпан. Повторите на следующий день (по 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 реагируйте экспоненциальной задержкой, а не немедленными повторами.
  • Не отправляйте персональные и конфиденциальные данные без необходимости: хотя мы их не храним, принцип минимизации данных остаётся в силе.
  • Результат ИИ может быть неверным; показывайте его как предложение для проверки, а не как окончательную истину.

Частые вопросы

Можно ли обращаться к API из собственного приложения или с моего домена?

Пока нет. Worker сейчас не отправляет заголовки CORS и обслуживает только страницы adeptwrite.com. Внешний доступ по ключам API планируется вместе с тарифом Pro; когда он появится, эта документация будет обновлена.

Сохраняется ли текст, отправленный в API?

Нет. Текст пересылается модели, чтобы получить ответ, и затем отбрасывается. В журналах только метаданные (код ответа, задача, длительность). Все подробности есть в политике конфиденциальности.

Почему результат — простой текст, а не структурированный JSON?

Каждая задача выдаёт один готовый текст без вступления и блоков Markdown, чтобы его можно было сразу показать в редакторе. Дополнительную структуру (например, список правок) планируется добавить в одной из следующих версий, не меняя v1.

Сколько стоит API?

С сайта adeptwrite.com он бесплатен, лимит — 30 запросов к ИИ в минуту с одного IP-адреса. Цены на внешний доступ объявят вместе с тарифом Pro; до тех пор ничего не списывается.

Какая модель отвечает на мой запрос?

Зависит от языка: английский и индонезийский уходят в SEA-LION, остальные языки, включая русский, — в Qwen3-30B. Если эта модель занята или даёт сбой, отвечает следующая модель резервной цепочки, а поле model в ответе называет ту, что ответила.