API publique KEATH v1
Ce guide explique le chemin le plus direct pour intégrer KEATH. Le but n'est pas de lister des routes sans contexte, mais de montrer quoi appeler et pourquoi.
Base URL
https://keath.ai/api/keath/public/v1
Tous les appels utilisent :
- Header :
X-API-Key: kct_your_api_key - Réponse : un corps JSON standard KEATH
N'envoyez jamais une clé fournisseur comme Gemini, OpenAI ou NewAPI à cette API. Ici, la clé attendue est une clé publique KEATH qui commence par kct_.
Le flux le plus sûr pour commencer
- Appelez
GET /credits. - Appelez
GET /models. - Créez un devoir avec
POST /assignmentset unmodel_id. - Corrigez une copie avec
POST /evaluationset leassignment_idretourné. - Interrogez
GET /evaluations/:taskId/status. - Quand le statut est
SUCCESS,FAILUREouCANCEL, récupérez le résultat avecGET /evaluations/:taskId.
Les deux IDs importants
| Champ | Ce que cela veut dire | Où le trouver |
|---|---|---|
model_id | Le modèle de correction | GET /models |
assignment_id | Le devoir élève à corriger | POST /assignments ou l'URL du devoir KEATH |
Si vous avez déjà un modèle entraîné, utilisez son model_id pour créer un assignment ou pour lancer une correction one-pass.
Routes principales
| Route | Méthode | À quoi ça sert |
|---|---|---|
/credits | GET | Vérifier les crédits disponibles |
/models | GET | Lister les modèles accessibles |
/models | POST | Créer ou entraîner un modèle |
/assignments | POST | Créer un devoir élève à partir d'un model_id |
/questions-ingest-preview | POST | Lire une question depuis PDF, image ou URL |
/rubrics-ingest-preview | POST | Lire une grille depuis PDF, image ou URL |
/evaluations | POST | Corriger une copie pour un assignment existant |
/evaluations/one-pass | POST | Corriger sans créer d'assignment |
/evaluations/batch | POST | Mettre en file 1 à 100 évaluations one-pass |
/evaluations/:taskId/status | GET | Lire le statut léger |
/evaluations/:taskId | GET | Lire le résultat complet |
/evaluations/:taskId/cancel | POST | Annuler une évaluation en attente ou en cours |
/feedback-rewrite | POST | Réécrire un feedback dans un autre style |
/uploads/file | POST | Envoyer un fichier et obtenir une URL réutilisable |
GET /models
Utilisez cette route pour choisir le modèle de correction.
curl "https://keath.ai/api/keath/public/v1/models" \
-H "X-API-Key: kct_your_api_key"Exemple de modèle :
{
"model_id": 930,
"assignment_name": "O Level Situational Writing Model",
"post_status": "ready",
"total_score": 30
}Utilisez seulement les modèles dont post_status est ready.
POST /assignments
Crée un devoir élève à partir d'un modèle.
{
"model_id": 930,
"assignment_name": "Situation Writing Test",
"assignment_desc": "Student-facing writing assignment",
"project_subject": "English",
"deadline_time": "2026-06-01T00:00:00.000Z",
"expected_number": 30,
"file_type": "pdf"
}Réponse typique :
{
"assignment_id": 1620,
"model_id": 930,
"status": "active"
}POST /evaluations
Corrige une copie pour un assignment qui existe déjà.
Champs importants :
assignment_id: le devoir élève, pas le modèle.paper_content: texte de la copie.- ou un fichier de copie en
multipart/form-data. style:Bullet,ShortouLong. Par défaut :Bullet.student_id: ID anonyme de votre système. KEATH ne crée pas d'élève avec cet ID.
Formats acceptés pour les copies :
- PDF et images : extraction multimodale avec description du contenu visuel utile.
- DOCX, TXT, RTF : extraction texte côté serveur.
Noms de champs acceptés pour le fichier de réponse :
answer_fileanswer_filespaper_filepaper_filesresponse_fileresponse_filesfileoufiles
Exemple JSON :
{
"assignment_id": 1620,
"paper_content": "Dear Mrs Tan, I am writing to request permission...",
"style": "Bullet",
"student_id": "anon-student-001"
}Exemple avec fichier :
curl -X POST "https://keath.ai/api/keath/public/v1/evaluations" \
-H "X-API-Key: kct_your_api_key" \
-F "assignment_id=1620" \
-F "answer_file=@./student-answer.pdf;type=application/pdf" \
-F "student_id=anon-student-001" \
-F "style=Bullet"POST /evaluations/one-pass
Utilisez cette route si vous ne voulez pas créer d'assignment.
Vous envoyez :
model_id- la question ou le contexte
- la grille de correction
- la copie de l'élève
curl -X POST "https://keath.ai/api/keath/public/v1/evaluations/one-pass" \
-H "X-API-Key: kct_your_api_key" \
-H "Idempotency-Key: eval-student-001-attempt-1" \
-F "model_id=930" \
-F "question_file=@./question.pdf;type=application/pdf" \
-F "rubric_file=@./rubric.docx;type=application/vnd.openxmlformats-officedocument.wordprocessingml.document" \
-F "answer_file=@./student-answer.txt;type=text/plain" \
-F "specification=Use Question 2 only." \
-F "style=Bullet"Formats directs supportés pour one-pass :
- Question et grille : PDF, images, DOCX, TXT, RTF
- Copie élève : PDF, images, DOCX, TXT, RTF
La réponse est HTTP 202 Accepted avec un task_id public, status: "QUEUED" et stage: "queued". Le travail est accepté, mais la correction n'est pas encore terminée.
Utilisez un Idempotency-Key unique par soumission logique. Une nouvelle tentative identique renvoie le même task_id. Le même key avec un contenu différent renvoie 409.
Les fichiers sont enregistrés avant la mise en file. Les credits sont débités seulement après validation d'un résultat complet. Une tâche échouée ou annulée conserve credits_charged: 0.
POST /evaluations/batch
Envoie de 1 à 100 corrections one-pass. Chaque élément de evaluations accepte les mêmes champs que /evaluations/one-pass.
curl -X POST "https://keath.ai/api/keath/public/v1/evaluations/batch" \
-H "X-API-Key: kct_your_api_key" \
-H "Idempotency-Key: class-5a-writing-2026-07-15" \
-H "Content-Type: application/json" \
-d '{
"evaluations": [
{"model_id":930,"question_text":"Rédigez une lettre formelle.","paper_content":"Madame, Monsieur, ...","student_id":"anon-001"},
{"model_id":930,"question_text":"Rédigez une lettre formelle.","paper_content":"Madame, Monsieur, je propose ...","student_id":"anon-002"}
],
"callback_url":"https://integration.example.com/keath/results"
}'callback_url est facultatif et doit être une URL HTTPS publique. Gardez le polling comme solution de secours.
Questions et rubrics depuis PDF ou images
Avant de créer un modèle, vous pouvez demander à KEATH de lire les documents.
POST /questions-ingest-previewPOST /rubrics-ingest-preview
Ajoutez specification si le document contient plusieurs questions :
Only parse Question 2. Ignore sample answers and teacher notes.Statuts de correction
Les statuts courants :
QUEUED/queuedUPLOADING/uploadingSUBMITTED/submittedPROGRESS/processingSUCCESS/completedFAILURE/failedCANCEL/cancelled
Interrogez d'abord toutes les 3 secondes, puis augmentez progressivement jusqu'à 15 secondes. Utilisez toujours une durée maximale, jamais une boucle infinie.
Compatibilité : POST /evaluations pour un assignment existant conserve l'ancien chemin et débite les credits à l'acceptation. Le 202, l'idempotence, la file durable et le débit après réussite concernent /evaluations/one-pass et /evaluations/batch.
Si le statut est FAILURE, le champ evaluation peut contenir un item avec type: "error" et un message lisible dans comment. Traitez-le comme une correction échouée, pas comme une note.
Limites de fichiers
- Maximum
10fichiers par demande pour les endpoints qui acceptent plusieurs fichiers. - Maximum
20 MBpar fichier. - Pour
/uploads/file, envoyez exactement un fichier avec le champfile.
Erreurs fréquentes
401: clé manquante ou invalide.402: crédits insuffisants.403: pas accès au modèle.404: modèle, assignment ou évaluation introuvable.409: modèle pas encore prêt, ou tâche non annulable.400: champ manquant, JSON invalide ou type de fichier non supporté.