Paràfrasi, correcció gramatical, resums, traducció i detecció de plagi en 56 llengües. Una API REST senzilla, servida des de la xarxa perifèrica de Cloudflare.
Mateix origen
Ara mateix l’API només atén peticions de la mateixa adeptwrite.com (sense capçaleres CORS). L’accés extern amb claus d’API està previst juntament amb el pla Pro. Publiquem aquesta documentació amb antelació perquè el contracte sigui obert i us hi pugueu preparar.
Resum
L’API v1 d’AdeptWrite té tres punts finals actius. POST /api/v1/run rep un JSON amb task, mode, lang i text (fins a 6.000 caràcters) i retorna text pla generat per un model de Cloudflare Workers AI triat segons la llengua; POST /api/v1/plagiarism compara un text amb fonts obertes i en llista totes les consultades; GET /api/v1/health retorna l’estat del servei. El text no es desa ni queda als registres, i les peticions d’IA tenen un límit de 30 per minut i per IP.
Conceptes bàsics
URL base:https://adeptwrite.com/api/v1
Format: les peticions i les respostes són JSON (Content-Type: application/json, UTF-8).
Autenticació: encara no n’hi ha; les peticions han de venir de pàgines d’adeptwrite.com (mateix origen). Les claus d’API arribaran amb el pla Pro.
Privadesa: el camp text no es desa ni queda mai als registres; les respostes duen Cache-Control: no-store.
Versions: la ruta /v1/ no canviarà de manera incompatible; els canvis que trenquin la compatibilitat faran servir /v2/.
POST/api/v1/run
Executa una tasca d’IA sobre un text i retorna el resultat com a text pla (sense preàmbul ni blocs de codi Markdown).
Sol·licitud
Field
Type
Required
Notes
task
string
✓
Nom de la tasca; vegeu la llista de tasques més avall.
text
string
✓
Text d’entrada, d’1 a 6.000 caràcters.
lang
string
✓
Llengua del resultat: un dels 56 codis de llengua del lloc (ca, en, es, pt-pt, zh-hant…; les etiquetes BCP 47 com pt-BR s’hi assignen) o auto per a «la mateixa llengua que l’entrada».
mode
string
—
Un mode disponible per a l’eina, com ara Formal, Akademik (acadèmic), Ringkas (escurçar) o Poin-poin (punts); els noms de mode són les etiquetes del registre en indonesi. S’ignora en les tasques sense modes.
options
object
—
Opcions pròpies de la tasca: from / to per a translate (qualsevol llengua admesa cap a qualsevol altra; from pot ser auto; sr-Cyrl demana serbi en ciríl·lic), platform (instagram / tiktok / linkedin) per a caption i fields etiquetats opcionals per a bio, coverletter i meta. Les altres claus s’ignoren.
POST /api/v1/run HTTP/1.1
Content-Type: application/json
{
"task": "paraphrase",
"mode": "Formal",
"lang": "ca",
"text": "Escriure bé és molt important per als estudiants.",
"options": {}
}
Resposta
Estat 200 amb ok: true, el resultat a output, el model que ha respost de debò a model (és diferent quan n’ha intervingut un de reserva) i el temps de processament en mil·lisegons. S’hi afegeix truncated: true quan la resposta ha arribat al límit de longitud o de temps i s’ha tallat.
{
"ok": true,
"output": "Redactar amb correcció és essencial per als estudiants.",
"model": "@cf/qwen/qwen3-30b-a3b-fp8",
"ms": 812
}
Exemple: curl
curl -X POST https://adeptwrite.com/api/v1/run \
-H "Content-Type: application/json" \
-d '{"task":"grammar","lang":"ca","text":"Tinc que anar a la biblioteca demà."}'
Exemple: 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: 'ca', 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
Tria de 4 a 8 frases distintives del text, les cerca en fonts obertes en la llengua del text (Viquipèdia, Wikisource, text complet d’Internet Archive, Europe PMC, DOAJ, arXiv; un proveïdor de cerca web només si està configurat i es demana) i en puntua la coincidència. Només aquestes frases curtes surten del servidor.
Sol·licitud
Field
Type
Required
Notes
text
string
✓
Almenys 30 paraules i com a màxim 6.000 caràcters.
lang
string
✓
Un codi de llengua del lloc o auto.
options
object
—
web: true consulta també el proveïdor de cerca web quan l’operador n’ha configurat un; webSearched a la resposta indica si ha respost de debò.
Estat 200 amb score (paraules coincidents ÷ paraules, de 0 a 1), matches per font amb passages destacats (desplaçaments de caràcters dins del vostre text), sourcesSearched (exactament les fonts les respostes de les quals són al resultat), sourcesSkipped amb el motiu, i webSearched.
Indica quins serveis són actius. No té cos i no compta per a la quota.
Resposta
Estat 200. ai és fals mentre l’interruptor d’emergència de la IA és activat; plagiarism llista les fonts que el detector pot consultar; aidetect descriu l’anàlisi profunda al servidor del detector d’IA, que encara no està desplegada (POST /api/v1/aidetect respon 503 disabled; el detector del lloc s’executa al vostre navegador).
Com a màxim 6.000 caràcters per petició (413 too_long per sobre d’aquesta xifra).
Per adreça IP
30 peticions per minut.
Global
100 peticions per minut en tot el servei, a més d’un topall diari per a les funcions d’IA.
Plagi
5 comprovacions per minut i per IP i 60 per minut en tot el servei; mínim de 30 paraules.
Sortida
Un pressupost de longitud per tasca, mai de més de 2.048 tokens; una resposta tallada duu truncated: true.
Model
Es tria segons la llengua: l’anglès i l’indonesi funcionen amb @cf/aisingapore/gemma-sea-lion-v4-27b-it i totes les altres llengües, català inclòs, amb @cf/qwen/qwen3-30b-a3b-fp8. Quan un model està ocupat, limitat, lent o falla, la petició passa al següent model de la cadena (Qwen3-30B, després @cf/google/gemma-4-26b-a4b-it i després @cf/meta/llama-3.3-70b-instruct-fp8-fast). El camp model sempre indica el model que ha respost.
Codis d'error
Estat
Codi
Quan passa
400
invalid_request
JSON no vàlid, falta un camp obligatori, o task o lang desconeguts.
413
too_long
text supera els 6.000 caràcters.
403
forbidden
La petició no venia d’una pàgina d’adeptwrite.com.
429
rate_limited
S’ha superat el límit per minut per IP o el global. Espereu el nombre de segons de Retry-After.
429
quota_exceeded
S’ha esgotat el topall diari de les funcions d’IA. Torneu-ho a provar l’endemà (UTC).
502
upstream
Cap model de la cadena no ha respost a temps.
502
empty_output
Els models han respost, però amb un resultat buit.
503
disabled
L’operador ha desactivat el servei temporalment o (per a /api/v1/aidetect) encara no està desplegat.
Format dels errors
Tots els errors es retornen com a JSON, amb el codi d’estat HTTP corresponent i la mateixa forma:
{ "ok": false, "error": { "code": "rate_limited", "message": "Too many requests. Please try again shortly." } }
Comproveu primer ok i després llegiu error.code per al tractament programàtic; error.message es pot mostrar sense risc als usuaris.
Bones pràctiques
Envieu el text per parts (per exemple, per paràgrafs) en lloc d’un document llarg; els resultats arriben abans i són més fàcils de revisar.
Davant d’un 429, espereu amb un retard creixent (exponential back-off) en lloc de reintentar de seguida.
No envieu dades personals ni confidencials que no calguin; tot i que no les desem, el principi de minimització de dades continua valent.
El text d’IA pot ser erroni; presenteu-lo com un suggeriment que cal revisar, no com una veritat definitiva.
Preguntes freqüents
Puc cridar l’API des de la meva aplicació o el meu domini?
Encara no. Ara mateix el Worker no envia capçaleres CORS i només atén les pàgines d’adeptwrite.com. L’accés extern amb claus d’API està previst juntament amb el pla Pro; aquesta documentació s’actualitzarà quan estigui disponible.
El text que s’envia a l’API es desa?
No. El text es passa al model per generar la resposta i després es descarta. Els registres només contenen metadades (codi d’estat, tasca, durada). Els detalls són a la política de privadesa.
Per què la sortida és text pla i no JSON estructurat?
Cada tasca produeix un sol text llest per usar, sense preàmbul ni blocs Markdown, perquè es pugui mostrar directament a l’editor. Està previst afegir més estructura (per exemple, una llista de canvis) en una versió posterior sense modificar la v1.
Quant costa l’API?
Des d’adeptwrite.com és gratuïta, amb un límit de 30 peticions d’IA per minut i per IP. El preu de l’accés extern s’anunciarà juntament amb el pla Pro; abans no es cobra res.
Quin model respon la meva petició?
Depèn de la llengua: l’anglès i l’indonesi van a SEA-LION i les altres llengües, català inclòs, a Qwen3-30B. Si aquest model està ocupat o falla, respon el següent de la cadena de reserva, i el camp model de la resposta indica quin ho ha fet.