Reformulation, correction grammaticale, résumés, traduction et détection de plagiat en 56 langues. Une API REST simple, servie depuis le réseau périphérique de Cloudflare.
Même origine
L’API ne répond pour l’instant qu’aux requêtes émises par adeptwrite.com lui-même (aucun en-tête CORS). Un accès externe par clés d’API est prévu avec le forfait Pro. Cette documentation est publiée en avance pour que le contrat soit ouvert et que vous puissiez vous y préparer.
En bref
L’API v1 d’AdeptWrite comporte trois points d’accès actifs. POST /api/v1/run prend un JSON avec task, mode, lang et text (6 000 caractères au maximum) et renvoie un texte brut produit par un modèle Cloudflare Workers AI choisi selon la langue ; POST /api/v1/plagiarism compare un texte à des sources ouvertes et liste chaque source interrogée ; GET /api/v1/health renvoie l’état du service. Les textes ne sont ni enregistrés ni journalisés, et les requêtes d’IA sont limitées à 30 par minute et par adresse IP.
L’essentiel
URL de base :https://adeptwrite.com/api/v1
Format : requêtes et réponses en JSON (Content-Type: application/json, UTF-8).
Authentification : aucune pour l’instant ; les requêtes doivent provenir de pages d’adeptwrite.com (même origine). Les clés d’API arriveront avec le forfait Pro.
Confidentialité : le champ text n’est jamais enregistré ni journalisé ; les réponses portent l’en-tête Cache-Control: no-store.
Versions : le chemin /v1/ ne changera pas de façon incompatible ; les changements majeurs passeront par /v2/.
POST/api/v1/run
Exécute une tâche d’IA sur un texte et renvoie le résultat en texte brut (sans préambule, sans bloc de code Markdown).
Requête
Field
Type
Required
Notes
task
string
✓
Nom de la tâche ; voir la liste des tâches ci-dessous.
text
string
✓
Texte à traiter, de 1 à 6 000 caractères.
lang
string
✓
Langue du résultat : l’un des 56 codes de langue du site (fr, en, id, ja, pt-pt, zh-hant… ; les étiquettes BCP 47 comme pt-BR sont converties) ou auto pour « la même langue que le texte saisi ».
mode
string
—
Un mode disponible pour cet outil, par exemple Formal, Akademik, Ringkas, Poin-poin (les noms de modes sont les libellés indonésiens du registre). Ignoré pour les tâches sans mode.
options
object
—
Options propres à la tâche : from / to pour translate (n’importe quelle langue prise en charge vers n’importe quelle autre ; from peut valoir auto ; sr-Cyrl demande du serbe en cyrillique), platform (instagram / tiktok / linkedin) pour caption, et des fields étiquetés facultatifs pour bio, coverletter et meta. Les autres clés sont ignorées.
POST /api/v1/run HTTP/1.1
Content-Type: application/json
{
"task": "paraphrase",
"mode": "Formal",
"lang": "fr",
"text": "Bien écrire compte beaucoup pour les étudiants.",
"options": {}
}
Réponse
Statut 200 avec ok: true, le résultat dans output, le modèle qui a réellement répondu dans model (il diffère quand un modèle de secours a pris le relais) et la durée de traitement en millisecondes. truncated: true s’ajoute lorsque la réponse a atteint sa limite de longueur ou le délai maximal et a été coupée.
{
"ok": true,
"output": "La qualité de l’écriture est essentielle pour les étudiants.",
"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":"fr","text":"Ils sont aller a la bibliotèque demain."}'
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: 'fr', 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
Choisit 4 à 8 expressions caractéristiques du texte, les recherche dans des sources ouvertes dans la langue du texte (Wikipédia, Wikisource, texte intégral d’Internet Archive, Europe PMC, DOAJ, arXiv ; un moteur de recherche web seulement s’il est configuré et demandé) et note le recouvrement. Seules ces courtes expressions quittent le serveur.
Requête
Field
Type
Required
Notes
text
string
✓
Au moins 30 mots, au plus 6 000 caractères.
lang
string
✓
Un code de langue du site ou auto.
options
object
—
web: true interroge aussi le moteur de recherche web lorsque l’exploitant en a configuré un ; webSearched dans la réponse indique s’il a réellement répondu.
POST /api/v1/plagiarism HTTP/1.1
Content-Type: application/json
{ "text": "…au moins 30 mots…", "lang": "fr", "options": { "web": false } }
Réponse
Statut 200 avec score (mots concordants ÷ mots, de 0 à 1), matches par source avec des passages surlignés (positions en caractères dans votre texte), sourcesSearched (exactement les sources dont les réponses figurent dans le résultat), sourcesSkipped avec un motif, et webSearched.
curl -X POST https://adeptwrite.com/api/v1/plagiarism \
-H "Content-Type: application/json" \
-d '{"lang":"fr","text":"…au moins 30 mots…"}'
GET/api/v1/health
Indique quels services sont activés. Ne prend aucun corps de requête et ne compte pas dans le quota.
Réponse
Statut 200. ai vaut false tant que l’interrupteur d’arrêt de l’IA est actif ; plagiarism liste les sources que le détecteur peut interroger ; aidetect décrit l’analyse approfondie côté serveur du détecteur IA, qui n’est pas encore déployée (POST /api/v1/aidetect répond 503 disabled ; le détecteur du site s’exécute dans votre navigateur).
Correction de l’orthographe et de la grammaire (orthographe traditionnelle ou rectifiée de 1990 admise en français).
tone
Changement de ton ; modes : Formal, Kantor (professionnel), Santai (décontracté).
rewrite
Correction des phrases lourdes ou maladroites ; modes : Standar, Formal.
resize
Raccourcir ou allonger des phrases ; modes : Ringkas (raccourcir), Panjangkan (allonger).
essay
Construction de paragraphes ou d’une dissertation à partir de notes ; modes : Akademik, Kreatif, Panjangkan.
summarize
Résumé ; modes : Poin-poin (liste à puces), Paragraf (paragraphe), Satu kalimat (une phrase).
translate
Traduction entre deux langues prises en charge ; options.from (ou auto) et options.to ; modes : Alami (naturel, par défaut), Formal, Santai (décontracté).
thesis
Idées de titres de mémoire et plan par chapitres.
abstract
Abstract structuré à partir d’un résumé de recherche.
caption
Légendes pour les réseaux sociaux ; options.platform : instagram, tiktok, linkedin.
email
Mails et lettres ; modes : Lamaran kerja (candidature), Surat resmi (lettre formelle), Follow-up (relance).
headline
Titres d’articles et accroches ; modes : Kreatif, Ringkas.
product
Descriptions de produits ; modes : Marketplace, Toko online (boutique en ligne).
synonym
Liste de synonymes pour un mot ou une expression.
humanize
Rendre plus naturel un texte raide ou générique ; modes : Alami (naturel), Pribadi (personnel), Profesional.
meta
Trois couples titre et meta description ; modes : Artikel, Produk, Halaman (toute page web).
hashtag
Une ligne de hashtags ; modes : Instagram, TikTok, LinkedIn, X.
bio
Trois bios de profil ; modes : Instagram, LinkedIn, X, TikTok.
outline
Plan numéroté avec sous-points ; modes : Artikel (article), Esai (dissertation), Skripsi (mémoire), Presentasi (exposé).
slogan
Dix idées de slogans ; modes : Merek (marque), Kampanye (campagne), Produk (produit).
paragraph
Un paragraphe à partir d’un sujet ; modes : Pembuka (introduction), Isi (développement), Penutup (conclusion).
coverletter
Brouillon de lettre de motivation ; modes : Fresh graduate (jeune diplômé), Berpengalaman (expérimenté), Magang (stage).
6 000 caractères au maximum par requête (413 too_long au-delà).
Par adresse IP
30 requêtes par minute.
Global
100 requêtes par minute pour l’ensemble du service, plus un plafond quotidien pour les fonctions d’IA.
Plagiat
5 analyses par minute et par adresse IP et 60 par minute pour l’ensemble du service ; 30 mots au minimum.
Sortie
Un budget de longueur par tâche, jamais plus de 2 048 jetons ; une réponse coupée porte truncated: true.
Modèle
Choisi selon la langue : l’anglais et l’indonésien passent par @cf/aisingapore/gemma-sea-lion-v4-27b-it, toutes les autres langues, dont le français, par @cf/qwen/qwen3-30b-a3b-fp8. Lorsqu’un modèle est occupé, limité, lent ou en échec, la requête passe au modèle suivant de la chaîne (Qwen3-30B, puis @cf/google/gemma-4-26b-a4b-it, puis @cf/meta/llama-3.3-70b-instruct-fp8-fast). Le champ model nomme toujours le modèle qui a répondu.
Codes d’erreur
Statut
Code
Quand cela se produit
400
invalid_request
JSON invalide, champ obligatoire manquant, ou task ou lang inconnu.
413
too_long
text dépasse 6 000 caractères.
403
forbidden
La requête ne provient pas d’une page d’adeptwrite.com.
429
rate_limited
La limite par minute, par adresse IP ou globale, a été dépassée. Attendez le nombre de secondes indiqué dans Retry-After.
429
quota_exceeded
Le plafond quotidien des fonctions d’IA est atteint. Réessayez le lendemain (UTC).
502
upstream
Aucun modèle de la chaîne n’a répondu à temps.
502
empty_output
Les modèles ont répondu, mais avec un résultat vide.
503
disabled
Le service a été coupé temporairement par l’exploitant, ou (pour /api/v1/aidetect) n’est pas encore déployé.
Format des erreurs
Chaque erreur est renvoyée en JSON avec le code de statut HTTP correspondant et la même structure :
{ "ok": false, "error": { "code": "rate_limited", "message": "Too many requests. Please try again shortly." } }
Vérifiez d’abord ok, puis lisez error.code pour le traitement automatique ; error.message peut être affiché sans risque aux utilisateurs.
Bonnes pratiques
Envoyez le texte par morceaux (par exemple par paragraphe) plutôt qu’en un seul long document : les résultats reviennent plus vite et se relisent plus facilement.
Traitez les réponses 429 par un délai exponentiel, non par des nouvelles tentatives immédiates.
N’envoyez pas de données personnelles ou confidentielles dont vous n’avez pas besoin : même si nous ne les enregistrons pas, la minimisation des données reste de mise.
Les résultats de l’IA peuvent être faux : présentez-les comme une suggestion à relire, jamais comme une vérité définitive.
Questions fréquentes
Puis-je appeler l’API depuis ma propre application ou mon propre domaine ?
Pas encore. Le Worker n’envoie aucun en-tête CORS et ne répond qu’aux pages d’adeptwrite.com. Un accès externe par clés d’API est prévu avec le forfait Pro ; cette documentation sera mise à jour dès qu’il sera disponible.
Le texte envoyé à l’API est-il enregistré ?
Non. Le texte est transmis au modèle pour produire la réponse, puis jeté. Les journaux ne contiennent que des métadonnées (code de statut, tâche, durée). Les détails figurent dans la politique de confidentialité.
Pourquoi la sortie est-elle du texte brut et non du JSON structuré ?
Chaque tâche produit un texte prêt à l’emploi, sans préambule ni bloc de code Markdown, afin de pouvoir l’afficher directement dans l’éditeur. Une structure supplémentaire (par exemple une liste des modifications) est prévue dans une version ultérieure, sans changer la v1.
Combien coûte l’API ?
Depuis adeptwrite.com, elle est gratuite, limitée à 30 requêtes d’IA par minute et par adresse IP. Les tarifs de l’accès externe seront annoncés avec le forfait Pro ; rien n’est facturé d’ici là.
Quel modèle répond à ma requête ?
Cela dépend de la langue : l’anglais et l’indonésien vont vers SEA-LION, les autres langues, dont le français, vers Qwen3-30B. Si ce modèle est occupé ou échoue, le modèle suivant de la chaîne de secours répond à sa place, et le champ model de la réponse nomme celui qui l’a fait.