Aperçu
La carte de l'API : chaque point de terminaison, à quoi ressemblent une requête et une erreur, comment les appels sont payés, et ce qu'il faut savoir quand on vient d'un SDK OpenAI ou Anthropic.
Endpoints
Chaque point de terminaison se trouve sous une seule URL de base et est servi en HTTPS.
https://api.shannon-ai.com | Point de terminaison | Format | À quoi cela sert |
|---|---|---|
POST /v1/chat/completions | OpenAI Chat Completions | Envoyez une conversation, obtenez la réponse suivante. Avec ou sans streaming. |
POST /v1/messages | Anthropic Messages | La même chose, dans les formes de requête et de réponse des SDK Anthropic. |
POST /v1/responses | OpenAI Responses | La même chose, dans les formes Responses. Le point de terminaison ne conserve aucun état : envoyez la conversation avec chaque requête. |
GET /v1/models | Liste de modèles OpenAI | Liste les modèles avec fenêtre de contexte, prix et capacités. N'exige aucune clé. |
POST /v1/tokenize | API Shannon | Comptez les tokens d'un texte ou d'une requête de chat pour un modèle open-weight hébergé. Gratuit. |
POST /v1/messages/count_tokens | Comptage de tokens Anthropic | Comptez les tokens d'entrée d'une requête Messages pour un modèle open-weight hébergé. Gratuit. |
Les trois points de terminaison qui produisent du texte atteignent les mêmes modèles. Choisissez celui dont votre code utilise déjà le format.
Bases des requêtes
| En-tête | Description |
|---|---|
Authorization: Bearer <key> | Votre clé API. Obligatoire sur chaque point de terminaison sauf GET /v1/models, sauf si vous envoyez x-api-key. |
x-api-key: <key> | La même clé dans l'en-tête qu'envoient les SDK Anthropic. Lu sur chaque point de terminaison. |
Content-Type: application/json | Obligatoire sur chaque POST. Sans lui, la réponse est 415. |
x-request-id: <your id> | Facultatif. Votre propre id pour la requête ; il revient dans l'en-tête de réponse x-request-id. Sans lui, l'API en crée un de 12 caractères hexadécimaux. |
- Le corps de chaque
POSTest un objet JSON, jusqu'à 32 MiB. - Un champ que l'API ne connaît pas ne cause aucune erreur et n'a aucun effet. Une requête écrite pour un autre fournisseur n'échoue pas à cause d'un champ supplémentaire.
- Un champ connu avec un mauvais type JSON, ou un champ obligatoire manquant, reçoit
422. Un corps qui n'est pas du JSON valide reçoit400. modelest l'un des ids de Modèles et tarifs. La casse n'a pas d'importance.
Une réponse est du JSON, ou un flux de server-sent events quand la requête définit stream à true. Chaque point de terminaison répond dans son propre format. Chaque réponse a l'en-tête x-request-id.
Ce par quoi passe une requête
Une requête est vérifiée dans un ordre fixe avant l'exécution d'un modèle. La première vérification qui échoue répond : un 401 ne vous dit donc encore rien sur le corps.
| Vérifié, dans cet ordre | Statut en cas d'échec |
|---|---|
| Clé API | 401 |
| Corps : taille, type de contenu, JSON, types des champs | 413 · 415 · 400 · 422 |
| Id du modèle | 400 |
| Protection anti-flood : 120 requêtes par minute et par compte | 429 |
| Solde : le budget de sortie de la requête doit tenir | 429 |
Forme des erreurs
Une erreur est un objet JSON avec un error qui contient type et message. /v1/messages l'encapsule comme l'attendent les SDK Anthropic ; tous les autres chemins utilisent la forme OpenAI.
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: gpt-4o"
}
} {
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "unknown model: gpt-4o"
}
} - Lisez
typeetmessage.codeetparamne sont présents que sur certaines erreurs : traitez-les comme facultatifs.paramvaut toujoursnull. - Une fois qu'un flux a démarré, le statut est déjà
200. Un échec arrive alors comme une trame d'erreur dans le flux. - Chaque réponse d'erreur porte l'en-tête
x-request-id.
| Statut | Type | Quand |
|---|---|---|
400 | invalid_request_error | Le corps n'est pas du JSON valide, l'id du modèle est inconnu, ou le modèle n'accepte pas un type d'entrée que vous avez envoyé. |
401 | authentication_error | La clé est absente ou n'est pas valide. |
404 | not_found_error | Le chemin n'existe pas. |
405 | api_error | Le chemin existe, mais la méthode est incorrecte. |
413 | invalid_request_error | Le corps dépasse 32 MiB. |
415 | invalid_request_error | Content-Type n'est pas application/json. |
422 | invalid_request_error | Un champ a un type JSON incorrect ou un champ obligatoire est absent. |
429 | rate_limit_error | Le solde ne couvre pas la requête, plus de 120 requêtes sont arrivées en une minute, les appels Shannon Coder de la fenêtre sont épuisés, ou le modèle est occupé. Le message indique lequel de ces cas s'applique. |
5xx | api_error | Statut 500, 502, 503 ou 504 : la requête était valide et n'a pas pu être traitée. Renvoyez-la. Un 500 peut porter le type server_error. |
Facturation et solde
- Il y a un solde par compte, et le chat et l'API le partagent : d'abord le forfait du jour, puis les crédits achetés. L'API n'a pas de quota propre.
- Une requête réserve son budget de sortie (
max_tokens, 4,096 par défaut) puis est facturée pour les tokens réellement utilisés, au prix du modèle. - Chaque réponse indique ses nombres de tokens dans
usage. La page Clés et utilisation montre le solde et ce qu'a coûté chaque requête. - Chaque requête est servie de façon égale. La seule limite sur le rythme des requêtes est la protection anti-flood : 120 requêtes par minute et par compte. Les requêtes envoyées en parallèle attendent en file.
Limites et solde Modèles et tarifs Clés et utilisation
Champs qui dépendent du modèle
Chaque modèle accepte la même requête. Quelques champs ne prennent effet que sur certains modèles ; le tableau indique lesquels. Les pages des points de terminaison listent chaque champ.
| Champ | Description | Appliqué par |
|---|---|---|
system | Instructions pour le modèle : un message system sur Chat Completions, system sur Messages, instructions sur Responses. | Modèles open-weight hébergés, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
temperature | Température d'échantillonnage. | Modèles open-weight hébergés, shannon-1.6-*, shannon-coder-1 |
top_p | Échantillonnage par noyau (nucleus sampling). | Modèles open-weight hébergés |
seed | Une graine fixe pour l'échantillonnage. | Modèles open-weight hébergés |
stop | Jusqu'à 4 séquences d'arrêt. | Modèles open-weight hébergés |
reasoning_effort | Combien le modèle raisonne avant de répondre. reasoning.effort sur Responses, thinking sur Messages. | Modèles open-weight hébergés |
web_search | true permet au modèle de chercher sur le web pour cette requête. Un champ de cette API, sur Chat Completions et Messages. | Modèles Shannon sauf shannon-coder-1 |
max_tokens | Le budget de sortie. Sur chaque modèle, il fixe le montant réservé sur votre solde. | Comme limite de longueur de la réponse : modèles open-weight hébergés, shannon-1.6-*, shannon-coder-1 |
Si vous venez d'un SDK OpenAI
- Définissez l'URL de base sur
https://api.shannon-ai.com/v1et la clé sur votre clé Shannon. Les appels Chat Completions et Responses fonctionnent alors avec le SDK tel quel. modeldoit être un id Shannon. Un nom de modèle d'un autre fournisseur, commegpt-4o, reçoit400etunknown model.- Le raisonnement arrive dans un champ à part :
reasoning_contentà côté decontent, dans le message et dans les deltas du flux. - Un flux porte toujours
usagedans son dernier chunk, avecfinish_reason. - Un appel d'outil dans un flux arrive comme un seul chunk avec la chaîne
argumentscomplète. - Une réponse a un seul choix.
- Les chemins de l'API OpenAI qui ne figurent pas dans le tableau ci-dessus, comme
/v1/embeddings, reçoivent404.
Si vous venez d'un SDK Anthropic
- Définissez l'URL de base sur
https://api.shannon-ai.com, sans/v1, et la clé sur votre clé Shannon. Le SDK l'envoie commex-api-key. modeldoit être un id Shannon.max_tokensest facultatif sur cette API. Sa valeur par défaut est 4,096.- Une réponse contient des blocs de contenu de type
thinking,textettool_use. Le premier bloc n'est pas toujours le texte : choisissez les blocs partype. stop_reasonvautend_turnoutool_use. Un flux d'un modèle Shannon peut aussi se terminer parmax_tokens.anthropic-versionetanthropic-betasont acceptés, de sorte que le SDK fonctionne sans changement. Une requête n'en a pas besoin.- Les erreurs sur
/v1/messagesont la forme Anthropic :{"type": "error", "error": {…}}.
Les outils de programmation qui parlent ces formats se configurent de la même façon : URL de base, clé, et un id Shannon comme modèle. Outils CLI de programmation