Перифразиране, проверка на граматика, резюмета, превод и проверка за плагиатство на 56 езика. Прост REST, обслужван от периферията на Cloudflare.
Същият произход
В момента API обслужва заявки само от самия adeptwrite.com (без CORS заглавия). Външен достъп с API ключове е планиран заедно с плана Pro. Документацията е публикувана рано, за да е отворен договорът и да можете да се подготвите.
Накратко
API v1 на AdeptWrite има три работещи крайни точки. 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, bg, ja, 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": "bg",
"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":"bg","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: 'bg', 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 характерни фрази от текста, търси в отворени източници на езика на текста (Уикипедия, Wikisource, пълен текст на Internet Archive, Europe PMC, DOAJ, arXiv; доставчик на уеб търсене само когато е настроен и поискан) и оценява припокриването. Само тези кратки фрази напускат сървъра.
Заявка
Field
Type
Required
Notes
text
string
✓
Най-малко 30 думи, най-много 6 000 знака.
lang
string
✓
Код на езикова версия на сайта или auto.
options
object
—
web: true заявява и доставчика на уеб търсене, когато операторът е настроил такъв; webSearched в отговора показва дали наистина е отговорил.
Статус 200 с score (съвпадащи думи ÷ думи, от 0 до 1), matches по източник с подчертани passages (отмествания в знаци във вашия текст), sourcesSearched (точно източниците, чиито отговори са в резултата), sourcesSkipped с причина и webSearched.
Съобщава кои услуги са включени. Не приема тяло и не се брои към квотата.
Отговор
Статус 200. ai е false, докато аварийният изключвател на ИИ е включен; plagiarism изброява източниците, които проверката може да заяви; aidetect описва сървърния задълбочен анализ на AI детектора, който още не е внедрен (POST /api/v1/aidetect отговаря 503 disabled; детекторът на сайта работи във вашия браузър).
Поправка на граматика и правопис (за български: по Официалния правописен речник).
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 винаги назовава модела, който е отговорил.
Кодове за грешка
Статус
Код
Кога се случва
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 в отговора назовава този, който е отговорил.