curl --request POST \
--url https://api.zelinqa.ai/v1/sessions/{session_id}/feedback \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"result": "success",
"label": "achat",
"metadata": {
"order_id": "SO-99120"
}
}
'{
"request_id": "req_5f31",
"session_id": "ses_01J8Z",
"feedback_id": "fbk_02K1",
"recorded_at": "2026-09-01T09:14:22Z"
}{
"code": "unauthorized",
"message": "Clé d'intégration absente ou invalide.",
"request_id": "req_9000",
"details": {}
}{
"code": "insufficient_scope",
"message": "Cette clé ne permet pas de publier une configuration.",
"request_id": "req_9001",
"details": {
"required_scopes": [
"configuration:publish"
],
"granted_scopes": [
"configuration:read",
"configuration:write"
]
}
}{
"code": "unknown_session",
"message": "La session demandée est inconnue.",
"request_id": "req_9007",
"details": {
"session_id": "ses_inconnue"
}
}{
"code": "idempotency_key_reused",
"message": "Cette clé d'idempotence est déjà associée à une autre requête.",
"request_id": "req_9002",
"details": {
"idempotency_key": "create-session-8842"
}
}{
"code": "idempotency_contention",
"message": "La clé d'idempotence n'a pas pu être réservée, réessayez.",
"request_id": "req_9017",
"details": {
"idempotency_key": "next-ses01J8Z-turn-4",
"retry_after_seconds": 1
}
}Déclarer le résultat réel de la conversation
Enregistre ce que la conversation a produit, sans modifier rétroactivement le scoring ni l’état de la session.
Le vocabulaire est volontairement générique : NBQ ne suppose pas qu’une
conversation est toujours une qualification commerciale. label permet à
l’intégrateur de nommer son propre résultat métier — « achat »,
« rendez-vous », « dossier complété ».
Cette route remplace POST /v1/sessions/{session_id}/conversion de la
bêta 0.9.
curl --request POST \
--url https://api.zelinqa.ai/v1/sessions/{session_id}/feedback \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"result": "success",
"label": "achat",
"metadata": {
"order_id": "SO-99120"
}
}
'{
"request_id": "req_5f31",
"session_id": "ses_01J8Z",
"feedback_id": "fbk_02K1",
"recorded_at": "2026-09-01T09:14:22Z"
}{
"code": "unauthorized",
"message": "Clé d'intégration absente ou invalide.",
"request_id": "req_9000",
"details": {}
}{
"code": "insufficient_scope",
"message": "Cette clé ne permet pas de publier une configuration.",
"request_id": "req_9001",
"details": {
"required_scopes": [
"configuration:publish"
],
"granted_scopes": [
"configuration:read",
"configuration:write"
]
}
}{
"code": "unknown_session",
"message": "La session demandée est inconnue.",
"request_id": "req_9007",
"details": {
"session_id": "ses_inconnue"
}
}{
"code": "idempotency_key_reused",
"message": "Cette clé d'idempotence est déjà associée à une autre requête.",
"request_id": "req_9002",
"details": {
"idempotency_key": "create-session-8842"
}
}{
"code": "idempotency_contention",
"message": "La clé d'idempotence n'a pas pu être réservée, réessayez.",
"request_id": "req_9017",
"details": {
"idempotency_key": "next-ses01J8Z-turn-4",
"retry_after_seconds": 1
}
}Autorisations
Clé d'intégration préfixée nbq_live_, envoyée dans
Authorization: Bearer nbq_live_… et résolue par l'authorizer Lambda de
l'API Gateway publique. L'authorizer valide la clé, puis injecte en amont
du service les headers de contexte x-tenant-id, x-nbq-id et x-scopes —
x-scopes étant la liste des scopes de la clé séparés par des virgules,
par exemple runtime,configuration:read.
Ces headers ne sont jamais acceptés depuis le client : toute valeur entrante
est écrasée. Une clé absente ou invalide produit 401 au niveau de la
passerelle ; une clé valide sans le scope requis produit 403 avec le code
insufficient_scope.
En-têtes
Clé unique par mutation logique, choisie par l'appelant.
Même clé et même corps renvoient exactement la réponse d'origine, sans
rejouer l'effet : aucun retry ne double turn_count, un outcome, un
événement, un feedback ou une publication. Même clé avec un corps différent
produit 409 idempotency_key_reused.
Les enregistrements sont isolés par tenant et par opération, et sont purgés après 24 heures. Passé ce délai, la même clé est traitée comme neuve.
8 - 128Paramètres de chemin
Identifiant opaque de session attribué par NBQ à la création.
1 - 128Corps
Vocabulaire générique : NBQ ne suppose pas qu'une conversation est une qualification commerciale.
success, partial, failure Nom du résultat métier choisi par l'intégrateur, par exemple « achat » ou « rendez-vous ».
1 - 128Faits courts de corrélation non interprétés par NBQ : identifiant CRM, montant, devise ou indicateur. Taille sérialisée maximale : 4 Kio. Les messages, réponses, résumés, prompts et transcripts sont refusés.
Show child attributes
Show child attributes