← Back to Blog
Tutorial · 10 min read

API v3 : Comment travailler avec les conversations par programmation

·
API v3 : Comment travailler avec les conversations par programmation

Informations de base

Propriété Valeur
URL de base /api/v3/conversation
Authentification Clé API avec le scope ayeto.conversation
Limite de débit Limites par défaut

Authentification

Clé API

Tous les endpoints nécessitent une clé API avec la permission (scope) ayeto.conversation.

En-tête d’authentification

uni-api-key: <YOUR_API_KEY>

Format de la clé API

La clé API a le format suivant :

ayeto-{64_caractères_hexadécimaux_aléatoires}

Exemple :

ayeto-a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2

Scopes

Pour utiliser les endpoints de conversation, la clé API doit avoir l’un des scopes suivants : - ayeto.conversation - scope spécifique aux conversations - * - scope générique (accès à tous les endpoints)

Réponses d’erreur d’authentification

Erreur Description
API key not provided L’en-tête uni-api-key est manquant ou vide.
API key is invalid La clé API n’existe pas, est désactivée ou n’a pas le scope requis.

Endpoints disponibles

Endpoint Méthode Description
/api/v3/conversation/find POST Rechercher des conversations
/api/v3/conversation/get POST Obtenir une seule conversation
/api/v3/conversation/delete POST Supprimer une conversation

Modèle de réponse - PublicConversationView

Tous les endpoints renvoient les conversations dans ce format :

Champ Type Description
id UUID Identifiant unique de la conversation.
name string Nom de la conversation.
model string ID du modèle LLM utilisé.
img_gen_model string ID du modèle de génération d’image.
summary string Résumé de la conversation (s’il est généré).
organization_id UUID \| null ID de l’organisation (si la conversation est dans un contexte organisationnel).
assistant_id UUID \| null ID de l’assistant (si un assistant a été utilisé).
messages BasicLLMMessageView[] Liste des messages de la conversation.
created ModelMeta Métadonnées de création.
updated ModelMeta Métadonnées de la dernière mise à jour.
accessed ModelMeta Métadonnées du dernier accès.

Modèle de message - BasicLLMMessageView

Champ Type Description
id UUID Identifiant unique du message.
timestamp integer Horodatage Unix de création du message (en millisecondes).
role string Rôle du message : system, user, assistant, tool, internal.
content string \| null Contenu textuel du message.
reasoning_content string \| null Contenu du raisonnement (si le modèle le prend en charge).
model string \| null ID du modèle utilisé pour ce message.
img_gen ImgGenMessage \| null Données d’image générée.

ModelMeta

Champ Type Description
user_id UUID \| null ID de l’utilisateur ayant effectué l’action.
timestamp integer Horodatage Unix de l’action (en millisecondes).

POST /api/v3/conversation/find

Rechercher des conversations avec prise en charge du filtrage, du tri et de la pagination.

Corps de la requête - DbParams

Les paramètres sont transmis en JSON dans le corps de la requête :

Paramètre Type Obligatoire Description
sort_key string Non Champ de tri (par ex. updated.timestamp, name).
sort_order integer Non Direction du tri : 0 = ASC, 1 = DESC.
limit_from integer Non Index de départ pour la pagination.
limit_to integer Non Index de fin pour la pagination.
filters array Non Tableau de filtres.

Filtres

Les filtres sont transmis comme un tableau de conditions :

["field", "operator", "value"]

Opérateurs pris en charge

Opérateur Description
== Égal à
!= Différent de
< Inférieur à
> Supérieur à
<= Inférieur ou égal à
>= Supérieur ou égal à
regex Expression régulière

Exemples de filtres

["name", "regex", ".*test.*"]
["model", "==", "gpt-4o"]
["updated.timestamp", ">", 1735815581000]
["assistant_id", "==", "123e4567-e89b-12d3-a456-426614174000"]

Réponse

[
  {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "name": "Ma conversation",
    "model": "gpt-4o",
    "img_gen_model": "dall-e-3",
    "summary": "Discussion sur la programmation Python...",
    "organization_id": null,
    "assistant_id": null,
    "messages": [
      {
        "id": "660e8400-e29b-41d4-a716-446655440001",
        "timestamp": 1735815581000,
        "role": "user",
        "content": "Bonjour, comment écrire une fonction en Python ?",
        "reasoning_content": null,
        "model": null,
        "img_gen": null
      },
      {
        "id": "770e8400-e29b-41d4-a716-446655440002",
        "timestamp": 1735815582000,
        "role": "assistant",
        "content": "Vous définissez une fonction en Python à l’aide du mot-clé `def`...",
        "reasoning_content": null,
        "model": "gpt-4o",
        "img_gen": null
      }
    ],
    "created": {
      "user_id": "880e8400-e29b-41d4-a716-446655440003",
      "timestamp": 1735815580000
    },
    "updated": {
      "user_id": "880e8400-e29b-41d4-a716-446655440003",
      "timestamp": 1735815582000
    },
    "accessed": {
      "user_id": null,
      "timestamp": 0
    }
  }
]

POST /api/v3/conversation/get

Obtenir une seule conversation par son ID.

Paramètres de requête

Paramètre Type Obligatoire Description
entity_id UUID Oui ID de la conversation.

