curl --request GET \
--url https://api.zelinqa.ai/v1/configuration/audit \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.zelinqa.ai/v1/configuration/audit"
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/configuration/audit', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"request_id": "req_8aa1",
"events": [
{
"id": "109a34df-1b50-4ac3-9045-01934a2fe3d8",
"occurred_at": "2026-09-02T12:44:10Z",
"action": "configuration.question.deactivated",
"origin": "studio_jwt",
"actor": {
"type": "cognito_user",
"id": "714c7cd0-1096-47e4-9f6b-e73d907f281f"
},
"scopes": [
"configuration:read",
"configuration:write",
"configuration:publish"
],
"request_id": "req_71aa",
"resource": {
"type": "question",
"id": "q_style"
},
"diff": {
"before": {
"active": true
},
"after": {
"active": false
}
},
"details": {
"config_version_id": "8e9f2cf0-f25d-4900-a066-e87fe6424d0b",
"draft_revision": 43
}
}
],
"next_cursor": null
}Consulter le journal des changements
Renvoie les actions de configuration du NBQ, de la plus récente à la
plus ancienne. Cette lecture est réservée au scope
configuration:publish : le journal contient l’identité des opérateurs
et n’est pas une simple lecture du corpus.
Les différences sont volontairement structurelles. Elles indiquent la ressource et les champs modifiés, mais ne recopient jamais le texte des questions, les libellés, les prompts, les réponses d’un utilisateur ni une clé API en clair. L’identifiant d’une clé actrice est son empreinte SHA-256 déjà stockée par l’authorizer.
La pagination utilise un curseur opaque. Le journal des événements de session est séparé et n’est jamais renvoyé par cette route.
curl --request GET \
--url https://api.zelinqa.ai/v1/configuration/audit \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.zelinqa.ai/v1/configuration/audit"
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/configuration/audit', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"request_id": "req_8aa1",
"events": [
{
"id": "109a34df-1b50-4ac3-9045-01934a2fe3d8",
"occurred_at": "2026-09-02T12:44:10Z",
"action": "configuration.question.deactivated",
"origin": "studio_jwt",
"actor": {
"type": "cognito_user",
"id": "714c7cd0-1096-47e4-9f6b-e73d907f281f"
},
"scopes": [
"configuration:read",
"configuration:write",
"configuration:publish"
],
"request_id": "req_71aa",
"resource": {
"type": "question",
"id": "q_style"
},
"diff": {
"before": {
"active": true
},
"after": {
"active": false
}
},
"details": {
"config_version_id": "8e9f2cf0-f25d-4900-a066-e87fe6424d0b",
"draft_revision": 43
}
}
],
"next_cursor": null
}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 requête
1 <= x <= 200Curseur opaque renvoyé par la page précédente.
1 - 5121 - 160objective, sub_objective, success_information, question, configuration, api_key, nbq