curl --request GET \
--url https://api.zelinqa.ai/v1/configuration/questions \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.zelinqa.ai/v1/configuration/questions"
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/questions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"request_id": "req_1006",
"state": "published",
"total": 3,
"next_cursor": null,
"questions": [
{
"id": "q_style",
"text": "Quel style de canapé recherchez-vous ?",
"type": "single_choice",
"sub_objective_id": "so_besoin",
"active": true,
"choices": [
{
"id": "choice_contemporain",
"label": "Contemporain"
},
{
"id": "choice_scandinave",
"label": "Scandinave"
},
{
"id": "choice_classique",
"label": "Classique"
}
]
},
{
"id": "q_budget",
"text": "Quel budget souhaitez-vous consacrer au canapé ?",
"type": "open",
"sub_objective_id": "so_budget",
"active": true,
"choices": []
}
]
}{
"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_configuration",
"message": "Aucun brouillon n'existe pour cette configuration.",
"request_id": "req_9008",
"details": {
"state": "draft"
}
}Lister les questions
Liste paginée et filtrable du corpus. format=csv renvoie le même jeu de
données en text/csv, colonnes stables et documentées, pour export vers un
tableur ou réimport.
La pagination est par curseur opaque : passer cursor reçu dans
next_cursor pour obtenir la page suivante. next_cursor vaut null sur
la dernière page.
curl --request GET \
--url https://api.zelinqa.ai/v1/configuration/questions \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.zelinqa.ai/v1/configuration/questions"
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/questions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"request_id": "req_1006",
"state": "published",
"total": 3,
"next_cursor": null,
"questions": [
{
"id": "q_style",
"text": "Quel style de canapé recherchez-vous ?",
"type": "single_choice",
"sub_objective_id": "so_besoin",
"active": true,
"choices": [
{
"id": "choice_contemporain",
"label": "Contemporain"
},
{
"id": "choice_scandinave",
"label": "Scandinave"
},
{
"id": "choice_classique",
"label": "Classique"
}
]
},
{
"id": "q_budget",
"text": "Quel budget souhaitez-vous consacrer au canapé ?",
"type": "open",
"sub_objective_id": "so_budget",
"active": true,
"choices": []
}
]
}{
"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_configuration",
"message": "Aucun brouillon n'existe pour cette configuration.",
"request_id": "req_9008",
"details": {
"state": "draft"
}
}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
draft exige configuration:write, contrôlé par le service et non
par l'authorizer, qui ne voit pas les paramètres de requête.
published, draft 1 - 128Filtre sur le drapeau d'activation.
open: réponse libre, aucun choix ;single_choice: un seul choix parmi la liste ;multiple_choice: plusieurs choix possibles ;semi_open: choix proposés, complément libre autorisé viastructured_answer.free_text.
Le mode de sélection est porté par le type lui-même : aucun champ
selection_mode séparé n'existe en V1.
open, single_choice, multiple_choice, semi_open Recherche textuelle simple sur le libellé de la question.
1 - 2001 <= x <= 200Curseur opaque renvoyé par l'appel précédent.
1 - 512csv ignore la pagination par curseur et renvoie l'intégralité du
corpus filtré en text/csv.
json, csv Réponse
Page de questions, ou export complet en CSV.
published, draft Show child attributes
Show child attributes
Curseur de la page suivante, null sur la dernière page.
Nombre total de questions correspondant au filtre.
x >= 0