Réponse

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "name": "Ma conversation",
  "model": "gpt-4o",
  "img_gen_model": "dall-e-3",
  "summary": "",
  "organization_id": null,
  "assistant_id": null,
  "messages": [...],
  "created": {...},
  "updated": {...},
  "accessed": {...}
}

POST /api/v3/conversation/delete

Supprimer une conversation par son ID.

Paramètres de requête

Paramètre Type Obligatoire Description
entity_id UUID Oui ID de la conversation à supprimer.

Réponse

Renvoie l’UUID de la conversation supprimée :

"550e8400-e29b-41d4-a716-446655440000"

Exemples cURL

1. Obtenir toutes les conversations

curl -X POST "https://beta.ayeto.ai/api/v3/conversation/find" \
  -H "uni-api-key: ayeto-a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2" \
  -H "Content-Type: application/json" \
  -d '{}'

2. Obtenir les conversations avec tri (les plus récentes d’abord)

curl -X POST "https://beta.ayeto.ai/api/v3/conversation/find" \
  -H "uni-api-key: ayeto-a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2" \
  -H "Content-Type: application/json" \
  -d '{
    "sort_key": "updated.timestamp",
    "sort_order": 1
  }'

3. Obtenir les conversations avec pagination (les 10 premières)

curl -X POST "https://beta.ayeto.ai/api/v3/conversation/find" \
  -H "uni-api-key: ayeto-a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2" \
  -H "Content-Type: application/json" \
  -d '{
    "sort_key": "updated.timestamp",
    "sort_order": 1,
    "limit_from": 0,
    "limit_to": 10
  }'

4. Obtenir les conversations avec un filtre (par modèle)

curl -X POST "https://beta.ayeto.ai/api/v3/conversation/find" \
  -H "uni-api-key: ayeto-a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2" \
  -H "Content-Type: application/json" \
  -d '{
    "filters": [["model", "==", "gpt-4o"]]
  }'

5. Obtenir les conversations avec un filtre (par nom - regex)

curl -X POST "https://beta.ayeto.ai/api/v3/conversation/find" \
  -H "uni-api-key: ayeto-a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2" \
  -H "Content-Type: application/json" \
  -d '{
    "filters": [["name", "regex", ".*Python.*"]]
  }'

6. Obtenir les conversations pour un assistant spécifique

curl -X POST "https://beta.ayeto.ai/api/v3/conversation/find" \
  -H "uni-api-key: ayeto-a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2" \
  -H "Content-Type: application/json" \
  -d '{
    "filters": [["assistant_id", "==", "123e4567-e89b-12d3-a456-426614174000"]]
  }'

7. Obtenir les conversations plus récentes qu’une date spécifique

curl -X POST "https://beta.ayeto.ai/api/v3/conversation/find" \
  -H "uni-api-key: ayeto-a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2" \
  -H "Content-Type: application/json" \
  -d '{
    "filters": [["created.timestamp", ">", 1735689600000]]
  }'

8. Combiner plusieurs filtres

curl -X POST "https://beta.ayeto.ai/api/v3/conversation/find" \
  -H "uni-api-key: ayeto-a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2" \
  -H "Content-Type: application/json" \
  -d '{
    "sort_key": "updated.timestamp",
    "sort_order": 1,
    "limit_from": 0,
    "limit_to": 20,
    "filters": [
      ["model", "==", "gpt-4o"],
      ["created.timestamp", ">", 1735689600000]
    ]
  }'

9. Obtenir une seule conversation par son ID

curl -X POST "https://beta.ayeto.ai/api/v3/conversation/get?entity_id=550e8400-e29b-41d4-a716-446655440000" \
  -H "uni-api-key: ayeto-a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2" \
  -H "Content-Type: application/json"

10. Supprimer une conversation

curl -X POST "https://beta.ayeto.ai/api/v3/conversation/delete?entity_id=550e8400-e29b-41d4-a716-446655440000" \
  -H "uni-api-key: ayeto-a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2" \
  -H "Content-Type: application/json"

11. cURL verbeux pour le débogage

curl -v -X POST "https://beta.ayeto.ai/api/v3/conversation/find" \
  -H "uni-api-key: ayeto-a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2" \
  -H "Content-Type: application/json" \
  -d '{
    "limit_from": 0,
    "limit_to": 5
  }'

États d’erreur

Statut HTTP Description
400 Requête incorrecte (paramètres invalides, format de filtre incorrect).
401 Clé API invalide ou manquante (en-tête uni-api-key).
403 Permissions insuffisantes (l’utilisateur n’a pas accès à la conversation).
404 Conversation introuvable.
500 Erreur interne du serveur.

Exemple de réponse d’erreur

{
  "detail": "not found, id: 550e8400-e29b-41d4-a716-446655440000"
}

Notes

  1. Permissions : L’utilisateur ne peut voir que ses propres conversations (les conversations qu’il a créées).
  2. Filtres : Plusieurs filtres dans le tableau sont appliqués avec une condition AND.
  3. Pagination : Pour un grand nombre de conversations, nous recommandons d’utiliser limit_from et limit_to.
  4. Tri : Le tri par défaut n’est pas défini ; nous recommandons de spécifier explicitement sort_key et sort_order.
  5. Horodatage : Tous les horodatages sont en millisecondes (Unix epoch * 1000).