Documentation API

Introduction

L'API Zubnet vous donne un accès programmatique à plus de 350 modèles d'IA pour la génération de texte, d'images, de vidéos, de musique, de voix et de code. Elle est entièrement compatible avec la spécification de l'API OpenAI — si vous utilisez déjà OpenAI, vous pouvez passer à Zubnet en changeant simplement votre URL de base et votre clé API.

URL de Base

https://api.zubnet.com/v1

Démarrage Rapide

# Avec curl
curl https://api.zubnet.com/v1/chat/completions \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-20250514",
    "messages": [{"role": "user", "content": "Hello!"}]
  }'
# Avec Python et le SDK OpenAI
from openai import OpenAI

client = OpenAI(
    api_key="your-zubnet-api-key",
    base_url="https://api.zubnet.com/v1"
)

response = client.chat.completions.create(
    model="claude-sonnet-4-20250514",
    messages=[{"role": "user", "content": "Hello!"}]
)

print(response.choices[0].message.content)

Authentification

Toutes les requêtes API nécessitent une authentification via un jeton Bearer dans l'en-tête Authorization.

Authorization: Bearer YOUR_API_KEY

Vous pouvez générer des clés API depuis les paramètres de votre compte. Gardez vos clés en sécurité — elles donnent un accès complet à votre compte.

Utiliser Vos Propres Clés Fournisseur (BYOK)

Vous pouvez également utiliser vos propres clés API de fournisseurs comme Anthropic, Google et plus de 40 autres. Ajoutez-les dans les paramètres de votre espace de travail et elles seront utilisées automatiquement pour les requêtes vers ces fournisseurs — sans aucune majoration.

Modèles

GET /v1/models

Lister tous les modèles disponibles.

curl https://api.zubnet.com/v1/models \
  -H "Authorization: Bearer $ZUBNET_API_KEY"
Réponse
{
  "object": "list",
  "data": [
    {
      "id": "claude-sonnet-4-20250514",
      "object": "model",
      "created": 1699900000,
      "owned_by": "anthropic"
    },
    {
      "id": "deepseek-chat",
      "object": "model",
      "created": 1699900000,
      "owned_by": "deepseek"
    },
    ...
  ]
}

Complétions de Chat

POST /v1/chat/completions

Créer une complétion de chat. C'est le endpoint principal pour la génération de texte, compatible avec le format des complétions de chat OpenAI.

Corps de la Requête

Paramètre Type Description
modelrequis string Identifiant du modèle à utiliser (ex. : "claude-sonnet-4-20250514", "deepseek-chat", "gemini-2.5-pro")
messagesrequis array Tableau d'objets message avec role et content
temperatureoptionnel number Température d'échantillonnage (0-2). Par défaut : 0.7
max_tokensoptionnel integer Nombre maximum de tokens à générer (1-128000). Par défaut : 4096
streamoptionnel boolean Diffuser les réponses via SSE. Par défaut : true
top_poptionnel number Paramètre d'échantillonnage nucleus (0-1). Par défaut : 1
frequency_penaltyoptionnel number Pénalité de fréquence (-2 à 2). Par défaut : 0
presence_penaltyoptionnel number Pénalité de présence (-2 à 2). Par défaut : 0
stopoptionnel string/array Séquences d'arrêt

Exemple de Requête

curl https://api.zubnet.com/v1/chat/completions \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-20250514",
    "messages": [
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "What is the capital of France?"}
    ],
    "temperature": 0.7,
    "max_tokens": 150
  }'
Réponse
{
  "id": "chatcmpl-abc123",
  "object": "chat.completion",
  "created": 1699900000,
  "model": "claude-sonnet-4-20250514",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "The capital of France is Paris."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 25,
    "completion_tokens": 8,
    "total_tokens": 33
  }
}

Génération de Code

POST /api/ai/completions/code

Générer du code à partir d'une description en langage naturel. Retourne une réponse en streaming via Server-Sent Events (SSE).

Corps de la Requête

Paramètre Type Description
promptrequis string Description en langage naturel du code à générer
languagerequis string Langage de programmation (ex. : "python", "javascript", "rust")
temperatureoptionnel number Température d'échantillonnage (0-2)
max_tokensoptionnel integer Nombre maximum de tokens à générer (1-128000)

Exemple de Requête

curl https://app.zubnet.ai/api/ai/completions/code \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A function that checks if a number is prime",
    "language": "python"
  }'
Ce endpoint diffuse via SSE. Vous recevrez des événements chunk avec du contenu incrémentiel, suivis d'un événement final document contenant le code complet généré.
Objet de Réponse Final
{
  "object": "code_document",
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "model": "claude-sonnet-4-20250514",
  "cost": 1,
  "title": "Prime Number Checker",
  "content": "def is_prime(n): ..."
}

Génération d'Images

POST /v1/images/generations

Générer des images à partir de descriptions textuelles en utilisant des modèles de FLUX, Stable Diffusion, Ideogram et d'autres.

Modèles Disponibles

flux-pro-1.1-ultra flux-pro-1.1 flux-2-pro flux-kontext-pro gen4_image ideogram-v3 hidream-i1-full

