Poser une question juridique
POST /public/legal/ask
Posez une question en français sur la fiscalité, la comptabilité SYSCOHADA, le droit du travail ou la CNSS au Bénin. La réponse est rédigée à partir du corpus juridique indexé et cite les articles sur lesquels elle s'appuie. Si les textes indexés ne répondent pas, la réponse le dit.
Authentification : aucune. Portée : Bénin (BJ) uniquement.
Requête
curl -X POST "https://api.paienova.com/ai-platform-service/api/v1/public/legal/ask" \
-H "Content-Type: application/json" \
-d '{
"question": "Quel est le taux de TVA au Bénin et quel article du Code général des impôts le fixe ?",
"country_iso": "BJ"
}'
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
question | texte | oui | La question, en français, de 3 à 2000 caractères. |
country_iso | texte | non (BJ) | Code pays ISO à 2 lettres. Seul BJ dispose d'un corpus (voir pays). |
Aucun autre champ n'est accepté : un champ inconnu est rejeté avec un code
422 (voir erreurs de format).
L'API ne reçoit donc jamais d'identité ni de donnée d'entreprise.
Réponse
Une réponse fondée sur le corpus
Réponse réelle à la requête ci-dessus (HTTP 200, serveur de développement, 24/09/2026 ; extraits abrégés) :
{
"success": true,
"data": {
"answer": "# Taux de TVA au Bénin\n\nLe taux de la TVA au Bénin est **unique et fixé à 18%**.\n\nLa TVA béninoise est mono-taux, il n'existe pas de taux réduit.\n\n**Référence légale :** Art. 241 CGI",
"citations": [
{
"id": "CGI:Art. 241 CGI@2085ed91",
"article_code": "Art. 241 CGI",
"title": "Art. 241 CGI (Code General des Impots BJ 2026)",
"excerpt": "Art. 241) - Taux de la TVA au Benin: Taux UNIQUE = 18% (la TVA beninoise est mono-taux, pas de taux reduit). L...",
"document_type": "CGI",
"page": 1,
"source_url": null,
"effective_date": "2026-01-01",
"legal_status": "in_force",
"superseded_by": null,
"source_law_ref": null,
"source_type": "synthese_attestee"
}
],
"confidence": 0.75,
"model_used": "eu.anthropic.claude-sonnet-4-5-20250929-v1:0",
"not_found": false,
"narrowing_suggestions": [],
"disclaimer": "⚠️ Information juridique générale fournie à titre informatif, sur la base du corpus légal indexé (...). Elle ne constitue pas un conseil juridique, fiscal ou comptable personnalisé. (...)"
},
"error": null
}
L'extrait d'une citation peut venir du texte officiel ou d'une synthèse
attestée par l'équipe PaieNova (source_type). Pour lire l'article, ouvrez
la citation avec /doc/{id}.
Champ de data | Description |
|---|---|
answer | La réponse rédigée, en français, au format Markdown. |
citations | Les articles sur lesquels la réponse s'appuie. Vide si not_found vaut true. |
confidence | Score de confiance du grounding, entre 0 et 1. |
model_used | Le modèle qui a rédigé la réponse. |
not_found | true quand les textes indexés ne répondent pas (voir ci-dessous). |
disclaimer | Rappel juridique, toujours présent. À afficher avec la réponse. |
| Champ d'une citation | Description |
|---|---|
id | Identifiant <document_type>:<article_code>@<version>, par exemple CGI:Art. 241 CGI@2085ed91. À passer tel quel à /doc/{id}. |
article_code | L'article cité. |
title | Titre de l'article. |
excerpt | L'extrait du corpus sur lequel la réponse s'appuie. |
document_type | Le corpus source : CGI, CODE_TRAVAIL, CNSS (Loi 98-019), SYSCOHADA, AUDCIF, DGI_INSTRUCTION... |
page | Page de la source quand elle est connue, sinon null. |
source_url | Lien vers la source officielle quand il existe. Souvent null aujourd'hui. |
Les citations portent aussi des champs décrivant la version des textes
(legal_status, effective_date, superseded_by, source_law_ref,
source_type). Ils sont en cours de fiabilisation avec le travail sur la
version en vigueur du corpus : ne construisez pas de logique qui en dépend pour
l'instant. source_type distingue le texte officiel (officiel) d'une
synthèse attestée par l'équipe PaieNova (synthese_attestee).
Quand les textes ne répondent pas : not_found
Une question hors du corpus renvoie HTTP 200 avec not_found: true :
c'est une réponse normale, pas une erreur. Réponse réelle à une question sur
les brevets d'invention (hors corpus) :
{
"success": true,
"data": {
"answer": "Je ne trouve pas cette information dans le corpus legal indexe. Reformulez votre question ou contactez le support PaieNova.",
"citations": [],
"confidence": 0.0,
"model_used": "...",
"not_found": true,
"disclaimer": "⚠️ Information juridique générale fournie à titre informatif..."
},
"error": null
}
Traitez not_found comme un résultat à part entière : affichez-le tel quel,
n'y substituez pas une réponse d'un autre modèle. Pour améliorer vos chances
de réponse, formulez avec les mots de la loi (ITS, TVA, préavis, sanctions)
plutôt qu'avec des montants.
Pays
country_iso accepte tout code ISO à 2 lettres, mais seul le Bénin (BJ)
dispose aujourd'hui d'un corpus indexé. Un autre code valide ne renvoie pas
d'erreur : la réponse arrive avec not_found: true. Un code mal formé (pas 2
lettres) renvoie une erreur PUBLIC_LEGAL_INVALID_COUNTRY.
Erreurs
| HTTP | error.code | Cause |
|---|---|---|
| 400 | PUBLIC_LEGAL_QUESTION_TOO_SHORT | Question de moins de 3 caractères. |
| 400 | PUBLIC_LEGAL_QUESTION_TOO_LONG | Question de plus de 2000 caractères. |
| 400 | PUBLIC_LEGAL_INVALID_COUNTRY | country_iso mal formé. |
| 422 | (forme différente) | JSON non conforme au schéma, par exemple un champ inconnu. Voir erreurs de format. |
| 429 | PUBLIC_LEGAL_RATE_LIMITED | Limite d'usage atteinte. Attendez la durée de l'en-tête Retry-After. |
| 503 | PUBLIC_LEGAL_PROVIDER_5XX | Service momentanément indisponible. Réessayez plus tard. |
Exemple réel d'erreur 400 :
{
"success": false,
"data": null,
"error": {
"code": "PUBLIC_LEGAL_QUESTION_TOO_SHORT",
"message_fr": "Question trop courte (min 3 caractères).",
"details": {}
}
}
Voir aussi
- Les conventions de l'API : enveloppe, erreurs de format, limites d'usage.
- Le serveur MCP : la même source, branchée directement à Claude, ChatGPT ou Cursor.
- Des prompts vérifiés : les questions qui fonctionnent le mieux aujourd'hui.