Documentația API

Parafrazare, corectare gramaticală și ortografică, rezumat, traducere și verificare de plagiat în 56 de limbi, pentru aplicațiile tale. REST simplu, servit de la marginea rețelei Cloudflare.

Same-origin
În prezent API-ul răspunde doar cererilor venite chiar de pe adeptwrite.com (fără antete CORS). Accesul extern cu chei API este planificat odată cu planul Pro. Documentația este publicată din timp, ca să fie contractul public și să te poți pregăti.
Pe scurt

API-ul AdeptWrite v1 are trei endpoint-uri active. POST /api/v1/run primește JSON cu task, mode, lang și text (cel mult 6.000 de caractere) și returnează text simplu de la un model Cloudflare Workers AI ales după limbă; POST /api/v1/plagiarism compară un text cu surse deschise și enumeră fiecare sursă căutată; GET /api/v1/health returnează starea serviciului. Textul nu este niciodată stocat sau înregistrat, iar cererile AI sunt limitate la 30 pe minut pentru fiecare IP.

Noțiuni de bază

  • URL de bază: https://adeptwrite.com/api/v1
  • Format: cererile și răspunsurile sunt JSON (Content-Type: application/json, UTF-8).
  • Autentificare: deocamdată nu există; cererile trebuie să vină de pe paginile adeptwrite.com (same-origin). Cheile API vin odată cu Pro.
  • Confidențialitate: câmpul text nu este stocat și nu este înregistrat; răspunsurile poartă Cache-Control: no-store.
  • Versionare: calea /v1/ nu se va schimba în mod incompatibil; modificările majore vor folosi /v2/.

POST/api/v1/run

Rulează o sarcină AI pe un text și returnează rezultatul ca text simplu (fără introducere, fără blocuri Markdown).

Cerere

FieldTypeRequiredNotes
taskstring✓Numele sarcinii; vezi lista de sarcini de mai jos.
textstring✓Textul de intrare, 1–6.000 de caractere.
langstring✓Limba rezultatului: unul dintre cele 56 de coduri de limbă ale site-ului (ro, en, id, pt-pt, zh-hant și așa mai departe; etichetele BCP 47, precum pt-BR, sunt asociate automat) sau auto pentru „aceeași limbă ca textul de intrare”.
modestring—Un mod disponibil pentru instrumentul respectiv, de exemplu Formal, Akademik, Ringkas, Poin-poin (numele modurilor sunt etichetele indoneziene din registru). Ignorat pentru sarcinile fără moduri.
optionsobject—Opțiuni specifice sarcinii: from / to pentru translate (din orice limbă acceptată în orice alta; from poate fi auto; sr-Cyrl cere sârba în chirilică), platform (instagram / tiktok / linkedin) pentru caption și fields etichetate, opționale, pentru bio, coverletter și meta. Celelalte chei sunt ignorate.
POST /api/v1/run HTTP/1.1
Content-Type: application/json

{
  "task": "paraphrase",
  "mode": "Formal",
  "lang": "ro",
  "text": "Calitatea textului este foarte importantă pentru studenți.",
  "options": {}
}

Răspuns

Stare 200 cu ok: true, rezultatul în output, modelul care a răspuns efectiv în model (diferă când a intervenit un model de rezervă) și timpul de procesare în milisecunde. Se adaugă truncated: true când răspunsul a atins limita de lungime sau de timp și a fost tăiat.

{
  "ok": true,
  "output": "Calitatea redactării este esențială pentru studenți.",
  "model": "@cf/qwen/qwen3-30b-a3b-fp8",
  "ms": 812
}

Exemplu: curl

curl -X POST https://adeptwrite.com/api/v1/run \
  -H "Content-Type: application/json" \
  -d '{"task":"grammar","lang":"ro","text":"Ei sa dus la bibliotecă mâine."}'

Exemplu: 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: 'ro', 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

Alege 4–8 expresii distinctive din text, le caută în surse deschise în limba textului (Wikipedia, Wikisource, textul integral Internet Archive, Europe PMC, DOAJ, arXiv; un furnizor de căutare web doar dacă este configurat și solicitat) și calculează suprapunerea. Doar acele expresii scurte ies de pe server.

Cerere

FieldTypeRequiredNotes
textstring✓Cel puțin 30 de cuvinte, cel mult 6.000 de caractere.
langstring✓Un cod de limbă al site-ului sau auto.
optionsobject—web: true interoghează și furnizorul de căutare web, când operatorul a configurat unul; webSearched din răspuns arată dacă a răspuns cu adevărat.
POST /api/v1/plagiarism HTTP/1.1
Content-Type: application/json