Corps de la Requête

Paramètre Type Description
modelrequis string Modèle d'image à utiliser
promptrequis string Description textuelle de l'image à générer
noptionnel integer Nombre d'images à générer. Par défaut : 1
sizeoptionnel string Taille de l'image (ex. : "1024x1024", "1792x1024")
response_formatoptionnel string "url" ou "b64_json". Par défaut : "url"

Exemple de Requête

curl https://api.zubnet.com/v1/images/generations \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "flux-pro-1.1-ultra",
    "prompt": "A serene mountain lake at sunset, photorealistic",
    "n": 1,
    "size": "1024x1024"
  }'
Réponse
{
  "created": 1699900000,
  "data": [
    {
      "url": "https://cdn.zubnet.ai/files/abc123.png",
      "revised_prompt": "A serene mountain lake..."
    }
  ]
}

Génération de Vidéos

POST /api/ai/videos

Générer des vidéos à partir de descriptions textuelles ou d'images. Supporte les workflows texte-vers-vidéo, image-vers-vidéo et vidéo-vers-vidéo.

Modèles Disponibles

veo-3.1-generate-001 veo-3.0-generate-001 kling-v2-5-turbo kling-v2-1-pro gen4_turbo gen4_aleph vidu-q2-pro pixverse-v4

Corps de la Requête

Paramètre Type Description
modelrequis string Modèle vidéo à utiliser
promptrequis* string Description textuelle de la vidéo. *Non requis pour les modèles de synchronisation labiale ou de mise à l'échelle
framesoptionnel file[] Images d'entrée pour image-vers-vidéo. Max 10 Mo chacune (jpg, png, webp)
videooptionnel file Vidéo d'entrée pour vidéo-vers-vidéo. Max 100 Mo (mp4, webm, mov)
audiooptionnel file Fichier audio pour les modèles de synchronisation labiale. Max 25 Mo
aspect_ratiooptionnel string Format d'image (ex. : "16:9", "9:16", "1:1")
durationoptionnel integer Durée de la vidéo en secondes

Exemple : Texte-vers-Vidéo

curl https://app.zubnet.ai/api/ai/videos \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "veo-3.1-generate-001",
    "prompt": "A drone shot flying over a coral reef at golden hour",
    "aspect_ratio": "16:9",
    "duration": 8
  }'

Exemple : Image-vers-Vidéo

curl https://app.zubnet.ai/api/ai/videos \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -F "model=kling-v2-5-turbo" \
  -F "prompt=Camera slowly zooms in" \
  -F "frames=@my-image.png"
La génération vidéo est asynchrone. La réponse inclut un champ state (« processing », « completed », « failed ») et un pourcentage de progress. Interrogez le endpoint de la bibliothèque pour vérifier l'état d'avancement.
Réponse
{
  "object": "video",
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "model": "veo-3.1-generate-001",
  "state": "processing",
  "progress": 0,
  "cost": 5,
  "output_file": null,
  "created_at": "2026-02-25T12:00:00Z"
}

Compréhension Vidéo

Analysez le contenu vidéo avec l'IA. Soumettez une URL vidéo pour analyse et interrogez les résultats. Prend en charge plusieurs types d'analyse.

POST /api/ai/video-understanding

Soumettre une vidéo pour analyse par IA. Retourne un identifiant de tâche que vous pouvez interroger pour obtenir les résultats.

Corps de la requête

Paramètre Type Description
video_urlrequis string URL HTTPS publique de la vidéo à analyser
typeoptionnel string Type d'analyse : summary (défaut), topics, chapters ou highlights

Exemple de requête

curl https://app.zubnet.ai/api/ai/video-understanding \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "video_url": "https://example.com/video.mp4",
    "type": "summary"
  }'
Réponse
{
  "job_id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "queued"
}
GET /api/ai/video-understanding/{jobId}

Vérifier le statut d'une tâche d'analyse vidéo.

Réponse (terminée)
{
  "status": "completed",
  "result": {
    "type": "summary",
    "content": "La vidéo montre une démonstration de produit..."
  }
}
Les URL vidéo doivent être des liens HTTPS accessibles publiquement. Les URL privées/internes sont rejetées pour des raisons de sécurité. Les résultats sont mis en cache pendant 1 heure.

Composition Musicale

POST /api/ai/compositions

Générer de la musique originale à partir de descriptions textuelles, de paroles ou de tags de style.

Modèles Disponibles

suno/v5 suno/v4.5-plus suno/v4.5 suno/v4 lyria-002

Corps de la Requête

Paramètre Type Description
modelrequis string Modèle musical à utiliser
promptoptionnel string Description de la musique ou paroles à mettre en musique
tagsoptionnel string Tags de genre et de style (ex. : "lo-fi, chill, jazz")
instrumentaloptionnel boolean Générer uniquement un instrumental (sans voix). Par défaut : false

Exemple de Requête

curl https://app.zubnet.ai/api/ai/compositions \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "suno/v5",
    "prompt": "An upbeat synthwave track about coding at 3am",
    "tags": "synthwave, electronic, upbeat",
    "instrumental": true
  }'
