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.doc4geeks.com/v1.

Premier appel
curl https://kairo.doc4geeks.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. Une image 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,16 + 0,32 = 0,48 crédit.

Points d'accès

MéthodeCheminModèles
POST/chat/completionskairo-text, kairo-text-pro, kairo-vision, kairo-json
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 pour le quotidien, kairo-text-pro quand la consigne est longue ou le code délicat.

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

Image

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

Génération
curl https://kairo.doc4geeks.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.doc4geeks.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.doc4geeks.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.doc4geeks.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.doc4geeks.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.doc4geeks.com/exemples/marche.webp"          }        }      ]    }  ]}'
JSON
curl https://kairo.doc4geeks.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."
  }
}