{ "text": "…cel puțin 30 de cuvinte…", "lang": "ro", "options": { "web": false } }

Răspuns

Stare 200 cu score (cuvinte potrivite ÷ cuvinte, 0–1), matches pe surse, cu passages evidențiate (poziții de caractere în textul tău), sourcesSearched (exact sursele ale căror răspunsuri sunt în rezultat), sourcesSkipped cu motivul și webSearched.

{
  "ok": true,
  "score": 0.42,
  "words": 52,
  "matchedWords": 22,
  "matches": [{ "source": "wikipedia", "title": "…", "url": "https://ro.wikipedia.org/wiki/…",
                "matchedWords": 22, "passages": [{ "start": 0, "end": 131, "text": "…" }] }],
  "sourcesSearched": ["wikipedia", "wikisource", "internet-archive-fts", "europepmc", "doaj"],
  "sourcesSkipped": [],
  "webSearched": false,
  "ms": 2310
}

Exemplu: curl

curl -X POST https://adeptwrite.com/api/v1/plagiarism \
  -H "Content-Type: application/json" \
  -d '{"lang":"ro","text":"…cel puțin 30 de cuvinte…"}'

GET/api/v1/health

Arată ce servicii sunt pornite. Nu primește corp de cerere și nu se numără în cotă.

Răspuns

Stare 200. ai este false cât timp comutatorul de oprire a AI este activ; plagiarism enumeră sursele pe care verificatorul le poate interoga; aidetect descrie analiza aprofundată de pe server a detectorului AI, care nu este încă lansată (POST /api/v1/aidetect răspunde 503 disabled; detectorul de pe site rulează în browserul tău).

{
  "ok": true,
  "ai": true,
  "plagiarism": { "enabled": true, "sources": ["wikipedia", "wikisource", "internet-archive-fts", "europepmc", "doaj", "arxiv"], "web": false },
  "aidetect": { "enabled": false, "judge": false }
}

Exemplu: curl

curl https://adeptwrite.com/api/v1/health

Task list

taskWhat it does
paraphraseParafrazare; moduri: Standar, Formal, Santai, Akademik, Kreatif, Ringkas, Panjangkan.
grammarCorectare de gramatică și ortografie (pentru română, ortografia urmează DOOM3).
toneSchimbarea tonului; moduri: Formal, Kantor (profesional), Santai (informal).
rewriteRepară frazele rigide sau stângace; moduri: Standar, Formal.
resizeScurtează sau extinde frazele; moduri: Ringkas, Panjangkan.
essayConstruiește paragrafe sau un eseu din idei pe puncte; moduri: Akademik, Kreatif, Panjangkan.
summarizeRezumat; moduri: Poin-poin (pe puncte), Paragraf, Satu kalimat (o singură frază).
translateTraducere între oricare două limbi acceptate; options.from (sau auto) și options.to; moduri: Alami (natural, implicit), Formal, Santai (informal).
thesisIdei de titluri pentru lucrarea de licență și structura pe capitole.
abstractAbstract structurat pornind de la un rezumat al cercetării.
captionDescrieri pentru postări; options.platform: instagram, tiktok, linkedin.
emailE-mailuri și scrisori; moduri: Lamaran kerja (aplicare la job), Surat resmi (scrisoare oficială), Follow-up.
headlineTitluri de articole; moduri: Kreatif, Ringkas.
productDescrieri de produs; moduri: Marketplace, Toko online (magazin online).
synonymListă de sinonime pentru un cuvânt sau o expresie.
humanizeFace un text rigid sau generic să sune mai natural; moduri: Alami, Pribadi (personal), Profesional.
metaTrei perechi de titlu și meta descriere; moduri: Artikel, Produk, Halaman (orice pagină web).
hashtagUn rând de hashtag-uri; moduri: Instagram, TikTok, LinkedIn, X.
bioTrei descrieri de profil; moduri: Instagram, LinkedIn, X, TikTok.
outlinePlan numerotat cu subpuncte; moduri: Artikel, Esai (eseu), Skripsi (lucrare de licență), Presentasi (prezentare).
sloganZece idei de sloganuri; moduri: Merek (brand), Kampanye (campanie), Produk.
paragraphUn paragraf dintr-un subiect; moduri: Pembuka (introducere), Isi (cuprins), Penutup (încheiere).
coverletterCiornă de scrisoare de intenție; moduri: Fresh graduate (proaspăt absolvent), Berpengalaman (cu experiență), Magang (internship).
poemPoezii scurte; moduri: Bebas (vers liber), Berima (cu rimă), Akrostik, Haiku.

