Przegląd
Mapa API: każdy endpoint, jak wyglądają zapytanie i błąd, jak płaci się za wywołania i co warto wiedzieć, gdy przychodzisz z SDK OpenAI lub Anthropic.
Endpointy
Każdy endpoint znajduje się pod jednym base URL i jest obsługiwany przez HTTPS.
https://api.shannon-ai.com | Endpoint | Format | Do czego służy |
|---|---|---|
POST /v1/chat/completions | OpenAI Chat Completions | Wyślij rozmowę, otrzymaj następną odpowiedź. Ze streamingiem lub bez. |
POST /v1/messages | Anthropic Messages | To samo, w kształtach zapytania i odpowiedzi z SDK Anthropic. |
POST /v1/responses | OpenAI Responses | To samo, w kształtach Responses. Endpoint nie przechowuje stanu: wysyłaj rozmowę z każdym zapytaniem. |
GET /v1/models | Lista modeli OpenAI | Wyświetl modele z oknem kontekstu, cenami i możliwościami. Nie wymaga klucza. |
POST /v1/tokenize | Shannon API | Policz tokeny tekstu lub zapytania czatu dla hostowanego modelu open-weight. Bezpłatne. |
POST /v1/messages/count_tokens | Liczenie tokenów Anthropic | Policz tokeny wejścia zapytania Messages dla hostowanego modelu open-weight. Bezpłatne. |
Trzy endpointy generujące tekst docierają do tych samych modeli. Wybierz ten, którego formatu już używa Twój kod.
Podstawy zapytań
| Nagłówek | Opis |
|---|---|
Authorization: Bearer <key> | Twój klucz API. Wymagany w każdym endpoincie poza GET /v1/models, chyba że wysyłasz x-api-key. |
x-api-key: <key> | Ten sam klucz w nagłówku, który wysyłają SDK Anthropic. Czytany w każdym endpoincie. |
Content-Type: application/json | Wymagany w każdym POST. Bez niego odpowiedź to 415. |
x-request-id: <your id> | Opcjonalny. Twoje własne id zapytania; wraca w nagłówku odpowiedzi x-request-id. Bez niego API tworzy id z 12 znaków szesnastkowych. |
- Treść każdego
POSTto jeden obiekt JSON, do 32 MiB. - Pole, którego API nie zna, nie powoduje błędu i nie ma żadnego skutku. Zapytanie napisane dla innego dostawcy nie kończy się niepowodzeniem z powodu dodatkowego pola.
- Znane pole z błędnym typem JSON albo brakujące wymagane pole dostaje odpowiedź
422. Treść, która nie jest poprawnym JSON, dostaje odpowiedź400. modelto jedno z id na stronie Models & pricing. Wielkość liter nie ma znaczenia.
Odpowiedź to JSON albo stream server-sent events, gdy zapytanie ustawia stream na true. Każdy endpoint odpowiada we własnym formacie. Każda odpowiedź ma nagłówek x-request-id.
Co zapytanie przechodzi
Zapytanie jest sprawdzane w stałej kolejności, zanim ruszy model. Odpowiada pierwsza kontrola, która się nie powiedzie, więc 401 nic jeszcze nie mówi o treści.
| Sprawdzane, w tej kolejności | Status przy niepowodzeniu |
|---|---|
| Klucz API | 401 |
| Treść: rozmiar, typ zawartości, JSON, typy pól | 413 · 415 · 400 · 422 |
| Id modelu | 400 |
| Ochrona przed floodem: 120 zapytań na minutę na konto | 429 |
| Saldo: budżet wyjścia zapytania musi się zmieścić | 429 |
Kształt błędu
Błąd to obiekt JSON z polem error, które zawiera type i message. /v1/messages opakowuje go tak, jak oczekują SDK Anthropic; każda inna ścieżka używa kształtu OpenAI.
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: gpt-4o"
}
} {
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "unknown model: gpt-4o"
}
} - Czytaj
typeimessage.codeiparamwystępują tylko w niektórych błędach: traktuj je jako opcjonalne.paramma zawsze wartośćnull. - Po rozpoczęciu streamu status to już
200. Awaria przychodzi wtedy jako ramka błędu wewnątrz streamu. - Każda odpowiedź z błędem zawiera nagłówek
x-request-id.
| Status | Typ | Kiedy |
|---|---|---|
400 | invalid_request_error | Treść nie jest poprawnym JSON, id modelu jest nieznane albo model nie przyjmuje rodzaju danych, który wysłano. |
401 | authentication_error | Brakuje klucza albo jest nieprawidłowy. |
404 | not_found_error | Ścieżka nie istnieje. |
405 | api_error | Ścieżka istnieje, metoda jest błędna. |
413 | invalid_request_error | Treść jest większa niż 32 MiB. |
415 | invalid_request_error | Content-Type nie jest application/json. |
422 | invalid_request_error | Pole ma błędny typ JSON albo brakuje wymaganego pola. |
429 | rate_limit_error | Saldo nie pokrywa zapytania, w ciągu minuty nadeszło ponad 120 zapytań, wywołania Shannon Coder z okna zostały wyczerpane albo model jest zajęty. Komunikat podaje, który z tych przypadków zaszedł. |
5xx | api_error | Status 500, 502, 503 lub 504: zapytanie było poprawne, ale nie dało się na nie odpowiedzieć. Wyślij je ponownie. 500 może mieć typ server_error. |
Rozliczenia i saldo
- Na konto przypada jedno saldo, które współdzielą czat i API: najpierw dzisiejszy limit planu, potem zakupione środki. API nie ma własnego limitu.
- Zapytanie rezerwuje swój budżet wyjścia (
max_tokens, domyślnie 4,096), a potem jest rozliczane za tokeny, które naprawdę zużyło, po cenie modelu. - Każda odpowiedź podaje liczbę tokenów w
usage. Strona Keys & usage pokazuje saldo i koszt każdego zapytania. - Każde zapytanie jest obsługiwane jednakowo. Jedynym limitem tempa zapytań jest ochrona przed floodem: 120 zapytań na minutę na konto. Zapytania wysłane równolegle czekają w kolejce.
Limity i saldo Modele i ceny Keys & usage
Pola zależne od modelu
Każdy model przyjmuje to samo zapytanie. Kilka pól działa tylko w niektórych modelach; tabela podaje, w których. Strony endpointów wymieniają wszystkie pola.
| Pole | Opis | Stosowane przez |
|---|---|---|
system | Instrukcje dla modelu: wiadomość system w Chat Completions, system w Messages, instructions w Responses. | Hostowane modele open-weight, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
temperature | Temperatura próbkowania. | Hostowane modele open-weight, shannon-1.6-*, shannon-coder-1 |
top_p | Próbkowanie nucleus. | Hostowane modele open-weight |
seed | Stałe ziarno (seed) losowania. | Hostowane modele open-weight |
stop | Do 4 sekwencji zatrzymania. | Hostowane modele open-weight |
reasoning_effort | Jak bardzo model wnioskuje, zanim odpowie. reasoning.effort w Responses, thinking w Messages. | Hostowane modele open-weight |
web_search | true pozwala modelowi przeszukać sieć na potrzeby tego zapytania. Pole tego API, w Chat Completions i Messages. | Modele Shannon z wyjątkiem shannon-coder-1 |
max_tokens | Budżet wyjścia. W każdym modelu ustala kwotę rezerwowaną z Twojego salda. | Jako limit długości odpowiedzi: hostowane modele open-weight, shannon-1.6-*, shannon-coder-1 |
Jeśli przychodzisz z SDK OpenAI
- Ustaw base URL na
https://api.shannon-ai.com/v1, a klucz na swój klucz Shannon. Wywołania Chat Completions i Responses działają wtedy z SDK bez zmian. modelmusi być id Shannon. Nazwa modelu innego dostawcy, na przykładgpt-4o, dostaje odpowiedź400iunknown model.- Wnioskowanie ma własne pole:
reasoning_contentobokcontent, w wiadomości i w deltach streamu. - Stream zawsze przekazuje
usagew ostatnim chunku, razem zfinish_reason. - Wywołanie narzędzia w streamie przychodzi jako jeden chunk z kompletnym ciągiem
arguments. - Odpowiedź ma jeden choice.
- Ścieżki API OpenAI, których nie ma w tabeli powyżej, takie jak
/v1/embeddings, dostają odpowiedź404.
Jeśli przychodzisz z SDK Anthropic
- Ustaw base URL na
https://api.shannon-ai.com, bez/v1, a klucz na swój klucz Shannon. SDK wysyła go jakox-api-key. modelmusi być id Shannon.max_tokensjest w tym API opcjonalne. Jego wartość domyślna to 4,096.- Odpowiedź zawiera bloki treści typu
thinking,textitool_use. Pierwszy blok nie zawsze jest tekstem: wybieraj bloki wedługtype. stop_reasontoend_turnlubtool_use. Stream modelu Shannon może też skończyć się wartościąmax_tokens.anthropic-versionianthropic-betasą akceptowane, więc SDK działa bez zmian. Zapytanie ich nie potrzebuje.- Błędy w
/v1/messagesmają kształt Anthropic:{"type": "error", "error": {…}}.
Narzędzia do kodowania, które mówią tymi formatami, konfiguruje się tak samo: base URL, klucz i id Shannon jako model. Narzędzia CLI do programowania