Les modèles Suno retournent généralement 2 variantes de composition par requête. Lyria retourne un seul extrait de 30 secondes à 48 kHz.
Réponse
[
  {
    "object": "composition",
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "model": "suno/v5",
    "title": "Midnight Code",
    "tags": "synthwave, electronic, upbeat",
    "cost": 2,
    "output_file": {
      "url": "https://cdn.zubnet.ai/files/abc123.mp3"
    }
  },
  {
    "object": "composition",
    "id": "550e8400-e29b-41d4-a716-446655440001",
    // ... seconde variante
  }
]

Effets Sonores

POST /api/ai/sound-effects

Générer des effets sonores à partir de descriptions textuelles.

Corps de la requête

Paramètre Type Description
modelrequis string Modèle d'effets sonores à utiliser
promptrequis string Description de l'effet sonore à générer

Exemple de requête

curl https://app.zubnet.ai/api/ai/sound-effects \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sound-effect-model",
    "prompt": "Tonnerre grondant au loin suivi de pluie forte"
  }'
Réponse
{
  "object": "sound_effect",
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "model": "sound-effect-model",
  "cost": 1,
  "output_file": {
    "url": "https://cdn.zubnet.ai/files/abc123.mp3"
  }
}

Synthèse Vocale

POST /v1/audio/speech

Convertir du texte en audio vocal au son naturel en utilisant des voix d'ElevenLabs, Cartesia, Speechify et d'autres.

Paramètre Type Description
modelrequis string Modèle TTS (ex. : "tts-1", "tts-1-hd", "elevenlabs")
inputrequis string Texte à convertir en voix (max 5000 caractères)
voicerequis string Identifiant de la voix (ex. : "alloy", "echo", "nova" ou un identifiant de voix personnalisée)
response_formatoptionnel string Format audio : mp3, opus, aac, flac. Par défaut : mp3

Exemple de Requête

curl https://api.zubnet.com/v1/audio/speech \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "tts-1-hd",
    "input": "Welcome to Zubnet, the future of AI.",
    "voice": "nova"
  }' --output speech.mp3

Transcription

POST /v1/audio/transcriptions

Transcrire de l'audio en texte.

Paramètre Type Description
modelrequis string Modèle de transcription (ex. : "whisper-1")
filerequis file Fichier audio à transcrire. Max 25 Mo (mp3, mp4, wav, webm, ogg, flac)
languageoptionnel string Code de langue (ex. : "en", "fr", "es")

Exemple de Requête

curl https://api.zubnet.com/v1/audio/transcriptions \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -F "model=whisper-1" \
  -F "file=@recording.mp3"
Réponse
{
  "object": "transcription",
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "model": "whisper-1",
  "content": "Hello, this is a test recording..."
}

Isolation Vocale

POST /api/ai/isolated-voices

Extraire des voix claires d'un fichier audio en supprimant le bruit de fond et la musique. Propulsé par ElevenLabs.

Paramètre Type Description
filerequis file Fichier audio. Max 25 Mo (mp3, mp4, wav, m4a, webm, ogg, flac)

Exemple de Requête

curl https://app.zubnet.ai/api/ai/isolated-voices \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -F "file=@noisy-recording.mp3"
Réponse
{
  "object": "isolated_voice",
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "cost": 1,
  "input_file": {
    "url": "https://cdn.zubnet.ai/files/input.mp3"
  },
  "output_file": {
    "url": "https://cdn.zubnet.ai/files/isolated.mp3"
  }
}

Séparation de Pistes

POST /api/ai/stem-separations

Séparer l'audio en pistes individuelles (voix, batterie, basse, guitare, piano, autre). Propulsé par ElevenLabs.

Paramètre Type Description
filerequis file Fichier audio. Max 25 Mo (mp3, mp4, wav, m4a, webm, ogg, flac)
stem_variationoptionnel string Mode de séparation. Par défaut : "six_stems_v1" (voix, batterie, basse, guitare, piano, autre)

Exemple de Requête

curl https://app.zubnet.ai/api/ai/stem-separations \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -F "file=@song.mp3"
Réponse
{
  "object": "stem_separation",
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "cost": 1,
  "input_file": {
    "url": "https://cdn.zubnet.ai/files/song.mp3"
  },
  "output_file": {
    "url": "https://cdn.zubnet.ai/files/stems.zip"
  }
}

Voix personnalisées

Créez et gérez des voix personnalisées pour la synthèse vocale.

POST /api/voices

Créer une voix personnalisée.

GET /api/voices

Lister toutes les voix disponibles dans votre espace de travail.

PUT /api/voices/{id}

Mettre à jour une voix personnalisée.

DELETE /api/voices/{id}

Supprimer une voix personnalisée.

Les identifiants de voix personnalisées peuvent être utilisés dans le paramètre voice de l'endpoint Synthèse Vocale.

Embeddings

POST /v1/embeddings

Créer des embeddings de texte pour la recherche sémantique et la similarité.

