Prezentare generală
Harta API-ului: fiecare endpoint, cum arată o cerere și o eroare, cum se plătesc apelurile și ce trebuie să știi când vii de la un SDK OpenAI sau Anthropic.
Endpoint-uri
Fiecare endpoint se află sub un singur base URL și este servit prin HTTPS.
https://api.shannon-ai.com | Endpoint | Format | Pentru ce servește |
|---|---|---|
POST /v1/chat/completions | OpenAI Chat Completions | Trimiți o conversație, primești următorul răspuns. Cu sau fără streaming. |
POST /v1/messages | Anthropic Messages | La fel, în formele de cerere și răspuns ale SDK-urilor Anthropic. |
POST /v1/responses | OpenAI Responses | La fel, în formele Responses. Endpoint-ul nu păstrează stare: trimite conversația cu fiecare cerere. |
GET /v1/models | Listă de modele OpenAI | Listează modelele cu fereastra de context, prețuri și capabilități. Nu cere cheie. |
POST /v1/tokenize | Shannon API | Numără token-urile unui text sau ale unei cereri de chat pentru un model open-weight găzduit. Gratuit. |
POST /v1/messages/count_tokens | Numărare de token-uri Anthropic | Numără token-urile de intrare ale unei cereri Messages pentru un model open-weight găzduit. Gratuit. |
Cele trei endpoint-uri care produc text ajung la aceleași modele. Alege-l pe cel al cărui format îl folosește deja codul tău.
Noțiuni de bază despre cereri
| Header | Descriere |
|---|---|
Authorization: Bearer <key> | Cheia ta API. Obligatoriu pe fiecare endpoint, cu excepția GET /v1/models, dacă nu trimiți x-api-key. |
x-api-key: <key> | Aceeași cheie, în header-ul pe care îl trimit SDK-urile Anthropic. Citit pe fiecare endpoint. |
Content-Type: application/json | Obligatoriu pe fiecare POST. Fără el, răspunsul este 415. |
x-request-id: <your id> | Opțional. Propriul tău id pentru cerere; revine în header-ul de răspuns x-request-id. Fără el, API-ul creează unul de 12 caractere hexazecimale. |
- Corpul fiecărui
POSTeste un singur obiect JSON, de până la 32 MiB. - Un câmp pe care API-ul nu îl cunoaște nu provoacă eroare și nu are efect. O cerere scrisă pentru alt furnizor nu eșuează din cauza unui câmp în plus.
- Un câmp cunoscut cu tip JSON greșit sau un câmp obligatoriu lipsă primește răspuns
422. Un corp care nu este JSON valid primește răspuns400. modeleste unul dintre id-urile din Models & pricing. Majusculele și minusculele nu contează.
Un răspuns este JSON sau un stream de evenimente trimise de server (server-sent events) când cererea setează stream la true. Fiecare endpoint răspunde în formatul său. Fiecare răspuns are header-ul x-request-id.
Ce verificări trece o cerere
O cerere este verificată într-o ordine fixă înainte de rularea unui model. Prima verificare care eșuează dă răspunsul, deci un 401 nu îți spune încă nimic despre corp.
| Verificat, în această ordine | Status la eșec |
|---|---|
| Cheie API | 401 |
| Corp: mărime, content type, JSON, tipuri de câmpuri | 413 · 415 · 400 · 422 |
| Id de model | 400 |
| Protecție anti-flood: 120 de cereri pe minut per cont | 429 |
| Sold: bugetul de ieșire al cererii trebuie să încapă | 429 |
Forma erorilor
O eroare este un obiect JSON cu un error care conține type și message. /v1/messages îl împachetează cum se așteaptă SDK-urile Anthropic; orice altă cale folosește forma OpenAI.
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: gpt-4o"
}
} {
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "unknown model: gpt-4o"
}
} - Citește
typeșimessage.codeșiparamsunt prezente doar la unele erori: tratează-le ca opționale.parameste întotdeaunanull. - După ce un stream a început, statusul este deja
200. Un eșec sosește atunci ca un frame de eroare în interiorul stream-ului. - Fiecare răspuns de eroare conține header-ul
x-request-id.
| Stare | Tip | Când |
|---|---|---|
400 | invalid_request_error | Corpul nu este JSON valid, id-ul modelului este necunoscut sau modelul nu acceptă un tip de intrare pe care l-ai trimis. |
401 | authentication_error | Cheia lipsește sau nu este validă. |
404 | not_found_error | Calea nu există. |
405 | api_error | Calea există, metoda este greșită. |
413 | invalid_request_error | Corpul este mai mare de 32 MiB. |
415 | invalid_request_error | Content-Type nu este application/json. |
422 | invalid_request_error | Un câmp are tip JSON greșit sau lipsește un câmp obligatoriu. |
429 | rate_limit_error | Soldul nu acoperă cererea, au sosit mai mult de 120 de cereri într-un minut, apelurile Shannon Coder ale ferestrei sunt epuizate sau modelul este ocupat. Mesajul spune care este cazul. |
5xx | api_error | Status 500, 502, 503 sau 504: cererea a fost validă și nu a putut primi răspuns. Trimite-o din nou. Un 500 poate avea tipul server_error. |
Facturare și sold
- Există un singur sold per cont, iar chatul și API-ul îl folosesc împreună: mai întâi cota planului de astăzi, apoi creditul achiziționat. API-ul nu are o cotă proprie.
- O cerere își rezervă bugetul de ieșire (
max_tokens, implicit 4,096) și este apoi taxată pentru token-urile folosite efectiv, la prețul modelului. - Fiecare răspuns raportează numărul de token-uri în
usage. Pagina Keys & usage arată soldul și cât a costat fiecare cerere. - Fiecare cerere este servită egal. Singura limită a ratei cererilor este protecția anti-flood: 120 de cereri pe minut per cont. Cererile trimise în paralel așteaptă la coadă.
Limite și sold Modele și prețuri Chei și utilizare
Câmpuri care depind de model
Fiecare model primește aceeași cerere. Câteva câmpuri au efect doar pe unele modele; tabelul spune care. Paginile endpoint-urilor listează fiecare câmp.
| Câmp | Descriere | Aplicat de |
|---|---|---|
system | Instrucțiuni pentru model: un mesaj system pe Chat Completions, system pe Messages, instructions pe Responses. | Modele open-weight găzduite, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
temperature | Temperatura de eșantionare. | Modele open-weight găzduite, shannon-1.6-*, shannon-coder-1 |
top_p | Eșantionare nucleus. | Modele open-weight găzduite |
seed | Un seed fix pentru eșantionare. | Modele open-weight găzduite |
stop | Până la 4 secvențe de oprire. | Modele open-weight găzduite |
reasoning_effort | Cât raționează modelul înainte de a răspunde. reasoning.effort pe Responses, thinking pe Messages. | Modele open-weight găzduite |
web_search | true permite modelului să caute pe web pentru această cerere. Un câmp al acestui API, pe Chat Completions și Messages. | Modelele Shannon, cu excepția shannon-coder-1 |
max_tokens | Bugetul de ieșire. Pe fiecare model stabilește suma rezervată din soldul tău. | Ca limită a lungimii răspunsului: modelele open-weight găzduite, shannon-1.6-*, shannon-coder-1 |
Dacă vii de la un SDK OpenAI
- Setează base URL la
https://api.shannon-ai.com/v1, iar cheia la cheia ta Shannon. Apelurile Chat Completions și Responses funcționează apoi cu SDK-ul așa cum este. modeltrebuie să fie un id Shannon. Un nume de model de la alt furnizor, precumgpt-4o, primește răspuns400șiunknown model.- Raționamentul vine într-un câmp propriu:
reasoning_contentlângăcontent, în mesaj și în delta-urile stream-ului. - Un stream conține întotdeauna
usageîn ultimul chunk, împreună cufinish_reason. - Un apel de instrument într-un stream sosește ca un singur chunk, cu șirul
argumentscomplet. - Un răspuns are o singură alegere.
- Căile API-ului OpenAI care nu sunt în tabelul de mai sus, precum
/v1/embeddings, primesc răspuns404.
Dacă vii de la un SDK Anthropic
- Setează base URL la
https://api.shannon-ai.com, fără/v1, iar cheia la cheia ta Shannon. SDK-ul o trimite cax-api-key. modeltrebuie să fie un id Shannon.max_tokenseste opțional în acest API. Valoarea sa implicită este 4,096.- Un răspuns conține blocuri de conținut de tip
thinking,textșitool_use. Primul bloc nu este întotdeauna textul: alege blocurile dupătype. stop_reasonesteend_turnsautool_use. Un stream de la un model Shannon se poate termina și cumax_tokens.anthropic-versionșianthropic-betasunt acceptate, deci SDK-ul funcționează neschimbat. O cerere nu are nevoie de ele.- Erorile de pe
/v1/messagesau forma Anthropic:{"type": "error", "error": {…}}.
Instrumentele de programare care vorbesc aceste formate se configurează la fel: base URL, cheie și un id Shannon ca model. Instrumente CLI pentru programare