Jury Rouge

Documentation de l'API Jury Rouge

Envoyez un fichier, recevez un rapport d'analyse en JSON : similarité chiffrée, indice d'usage de l'IA, références, correction sur grille avec preuves et empreintes d'audit.

Principe

L'API est l'interface qu'utilise l'application elle-même. Chaque appel envoie un fichier (encodé en base64) et renvoie le rapport d'analyse en JSON. Rien n'est conservé : les copies sont traitées en mémoire, les empreintes de comparaison entre copies d'un même lot sont purgées après 12 heures, aucun rapport n'est archivé côté Jury Rouge. L'accès se fait avec un code d'accès fourni par Jury Rouge (contact@juryrouge.fr).

URL de base : https://juryrouge.fr/api/. Authentification : en-tête X-Jury-Key sur les appels protégés.

Endpoints

MéthodeCheminCode requisRôle
GET/healthNonÉtat du service et version du moteur.
GET/modesNonLes trois modes de correction : neutre, dur, bienveillant.
GET/grillesNonGrilles de la bibliothèque (identifiants, critères, barèmes).
POST/grille-importOuiTransforme un fichier de grille (Word, CSV, JSON, texte « Nom ; points ; description ») en objet grille réutilisable. Si le fichier n'a pas de barème mais liste des compétences ou critères (référentiel Word, PDF ou texte), renvoie une proposition à valider (champ a_valider: true, 20 points répartis à parts égales) : heuristique à règles fixes, à relire.
POST/analyseOuiAnalyse complète : similarité, indice IA, références, correction sur grille.
POST/plagiatOuiSimilarité et indice IA seuls, sans grille (références en option).
GET/soldeOuiSolde d'un code à crédits (si votre code en a un).

Analyser un document

Champs du corps JSON de /analyse : filename (extension .docx, .pdf ou .txt), data_b64 (fichier en base64), grille_id (universelle, un identifiant de /grilles, ou auto) ou grille (objet renvoyé par /grille-import), mode (neutre, dur, bienveillant), externe (booléen, faux par défaut), lot (texte libre : les copies envoyées avec le même lot sont comparées entre elles).

curl -s https://juryrouge.fr/api/analyse \
  -H "X-Jury-Key: VOTRE_CODE_D_ACCES" -H "Content-Type: application/json" \
  -d '{"filename":"memoire.docx","data_b64":"<contenu du fichier en base64>",
       "grille_id":"universelle","mode":"neutre","externe":false,"lot":"promo-2026"}'
import base64, json, urllib.request
corps = {"filename": "memoire.docx", "data_b64": base64.b64encode(open("memoire.docx", "rb").read()).decode(),
         "grille_id": "universelle", "mode": "neutre", "externe": False, "lot": "promo-2026"}
req = urllib.request.Request("https://juryrouge.fr/api/analyse", data=json.dumps(corps).encode(),
                             headers={"X-Jury-Key": "VOTRE_CODE_D_ACCES", "Content-Type": "application/json"})
rapport = json.load(urllib.request.urlopen(req, timeout=300))
print(rapport["note"]["note_partielle_sur_20"], rapport["plagiat"]["indice_global_pct"], rapport["ia"]["indice"])

Ce que renvoie /analyse

Structure (abrégée) :

{
  "document": {"pages": 1, "mots": 168, "type_detecte": "memoire", ...},
  "grille":   {"nom": "Écrit professionnel ou universitaire (grille de référence)", "origine": "proposée par Jury Rouge"},
  "criteres": [{"nom": "Méthodologie", "max": 4, "ratio": 0.6, "constats": [...], "preuves": [...], "note_proposee": 2.5}, ...],
  "note":     {"points_mesures": 5.0, "sur_mesures": 15.0, "sur_total": 20.0, "couverture_pct": 75.0, "note_partielle_sur_20": 6.7, "criteres_a_apprecier": [...]},
  "references": {"n": 1, "verifiees": 0, "en_ligne": false, "non_controlees": 1, "entrees": [...]},
  "plagiat":  {"externe": null, "lot": [...], "indice_global_pct": 0.0, "indice_global_note": "..."},
  "ia":       {"indice": 54, "niveau": "élevé", "indicateurs": [...], "avertissement": "Indice statistique ..."},
  "questions_oral": ["..."],
  "audit":    {"moteur": "Jury Rouge 1.0.0", "sha256_fichier": "...", "sha256_grille": "...", "date_analyse": "...", "deterministe": true, "mode": "neutre"}
}

Le rapport contient les preuves citées pour chaque critère et une piste d'audit : empreintes SHA-256 du fichier et de la grille, date, version du moteur, mode. Pour un même fichier, une même grille et un même mode, les mesures par règles sont identiques ; les appréciations par IA (température 0) sont indicatives et à valider par le correcteur.

L'option « bases externes » (désactivée par défaut)

Avec "externe": true, de courtes phrases du texte sont interrogées sur Wikipédia FR et HAL, et des titres de références sur Crossref, OpenAlex et Google Livres. Sans elle, aucune requête ne quitte le serveur : seules les copies du même lot sont comparées et l'existence des références n'est pas contrôlée (statut « non contrôlée »). Le choix appartient à l'établissement, responsable du traitement : voir la politique de confidentialité. Si des requêtes externes échouent, le rapport l'indique (champ avertissement).

Limites et erreurs

CasComportement
TailleCorps de requête de 30 Mo au plus (le base64 alourdit le fichier d'environ un tiers).
CadenceAu plus 40 requêtes par minute et par adresse IP ; au-delà : HTTP 429.
RéférencesJusqu'à 80 entrées de bibliographie contrôlées par document.
401Code d'accès absent ou invalide.
402Code à crédits : crédits épuisés, code expiré ou document trop long pour la formule (aucun crédit débité).
415Format de fichier non accepté (attendu : .docx, .pdf, .txt).
422Aucun critère reconnu dans le fichier de grille ou de référentiel.
400Analyse impossible : texte insuffisant (PDF scanné sans texte, document trop court).

Ce que l'API n'est pas (à ce jour)

Pas de compte utilisateur, pas d'historique ni d'archivage des rapports, pas de webhook, pas de bibliothèque cliente officielle, pas de connecteur prêt à l'emploi pour Moodle, Canvas ou Blackboard. Si votre projet d'intégration en a besoin, écrivez-nous : cela oriente notre feuille de route. Description machine : openapi.json.

Questions fréquentes

Faut-il un code d'accès pour utiliser l'API ?

Oui, sur /analyse, /plagiat et /grille-import. Il est fourni par Jury Rouge.

L'API conserve-t-elle mes documents ?

Non. Traitement en mémoire ; empreintes de comparaison purgées après 12 heures ; aucun rapport archivé. Hébergement en Allemagne (Hetzner) ; si l'option IA est cochée, le texte de la copie est transmis à Anthropic (États-Unis), sous-traitant. Hébergement en Allemagne (Hetzner) ; si l'option IA est cochée, le texte de la copie est transmis à Anthropic (États-Unis), sous-traitant.

Mis à jour le 29/09/2026. Mentions légales · Confidentialité · Sécurité