Paramètre Type Description
modelrequis string Modèle d'embedding (ex. : "text-embedding-3-small")
inputrequis string/array Texte à vectoriser (chaîne ou tableau de chaînes)

Exemple de Requête

curl https://api.zubnet.com/v1/embeddings \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "text-embedding-3-small",
    "input": "The quick brown fox jumps over the lazy dog"
  }'

Bases de connaissances

Créez et gérez des bases de connaissances pour la génération augmentée par récupération (RAG). Téléversez des documents (PDF, DOCX, TXT, Markdown) ou ajoutez des URL et du texte brut, puis interrogez-les dans vos complétions de chat.

POST /api/knowledge-bases

Créer une nouvelle base de connaissances.

Corps de la requête

Paramètre Type Description
namerequis string Nom de la base de connaissances
descriptionoptionnel string Description de la base de connaissances

Exemple : Créer une base de connaissances

curl https://app.zubnet.ai/api/knowledge-bases \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My KB",
    "description": "Optional description"
  }'
Réponse
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "name": "My KB",
  "description": "Optional description",
  "status": "active"
}
GET /api/knowledge-bases

Lister toutes les bases de connaissances de votre espace de travail.

Réponse
[
  {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "name": "My KB",
    "description": "Optional description",
    "status": "active"
  },
  ...
]
GET /api/knowledge-bases/{id}

Obtenir les détails d'une base de connaissances spécifique, y compris ses documents.

DELETE /api/knowledge-bases/{id}

Supprimer une base de connaissances et tous ses documents.

POST /api/knowledge-bases/{id}/documents

Ingérer un document dans une base de connaissances. Prend en charge le téléversement de fichiers, les URL et le texte brut.

Corps de la requête

Paramètre Type Description
fileoption 1 file Téléversement multipart (PDF, DOCX, TXT, MD — max 10 Mo)
titlerequis string Titre du document (requis pour les types URL et texte)
typeoption 2/3 string "url" ou "text" (pour l'ingération sans fichier)
urloption 2 string URL à récupérer et ingérer (lorsque le type est "url")
contentoption 3 string Contenu texte brut à ingérer (lorsque le type est "text")

Exemple : Ingérer un fichier

curl https://app.zubnet.ai/api/knowledge-bases/550e8400-.../documents \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -F "file=@report.pdf"

Exemple : Ingérer une URL

curl https://app.zubnet.ai/api/knowledge-bases/550e8400-.../documents \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Zubnet Docs",
    "type": "url",
    "url": "https://zubnet.ai/developers.html"
  }'

Exemple : Ingérer du texte brut

curl https://app.zubnet.ai/api/knowledge-bases/550e8400-.../documents \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Company Policy",
    "type": "text",
    "content": "All employees must complete security training annually..."
  }'
GET /api/knowledge-bases/{id}/documents

Lister tous les documents d'une base de connaissances.

DELETE /api/knowledge-bases/{id}/documents/{docId}

Supprimer un document spécifique d'une base de connaissances.

GET /api/knowledge-bases/{id}/documents/{docId}/content

Lire le contenu textuel extrait d'un document spécifique.

Reranking

POST /v1/reranking

Réordonner une liste de documents par pertinence par rapport à une requête. Utile pour améliorer les résultats de recherche, les pipelines RAG et les systèmes de recommandation.

Modèles disponibles

rerank-v4.0-pro rerank-v4.0-fast jina-reranker-v3 jina-reranker-m0 rerank-2.5 rerank-2.5-lite

Corps de la requête

Paramètre Type Description
modelrequis string Modèle de reranking à utiliser
queryrequis string La requête de recherche pour classer les documents
documentsrequis array Tableau de chaînes de documents à réordonner
top_noptionnel integer Nombre de résultats à retourner. Par défaut : tous

Exemple de requête

curl https://api.zubnet.ai/v1/reranking \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "rerank-v4.0-pro",
    "query": "How do I reset my password?",
    "documents": [
      "To reset your password, go to Settings > Security > Change Password.",
      "Our pricing plans start at $9/month for individuals.",
      "Password requirements: minimum 8 characters, one uppercase letter.",
      "Contact support at help@example.com for account issues."
    ],
    "top_n": 3
  }'
Réponse
{
  "object": "list",
  "results": [
    {
      "index": 0,
      "relevance_score": 0.953
    },
    {
      "index": 2,
      "relevance_score": 0.714
    },
    {
      "index": 3,
      "relevance_score": 0.389
    }
  ],
  "model": "rerank-v4.0-pro"
}
Les résultats sont triés par score de pertinence en ordre décroissant. Le champ index fait référence à la position de chaque document dans le tableau d'entrée original.

Bibliothèque

La bibliothèque contient tout le contenu généré — images, vidéos, compositions, documents de code, transcriptions et plus. Utilisez-la pour lister les éléments, vérifier le statut des générations asynchrones, mettre à jour les métadonnées et gérer votre contenu.

GET /api/library/{type}

Lister les éléments de votre bibliothèque par type de contenu.

Types de contenu

images videos compositions sound-effects documents code-documents speeches transcriptions isolated-voices stem-separations conversations

