Overzicht
De kaart van de API: elk endpoint, hoe een aanvraag en een fout eruitzien, hoe aanroepen worden betaald en wat je moet weten als je van een OpenAI- of Anthropic-SDK komt.
Endpoints
Elk endpoint staat onder één basis-URL en wordt via HTTPS aangeboden.
https://api.shannon-ai.com | Endpoint | Formaat | Waarvoor het dient |
|---|---|---|
POST /v1/chat/completions | OpenAI Chat Completions | Stuur een gesprek en ontvang het volgende antwoord. Met of zonder streaming. |
POST /v1/messages | Anthropic Messages | Hetzelfde, in de aanvraag- en antwoordvormen van Anthropic-SDK's. |
POST /v1/responses | OpenAI Responses | Hetzelfde, in de vormen van Responses. Het endpoint houdt geen status bij: stuur het gesprek met elke aanvraag mee. |
GET /v1/models | OpenAI-modellijst | Geef de modellen weer met contextvenster, prijzen en mogelijkheden. Heeft geen sleutel nodig. |
POST /v1/tokenize | Shannon API | Tel de tokens van een tekst of van een chataanvraag voor een gehost open-weight model. Gratis. |
POST /v1/messages/count_tokens | Anthropic-tokentelling | Tel de inputtokens van een Messages-aanvraag voor een gehost open-weight model. Gratis. |
De drie endpoints die tekst produceren, bereiken dezelfde modellen. Kies het endpoint waarvan je code het formaat al gebruikt.
Basis van aanvragen
| Header | Beschrijving |
|---|---|
Authorization: Bearer <key> | Je API-sleutel. Vereist op elk endpoint behalve GET /v1/models, tenzij je x-api-key meestuurt. |
x-api-key: <key> | Dezelfde sleutel in de header die Anthropic-SDK's versturen. Wordt op elk endpoint gelezen. |
Content-Type: application/json | Vereist bij elke POST. Zonder deze header is het antwoord 415. |
x-request-id: <your id> | Optioneel. Je eigen id voor de aanvraag; hij komt terug in de antwoordheader x-request-id. Zonder maakt de API er een van 12 hexadecimale tekens. |
- De body van elke
POSTis één JSON-object, tot 32 MiB. - Een veld dat de API niet kent, veroorzaakt geen fout en heeft geen effect. Een aanvraag die voor een andere provider is geschreven, mislukt niet door een extra veld.
- Een bekend veld met het verkeerde JSON-type, of een ontbrekend verplicht veld, wordt beantwoord met
422. Een body die geen geldige JSON is, wordt beantwoord met400. modelis een van de id's op Models & pricing. Hoofdletters en kleine letters maken niet uit.
Een antwoord is JSON, of een stream van server-sent events als de aanvraag stream op true zet. Elk endpoint antwoordt in zijn eigen formaat. Elk antwoord heeft de header x-request-id.
Wat een aanvraag doorloopt
Een aanvraag wordt in een vaste volgorde gecontroleerd voordat een model draait. De eerste controle die mislukt, geeft het antwoord, dus een 401 zegt nog niets over de body.
| Gecontroleerd, in deze volgorde | Status bij mislukken |
|---|---|
| API-sleutel | 401 |
| Body: grootte, contenttype, JSON, veldtypen | 413 · 415 · 400 · 422 |
| Model-id | 400 |
| Flood protection: 120 aanvragen per minuut per account | 429 |
| Saldo: het outputbudget van de aanvraag moet erin passen | 429 |
Foutvorm
Een fout is een JSON-object met een error die type en message bevat. /v1/messages verpakt hem zoals Anthropic-SDK's verwachten; elk ander pad gebruikt de OpenAI-vorm.
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: gpt-4o"
}
} {
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "unknown model: gpt-4o"
}
} - Lees
typeenmessage.codeenparamzijn alleen bij sommige fouten aanwezig: behandel ze als optioneel.paramis altijdnull. - Nadat een stream is begonnen, is de status al
200. Een fout komt dan binnen als een foutframe in de stream. - Elk foutantwoord bevat de header
x-request-id.
| Status | Type | Wanneer |
|---|---|---|
400 | invalid_request_error | De body is geen geldige JSON, de model-id is onbekend, of het model accepteert een soort input die je hebt gestuurd niet. |
401 | authentication_error | De sleutel ontbreekt of is ongeldig. |
404 | not_found_error | Het pad bestaat niet. |
405 | api_error | Het pad bestaat, maar de methode is onjuist. |
413 | invalid_request_error | De body is groter dan 32 MiB. |
415 | invalid_request_error | Content-Type is niet application/json. |
422 | invalid_request_error | Een veld heeft het verkeerde JSON-type of een verplicht veld ontbreekt. |
429 | rate_limit_error | Het saldo dekt de aanvraag niet, er kwamen meer dan 120 aanvragen binnen in een minuut, de Shannon Coder-calls van het venster zijn op, of het model is druk bezet. De melding zegt welke van deze het is. |
5xx | api_error | Status 500, 502, 503 of 504: de aanvraag was geldig en kon niet worden beantwoord. Verstuur haar opnieuw. Een 500 kan het type server_error hebben. |
Facturering en saldo
- Er is één saldo per account, en chat en API delen het: eerst de planlimiet van vandaag, daarna aangeschaft credit. De API heeft geen eigen quotum.
- Een aanvraag reserveert haar outputbudget (
max_tokens, standaard 4,096) en wordt daarna in rekening gebracht voor de tokens die ze echt heeft gebruikt, tegen de prijs van het model. - Elk antwoord meldt zijn tokenaantallen in
usage. De pagina Keys & usage toont het saldo en wat elke aanvraag heeft gekost. - Elke aanvraag wordt gelijk bediend. De enige limiet op de aanvraagsnelheid is flood protection: 120 aanvragen per minuut per account. Aanvragen die parallel worden verstuurd, wachten in de rij.
Limieten en saldo Modellen en prijzen Sleutels en gebruik
Velden die van het model afhangen
Elk model accepteert dezelfde aanvraag. Enkele velden hebben alleen effect op sommige modellen; de tabel noemt waar. De endpointpagina's vermelden elk veld.
| Veld | Beschrijving | Toegepast door |
|---|---|---|
system | Instructies voor het model: een system-bericht bij Chat Completions, system bij Messages, instructions bij Responses. | Gehoste open-weight modellen, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
temperature | Samplingtemperatuur. | Gehoste open-weight modellen, shannon-1.6-*, shannon-coder-1 |
top_p | Nucleus sampling. | Gehoste open-weight modellen |
seed | Een vaste seed voor sampling. | Gehoste open-weight modellen |
stop | Maximaal 4 stopsequenties. | Gehoste open-weight modellen |
reasoning_effort | Hoeveel het model redeneert voordat het antwoordt. reasoning.effort bij Responses, thinking bij Messages. | Gehoste open-weight modellen |
web_search | true laat het model voor deze aanvraag op internet zoeken. Een veld van deze API, bij Chat Completions en Messages. | Shannon-modellen behalve shannon-coder-1 |
max_tokens | Het outputbudget. Bij elk model bepaalt het het bedrag dat van je saldo wordt gereserveerd. | Als limiet op de lengte van het antwoord: gehoste open-weight modellen, shannon-1.6-*, shannon-coder-1 |
Als je van een OpenAI-SDK komt
- Stel de basis-URL in op
https://api.shannon-ai.com/v1en de sleutel op je Shannon-sleutel. Aanroepen van Chat Completions en Responses werken dan met de SDK zoals die is. modelmoet een Shannon-id zijn. Een modelnaam van een andere provider, zoalsgpt-4o, wordt beantwoord met400enunknown model.- Redenering komt in een eigen veld:
reasoning_contentnaastcontent, in het bericht en in de streamdelta's. - Een stream bevat
usagealtijd in zijn laatste chunk, samen metfinish_reason. - Een toolaanroep in een stream komt binnen als één chunk met de volledige
arguments-string. - Een antwoord heeft één choice.
- Paden van de OpenAI-API die niet in de tabel hierboven staan, zoals
/v1/embeddings, worden beantwoord met404.
Als je van een Anthropic-SDK komt
- Stel de basis-URL in op
https://api.shannon-ai.com, zonder/v1, en de sleutel op je Shannon-sleutel. De SDK verstuurt hem alsx-api-key. modelmoet een Shannon-id zijn.max_tokensis optioneel in deze API. De standaardwaarde is 4,096.- Een antwoord bevat contentblokken van het type
thinking,textentool_use. Het eerste blok is niet altijd de tekst: kies blokken optype. stop_reasonisend_turnoftool_use. Een stream van een Shannon-model kan ook eindigen metmax_tokens.anthropic-versionenanthropic-betaworden geaccepteerd, zodat de SDK ongewijzigd werkt. Een aanvraag heeft ze niet nodig.- Fouten op
/v1/messageshebben de Anthropic-vorm:{"type": "error", "error": {…}}.
Codeertools die deze formaten spreken, stel je op dezelfde manier in: basis-URL, sleutel en een Shannon-id als model. CLI-codeertools