Documentation
Branch Pilot expose un endpoint par décision. Cette page couvre l’authentification, les formats de requête et de réponse, les erreurs, et le passage du playground à la production.
Authentification
Créez une clé API dans Paramètres → Clés API. Les clés test et live se comportent de la même façon pour l’instant ; utilisez-les pour séparer vos environnements. Envoyez la clé comme jeton Bearer.
Authorization: Bearer bp_live_8ec3887f…Prendre une décision
Postez l’entrée attendue par votre décision. Les champs déclarés sont validés ; ceux marqués PII sont pseudonymisés avant tout appel au modèle.
curl -X POST https://api.branchpilot.ai/v1/decide/lead-routing \
-H "Authorization: Bearer bp_live_…" \
-H "Content-Type: application/json" \
-d '{
"input": {"email": "anna@acme.com", "message": "Could we get a quote for 40 seats?"},
"options": {"engine": "jev"}
}'input— string, object or array; validated against the declared fields.options.version— call a specific version instead of the live one.options.engine—"jev"or"llm"to force an engine for this call.
Réponse
status vaut ok, uncertain ou pending. Pour un routage, choice est l’option retenue ou "__uncertain__". Un score ajoute score (0–100), raw_score et legend ; une classification ajoute labels.
{
"run_id": "3f0b2c1e-…",
"decision": "lead-routing",
"version": 3,
"status": "ok",
"choice": "sales",
"probabilities": {"sales": 0.87, "support": 0.09, "spam": 0.04},
"confidence": 0.87,
"confidence_source": "calibrated",
"engine": "jev",
"model": "jev-1.13.0",
"latency_ms": 212,
"pii_redacted": 1
}{ "status": "uncertain", "choice": "__uncertain__", "confidence": 0.51, … }
{ "status": "pending", "review_url": "https://app.branchpilot.ai/review/…", … }Erreurs
| HTTP | code | |
|---|---|---|
400 | invalid_json, invalid_payload | Corps non JSON, ou entrée ne correspondant pas aux champs déclarés (details liste les problèmes). |
401 | unauthorized | Clé API absente, invalide ou révoquée. |
404 | not_found | Slug de décision ou version inconnu. |
409 | no_live_version | La décision n’a pas de version publiée. |
413 | payload_too_large | Corps supérieur à 128 Ko. |
429 | quota_exceeded | Quota mensuel atteint ; Retry-After indique la réinitialisation. |
502 | engines_unavailable | Aucun moteur n’a pu répondre (details liste les tentatives). |
{
"error": {
"code": "invalid_payload",
"message": "Input does not match the decision context",
"details": ["input.email: required"]
}
}Du playground à la production
Modifiez le brouillon, exécutez vos cas de test, publiez. L’endpoint sert toujours la version en ligne ; passez options.version pour en appeler une autre. Chaque appel est journalisé avec son entrée pseudonymisée, ses probabilités, son moteur, sa latence et son coût.
Spécification OpenAPI
L’API complète est décrite dans un document OpenAPI 3.1 importable dans Postman, Insomnia ou un générateur de code.