Compter les tokens d'un message
POST/messages/count_tokens
Estime le nombre de tokens d'entrée d'une requête Messages, sans l'exécuter : gratuit, même à crédit nul, et aucun opérateur n'est appelé. C'est une estimation — un token pour 4 caractères du prompt système, des messages et des schémas d'outils — parce que chaque modèle a son propre tokenizer ; ce que coûte un vrai appel, c'est l'usage que rapporte son opérateur.
BientôtOuverture prochaine : ce qui suit décrit le service tel qu'il fonctionnera.
https://evanesca.app/api/v1/messages/count_tokensOuvre au lancementBearer $EVANESCA_API_KEYx-api-keystringrequisVotre clé, qui commence par sk-eva-. Authorization: Bearer suivi de la clé marche aussi : c'est là que Claude Code l'envoie quand ANTHROPIC_AUTH_TOKEN est posé.
anthropic-versionstringEnvoyé par les SDK d'Anthropic ; accepté, sans effet ici.
Content-Typestringrequisapplication/json : le corps est du JSON.
Corps de la requête
application/jsonmodelstringrequisExigé par le format ; l'estimation n'en dépend pas.
messagesarrayrequisLes tours, comme pour POST /messages.
system, toolschaîne | tableau · tableauComptés eux aussi quand vous les envoyez.
Où l'appel tourne, ce qu'il coûte
Evanesca · au dossier
- Répond
- Evanesca elle-même : aucun modèle ne tourne, aucun opérateur n'est appelé.
- Coût
- Rien : une clé valide suffit, même sans crédit.
- Précision
- Une estimation à 4 caractères par token, jamais un montant facturé. Les longues données en ligne, comme une image en base64, sont laissées hors du compte.
Erreurs
| Statut | type | Signification |
|---|---|---|
| 400 | invalid_ | Le corps n'est pas du JSON valide, ou model ou messages manque. |
| 401 | invalid_ | Pas de clé, une clé malformée, ou une clé révoquée. |
Les autres erreurs d'opérateur vous parviennent avec son statut et son corps, et Retry-After quand il en envoie un (erreurs).
curl https://evanesca.app/api/v1/messages/count_tokens \
-H "x-api-key: $EVANESCA_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "gemma-4-26b",
"messages": [{"role": "user", "content": "Bonjour"}]
}'import os
import anthropic
client = anthropic.Anthropic(
base_url="https://evanesca.app/api",
api_key=os.environ["EVANESCA_API_KEY"],
)
count = client.messages.count_tokens(
model="gemma-4-26b",
messages=[{"role": "user", "content": "Bonjour"}],
)
print(count.input_tokens)import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
baseURL: "https://evanesca.app/api",
apiKey: process.env.EVANESCA_API_KEY,
});
const count = await client.messages.countTokens({
model: "gemma-4-26b",
messages: [{ role: "user", content: "Bonjour" }],
});
console.log(count.input_tokens);package main
import (
"fmt"
"io"
"net/http"
"os"
"strings"
)
func main() {
body := strings.NewReader(`{"model":"gemma-4-26b","messages":[{"role":"user","content":"Bonjour"}]}`)
req, err := http.NewRequest("POST", "https://evanesca.app/api/v1/messages/count_tokens", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("EVANESCA_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}{
"input_tokens": 11
}{
"type": "error",
"error": {
"type": "invalid_api_key",
"message": "Invalid or missing API key."
}
}