Paramètres de requête

Paramètre Type Description
limitoptionnel integer Résultats par page (max 100)
starting_afteroptionnel string Curseur de pagination (UUID de l'élément)
sortoptionnel string Tri et direction (ex. "created_at:desc")
queryoptionnel string Recherche plein texte (max 255 caractères)
modeloptionnel string Filtrer par modèle utilisé
GET /api/library/{type}/{id}

Récupérer un élément par ID. C'est l'endpoint principal pour vérifier le statut des générations asynchrones.

États de génération

État Valeur Description
draft0Non soumis
queued1En attente
processing2En cours
completed3Terminé — output_file disponible
failed4Échec

Pattern de polling

# 1. Start async generation
curl -X POST https://app.zubnet.ai/api/ai/videos \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "veo-3.1-generate-001", "prompt": "A coral reef"}'
# Returns: {"id": "550e8400-...", "state": 1, ...}

# 2. Poll for completion
curl https://app.zubnet.ai/api/library/videos/550e8400-... \
  -H "Authorization: Bearer $ZUBNET_API_KEY"
# Returns: {"state": 2, "progress": 45, ...}  (still processing)
# Returns: {"state": 3, "progress": 100, "output_file": {"url": "..."}}  (done!)
La pagination est basée sur un curseur. Utilisez l'id du dernier élément dans starting_after pour la page suivante.
POST /api/library/{type}/{id}

Mettre à jour les métadonnées d'un élément.

DELETE /api/library/{type}/{id}

Supprimer un élément et ses fichiers associés.

GET /api/library/{type}/count

Obtenir le nombre total d'éléments pour un type de contenu.

Assistants

Les assistants sont des préréglages de chat réutilisables avec un nom, un modèle, un prompt système et des paramètres personnalisés.

POST /api/assistants

Créer un nouvel assistant.

GET /api/assistants

Lister tous les assistants de votre espace de travail.

PUT /api/assistants/{id}

Mettre à jour la configuration d'un assistant.

DELETE /api/assistants/{id}

Supprimer un assistant.

Boutique MCP

Parcourez et activez des serveurs MCP (Model Context Protocol) pour donner à vos agents des capacités d'outils étendues.

GET /api/mcp-store/servers

Parcourir le catalogue de serveurs MCP.

POST /api/mcp-store/activations

Activer un serveur MCP pour votre espace de travail.

Les champs secrets de la config sont masqués dans les réponses API. L'id retourné est l'activation_id utilisé pour lier des serveurs MCP aux agents.
GET /api/mcp-store/activations

Lister tous les serveurs MCP activés dans votre espace de travail.

PUT /api/mcp-store/activations/{id}

Mettre à jour la configuration ou le statut d'une activation.

DELETE /api/mcp-store/activations/{id}

Désactiver un serveur MCP de votre espace de travail.

Agents

Créez et gérez des agents IA autonomes qui opèrent sur des canaux de communication. Les agents peuvent répondre aux messages sur Telegram et Discord, s'exécuter selon des déclencheurs programmés et exploiter des bases de connaissances et des serveurs MCP pour des capacités étendues.

POST /api/agents

Créer un nouvel agent.

Corps de la requête

Paramètre Type Description
namerequis string Nom de l'agent (max 64 caractères)
modelrequis string ID du modèle (ex. "claude-sonnet-4-20250514", "deepseek-chat")
system_promptoptionnel string Prompt système définissant le comportement et la personnalité de l'agent
modeoptionnel string "quick" ou "advanced". Par défaut : "quick"
avataroptionnel string URL de l'avatar (max 512 caractères)

Exemple de requête

curl https://app.zubnet.ai/api/agents \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Support Bot",
    "model": "claude-sonnet-4-20250514",
    "system_prompt": "You are a friendly support agent. Answer questions clearly and concisely.",
    "mode": "advanced"
  }'
Réponse (201 Created)
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "name": "Support Bot",
  "slug": "support-bot",
  "avatar": null,
  "model": "claude-sonnet-4-20250514",
  "system_prompt": "You are a friendly support agent...",
  "status": 1,
  "mode": "advanced",
  "permissions": {
    "time_windows": [],
    "frequency_cap": {
      "max_messages_per_hour": 60,
      "max_messages_per_day": 500
    },
    "channel_preferences": {},
    "allowed_actions": {
      "can_use_tools": true,
      "can_access_kb": true,
      "max_tool_calls_per_message": 5
    }
  },
  "cost": 0,
  "last_active_at": null,
  "created_at": 1709136000,
  "updated_at": null,
  "user": {
    "id": "a1b2c3d4-...",
    "first_name": "Jane",
    "last_name": "Doe",
    "avatar": "https://cdn.zubnet.ai/files/avatar.jpg"
  },
  "channels": []
}
GET /api/agents

Lister tous les agents de l'espace de travail. Prend en charge la pagination et le filtrage.

