Documentation de l’API
Erreurs
Une forme unique { code, message, details } et des codes stables, à tester dans votre code plutôt que les messages.
Forme d’une erreur
Toute erreur rend le même objet : un code stable, un message traduit pour un humain, et des détails propres au code (les champs invalides pour une erreur de validation).
{
"code": "validation.failed",
"message": "Certains champs sont invalides.",
"details": {
"errors": {
"name": [
"Le champ nom est obligatoire."
]
}
}
}
Statuts HTTP
| Statut | Signification |
|---|---|
401 | Jeton absent, inconnu, révoqué ou expiré, ou compte qui n’est plus membre de l’espace (l’en-tête WWW-Authenticate relance la découverte OAuth). |
403 | Le rôle, une règle de l’espace ou la portée du jeton n’autorisent pas l’opération. |
404 | Ressource inconnue, ou d’un autre espace. |
409 | La ressource n’est pas dans un état qui permet l’opération (mission déjà lancée, version publiée…). |
422 | Données invalides : details.errors liste les champs et leurs messages. |
429 | Limite de débit atteinte : réessayer après Retry-After. |
500 | Erreur inattendue de la plateforme : réessayer plus tard. |
Codes d’erreur
La liste complète, par module, avec le message en français. Les paramètres d’un message (précédés de deux-points) sont remplacés par leur valeur dans la réponse.
Génériques
| Code | Message |
|---|---|
auth.unauthenticated | Vous devez être connecté. |
auth.forbidden | Vous n'avez pas le droit de faire cela. |
auth.two_factor_required | Un code de double authentification est requis. |
auth.csrf_mismatch | La page a expiré. Rechargez-la et réessayez. |
resource.not_found | La ressource n'existe pas. |
resource.conflict | La ressource est dans un état incompatible. |
validation.failed | Certains champs sont invalides. |
rate.limited | Trop de requêtes. Réessayez plus tard. |
http.error | La requête n'a pas pu être traitée. |
internal.error | Une erreur inattendue s'est produite. |
IA
| Code | Message |
|---|---|
ai.provider_error | Le fournisseur d’IA a renvoyé une erreur. Réessayez dans un instant. |
ai.provider_quota | Le quota ou le crédit du fournisseur d’IA est épuisé. |
ai.budget_cap_reached | Le plafond de budget de cette session ou de cette mission est atteint. |
ai.platform_credential_missing | Aucune clé API utilisable pour cet usage : ajoutez une clé dans Connexions IA ou choisissez un autre profil. |
ai.schema_violation | La réponse de l’IA ne respecte pas le format attendu. |
ai.driver_unsupported_for_usage | Ce fournisseur ne peut pas servir à cet usage. |
ai.model_unsupported_for_usage | Ce modèle ne peut pas servir à cet usage. |
ai.credential_invalid | Le fournisseur a refusé cette clé. |
ai.credential_in_use | Cette clé est utilisée par :count profil(s) IA : modifiez-les d’abord. |
ai.credential_driver_mismatch | Cette clé appartient à un autre fournisseur. |
ai.base_url_required | Ce fournisseur demande une URL de base. |
ai.base_url_not_allowed | Cette URL de base est refusée : https et adresse publique obligatoires (seuls une clé ou un profil compatible OpenAI peuvent en porter une). |
ai.base_url_mismatch | Une clé n’est envoyée qu’à l’adresse pour laquelle elle a été enregistrée : cette URL de base ne correspond pas à la clé. |
ai.prompt_not_found | Un prompt d’IA manque dans cette installation. |
ai.voice_lab_engagement_not_ready | Le labo voix joue l’entretien d’une mission qui a au moins une population. Créez une mission (ou ajoutez une population à celle-ci), puis relancez l’essai. |
ai.profile_scope_invalid | Cette méthode ou cette mission n’existe pas dans l’espace. |
ai.catalog_model_exists | Ce fournisseur liste déjà un modèle avec cet identifiant. |
ai.catalog_provider_exists | Un fournisseur porte déjà cet identifiant. |
ai.catalog_usage_not_supported_by_driver | Le driver de ce fournisseur ne sait pas servir l'usage « :usage ». |
ai.catalog_realtime_requires_voice | Un modèle temps réel ne sert que l'usage voix. |
ai.catalog_dimensions_required | Un modèle d'embedding doit déclarer sa dimension native. |
ai.catalog_native_provider_locked | Un fournisseur natif n'a pas d'URL de base : ajoutez plutôt un fournisseur compatible OpenAI. |
ai.catalog_compatible_requires_base_url | Un fournisseur compatible OpenAI a besoin d'une URL de base. |
ai.catalog_default_cannot_be_hidden | Ce modèle est le défaut de « :usage » : choisissez d'abord un autre défaut. |
ai.catalog_provider_holds_default | Ce fournisseur porte le modèle par défaut de : :usages. Choisissez d'abord d'autres défauts. |
ai.catalog_default_model_unavailable | Ce modèle ne peut pas être le défaut de « :usage » : il doit être visible et servir cet usage. |
ai.catalog_default_architecture_mismatch | La voix directe demande un modèle temps réel ; la cascade, un modèle de texte. |
Analyse
| Code | Message |
|---|---|
analysis.run_in_progress | Une analyse est déjà en attente ou en cours pour cette mission. |
analysis.run_not_cancellable | Ce run d'analyse est déjà terminé. |
analysis.evidence_required | Un constat exige au moins une preuve. |
analysis.last_evidence | C'est la dernière preuve d'un constat validé : elle ne peut pas être retirée. |
analysis.evidence_source_not_found | La source citée n'existe pas dans cette mission. |
analysis.follow_up_not_editable | Une relance ne se modifie que tant qu'elle est proposée. |
analysis.follow_up_targets_required | Une relance vise au moins un participant de la mission. |
analysis.change_proposal_decided | Cette proposition de changement a déjà été tranchée. |
analysis.contradiction_resolved | Cette contradiction a déjà été tranchée. |
analysis.merge_same_process | Un process ne peut pas être fusionné avec lui-même. |
analysis.steps_not_in_process | Certaines étapes n'appartiennent pas à ce process. |
analysis.category_unknown | Cette catégorie n'est pas dans le schéma du livrable de la méthode. |
analysis.not_found | Cet objet n'appartient pas à la mission. |
analysis.flow_steps_mismatch | Un flux relie deux étapes du même process. |
Chat de l’audit
| Code | Message |
|---|---|
chat.version_required | Le livrable n’est pas encore publié : le chat s’ouvre avec la première version. |
chat.answer_in_progress | Une réponse est en cours de rédaction : attendez-la avant de poser une autre question. |
chat.policy.not_owner | Cette conversation n’est pas la vôtre. |
Livrable
| Code | Message |
|---|---|
deliverable.documents_not_ready | Un document inclus n’est pas prêt : générez-le ou retirez-le de la publication. |
deliverable.nothing_to_publish | Rien à publier pour l’instant : validez au moins un process ou un constat avec une preuve publiable. |
deliverable.publish_in_progress | Une publication est déjà en cours pour cette mission. |
deliverable.suggestion_in_progress | Une suggestion est déjà en cours de rédaction pour ce brouillon. |
deliverable.version_not_published | Cette version n’a pas de contenu publié. |
deliverable.naming_not_allowed | Certains participants ne peuvent pas être nommés : la mission doit le prévoir et chacun doit l’avoir accepté. |
deliverable.policy.not_allowed | Vous n’avez pas accès à ce livrable. |
deliverable.policy.not_member | Vous n’êtes pas affecté à cette mission. |
deliverable.policy.not_draft | Seul le brouillon peut être modifié. |
deliverable.policy.not_sponsor | Vous n’êtes pas sponsor de cette mission. |
export.document_kind_required | Précisez le document à exporter. |
export.format_unsupported | Ce format n’existe pas pour ce document. |
export.kind_not_allowed | Ce format n’est pas proposé dans l’espace client : choisissez un document ou le rapport complet. |
export.not_ready | Cet export n’est pas disponible au téléchargement. |
export.process_required | Un export BPMN vise un process : choisissez-le. |
export.version_required | Cet export lit une version publiée : publiez d’abord le livrable. |
sponsor_comment.closed | Ce commentaire est clos. |
sponsor_comment.not_root | Répondez au commentaire lui-même, pas à une réponse. |
deliverable_document.generation_in_progress | Une génération est déjà en cours pour ce document. |
deliverable_document.conflict | Ce document a été modifié entre-temps : rechargez-le avant d’enregistrer. |
deliverable_document.not_enough_material | Pas encore assez de matière : il faut au moins un chapitre validé et :min constats avec preuve. |
deliverable_document.ref_unknown | Un bloc cite un élément qui n’existe pas dans la mission. |
deliverable_document.person_named | Un rôle porteur ne peut pas nommer un participant : indiquez un rôle. |
deliverable_document.data_ref_invalid | Ce bloc pointe des données qui n’appartiennent pas à ce document. |
deliverable_document.all_blocks_rejected | Aucun texte généré n’a passé les contrôles de preuve : relancez la génération ou écrivez le texte vous-même. |
deliverable_document.job_failed | La génération a échoué. |
Missions
| Code | Message |
|---|---|
engagement.not_launchable | Cette mission ne peut pas encore être lancée : corrigez les points bloquants de la liste de lancement. |
engagement.not_draft | Ce n’est possible que tant que la mission est en brouillon. |
engagement.locale_unavailable | Cette langue n’est pas activée dans l’espace, ou la langue par défaut ne fait pas partie des langues de la mission. |
engagement.method_version_not_published | Cette version de méthode n’est pas publiée. |
engagement.method_not_published | Cette méthode n’a encore aucune version publiée. Publiez-la avant de créer une mission. |
engagement.archived | Cette mission est archivée : rouvrez-la pour modifier sa configuration. |
engagement.member_invalid | Cette personne n’est pas membre de l’espace. |
engagement.policy.not_member | Vous n’êtes pas affecté à cette mission. |
engagement.policy.not_admin | Seul un administrateur peut le faire. |
engagement.policy.not_sponsor | Vous n’êtes pas sponsor de cette mission. |
state.invalid_transition | Ce changement de statut n’est pas possible depuis le statut actuel. |
client_company.in_use | Une mission audite cette entreprise : elle ne peut pas être supprimée. |
population.not_empty | Cette population a encore des participants. Déplacez-les ou retirez-les d’abord. |
participant.email_taken | Un participant de la mission utilise déjà cette adresse. |
participant.interview_started | L’entretien a commencé : le participant ne peut pas être supprimé. Passez par une demande d’effacement. |
participant.revoked | L’accès de ce participant est révoqué. |
participant.link_invalid | Ce lien n’est pas valide. |
participant.link_expired | Ce lien a expiré. |
participant.link_revoked | Ce lien a été révoqué. |
participant.email_code_required | Saisissez le code reçu par e-mail pour continuer. |
participant.email_code_invalid | Ce code n’est pas valide. Vérifiez le dernier e-mail reçu. |
participant.email_code_locked | Trop d’essais. Demandez un nouveau code. |
participant.import_invalid | Le fichier n’a pas pu être lu comme un CSV avec les colonnes attendues. |
plan.topic_unknown | Le plan cite des thèmes absents du guide. |
plan.proposal_not_found | Cette proposition de plan n’existe pas ou a expiré. |
message_template.variable_unknown | Le message utilise une variable inconnue. |
message_template.link_missing | Ce message doit contenir la variable {link}, sinon le participant ne peut pas ouvrir l’entretien. |
sponsor.is_member | Cette personne est membre du cabinet et voit déjà la mission. |
Intégrations
| Code | Message |
|---|---|
integrations.token_invalid | Ce jeton d'API est invalide, révoqué ou expiré, ou son compte n'est plus membre de cet espace. |
integrations.scope_insufficient | Ce jeton est en lecture seule : il ne peut rien modifier. |
integrations.session_required | Cette opération n'est possible que depuis l'application, pas avec un jeton d'API. |
integrations.token_limit_reached | Vous avez déjà :max jetons actifs dans cet espace : révoquez-en un d’abord. |
integrations.oauth_not_member | Seul un membre de cet espace peut autoriser une application. |
integrations.oauth_two_factor_required | Activez la double authentification sur votre compte avant d’autoriser une application. |
integrations.operator_token_invalid | Ce jeton est invalide, révoqué ou expiré, a été émis pour un espace, ou son compte n’est plus opérateur de la plateforme. |
integrations.operator_token_limit_reached | Vous avez déjà :max jetons actifs pour le back-office : révoquez-en un d’abord. |
integrations.oauth_not_operator | Seul un opérateur de la plateforme peut autoriser une application sur le back-office. |
Entretiens
| Code | Message |
|---|---|
interview.guide_not_frozen | L'entretien n'a pas encore commencé : le participant n'a pas accepté l'écran d'accueil. |
interview.consent_already_given | Le consentement a déjà été enregistré pour cet entretien. |
interview.not_ready | L'entretien ne peut pas démarrer de session avant le consentement. |
interview.completed | Cet entretien est terminé : aucune nouvelle session ne peut démarrer. |
interview.voice_sample_unavailable | La voix de l'intervieweuse ne peut pas être jouée pour l'instant. |
interview.preview_requires_engagement | Un aperçu d'entretien se joue dans une mission : choisissez-en une. |
session.invalid_transition | Cette session ne peut pas passer dans cet état. |
session.not_live | Cette action exige une session en direct. |
session.mode_unavailable | Ce mode de session n'est pas disponible ici. |
session.limit_reached | Le plafond de la mission est atteint : aucune nouvelle session ne peut démarrer. |
tool.unknown | Cet outil de l'intervieweuse n'existe pas. |
tool.arguments_invalid | Les arguments de l'outil ne respectent pas le schéma attendu. |
vision.rate_limited | Trop d'images d'écran par minute. |
chapter.not_in_progress | Ce chapitre n'est pas en cours. |
chapter.not_covered | Ce chapitre n'a pas encore été couvert : rien à valider. |
chapter.reopen_not_allowed | Ce chapitre ne peut pas être rouvert. |
recap.already_validated | Ce récapitulatif est validé et ne se modifie plus. |
recap.not_found | Il n'y a pas encore de récapitulatif pour ce chapitre. |
redaction.invalid_range | La plage de temps à supprimer est invalide. |
recording.not_ready | Cet enregistrement n'est pas prêt à être lu. |
simulation.persona_not_found | Ce persona de simulation n'existe pas. |
simulation.failed | La simulation s'est arrêtée sur une erreur du modèle. |
Méthodes
| Code | Message |
|---|---|
method.consultant_cannot_edit | Seul un administrateur peut modifier une méthode. |
method.version_published | Cette version est publiée et ne peut plus changer. Créez un nouveau brouillon pour la modifier. |
method.welcome_block_missing | Il manque un bloc obligatoire à l’écran d’accueil. |
method.welcome_variable_unknown | L’écran d’accueil utilise une variable inconnue. |
method.draft_exists | Une version brouillon existe déjà pour cette méthode. |
method.in_use | Une mission utilise cette méthode : elle ne peut pas être supprimée. |
method.template_not_found | Ce modèle de méthode n’existe pas. |
method.priority_rule_invalid | Une règle du barème de priorité est mal écrite. |
guide.category_unknown | Cette catégorie de livrable n’existe pas dans la méthode. |
guide.level_unavailable | Ce niveau du guide n’est pas encore disponible. |
guide.override_not_allowed | On ne surcharge qu’un thème hérité, depuis une mission, une population ou un participant. |
guide.topic_key_taken | Un autre thème utilise déjà cette clé. |
guide.topic_limit_reached | Ce niveau a atteint le nombre maximal de thèmes. |
guide.reorder_mismatch | Le nouvel ordre doit lister exactement les thèmes de ce niveau. |
guide.proposal_not_found | Cette proposition n’existe pas ou a expiré. |
method_template.key_taken | Un autre modèle de méthode utilise déjà la clé « :key ». |
method_template.key_locked | Ce modèle a été publié : sa clé ne change plus, les méthodes des cabinets y renvoient. |
method_template.version_frozen | Cette version du modèle est publiée et ne peut plus changer. Ouvrez un nouveau brouillon pour la modifier. |
method_template.draft_exists | Ce modèle a déjà une version brouillon. |
method_template.not_publishable | Cette version ne peut pas encore être publiée : corrigez les points listés. |
method_template.locale_exists | Cette langue existe déjà dans cette version. |
method_template.locale_missing | Cette version n’a pas de contenu dans cette langue. |
method_template.last_locale | Un modèle garde au moins une langue. |
Plateforme
| Code | Message |
|---|---|
platform.already_operator | Ce compte est déjà opérateur de la plateforme. |
platform.last_owner | La plateforme doit garder au moins un propriétaire. |
platform.grant_too_long | Un accès de support dure au plus :hours heures. |
Confidentialité
| Code | Message |
|---|---|
privacy.invalid_custom_pattern | Le motif personnalisé « :label » n'est pas valide : il doit s'agir d'une expression valide de 200 caractères au plus, avec un libellé, qui ne correspond jamais à un texte vide. |
privacy.image_unreadable | L'image n'a pas pu être lue. Rien n'a été enregistré. |
privacy.video_processing_failed | Le floutage de l'enregistrement a échoué. L'enregistrement reste indisponible jusqu'à un nouveau traitement. |
privacy.engagement_not_found | Cette mission n'existe pas dans cet espace. |
privacy.engagement_forbidden | Vous n'êtes pas affecté à cette mission. |
privacy.deletion_request_not_open | Cette demande est déjà traitée ou en cours de traitement. |
privacy.deletion_request_exists | Une demande est déjà ouverte pour ce participant. |
privacy.participant_not_found | Ce participant n'existe pas dans cette mission. |
privacy.compliance_document_missing | Le fichier de ce document n'existe plus : générez-le à nouveau. |
privacy.support_operator_not_found | Cet opérateur n'existe pas ou n'est plus opérateur. |
Sources
| Code | Message |
|---|---|
artifact.unsupported_type | Ce type de fichier n'est pas accepté. |
artifact.not_ready | Cette pièce n'a pas encore été extraite. |
source.schema_invalid | Le fichier ne respecte pas le format d'échange des sources externes. |
source.version_unsupported | Cette version du format d'échange n'est pas prise en charge. |
source.file_unreadable | Le fichier n'est ni un export JSON ni un texte lisible. |
Espace et compte
| Code | Message |
|---|---|
workspace.context_missing | Aucun espace courant pour cette opération. |
workspace.not_found | Cet espace n'existe pas. |
workspace.suspended | Cet espace est suspendu. |
workspace.last_admin | Un espace doit garder au moins un administrateur. |
workspace.invitation_invalid | Cette invitation est invalide ou a expiré. |
workspace.invitation_email_mismatch | Cette invitation a été envoyée à une autre adresse e-mail. |
workspace.already_member | Cette personne est déjà membre de l'espace. |
workspace.slug_reserved | Le sous-domaine « :slug » n'est pas autorisé. |
workspace.slug_taken | Le sous-domaine « :slug » est déjà utilisé. |
workspace.locale_not_enabled | La langue « :locale » n'est pas disponible. |
auth.magic_link_invalid | Ce lien de connexion est invalide ou a expiré. |
auth.two_factor_setup_required | La double authentification doit être activée sur votre compte. |