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.
dr_… depuis le dashboard. Votre solde est prépayé en FCFA — rechargeable en Wave ou Orange Money.Authentification
Authorization: Bearer dr_votre_cle_apiToutes les routes /v1/* exigent ce header. Chaque réponse inclut x-ratelimit-limit et x-ratelimit-remaining.
Chat & vision
curl
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)
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
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
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)
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èle | Voix | Format |
|---|---|---|
| gemini-2.5-flash-preview-tts | Kore, Charon, Fenrir, Aoede, Puck, Zephyr, Leda, Orus | WAV |
| gpt-4o-mini-tts | alloy, echo, fable, onyx, nova, shimmer | MP3 |
| hexgrad/Kokoro-82M … | selon le modèle — voir la page de chaque modèle sur /models | WAV |
Transcription (STT)
curl https://api.deeprelay.io/v1/audio/transcriptions \
-H "Authorization: Bearer dr_votre_cle" \
-F file=@audio.wav \
-F language=fr-FRRé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
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
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
- 60 requêtes / minute par clé API — headers
x-ratelimit-limit/x-ratelimit-remaining, réponse429avecRetry-Afterau-delà. - TTS : 5 000 caractères max par requête — découpez les textes longs.
- STT : 25 Mo max par fichier audio.
- Besoin de limites plus hautes ? support@deeprelay.io.
Erreurs
| Code | Type | Signification |
|---|---|---|
| 401 | invalid_request_error | Clé API manquante, inconnue ou révoquée. |
| 402 | insufficient_balance | Solde épuisé — rechargez depuis le dashboard. |
| 404 | invalid_request_error | Modèle inconnu — voir GET /v1/models. |
| 429 | rate_limit_exceeded | Trop de requêtes — respectez Retry-After. |
| 5xx | api_error | Erreur interne ou relayée du fournisseur. |
Bonnes pratiques
- Stockez votre clé dans une variable d'environnement, jamais dans le code.
- Créez une clé par environnement (dev / prod) — révocables individuellement depuis le dashboard.
- Surveillez votre solde : une requête avec solde insuffisant renvoie
402. - En cas de
429, implémentez un backoff exponentiel en respectantRetry-After.