Paramètre Type Description
limitquery integer Résultats par page. Par défaut : 25
cursorquery string Curseur de pagination
sortquery string "name", "created_at" ou "last_active_at". Par défaut : "created_at"
directionquery string "asc" ou "desc"
statusquery integer Filtrer par statut : 0 (inactif), 1 (actif), 2 (en pause)
Réponse
{
  "object": "list",
  "data": [
    {
      "id": "550e8400-...",
      "name": "Support Bot",
      "slug": "support-bot",
      "model": "claude-sonnet-4-20250514",
      "status": 1,
      "mode": "advanced",
      "cost": 12.50,
      "last_active_at": 1709222400,
      "created_at": 1709136000,
      ...
    }
  ]
}
GET /api/agents/{id}

Obtenir les détails complets d'un agent, incluant ses canaux, serveurs MCP et bases de connaissances liés.

PUT /api/agents/{id}

Mettre à jour un agent. Tous les champs sont optionnels — seuls les champs fournis sont modifiés.

Corps de la requête

Paramètre Type Description
nameoptionnel string Nom de l'agent (max 64)
modeloptionnel string ID du modèle
system_promptoptionnel string|null Prompt système (null pour effacer)
statusoptionnel integer 0 (inactif), 1 (actif) ou 2 (en pause)
modeoptionnel string "quick" ou "advanced"
permissionsoptionnel object Permissions de l'agent (voir ci-dessous)

Objet Permissions

{
  "permissions": {
    "time_windows": [
      {
        "days": [1, 2, 3, 4, 5],  // 0=Dim, 6=Sam
        "timezone": "America/Montreal",
        "start_hour": 9,            // 0-23
        "end_hour": 17              // 1-24
      }
    ],
    "frequency_cap": {
      "max_messages_per_hour": 60,    // 1-1000
      "max_messages_per_day": 500     // 1-10000
    },
    "channel_preferences": {
      "default_channel": "telegram",
      "proactive_channels": ["telegram", "discord"]
    },
    "allowed_actions": {
      "can_use_tools": true,
      "can_access_kb": true,
      "max_tool_calls_per_message": 5  // 0-50
    }
  }
}
DELETE /api/agents/{id}

Supprimer un agent. Cela supprime aussi tous ses canaux, déclencheurs, messages et intégrations.

Intégrations

POST /api/agents/{id}/knowledge-bases

Lier une base de connaissances à un agent pour des réponses alimentées par RAG. Corps : { "knowledge_base_id": "uuid" }

DELETE /api/agents/{id}/knowledge-bases/{kid}

Délier une base de connaissances d'un agent.

POST /api/agents/{id}/mcp-servers

Lier un serveur MCP à un agent pour des outils étendus. Corps : { "activation_id": "uuid" }

DELETE /api/agents/{id}/mcp-servers/{activationId}

Délier un serveur MCP d'un agent.

GET /api/agents/{id}/messages

Récupérer l'historique des conversations d'un agent.

Paramètre Type Description
limitquery integer Nombre de messages à retourner. Par défaut : 25, max : 100
Réponse
{
  "object": "list",
  "data": [
    {
      "id": "msg-uuid-...",
      "direction": "inbound",
      "content": "How do I reset my password?",
      "external_user_name": "john_doe",
      "cost": 0,
      "model": null,
      "created_at": 1709222400
    },
    {
      "id": "msg-uuid-...",
      "direction": "outbound",
      "content": "Go to Settings > Security > Change Password...",
      "cost": 0.25,
      "model": "claude-sonnet-4-20250514",
      "created_at": 1709222401
    }
  ]
}
Les agents nécessitent l'activation de la fonctionnalité Agents dans votre plan. Les limites du plan s'appliquent au nombre d'agents, de canaux par agent et de déclencheurs par agent.

Canaux d'agent

Connectez des agents à des plateformes de communication. Chaque agent supporte un canal par type (un bot Telegram, un bot Discord).

POST /api/agents/{id}/channels

Ajouter un canal de communication à un agent.

Corps de la requête

Paramètre Type Description
typerequis string "telegram" ou "discord"
tokenrequis string Jeton du bot Telegram BotFather ou Discord Developer Portal (max 256)

Exemple de requête

curl https://app.zubnet.ai/api/agents/550e8400-.../channels \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "telegram",
    "token": "7123456789:AAH..."
  }'
Réponse (201 Created)
{
  "id": "ch-uuid-...",
  "type": "telegram",
  "status": 1,
  "metadata": {},
  "last_error": null,
  "last_message_at": null,
  "created_at": 1709136000
}
Les jetons de bot sont validés auprès de l'API de la plateforme avant activation et chiffrés au repos. Pour Telegram, un webhook est automatiquement configuré. Statut du canal : 0 = inactif, 1 = actif, 2 = erreur.
GET /api/agents/{id}/channels

Lister tous les canaux connectés à un agent.

DELETE /api/agents/{id}/channels/{channelId}

Supprimer un canal d'un agent.

Déclencheurs d'agent

Automatisez les actions des agents avec des déclencheurs. Les déclencheurs programmés utilisent des expressions cron pour s'exécuter à des heures spécifiques ; les déclencheurs d'événement se déclenchent en réponse à des événements externes.

POST /api/agents/{id}/triggers

