Documentation

Une API. Tous les modèles.

DeepRelay expose une API compatible OpenAI. Tout SDK, framework ou outil qui parle à OpenAI fonctionne en changeant deux paramètres : la base URL et la clé API.

🔑 Créez votre clé dr_… depuis le dashboard. Votre solde est prépayé en FCFA — rechargeable en Wave ou Orange Money.

Authentification

header
Authorization: Bearer dr_votre_cle_api

Toutes les routes /v1/* exigent ce header. Chaque réponse inclut x-ratelimit-limit et x-ratelimit-remaining.

Chat & vision

POST /v1/chat/completions

curl

terminal
curl https://api.deeprelay.io/v1/chat/completions \
  -H "Authorization: Bearer dr_votre_cle" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-ai/DeepSeek-V3",
    "messages": [{"role": "user", "content": "Explique-moi le mobile money en 3 phrases."}]
  }'

Python (SDK OpenAI)

main.py
from openai import OpenAI

client = OpenAI(
    base_url="https://api.deeprelay.io/v1",
    api_key="dr_votre_cle",
)

resp = client.chat.completions.create(
    model="gemini-3-flash-preview",
    messages=[{"role": "user", "content": "Salut !"}],
)
print(resp.choices[0].message.content)

JavaScript / TypeScript

index.ts
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.deeprelay.io/v1",
  apiKey: "dr_votre_cle",
});

const resp = await client.chat.completions.create({
  model: "gpt-4o-mini",
  messages: [{ role: "user", content: "Salut !" }],
  stream: true, // streaming SSE supporté
});

Le streaming (stream: true) est supporté. Les paramètres temperature, max_tokens et response_format: {"type": "json_object"} sont transmis au modèle. La vision utilise le format OpenAI standard (content en tableau avec image_url en data-URI base64).

Génération d'images

POST /v1/images/generations
terminal
curl https://api.deeprelay.io/v1/images/generations \
  -H "Authorization: Bearer dr_votre_cle" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-1",
    "prompt": "Un marché coloré à Dakar au coucher du soleil",
    "size": "1024x1024",
    "quality": "medium"
  }'

Réponse : {"data": [{"b64_json": "…"}]}. Modèles : gpt-image-1 (qualité low / medium / high) et gemini-3.1-flash-image-preview.

Synthèse vocale (TTS)

POST /v1/audio/speech
terminal
curl https://api.deeprelay.io/v1/audio/speech \
  -H "Authorization: Bearer dr_votre_cle" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-2.5-flash-preview-tts",
    "input": "Bonjour et bienvenue !",
    "voice": "Kore"
  }' --output audio.wav
ModèleVoixFormat
gemini-2.5-flash-preview-ttsKore, Charon, Fenrir, Aoede, Puck, Zephyr, Leda, OrusWAV
gpt-4o-mini-ttsalloy, echo, fable, onyx, nova, shimmerMP3
hexgrad/Kokoro-82M …selon le modèle — voir la page de chaque modèle sur /modelsWAV

Transcription (STT)

POST /v1/audio/transcriptions
terminal
curl https://api.deeprelay.io/v1/audio/transcriptions \
  -H "Authorization: Bearer dr_votre_cle" \
  -F file=@audio.wav \
  -F language=fr-FR

Réponse : {"text": "…"}. ~20 langues supportées (codes BCP-47 : fr-FR, en-US, ar-MA…). La durée facturée est lue dans le fichier audio (headers WAV / MP3).

Embeddings

POST /v1/embeddings
terminal
curl https://api.deeprelay.io/v1/embeddings \
  -H "Authorization: Bearer dr_votre_cle" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "text-embedding-3-small",
    "input": ["Premier texte", "Deuxième texte"]
  }'

Format OpenAI standard : input accepte une chaîne ou un tableau, la réponse contient data[].embedding. ~30 modèles disponibles (OpenAI, Google, Qwen, BGE, E5…) — parfait pour le RAG et la recherche sémantique.

Lister les modèles

GET /v1/models

Renvoie le catalogue complet avec la famille de chaque modèle (chat, image, tts, stt, embedding). Le catalogue navigable avec filtres est sur /models — chaque modèle y a sa page dédiée avec ses tarifs et ses exemples de code. Les tarifs publics sont aussi exposés sans authentification sur GET /api/pricing.

Limites

Erreurs

CodeTypeSignification
401invalid_request_errorClé API manquante, inconnue ou révoquée.
402insufficient_balanceSolde épuisé — rechargez depuis le dashboard.
404invalid_request_errorModèle inconnu — voir GET /v1/models.
429rate_limit_exceededTrop de requêtes — respectez Retry-After.
5xxapi_errorErreur interne ou relayée du fournisseur.

Bonnes pratiques