curl --request GET \
--url https://api.zelinqa.ai/v1/sessions/{session_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.zelinqa.ai/v1/sessions/{session_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.zelinqa.ai/v1/sessions/{session_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"request_id": "<string>",
"session_id": "<string>",
"client_reference": "<string>",
"status": "active",
"turn_count": 1,
"max_turns": 2,
"turns_remaining": 1,
"question_state": {
"outcomes": [
{
"question_id": "<string>",
"decision_id": "<string>",
"outcome": "asked_answered",
"source": "client",
"message_id": "<string>",
"occurred_at": "2023-11-07T05:31:56Z"
}
]
},
"targets": {},
"progress": {
"objective": {
"computed_status": "not_started",
"progress": 0.5,
"client_override": {
"status": "achieved",
"updated_at": "2023-11-07T05:31:56Z"
},
"effective_status": "not_started"
},
"sub_objectives": [
{
"id": "<string>",
"order_position": 1,
"completion_role": "blocking",
"computed_status": "not_started",
"progress": 0.5,
"client_override": {
"status": "achieved",
"updated_at": "2023-11-07T05:31:56Z"
},
"effective_status": "not_started"
}
]
},
"pending_decision": {
"decision_id": "<string>",
"candidates": [
{
"rank": 5,
"question_id": "<string>",
"text": "<string>",
"type": "open",
"choices": [
{
"choice_id": "<string>",
"label": "<string>"
}
],
"target_ids": [
"<string>"
]
}
]
},
"degraded": true,
"versions": {
"state_version": 1,
"engine_version": "<string>",
"api_version": "1.0"
}
}{
"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": "compiled_artifact_unavailable",
"message": "L'artefact moteur de cette session est temporairement indisponible.",
"request_id": "req_9010",
"details": {
"session_id": "ses_01J8Z"
}
}Lire l'état public d'une session
Renvoie l’état de reprise complet : en-tête, résultats des questions, cibles touchées, progressions et contrôles client, décision en attente avec tous ses candidats réhydratés.
Cette route rend inutile tout jeton de reprise côté client : après un crash,
relire la session suffit pour retrouver state_version et les candidats
exacts de la décision en attente.
Ne renvoie jamais les embeddings, références de stockage internes, prompts, traces LLM ni preuves sémantiques détaillées.
curl --request GET \
--url https://api.zelinqa.ai/v1/sessions/{session_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.zelinqa.ai/v1/sessions/{session_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.zelinqa.ai/v1/sessions/{session_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"request_id": "<string>",
"session_id": "<string>",
"client_reference": "<string>",
"status": "active",
"turn_count": 1,
"max_turns": 2,
"turns_remaining": 1,
"question_state": {
"outcomes": [
{
"question_id": "<string>",
"decision_id": "<string>",
"outcome": "asked_answered",
"source": "client",
"message_id": "<string>",
"occurred_at": "2023-11-07T05:31:56Z"
}
]
},
"targets": {},
"progress": {
"objective": {
"computed_status": "not_started",
"progress": 0.5,
"client_override": {
"status": "achieved",
"updated_at": "2023-11-07T05:31:56Z"
},
"effective_status": "not_started"
},
"sub_objectives": [
{
"id": "<string>",
"order_position": 1,
"completion_role": "blocking",
"computed_status": "not_started",
"progress": 0.5,
"client_override": {
"status": "achieved",
"updated_at": "2023-11-07T05:31:56Z"
},
"effective_status": "not_started"
}
]
},
"pending_decision": {
"decision_id": "<string>",
"candidates": [
{
"rank": 5,
"question_id": "<string>",
"text": "<string>",
"type": "open",
"choices": [
{
"choice_id": "<string>",
"label": "<string>"
}
],
"target_ids": [
"<string>"
]
}
]
},
"degraded": true,
"versions": {
"state_version": 1,
"engine_version": "<string>",
"api_version": "1.0"
}
}{
"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": "compiled_artifact_unavailable",
"message": "L'artefact moteur de cette session est temporairement indisponible.",
"request_id": "req_9010",
"details": {
"session_id": "ses_01J8Z"
}
}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.
Paramètres de chemin
Identifiant opaque de session attribué par NBQ à la création.
1 - 128Réponse
État public courant.
active, completed, stopped x >= 0x >= 1x >= 0Aucun index asked_ids, answered_ids ou refused_ids n'est persisté ni
exposé : ces ensembles se reconstruisent depuis outcomes.
Show child attributes
Show child attributes
État sparse : seules les cibles réellement touchées sont présentes. Une cible absente est inconnue et sans couverture.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Décision proposée et pas encore résolue. Les candidats sont réhydratés depuis la configuration épinglée : après un crash, relire la session suffit pour reprendre exactement où l'on s'était arrêté. Aucun jeton de reprise n'existe.
Show child attributes
Show child attributes
La version de configuration épinglée par la session n'est pas exposée : le client ne la choisit pas et ne doit pas s'y adosser.
Show child attributes
Show child attributes