Aller au contenu

Documentation

Une base, une clé, des modèles nommés par Kairo. Les exemples sont en cURL, JavaScript et Python.

Démarrage

Créez un compte. La clé offerte apparaît dans Clés API : copiez-la tout de suite, elle ne sera plus affichée. Placez-la dans KAIRO_API_KEY. La base est https://kairo.studiofude.com/v1.

Premier appel
curl https://kairo.studiofude.com/v1/chat/completions \  -H "Authorization: Bearer $KAIRO_API_KEY" \  -H "Content-Type: application/json" \  -d '{  "model": "kairo-text",  "messages": [    {      "role": "user",      "content": "Dis bonjour en une phrase."    }  ]}'

Authentification

Chaque requête porte Authorization: Bearer sk-kairo-…. Une clé désactivée, supprimée, ou au-delà de son plafond, est refusée. Le compte suspendu aussi. Il n'y a pas de clé publique.

Crédits et unités

1 crédit = 1 XAF. Le texte est facturé par million de tokens, entrée et sortie séparées. La vision et le JSON se comptent aussi en tokens, au même tarif que le texte ; chaque image envoyée compte pour environ 258 tokens d'entrée. kairo-search ajoute 3 crédits par requête aux tokens. Une image générée coûte un forfait. La voix et la transcription se comptent à la minute, arrondies au centième de crédit. En dessous de 0,01 crédit, l'appel est compté 0,01. Si le solde ne couvre pas l'appel, rien n'est débité.

Exemple kairo-text, 2 000 tokens entrée et 1 000 sortie : 0,04 + 0,08 = 0,12 crédit. Même volume sur kairo-search : 3 + 0,12 = 3,12 crédits.

Points d'accès

MéthodeCheminModèles
POST/chat/completionskairo-text, kairo-vision, kairo-json, kairo-search
POST/images/generationskairo-image
POST/images/editskairo-image-edit
POST/audio/speechkairo-voice
POST/audio/transcriptionskairo-transcribe
GET/modelscatalogue et prix
GET/creditssolde de la clé

Texte

kairo-text couvre le chat, la rédaction, le code, les outils (tool calls) et le streaming.

curl https://kairo.studiofude.com/v1/chat/completions \  -H "Authorization: Bearer $KAIRO_API_KEY" \  -H "Content-Type: application/json" \  -d '{  "model": "kairo-text",  "messages": [    {      "role": "user",      "content": "Explique ce bug en cinq lignes, puis propose le correctif."    }  ]}'

Recherche web

kairo-search répond avec des informations récentes du web : actualité, prix, résultats, annonces du jour. Les liens vers les sources sont dans le texte, en markdown. La réponse garde la forme OpenAI ; un champ sources en plus liste les liens cités ({ title, url }). Avec stream: true, la réponse arrive en un bloc puis se termine normalement, et sources est dans le dernier fragment. Prix : 3 crédits par requête, plus les tokens au tarif de kairo-text. Comptez 15 à 60 secondes.

curl https://kairo.studiofude.com/v1/chat/completions \  -H "Authorization: Bearer $KAIRO_API_KEY" \  -H "Content-Type: application/json" \  -d '{  "model": "kairo-search",  "messages": [    {      "role": "user",      "content": "Quelles sont les principales actualités d'aujourd'hui au Cameroun ? Cite tes sources."    }  ]}'
{
  "object": "chat.completion",
  "model": "kairo-search",
  "choices": [{ "message": { "role": "assistant", "content": "… [Cameroon Tribune](https://…) …" } }],
  "usage": { "prompt_tokens": 24, "completion_tokens": 610, "total_tokens": 634 },
  "sources": [{ "title": "Cameroon Tribune", "url": "https://…" }]
}

Image

Formats : 1024×1024, 1024×768, 768×1024. La retouche envoie le fichier source.

Génération
curl https://kairo.studiofude.com/v1/images/generations \  -H "Authorization: Bearer $KAIRO_API_KEY" \  -H "Content-Type: application/json" \  -d '{  "model": "kairo-image",  "prompt": "Marché au lever du soleil, parasols ocre, sans texte.",  "size": "1024x1024"}'
Retouche
curl https://kairo.studiofude.com/v1/images/edits \  -H "Authorization: Bearer $KAIRO_API_KEY" \  -H "Content-Type: application/json" \  -d '{  "model": "kairo-image-edit",  "prompt": "Rends la lumière plus basse, garde les parasols.",  "size": "1024x1024",  "image": "@/chemin/source.png"}'

Voix et transcription

Voix disponibles : amina, yael, malo. La transcription accepte un fichier audio.

Lecture
curl https://kairo.studiofude.com/v1/audio/speech \  -H "Authorization: Bearer $KAIRO_API_KEY" \  -H "Content-Type: application/json" \  -d '{  "model": "kairo-voice",  "input": "Le marché s'ouvre avec le soleil.",  "voice": "amina"}'
Transcription
curl https://kairo.studiofude.com/v1/audio/transcriptions \  -H "Authorization: Bearer $KAIRO_API_KEY" \  -F "model=kairo-transcribe" \  -F "file=@marche-bassam.webm"

Vision et JSON

Vision
curl https://kairo.studiofude.com/v1/chat/completions \  -H "Authorization: Bearer $KAIRO_API_KEY" \  -H "Content-Type: application/json" \  -d '{  "model": "kairo-vision",  "messages": [    {      "role": "user",      "content": [        {          "type": "text",          "text": "Que vend l'étal au premier plan ?"        },        {          "type": "image_url",          "image_url": {            "url": "https://kairo.studiofude.com/exemples/marche.webp"          }        }      ]    }  ]}'
JSON
curl https://kairo.studiofude.com/v1/chat/completions \  -H "Authorization: Bearer $KAIRO_API_KEY" \  -H "Content-Type: application/json" \  -d '{  "model": "kairo-json",  "messages": [    {      "role": "user",      "content": "Extrais lieu, moment et ambiance."    }  ],  "response_format": {    "type": "json_schema",    "json_schema": {      "name": "legende",      "schema": {        "type": "object",        "properties": {          "lieu": {            "type": "string"          },          "moment": {            "type": "string"          },          "ambiance": {            "type": "string"          }        },        "required": [          "lieu",          "moment",          "ambiance"        ]      }    }  }}'

Erreurs

Le corps est toujours un objet error avec code, message et request_id.

  • insufficient_credits — solde ou plafond de clé insuffisant. Rien n'est débité.
  • invalid_api_key — clé inconnue, désactivée ou supprimée.
  • maintenance — service en pause. Réessayez. Rien n'est débité.
  • rate_limited — trop d'appels sur cette clé. L'en-tête indique quand réessayer.
{
  "error": {
    "type": "maintenance",
    "message": "Service temporairement en maintenance, réessayez dans quelques minutes."
  }
}