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.
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éthode | Chemin | Modèles |
|---|---|---|
| POST | /chat/completions | kairo-text, kairo-vision, kairo-json, kairo-search |
| POST | /images/generations | kairo-image |
| POST | /images/edits | kairo-image-edit |
| POST | /audio/speech | kairo-voice |
| POST | /audio/transcriptions | kairo-transcribe |
| GET | /models | catalogue et prix |
| GET | /credits | solde 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.
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"}'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.
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"}'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
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" } } ] } ]}'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."
}
}