Aller au contenu
Aperçu

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.

URL de base
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 POST est 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çoit 400.
  • model est 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.

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"
  }
}
  • Lisez type et message. code et param ne sont présents que sur certaines erreurs : traitez-les comme facultatifs. param vaut toujours null.
  • 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.

Gestion des erreurs

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

Chat Completions

Si vous venez d'un SDK OpenAI

  • Définissez l'URL de base sur https://api.shannon-ai.com/v1 et la clé sur votre clé Shannon. Les appels Chat Completions et Responses fonctionnent alors avec le SDK tel quel.
  • model doit être un id Shannon. Un nom de modèle d'un autre fournisseur, comme gpt-4o, reçoit 400 et unknown model.
  • Le raisonnement arrive dans un champ à part : reasoning_content à côté de content, dans le message et dans les deltas du flux.
  • Un flux porte toujours usage dans son dernier chunk, avec finish_reason.
  • Un appel d'outil dans un flux arrive comme un seul chunk avec la chaîne arguments complè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çoivent 404.

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 comme x-api-key.
  • model doit être un id Shannon.
  • max_tokens est facultatif sur cette API. Sa valeur par défaut est 4,096.
  • Une réponse contient des blocs de contenu de type thinking, text et tool_use. Le premier bloc n'est pas toujours le texte : choisissez les blocs par type.
  • stop_reason vaut end_turn ou tool_use. Un flux d'un modèle Shannon peut aussi se terminer par max_tokens.
  • anthropic-version et anthropic-beta sont acceptés, de sorte que le SDK fonctionne sans changement. Une requête n'en a pas besoin.
  • Les erreurs sur /v1/messages ont 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