Limite

Lungimea textului
Cel mult 6.000 de caractere per cerere (413 too_long peste această limită).
Pe adresă IP
30 de cereri pe minut.
Global
100 de cereri pe minut pentru întregul serviciu, plus o limită zilnică pentru funcțiile AI.
Plagiat
5 verificări pe minut pentru fiecare IP și 60 pe minut pentru întregul serviciu; minimum 30 de cuvinte.
Rezultat
O limită de lungime pe sarcină, niciodată peste 2.048 de tokeni; un răspuns tăiat poartă truncated: true.
Model
Ales după limbă: engleza și indoneziana rulează pe @cf/aisingapore/gemma-sea-lion-v4-27b-it, toate celelalte limbi pe @cf/qwen/qwen3-30b-a3b-fp8. Când un model este ocupat, limitat, lent sau eșuează, cererea trece la următorul model din lanț (Qwen3-30B, apoi @cf/google/gemma-4-26b-a4b-it, apoi @cf/meta/llama-3.3-70b-instruct-fp8-fast). Câmpul model numește întotdeauna modelul care a răspuns.

Coduri de eroare

StareCodCând apare
400invalid_requestJSON invalid, un câmp obligatoriu lipsă sau un task ori lang necunoscut.
413too_longtext depășește 6.000 de caractere.
403forbiddenCererea nu a venit de pe o pagină adeptwrite.com.
429rate_limitedS-a depășit limita pe minut pe IP sau cea globală. Așteaptă numărul de secunde din Retry-After.
429quota_exceededLimita zilnică pentru funcțiile AI a fost epuizată. Încearcă din nou a doua zi (UTC).
502upstreamNiciun model din lanț nu a răspuns la timp.
502empty_outputModelele au răspuns, dar cu un rezultat gol.
503disabledServiciul a fost oprit temporar de operator sau (pentru /api/v1/aidetect) nu este încă lansat.

Formatul erorilor

Fiecare eroare este returnată ca JSON, cu codul de stare HTTP corespunzător și aceeași formă:

{ "ok": false, "error": { "code": "rate_limited", "message": "Too many requests. Please try again shortly." } }

Verifică mai întâi ok, apoi citește error.code pentru tratarea programatică; error.message poate fi afișat în siguranță utilizatorilor.

Practici recomandate

  • Trimite textul pe bucăți (de exemplu pe paragrafe), nu un document lung dintr-o dată; rezultatele vin mai repede și sunt mai ușor de verificat.
  • Tratează 429 cu reîncercări din ce în ce mai rare (exponential back-off), nu cu reîncercări imediate.
  • Nu trimite date personale sau confidențiale de care nu ai nevoie, chiar dacă nu le stocăm; principiul reducerii la minimum a datelor se aplică în continuare.
  • Rezultatul AI poate fi greșit; prezintă-l ca pe o sugestie de verificat, nu ca pe un adevăr final.

Întrebări frecvente

Pot apela API-ul din propria aplicație sau de pe propriul domeniu?

Încă nu. În prezent Worker-ul nu trimite antete CORS și servește doar paginile adeptwrite.com. Accesul extern cu chei API este planificat odată cu planul Pro; această documentație va fi actualizată când devine disponibil.

Este stocat textul trimis către API?

Nu. Textul este transmis modelului ca să producă răspunsul, apoi este aruncat. Jurnalele conțin doar metadate (cod de stare, sarcină, durată). Detaliile sunt în politica de confidențialitate.

De ce rezultatul este text simplu și nu JSON structurat?

Fiecare sarcină produce un singur text gata de folosit, fără introducere și fără blocuri Markdown, ca să poată fi afișat direct în editor. O structură suplimentară (de exemplu o listă de modificări) este planificată pentru o versiune ulterioară, fără a schimba v1.

Cât costă API-ul?

De pe adeptwrite.com este gratuit, cu limita de 30 de cereri AI pe minut pentru fiecare IP. Prețurile pentru accesul extern vor fi anunțate odată cu planul Pro; până atunci nu se percepe nimic.

Ce model răspunde cererii mele?

Depinde de limbă: engleza și indoneziana merg la SEA-LION, celelalte limbi, inclusiv româna, la Qwen3-30B. Dacă acel model este ocupat sau eșuează, răspunde următorul model din lanțul de rezervă, iar câmpul model din răspuns îl numește pe cel care a răspuns.