Construire sur la passerelle Netaix
Une adresse, une clé, sept routes compatibles avec les API d'OpenAI et d'Anthropic. Cette documentation contient tout ce qu'il faut pour brancher un outil ou bâtir une application sans nous écrire.
Une adresse, sept routes
La passerelle Netaix expose une API compatible avec celle d'OpenAI et, pour trois routes, avec celle d'Anthropic. Vous changez l'adresse de base et la clé dans votre code existant, le reste ne bouge pas.
https://app.netaix.fr/v1
Sept routes sont ouvertes. Elles sont décrites une par une dans la référence de l'API.
| Route | À quoi elle sert |
|---|---|
GET /v1/models | La liste des modèles et des niveaux que votre clé peut appeler |
POST /v1/chat/completions | La conversation, au format OpenAI. Flux, outils et images |
POST /v1/messages | La conversation, au format Anthropic. Flux, outils et images |
POST /v1/messages/count_tokens | Une estimation du nombre de jetons d'entrée, sans appeler de modèle |
POST /v1/embeddings | Des vecteurs à partir de texte |
POST /v1/moderations | Un verdict de modération sur un texte |
GET /v1/netaix/usage | La consommation et les plafonds de la clé qui appelle |
Trois choses avant le premier appel
- Un compte. Un compte Développeur n'a pas d'abonnement : vous ne payez que ce que vous consommez. L'ouverture du compte se fait depuis la page Développeurs.
- Une clé. Vous la générez dans l'application Netaix. Elle n'est affichée qu'une seule fois. Voir Authentification et clés.
- Des crédits. La première recharge doit être payée avant le premier appel. Sans elle, la passerelle répond
402avec le codetopup_required. Il n'y a ni essai gratuit, ni crédit offert.
Les prix, les paliers de recharge et la valeur du crédit sont sur la page Développeurs. Ils ne sont pas recopiés ici pour qu'il n'y ait jamais deux chiffres différents sur le site.
Votre premier appel
Dans les exemples qui suivent, VOTRE_CLE_NETAIX est un remplaçant : mettez-y la clé générée dans l'application, de préférence par une variable d'environnement plutôt qu'écrite dans le code.
export NETAIX_API_KEY="VOTRE_CLE_NETAIX"
curl https://app.netaix.fr/v1/chat/completions \
-H "Authorization: Bearer $NETAIX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "netaix-balanced",
"messages": [
{"role": "user", "content": "Résume ce compte rendu en cinq lignes."}
]
}'
import os
from openai import OpenAI
client = OpenAI(
base_url="https://app.netaix.fr/v1",
api_key=os.environ["NETAIX_API_KEY"],
)
reponse = client.chat.completions.create(
model="netaix-balanced",
messages=[{"role": "user", "content": "Bonjour"}],
)
print(reponse.choices[0].message.content)
print(reponse.model) # le modèle réellement servi
print(reponse.usage) # jetons d'entrée, de sortie, part en cache
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://app.netaix.fr/v1",
apiKey: process.env.NETAIX_API_KEY,
});
const reponse = await client.chat.completions.create({
model: "netaix-balanced",
messages: [{ role: "user", content: "Bonjour" }],
});
console.log(reponse.choices[0].message.content);
export ANTHROPIC_BASE_URL=https://app.netaix.fr
export ANTHROPIC_API_KEY=VOTRE_CLE_NETAIX
# Le SDK ajoute lui-même /v1/messages : l'adresse de base n'inclut pas /v1.
Claude Code sur la passerelle
La route POST /v1/messages suit le format de l'API d'Anthropic : messages, consigne système en blocs, définitions d'outils, blocs tool_use et tool_result, images, temperature, max_tokens, top_p, stop_sequences et flux d'événements nommés. Un client écrit pour ce format, Claude Code compris, fonctionne sans adaptation, y compris en usage agent.
export ANTHROPIC_BASE_URL=https://app.netaix.fr
export ANTHROPIC_AUTH_TOKEN=VOTRE_CLE_NETAIX
export ANTHROPIC_MODEL=netaix-powerful
export ANTHROPIC_SMALL_FAST_MODEL=netaix-fast
- L'adresse de base n'inclut pas
/v1: le client ajoute le chemin lui-même. - La clé peut voyager dans l'un ou l'autre en-tête.
ANTHROPIC_AUTH_TOKENdonne unAuthorization: Bearer,ANTHROPIC_API_KEYdonne unx-api-key: les deux sont acceptés. Si les deux en-têtes arrivent, c'estx-api-keyqui est lu. - Le modèle peut être un niveau Netaix (
netaix-auto,netaix-fast,netaix-balanced,netaix-powerful,netaix-reasoning) ou un identifiant rendu parGET /v1/models. Un niveau évite d'avoir à suivre les noms de modèles. - Les noms de ces variables appartiennent au client, pas à la passerelle : vérifiez-les dans la documentation de la version que vous utilisez.
La route POST /v1/messages/count_tokens, que ces clients appellent pour gérer leur fenêtre de contexte, est ouverte. Elle rend une estimation du nombre de jetons d'entrée, calculée par la passerelle : aucun modèle n'est appelé et l'appel n'est pas décompté en crédits.
Ce que vous recevez
{
"id": "chatcmpl-6f1c0c3a9b2e4d7f8a1b2c3d",
"object": "chat.completion",
"created": 1793664000,
"model": "claude-sonnet-4-5",
"choices": [
{
"index": 0,
"message": {"role": "assistant", "content": "Bonjour, comment puis-je aider ?"},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 18,
"completion_tokens": 9,
"total_tokens": 27,
"prompt_tokens_details": {"cached_tokens": 0},
"cache_write_tokens": 0
}
}
Le champ model porte le modèle réellement servi. Quand vous demandez un niveau comme netaix-balanced, c'est là que vous lisez le choix de la passerelle. Il n'y a pas d'en-tête de réponse à lire pour cela.