Créer un déclencheur automatisé pour un agent.

Corps de la requête

Paramètre Type Description
namerequis string Nom du déclencheur (max 128)
typerequis string "scheduled" ou "event"
promptrequis string Le prompt envoyé à l'agent lorsque le déclencheur s'active
cron_expressionoptionnel string Expression cron (ex. "0 9 * * 1-5" pour les jours de semaine à 9h)
timezoneoptionnel string Fuseau horaire IANA pour l'évaluation cron. Par défaut : "UTC"
channel_idoptionnel string Canal vers lequel envoyer la sortie du déclencheur

Exemple : Déclencheur de résumé quotidien

curl https://app.zubnet.ai/api/agents/550e8400-.../triggers \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Daily Summary",
    "type": "scheduled",
    "prompt": "Summarize the key metrics for today and send them to the team.",
    "cron_expression": "0 18 * * 1-5",
    "timezone": "America/Montreal"
  }'
Réponse (201 Created)
{
  "id": "tr-uuid-...",
  "name": "Daily Summary",
  "type": "scheduled",
  "status": 1,
  "cron_expression": "0 18 * * 1-5",
  "timezone": "America/Montreal",
  "prompt": "Summarize the key metrics for today...",
  "channel_id": null,
  "last_run_at": null,
  "next_run_at": 1709236800,
  "run_count": 0,
  "created_at": 1709136000
}
GET /api/agents/{id}/triggers

Lister tous les déclencheurs d'un agent.

PUT /api/agents/{id}/triggers/{triggerId}

Mettre à jour un déclencheur. Tous les champs sont optionnels. Mettez status à 0 pour désactiver ou 1 pour activer.

DELETE /api/agents/{id}/triggers/{triggerId}

Supprimer un déclencheur.

Les déclencheurs programmés sont exécutés de manière asynchrone via une file de messages. Chaque exécution vérifie que l'agent est actif et que l'espace de travail dispose de crédits suffisants avant le traitement.

Espaces de travail

Les espaces de travail sont l'unité organisationnelle de votre équipe. Chaque espace a son propre solde de crédits, abonnement, clés API et membres. Gérez les espaces, invitez des membres et suivez l'utilisation.

POST /api/workspaces

Créer un nouvel espace de travail.

Paramètre Type Description
namerequis string Nom de l'espace de travail (max 50 caractères)
Réponse (201 Created)
{
  "id": "550e8400-...",
  "name": "Mon Équipe",
  "subscription": null,
  "api_spending_limit": null,
  "api_spending_current": 0,
  "owner": { "id": "...", "email": "..." },
  "created_at": "2026-03-01T12:00:00Z"
}
POST /api/workspaces/{id}

Mettre à jour les paramètres d'un espace de travail. Nécessite la permission de gestion.

Paramètre Type Description
nameoptionnel string Nom de l'espace (max 50 caractères)
api_spending_limitoptionnel number Plafond de dépenses API mensuel (null pour illimité)
{provider}_api_keyoptionnel string Clé API BYOK pour un fournisseur (ex. openai_api_key, anthropic_api_key)
DELETE /api/workspaces/{id}

Supprimer un espace de travail. Nécessite la permission de gestion.

POST /api/workspaces/{id}/invitations

Inviter un utilisateur à rejoindre l'espace par courriel. Maximum 20 invitations en attente par espace.

Paramètre Type Description
emailrequis string Adresse courriel de l'utilisateur à inviter
DELETE /api/workspaces/{id}/invitations/{invitationId}

Annuler une invitation en attente.

DELETE /api/workspaces/{id}/users/{userId}

Retirer un membre de l'espace, ou quitter l'espace en utilisant votre propre identifiant utilisateur.

GET /api/workspaces/{id}/logs/usage

Lister les statistiques d'utilisation agrégées. Pagination par curseur.

GET /api/workspaces/{id}/logs/usage/items

Lister les entrées d'utilisation détaillées (items complétés avec coût > 0). Chaque entrée inclut le type, le modèle, le titre, le coût et l'horodatage.

GET /api/workspaces/{id}/logs/usage/items/count

Obtenir le nombre total d'items d'utilisation.

Les endpoints d'utilisation et de gestion d'espace nécessitent la permission de gestion de l'espace (propriétaire ou admin).

Conversations

Les conversations regroupent les messages de chat en sessions. Créez d'abord une conversation, puis envoyez-y des messages. Les conversations peuvent aussi être gérées via l'API Bibliothèque avec le type conversations.

POST /api/ai/conversations

Créer une nouvelle conversation. Retourne l'objet conversation avec une liste de messages vide.

Réponse
{
  "object": "conversation",
  "id": "550e8400-...",
  "title": null,
  "cost": 0,
  "messages": [],
  "created_at": "2026-03-01T12:00:00Z"
}
POST /api/ai/conversations/{id}/messages

Envoyer un message à une conversation et recevoir une réponse IA via Server-Sent Events (SSE). Voir la section Complétions de Chat pour le format des événements SSE.

Corps de la requête

