curl --request POST \
--url https://api.zelinqa.ai/v1/configuration/publish \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '{}'{
"request_id": "req_82bd",
"compilation_id": "cmp_01K2QF",
"status": "queued",
"draft_revision": 42,
"created_at": "2026-09-01T09:20:11Z",
"updated_at": "2026-09-01T09:20:11Z",
"progress": 0,
"error": null,
"configuration_version": null
}Publier le brouillon
Valide le brouillon, crée un job de compilation et retourne immédiatement
202 Accepted. La compilation ne s’exécute jamais dans la requête HTTP :
un corpus important demande plusieurs lots LLM, bien au-delà de la limite de
la passerelle.
Le brouillon ne devient la configuration active qu’à la fin de la compilation. Une ancienne version compilée reste lisible pour terminer les sessions qui l’utilisent déjà.
Un second publish du même NBQ alors qu’un job est queued ou running
retourne 409 compilation_in_progress avec le compilation_id en cours.
Suivre l’avancement avec
GET /v1/configuration/compilations/{compilation_id}.
curl --request POST \
--url https://api.zelinqa.ai/v1/configuration/publish \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '{}'{
"request_id": "req_82bd",
"compilation_id": "cmp_01K2QF",
"status": "queued",
"draft_revision": 42,
"created_at": "2026-09-01T09:20:11Z",
"updated_at": "2026-09-01T09:20:11Z",
"progress": 0,
"error": null,
"configuration_version": 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.
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 - 128Corps
Refuse la publication si le brouillon a changé depuis cette révision. Recommandé depuis Studio pour éviter de publier le travail d'un autre éditeur.
x >= 0Réponse
Job de compilation créé.
1 - 128queued, running, succeeded, failed x >= 0Avancement indicatif, sans garantie de linéarité.
0 <= x <= 1Cause bornée d'un échec de compilation. Aucune trace interne, aucun prompt et aucun contenu de lot n'est exposé.
details n'est renseigné que pour validation_failed, dont les erreurs sont
corrigeables par l'éditeur ; pour llm_unavailable, timeout et
internal_error, il reste absent.
Show child attributes
Show child attributes
Version désormais active, renseignée uniquement en succeeded.