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

Перефразування, перевірка граматики, стислий виклад, переклад і перевірка на плагіат 56 мовами, зокрема українською. Простий REST з периферії Cloudflare.

Той самий origin
Запити зі сторінок adeptwrite.com не потребують ключа. Для власних застосунків ключі API дають платні плани, починаючи з Pro: створіть ключ у акаунті й надсилайте його в заголовку Authorization: Bearer. Без ключа API призначений лише для самого сайту.
Коротко

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 (той самий origin) не потрібна; для власних застосунків — ключ API з платного плану в заголовку Authorization: Bearer.
  • Приватність: вміст поля text не зберігається й не записується в журнали; відповіді мають Cache-Control: no-store.
  • Версії: шлях /v1/ не зміниться несумісно; несумісні зміни вийдуть під /v2/.

POST/api/v1/run

Виконує одне ШІ-завдання над текстом і повертає результат звичайним текстом (без вступу й без блоків коду Markdown).

Запит

FieldTypeRequiredNotes
taskstring✓Назва завдання; див. перелік завдань нижче.
textstring✓Вхідний текст, від 1 до 6 000 символів.
langstring✓Мова результату: один із 56 кодів мов сайту (uk, en, pl, 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": "uk",
  "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":"uk","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: 'uk', 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": "uk", "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://uk.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":"uk","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Виправлення граматики й правопису (для української — за Правописом 2019).
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Три пари метазаголовка й метаопису; режими: 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 слів.
Результат
Бюджет довжини на кожне завдання, але не більше 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_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 зі свого застосунку чи домену?

Так, з ключем API: ключі для власних застосунків доступні на платних планах, починаючи з Pro, і створюються на сторінці ключів API вашого акаунта. Без ключа API обслуговує лише сторінки adeptwrite.com. Деталі й ціни — на сторінці тарифів.

Чи зберігається текст, надісланий до API?

Ні. Текст передається моделі, щоб отримати відповідь, і одразу відкидається. Журнали містять лише метадані (код стану, завдання, тривалість). Усі подробиці — у політиці конфіденційності.

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

Кожне завдання дає один готовий до вставки текст без вступу й блоків Markdown, тож його можна одразу показати в редакторі. Додаткову структуру (наприклад, перелік змін) заплановано в пізнішій версії без зміни v1.

Скільки коштує API?

З сайту adeptwrite.com він безкоштовний у межах 30 ШІ-запитів на хвилину з однієї IP-адреси. Ключі API для власних застосунків входять до платних планів; актуальні ціни й ліміти дивіться на сторінці тарифів.

Яка модель відповідає на мій запит?

Це залежить від мови: англійська та індонезійська йдуть до SEA-LION, інші мови, зокрема українська, — до Qwen3-30B. Якщо ця модель зайнята чи збійна, відповідає наступна модель у резервному ланцюжку, а поле model у відповіді називає ту, що відповіла.