Parafraza, sprawdzanie gramatyki, streszczenia, tłumaczenia i sprawdzanie plagiatu w 56 językach. Proste REST, serwowane z brzegu sieci Cloudflare.
To samo źródło
API obsługuje obecnie tylko żądania z samego adeptwrite.com (bez nagłówków CORS). Dostęp zewnętrzny z kluczami API jest planowany razem z planem Pro. Dokumentację publikujemy wcześniej, by kontrakt był otwarty i żebyś mógł się przygotować.
W skrócie
API AdeptWrite v1 ma trzy działające endpointy. POST /api/v1/run przyjmuje JSON z polami task, mode, lang i text (do 6000 znaków) i zwraca wynik jako zwykły tekst z modelu Cloudflare Workers AI dobranego do języka; POST /api/v1/plagiarism porównuje tekst z otwartymi źródłami i wymienia każde przeszukane źródło; GET /api/v1/health zwraca stan usługi. Tekst nie jest zapisywany ani logowany, a żądania AI są ograniczone do 30 na minutę z jednego adresu IP.
Podstawy
Adres bazowy:https://adeptwrite.com/api/v1
Format: żądania i odpowiedzi to JSON (Content-Type: application/json, UTF-8).
Uwierzytelnianie: na razie brak; żądania muszą pochodzić ze stron adeptwrite.com (to samo źródło). Klucze API pojawią się z planem Pro.
Prywatność: pole text nigdy nie jest zapisywane ani logowane; odpowiedzi mają nagłówek Cache-Control: no-store.
Wersjonowanie: ścieżka /v1/ nie zmieni się w sposób niezgodny wstecz; zmiany łamiące zgodność dostaną ścieżkę /v2/.
POST/api/v1/run
Wykonuje jedno zadanie AI na tekście i zwraca wynik jako zwykły tekst (bez wstępu i bez ogrodzeń Markdown).
Żądanie
Field
Type
Required
Notes
task
string
✓
Nazwa zadania; zob. lista zadań poniżej.
text
string
✓
Tekst wejściowy, od 1 do 6000 znaków.
lang
string
✓
Język wyniku: jeden z 56 kodów lokalizacji serwisu (en, id, pl, pt-pt, zh-hant…; tagi BCP 47, takie jak pt-BR, są mapowane) albo auto dla „tego samego języka co wejście”.
mode
string
—
Tryb dostępny dla danego narzędzia, np. Formal, Akademik, Ringkas, Poin-poin (nazwy trybów to indonezyjskie etykiety rejestru). Ignorowany dla zadań bez trybów.
options
object
—
Opcje zadania: from / to dla translate (dowolny obsługiwany język na dowolny inny; from może mieć wartość auto; sr-Cyrl prosi o serbski cyrylicą), platform (instagram / tiktok / linkedin) dla caption oraz opcjonalne opisane pola fields dla bio, coverletter i meta. Pozostałe klucze są ignorowane.
POST /api/v1/run HTTP/1.1
Content-Type: application/json
{
"task": "paraphrase",
"mode": "Formal",
"lang": "pl",
"text": "Dobre pisanie naprawdę ma znaczenie dla studentów.",
"options": {}
}
Odpowiedź
Status 200 z ok: true, wynikiem w output, modelem, który faktycznie odpowiedział, w model (inny, gdy zadziałał model zapasowy) i czasem przetwarzania w milisekundach. Pole truncated: true dodajemy, gdy odpowiedź osiągnęła limit długości lub czasu i została ucięta.
{
"ok": true,
"output": "Jakość pisania ma zasadnicze znaczenie dla studentów.",
"model": "@cf/qwen/qwen3-30b-a3b-fp8",
"ms": 812
}
Przykład: curl
curl -X POST https://adeptwrite.com/api/v1/run \
-H "Content-Type: application/json" \
-d '{"task":"grammar","lang":"pl","text":"Jutro idziemy do biblioteki i kupujemy ksiązki."}'
Przykład: 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: 'pl', 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
Wybiera 4–8 charakterystycznych fraz z tekstu, przeszukuje otwarte źródła w języku tekstu (Wikipedia, Wikisource, pełne teksty Internet Archive, Europe PMC, DOAJ, arXiv; dostawcę wyszukiwania w sieci tylko wtedy, gdy jest skonfigurowany i zażądano go) i ocenia zbieżność. Z serwera wychodzą tylko te krótkie frazy.
Żądanie
Field
Type
Required
Notes
text
string
✓
Co najmniej 30 słów, najwyżej 6000 znaków.
lang
string
✓
Kod lokalizacji serwisu lub auto.
options
object
—
web: true odpytuje także dostawcę wyszukiwania w sieci, jeśli operator go skonfigurował; webSearched w odpowiedzi mówi, czy faktycznie odpowiedział.
POST /api/v1/plagiarism HTTP/1.1
Content-Type: application/json
{ "text": "…co najmniej 30 słów…", "lang": "pl", "options": { "web": false } }
Odpowiedź
Status 200 z polami score (dopasowane słowa ÷ słowa, 0–1), matches dla każdego źródła z podświetlonymi passages (przesunięcia znaków w Twoim tekście), sourcesSearched (dokładnie te źródła, których odpowiedzi są w wyniku), sourcesSkipped z powodem oraz webSearched.
curl -X POST https://adeptwrite.com/api/v1/plagiarism \
-H "Content-Type: application/json" \
-d '{"lang":"pl","text":"…co najmniej 30 słów…"}'
GET/api/v1/health
Podaje, które usługi są włączone. Nie przyjmuje treści i nie wlicza się do limitu.
Odpowiedź
Status 200. Pole ai ma wartość false, gdy włączony jest wyłącznik awaryjny AI; plagiarism wymienia źródła, które checker może odpytać; aidetect opisuje analizę głęboką detektora AI po stronie serwera, która nie jest jeszcze wdrożona (POST /api/v1/aidetect odpowiada 503 disabled; detektor w serwisie działa w Twojej przeglądarce).
Poprawa gramatyki, interpunkcji i pisowni w języku tekstu.
tone
Zmiana stylu; tryby: Formal, Kantor (służbowy), Santai (swobodny).
rewrite
Poprawa sztywnych lub niezgrabnych zdań; tryby: Standar, Formal.
resize
Skracanie lub rozwijanie zdań; tryby: Ringkas (skróć), Panjangkan (rozwiń).
essay
Akapity lub wypracowanie z punktów; tryby: Akademik, Kreatif, Panjangkan (rozbudowany).
summarize
Streszczenie; tryby: Poin-poin (punkty), Paragraf (akapit), Satu kalimat (jedno zdanie).
translate
Tłumaczenie między dowolnymi dwoma obsługiwanymi językami; options.from (lub auto) i options.to; tryby: Alami (naturalny, domyślny), Formal, Santai (swobodny).
thesis
Pomysły na tematy prac dyplomowych i plan rozdziałów.
abstract
Uporządkowany abstrakt z opisu badań.
caption
Opisy do postów w mediach społecznościowych; options.platform: instagram, tiktok, linkedin.
email
Maile i pisma; tryby: Lamaran kerja (aplikacja o pracę), Surat resmi (pismo formalne), Follow-up (przypomnienie).
headline
Tytuły artykułów i nagłówki; tryby: Kreatif (kreatywne), Ringkas (krótkie).
Najwyżej 6000 znaków na żądanie (powyżej: 413 too_long).
Na adres IP
30 żądań na minutę.
Globalnie
100 żądań na minutę w całej usłudze oraz dzienny limit funkcji AI.
Plagiat
5 sprawdzeń na minutę na adres IP i 60 na minutę w całej usłudze; minimum 30 słów.
Wynik
Budżet długości na zadanie, nigdy więcej niż 2048 tokenów; ucięta odpowiedź ma truncated: true.
Model
Dobierany do języka: angielski i indonezyjski działają na @cf/aisingapore/gemma-sea-lion-v4-27b-it, każdy inny język, w tym polski, na @cf/qwen/qwen3-30b-a3b-fp8. Gdy model jest zajęty, ma limit, działa wolno lub zawiedzie, żądanie przechodzi do następnego modelu w łańcuchu (Qwen3-30B, potem @cf/google/gemma-4-26b-a4b-it, potem @cf/meta/llama-3.3-70b-instruct-fp8-fast). Pole model zawsze podaje model, który odpowiedział.
Kody błędów
Status
Kod
Kiedy występuje
400
invalid_request
Niepoprawny JSON, brak wymaganego pola albo nieznane task lub lang.
413
too_long
text przekracza 6000 znaków.
403
forbidden
Żądanie nie pochodziło ze strony adeptwrite.com.
429
rate_limited
Przekroczono limit na minutę dla adresu IP lub globalny. Poczekaj tyle sekund, ile podaje Retry-After.
429
quota_exceeded
Dzienny limit funkcji AI został wyczerpany. Spróbuj następnego dnia (UTC).
502
upstream
Żaden model z łańcucha nie odpowiedział w czasie.
502
empty_output
Modele odpowiedziały, ale wynik jest pusty.
503
disabled
Operator tymczasowo wyłączył usługę albo (dla /api/v1/aidetect) nie jest jeszcze wdrożona.
Format błędów
Każdy błąd wraca jako JSON z odpowiednim kodem statusu HTTP i zawsze w tym samym kształcie:
{ "ok": false, "error": { "code": "rate_limited", "message": "Too many requests. Please try again shortly." } }
Najpierw sprawdź ok, potem odczytaj error.code do obsługi w kodzie; error.message można bezpiecznie pokazać użytkownikom.
Zalecane praktyki
Wysyłaj tekst we fragmentach (na przykład akapit po akapicie), zamiast jednego długiego dokumentu; wyniki wracają szybciej i łatwiej je sprawdzić.
Na odpowiedź 429 reaguj wykładniczym wydłużaniem przerw, a nie natychmiastowym ponawianiem.
Nie wysyłaj danych osobowych ani poufnych, których nie musisz wysyłać: choć ich nie zapisujemy, obowiązuje zasada minimalizacji danych.
Wynik AI może być błędny; traktuj go jako propozycję do sprawdzenia, a nie ostateczną prawdę.
Najczęstsze pytania
Czy mogę wywoływać API z własnej aplikacji lub domeny?
Jeszcze nie. Worker nie wysyła obecnie nagłówków CORS i obsługuje tylko strony adeptwrite.com. Dostęp zewnętrzny z kluczami API jest planowany razem z planem Pro; dokumentacja zostanie zaktualizowana, gdy będzie dostępny.
Czy tekst wysłany do API jest zapisywany?
Nie. Tekst jest przekazywany do modelu, by wytworzyć odpowiedź, a potem odrzucany. Logi zawierają tylko metadane (kod statusu, zadanie, czas). Wszystkie szczegóły są w polityce prywatności.
Dlaczego wynik to zwykły tekst, a nie ustrukturyzowany JSON?
Każde zadanie daje jeden gotowy do użycia tekst bez wstępu i ogrodzeń Markdown, który można od razu pokazać w edytorze. Dodatkowa struktura (na przykład lista zmian) jest planowana w późniejszej wersji bez zmiany v1.
Ile kosztuje API?
Z adeptwrite.com jest darmowe, z limitem 30 żądań AI na minutę z jednego adresu IP. Ceny dostępu zewnętrznego ogłosimy razem z planem Pro; wcześniej nic nie jest pobierane.
Który model odpowiada na moje żądanie?
Zależy od języka: angielski i indonezyjski trafiają do SEA-LION, pozostałe języki, w tym polski, do Qwen3-30B. Jeśli ten model jest zajęty lub zawiedzie, odpowiada następny w łańcuchu zapasowym, a pole model w odpowiedzi podaje ten, który odpowiedział.