Перефразирование, проверка грамматики, краткий пересказ, перевод и проверка на плагиат на 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).
Запрос
Field
Type
Required
Notes
task
string
✓
Название задачи; см. список задач ниже.
text
string
✓
Исходный текст, от 1 до 6 000 символов.
lang
string
✓
Язык результата: один из 56 кодов локалей сайта (en, id, ru, pt-pt, zh-hant…; теги BCP 47 вроде pt-BR сопоставляются) или auto — «тот же язык, что у исходного текста».
mode
string
—
Режим, доступный для этого инструмента, например Formal, Akademik, Ringkas, Poin-poin (названия режимов — индонезийские ключи реестра). Для задач без режимов игнорируется.
options
object
—
Параметры задачи: 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; поставщик веб-поиска — только если он настроен и запрошен) и оценивает долю совпадений. С сервера уходят только эти короткие фразы.
Запрос
Field
Type
Required
Notes
text
string
✓
Не менее 30 слов и не более 6 000 символов.
lang
string
✓
Код локали сайта или auto.
options
object
—
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.
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; детектор на сайте работает в вашем браузере).
Короткие стихи; режимы: 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 всегда называет модель, которая ответила.
Коды ошибок
Статус
Код
Когда возникает
400
invalid_request
Некорректный JSON, не хватает обязательного поля либо неизвестное значение task или lang.
413
too_long
text длиннее 6 000 символов.
403
forbidden
Запрос пришёл не со страницы adeptwrite.com.
429
rate_limited
Превышен лимит в минуту с одного IP-адреса или общий лимит. Подождите число секунд из заголовка Retry-After.
429
quota_exceeded
Суточный предел функций ИИ исчерпан. Повторите на следующий день (по UTC).
502
upstream
Ни одна модель цепочки не ответила вовремя.
502
empty_output
Модели ответили, но результат пустой.
503
disabled
Владелец временно отключил сервис либо (для /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 в ответе называет ту, что ответила.