Paramètre Type Description
modelrequis string Modèle à utiliser pour la réponse
contentoptionnel string Texte du message
assistant_idoptionnel string UUID d'un assistant à utiliser pour ce message
parent_idoptionnel string UUID d'un message parent (pour les conversations branchées)
fileoptionnel file Pièce jointe (images, documents, audio/vidéo — max 25 Mo)
recordingoptionnel file Enregistrement vocal (mp3, wav, webm, ogg — max 10 Mo)

Exemple de requête

curl https://app.zubnet.ai/api/ai/conversations/550e8400-.../messages \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4.1",
    "content": "Expliquez l informatique quantique en termes simples"
  }'
Les messages sont diffusés via SSE. Utilisez multipart/form-data pour téléverser des fichiers. Pour lister ou supprimer des conversations, utilisez l'API Bibliothèque avec le type conversations.

Compte

Gérez votre profil utilisateur et générez des clés API par programmation.

PUT /api/account

Mettre à jour vos informations de profil.

Paramètre Type Description
first_nameoptionnel string Prénom (max 50 caractères)
last_nameoptionnel string Nom (max 50 caractères)
languageoptionnel string Code de langue préféré (ex. « en », « fr »)
preferencesoptionnel object Paramètres de préférences utilisateur
POST /api/account/rest-api-keys

Générer une nouvelle clé API. Nécessite la confirmation du mot de passe. La clé complète n'est affichée qu'une seule fois dans cette réponse — conservez-la en lieu sûr.

Paramètre Type Description
current_passwordrequis string Votre mot de passe actuel
Réponse
{
  "id": "550e8400-...",
  "first_name": "Jane",
  "last_name": "Doe",
  "email": "jane@example.com",
  "api_key": "zub_live_a1b2c3d4e5f6..."
}
La valeur api_key n'est affichée en entier que dans cette réponse. Les appels subséquents retournent une version masquée. Traitez-la comme un mot de passe.

Facturation

Parcourez les plans disponibles, consultez l'historique des commandes, lancez un paiement et gérez les abonnements.

GET /api/billing/plans

Lister les plans d'abonnement disponibles.

Paramètre Type Description
billing_cycleoptionnel string Filtrer par cycle de facturation
GET /api/billing/orders

Lister les commandes de l'espace de travail actuel. Pagination par curseur.

Paramètre Type Description
statusoptionnel string Filtrer par statut de commande
billing_cycleoptionnel string Filtrer par cycle de facturation
POST /api/billing/checkout

Lancer un paiement pour un plan d'abonnement ou un achat de crédits. Nécessite la permission de gestion de l'espace.

Paramètre Type Description
idoptionnel string UUID du plan (requis si pas de amount)
amountoptionnel integer Montant d'achat de crédits en centimes (min 1000, requis si pas de id)
gatewayoptionnel string Passerelle de paiement : stripe ou paypal
DELETE /api/billing/subscription

Annuler l'abonnement de l'espace de travail actuel. Nécessite la permission de gestion.

Signalements de contenu

Signaler du contenu inapproprié ou enfreignant les règles dans la bibliothèque publique.

POST /api/content-reports

Soumettre un signalement de contenu. Chaque utilisateur ne peut signaler un élément donné qu'une seule fois.

Paramètre Type Description
item_idrequis string UUID de l'élément de bibliothèque à signaler
reasonrequis integer Code de raison : 0 (spam), 1 (harcèlement), 2 (violence), 3 (contenu sexuel), 4 (autre)
descriptionoptionnel string Détails supplémentaires (max 2000 caractères)
Réponse (201 Created)
{
  "id": "550e8400-e29b-41d4-a716-446655440000"
}
Les signalements en double (même utilisateur + même élément) retournent une erreur 409 Conflict.

Erreurs

L'API utilise les codes de statut HTTP standards et retourne des messages d'erreur détaillés.

Code Description
400 Requête Invalide — Paramètres invalides
401 Non Autorisé — Clé API invalide ou manquante
403 Interdit — Crédits insuffisants ou modèle non disponible sur votre plan
404 Non Trouvé — Modèle ou ressource introuvable
413 Charge Trop Volumineuse — Le fichier dépasse la limite de taille
429 Trop de Requêtes — Limite de débit dépassée
500 Erreur Interne du Serveur
503 Service Indisponible — Surcharge temporaire
Format de Réponse d'Erreur
{
  "error": {
    "message": "Invalid API key provided",
    "type": "authentication_error",
    "code": "invalid_api_key"
  }
}

Limites de Requêtes

Les limites de débit varient selon le plan. Des en-têtes sont inclus dans chaque réponse :

En-tête Description
X-RateLimit-Limit Requêtes autorisées par minute
X-RateLimit-Remaining Requêtes restantes dans la fenêtre actuelle
X-RateLimit-Reset Horodatage Unix de la réinitialisation de la limite

Si vous atteignez une limite de débit, attendez la réinitialisation ou contactez-nous pour augmenter vos limites.

Besoin d'Aide ?

Nous Sommes Là Pour Vous

Des questions sur l'API ? Consultez notre FAQ ou contactez-nous directement.