Documentation
Messages API
L’API Messages Anthropic native pour la famille Claude. Envoyez le format de requête Anthropic réel : cache_control, tools et extended thinking sont transmis tels quels, sans traduction.
Point de terminaison : POST /v1/messages. Les requêtes et les réponses correspondent exactement à l’API Messages d’Anthropic ; le SDK Anthropic — ou tout outil compatible avec cette API — fonctionne donc avec Kunavo en ne changeant que l’URL de base et la clé.
Quel point de terminaison utiliser ?
Kunavo expose la famille Claude de deux façons. La facturation est identique ; choisissez selon le format de requête déjà utilisé par votre code.
| Point de terminaison | Structure | À utiliser si |
|---|---|---|
/v1/ | Chat OpenAI | Vous utilisez déjà le SDK OpenAI ou souhaitez un seul chemin de code pour Claude et GPT. |
/v1/messages | Anthropic Messages | Vous utilisez le SDK Anthropic / Claude Code, ou souhaitez bénéficier nativement de cache_ |
Authentification
Définissez l’URL de base sur https://api.kunavo.com — le SDK Anthropic ajoute lui-même /v1/messages. Transmettez votre clé Kunavo (sk-kn-...) comme clé API ; le point de terminaison l’accepte dans l’en-tête x-api-key (valeur par défaut du SDK Anthropic) ou dans Authorization: Bearer.
from anthropic import Anthropic
client = Anthropic(
api_key="sk-kn-...", # your Kunavo key
base_url="https://api.kunavo.com", # SDK appends /v1/messages
)
msg = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
system="You are a senior staff engineer.",
messages=[
{"role": "user", "content": "Pros and cons of event sourcing?"},
],
)
print(msg.content[0].text)Mise en cache des prompts
C’est la principale raison d’utiliser le point de terminaison natif. Ajoutez un point d’ancrage cache_control à n’importe quel bloc système, bloc de contenu de message ou définition d’outil. Le préfixe ainsi marqué est mis en cache une fois, puis réutilisé lors des appels suivants qui le partagent.
La mise en cache elle-même ne nécessite pas ce point de terminaison : sur /v1/chat/completions et /v1/responses, Kunavo place lui-même les points de rupture pour les modèles Claude sur un prompt long. Ce point de terminaison se distingue en n’en ajoutant aucun : votre corps de requête est transmis tel que vous l’avez envoyé, et chaque point de rupture qu’il contient est donc l’un des vôtres.
# Mark a large, stable prefix with cache_control. The first call writes that
# span to cache at 1.25× the input token price; later calls that reuse it read
# it back at ~10%.
msg = client.messages.create(
model="claude-opus-4-7",
max_tokens=1024,
system=[
{
"type": "text",
"text": LONG_STYLE_GUIDE, # tens of thousands of tokens
"cache_control": {"type": "ephemeral"},
},
],
messages=[{"role": "user", "content": "Review this PR against the guide."}],
)
u = msg.usage
print(u.cache_creation_input_tokens, u.cache_read_input_tokens)Tarifs de la famille Claude sur Kunavo :
cache_read_input_tokens— servi depuis le cache, facturé à 0.10× du tarif d’entrée (soit une remise de 90 %); 0,025× pour Claude Fable 5.1, 0,05× pour Claude Opus 5.5.cache_creation_input_tokens— écrit dans le cache, facturé à 1.25× le tarif d’entrée. Kunavo facture les écritures avec TTL d’une heure au même tarif de 1.25×, inférieur au tarif de 2× d’Anthropic.
Diffusion en continu
Définissez stream: true (ou utilisez l’assistant stream() du SDK). Kunavo transmet tels quels les événements du flux natif d’Anthropic — message_start, content_block_delta, message_delta, message_stop.
with client.messages.stream(
model="claude-sonnet-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Explain CRDTs in one paragraph."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)Images
Envoyez les images sous forme de sources base64 ou url. Une source url est le seul élément du corps de la requête que Kunavo réécrit : il télécharge lui-même l’image HTTPS (ou extrait le contenu d’un URI data:) puis la transmet en tant que base64, car le service en amont ignore une source url et répondrait comme si aucune image n’avait été envoyée. Les images figurant dans un tool_result sont traitées de la même manière. Limites : 16 images par requête, 5 MB par image, 20 MB au total ; si une image ne peut pas être récupérée, une erreur est renvoyée au lieu de l’ignorer.
Objet d’utilisation
Chaque réponse (ainsi que les événements message_delta / message_start en flux continu) contient un objet usage Anthropic natif :
| Champ | Signification |
|---|---|
input_tokens | Jetons d’entrée nouveaux (non mis en cache). |
cache_ | Jetons servis depuis le cache, facturés à 0.10× du tarif d’entrée (0,025× pour Claude Fable 5.1, 0,05× pour Claude Opus 5.5). |
cache_ | Jetons écrits dans le cache lors de cet appel (facturés à 1.25× le tarif d’entrée). |
output_ | Jetons de sortie, y compris ceux du raisonnement étendu. |
Outils côté serveur
Les outils côté serveur d’Anthropic (web_search, web_fetch, code_execution) sont transmis comme des définitions d’outils ordinaires. Leur contenu ajouté à la conversation (résultats de recherche, page récupérée, sortie de programme) est renvoyé dans usage sous forme de jetons et facturé aux tarifs ci-dessus.
La recherche sur le Web est également facturée par recherche, en plus de ces jetons : Anthropic l’affiche à $10 pour 1,000 recherches, et Kunavo applique la remise propre à chaque modèle. Le nombre figure dans usage.server_tool_use.web_search_requests, dans la réponse ou dans le dernier message_delta d’un flux ; une recherche qui renvoie une erreur (par exemple max_uses_exceeded) n’est pas comptabilisée. La récupération de pages Web et l’exécution de code n’occasionnent aucun frais au-delà des jetons.
| Pour 1 000 recherches Web | Modèles |
|---|---|
| $7.00 | claude-fable-5-1, claude-fable-5, claude-opus-5-5, claude-opus-5, claude-opus-4-8, claude-opus-4-7, claude-opus-4-6, claude-sonnet-5, claude-sonnet-4-6, claude-haiku-4-5 |
Modèles pris en charge
Tout modèle Claude activé accepte /v1/messages. Transmettez le slug Kunavo dans model :
claude-fable-5,claude-sonnet-5claude-opus-5,claude-opus-4-7,claude-opus-4-6claude-sonnet-4-6,claude-haiku-4-5
Les modèles GPT ne sont pas disponibles ici — appelez-les via /v1/chat/completions.
HTTP brut
Aucun SDK requis : le point de terminaison accepte une simple requête POST JSON :
curl https://api.kunavo.com/v1/messages \
-H "x-api-key: sk-kn-..." \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-5",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello, Claude"}]
}'