Skip to main content
Tous les exemples utilisent des requêtes HTTP classiques. Les en-têtes et corps sont encodés en JSON UTF-8.

1. Authentification

Chaque requête doit contenir l’en-tête :
API_TOKEN_DE_LA_SOCIETE correspond au champ api_token de la table company. Si l’en-tête est manquant ou invalide, le serveur renvoie 401 Unauthorized.

2. Créer / mettre à jour un client

POST /api/v1/customers

Réponses possibles

Exemple de requête


2bis. Récupérer un client

GET /api/v1/customers Permet de récupérer les informations d’un client existant à partir de son identifiant.

Paramètres de requête (query string)

Réponses possibles

Exemple de requête

Réponse :

3. Envoyer une question à un agent

POST /api/v1/responses Aucun uuid n’est requis : le serveur génère un identifiant de message unique. Si files est fourni, l’assistant doit utiliser un modèle vision (vision activée), sinon la requête échoue en 403. Les fichiers peuvent être envoyés :
  • en JSON via files (URL publique ou data: URL base64) ;
  • en multipart/form-data via un champ files (un ou plusieurs fichiers).

Réponses (mode stream)

  • 200 OK : renvoie un flux texte text/html; charset=utf-8 dont chaque chunk est une partie de la réponse. Le flux se termine par le marqueur :EOS:.
  • Autres codes d’erreur : voir tableau ci-dessous.

Réponses (mode non stream)

Exemple : réponse complète (stream = false)

Réponse :

Exemple : question avec fichiers (stream = false)

Exemple : envoi multipart/form-data

Exemple : plusieurs fichiers (multipart/form-data)

Exemple : réponse en flux (stream = true)

Le flux affiche progressivement la réponse puis se termine par :EOS:.

3bis. Récupérer l’historique d’une conversation

GET /api/v1/responses Permet de récupérer l’historique complet (questions/réponses) d’une conversation entre un client et un agent, au format JSON.

Paramètres de requête (query string)

L’authentification se fait via le header :

Réponse

Chaque message du tableau contient :
  • message : texte de la question ou réponse
  • buttons : tableau d’options (si présent)
  • message_type : “Question” ou “Answer”
  • created_at : date ISO

Exemple de requête

Réponse :

3ter. Alimenter la base documentaire d’un agent

Ces points de terminaison permettent à une intégration externe (par exemple un workflow n8n) d’envoyer, lister et supprimer les documents d’un agent. L’API utilise automatiquement le RAG interne ou le Vector Store OpenAI/Azure configuré sur l’agent.
L’agent est désigné par son UUID dans l’URL. L’agentUUID doit appartenir à la société propriétaire du token.

POST — Ajouter (ou mettre à jour) un document

POST /api/v1/agents/{agentUUID}/rag-resources Envoi en multipart/form-data.
ℹ️ Pour un agent OpenAI/Azure, le champ id retourné est l’identifiant du fichier du Vector Store. Il sert également à le supprimer avec la route DELETE.

Réponses possibles

Exemple

GET — Lister les documents et leur statut

GET /api/v1/agents/{agentUUID}/rag-resources Renvoie le tableau des documents de l’agent, depuis son RAG interne ou son Vector Store, triés du plus récent au plus ancien (résultats paginés). À utiliser pour suivre l’ingestion (status passe de PENDINGPROCESSINGREADY, ou FAILED).

Paramètres de requête (query string)

Réponse :

DELETE — Supprimer un document par clé externe

DELETE /api/v1/agents/{agentUUID}/rag-resources/{externalId} Supprime le document (et ses vecteurs). Pour le RAG interne, utilisez son externalId. Pour un Vector Store, utilisez l’id de fichier retourné par POST ou GET.

4. Codes d’erreur communs


5. Bonnes pratiques

  1. Timeout côté client : pour le mode stream, coupez la connexion si aucun chunk n’est reçu depuis >20 s.
  2. Réessais : en cas de 500 réessayez avec back-off exponentiel.
  3. Sécurité : stockez l’API_TOKEN côté serveur uniquement.

6. Détails techniques du mode stream

Le mode streaming (stream: true, valeur par défaut) utilise un ReadableStream HTTP côté serveur.

Format

  • Content-Type : text/html; charset=utf-8
  • Chaque chunk contient un fragment de texte de la réponse de l’agent, encodé en UTF-8.
  • Le flux se termine par le marqueur :EOS: (End Of Stream).
  • Le timeout serveur est de 120 secondes (maxDuration). Si l’agent met plus longtemps à répondre, la connexion sera coupée.

Backpressure

Le serveur utilise le mécanisme pull() du ReadableStream : les chunks sont mis en file d’attente et envoyés dès que le client est prêt à les consommer. Si le client lit lentement, le serveur met les données en tampon.

Interruption

Si le client ferme la connexion (signal abort), le serveur interrompt la génération et pousse un message d’abandon dans le flux avant de le fermer.

Multipart/form-data

Le streaming fonctionne aussi avec un envoi multipart/form-data (pour joindre des fichiers). Les champs texte (companyIdentifier, agentUUID, question, stream) sont lus depuis le FormData, et les fichiers sont convertis en data: URL base64 avant d’être transmis à l’assistant.