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

Перифразиране, проверка на граматика, резюмета, превод и проверка за плагиатство на 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 огради).

Заявка

FieldTypeRequiredNotes
taskstring✓Име на задачата; вижте списъка със задачи по-долу.
textstring✓Входен текст, от 1 до 6 000 знака.
langstring✓Език на резултата: един от 56 кода на езиковите версии на сайта (en, bg, ja, 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": "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; доставчик на уеб търсене само когато е настроен и поискан) и оценява припокриването. Само тези кратки фрази напускат сървъра.

Заявка

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": "bg", "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://bg.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":"bg","text":"…поне 30 думи…"}'

GET/api/v1/health

Съобщава кои услуги са включени. Не приема тяло и не се брои към квотата.

Отговор

Статус 200. 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Перифразиране; режими: Standar, Formal, Santai, Akademik, Kreatif, Ringkas, Panjangkan.
grammarПоправка на граматика и правопис (за български: по Официалния правописен речник).
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 от собствено приложение или домейн?

Още не. Worker в момента не изпраща CORS заглавия и обслужва само страници на adeptwrite.com. Външен достъп с API ключове е планиран заедно с плана Pro; документацията ще бъде обновена, когато е наличен.

Съхранява ли се текстът, изпратен към API?

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

Защо резултатът е обикновен текст, а не структуриран JSON?

Всяка задача създава един готов за ползване текст без встъпление и Markdown огради, за да може да се покаже директно в редактора. Допълнителна структура (например списък на промените) е планирана за по-късна версия, без да се променя v1.

Колко струва API?

От adeptwrite.com е безплатно, с ограничение от 30 заявки с ИИ в минута на IP адрес. Цените за външен достъп ще бъдат обявени заедно с плана Pro; дотогава нищо не се таксува.

Кой модел отговаря на заявката ми?

Зависи от езика: английски и индонезийски отиват към SEA-LION, останалите езици към Qwen3-30B. Ако моделът е зает или се провали, отговаря следващият във веригата от резервни модели, а полето model в отговора назовава този, който е отговорил.