
Claude API w wersji 2026-10-21: co psuje aktualizacja SDK i jak ją zablokować
21 października 2026 Anthropic wydał wersję API 2026-10-21 i równocześnie nowe główne wydania wszystkich oficjalnych SDK oraz narzędzia ant. Najważniejsze dla Twojego kodu: te wydania domyślnie wysyłają nową wersję API, więc podniesienie SDK o jeden numer główny jest jednocześnie migracją API. Nie ma osobnego przełącznika, który można zostawić na później.
Migracja nie jest przymusowa. Dokumentacja zaleca najnowszą wersję, ale starsze SDK nadal wysyłają 2023-06-01, a w przeczytanych przeze mnie stronach nie ma daty jej wyłączenia. Ryzyko jest więc inne niż przy wycofaniu modelu: nie chodzi o termin, tylko o to, że automatyczna aktualizacja zależności (bot, pip install -U, luźne ograniczenie wersji) może wciągnąć nowy numer główny bez Twojej decyzji.
Ten wpis opiera się na przewodniku migracji i notatkach wydania z platform.claude.com. Gdzie to moja interpretacja, a nie zapis z dokumentacji, zaznaczam.
W skrócie:
- Nowe wersje: Python SDK 2.0.0, TypeScript 1.0.0, C# 13.0.0, Go 2.0.0, Java 3.0.0, PHP 1.0.0, Ruby 2.0.0 i
ant2.0.0. - Wersja API
2026-10-21zwraca błąd 400 przytemperature,top_pitop_k(nawet z wartością domyślną), przy dokumentach w wiadomościachassistanti przy cytowaniach w blokach tekstowych wiadomościuser. - Nowe SDK wysyłają klucz API w nagłówku
Authorization: Bearer, a nie wX-Api-Key. To może złamać bramki i proxy, które czytają stary nagłówek. - Zostać na starym zachowaniu możesz, przypinając wersję SDK poniżej nowego numeru głównego albo wysyłając
anthropic-version: 2023-06-01w żądaniach bez SDK.
Które wersje SDK wysyłają nową wersję API
Każdy numer główny SDK wysyła jedną wersję API i nowy numer główny pojawia się razem z nową wersją API. Dla 2026-10-21 są to:
| Narzędzie | Pierwsza wersja z 2026-10-21 |
Pakiet |
|---|---|---|
| Python | 2.0.0 | anthropic |
| TypeScript | 1.0.0 | @anthropic-ai/sdk |
| C# | 13.0.0 | Anthropic |
| Go | 2.0.0 | github.com/anthropics/anthropic-sdk-go/v2 |
| Java | 3.0.0 | com.anthropic:anthropic-java |
| PHP | 1.0.0 | anthropic-ai/sdk |
| Ruby | 2.0.0 | anthropic |
ant CLI |
2.0.0 | github.com/anthropics/anthropic-cli/v2 |
W dniu publikacji tego wpisu dokumentacja podaje już kolejne wydania: 2.1.0 dla Pythona, 1.1.0 dla TypeScriptu i 13.1.0 dla C#. Starsze wydania wysyłały anthropic-version: 2023-06-01 z każdym żądaniem.
Nowe wydania mają też licencję Apache 2.0 zamiast MIT (wcześniejsze wersje zostają na MIT). Jeśli pilnujesz licencji zależności, zaktualizuj wpisy.
Co zmienia się w API, a co w samych SDK
Zmiany dzielą się na dwie grupy i warto je rozdzielić, bo działają niezależnie. Pierwsza grupa wynika z wersji API: dotyczy każdego, kto wyśle nagłówek 2026-10-21, także z cURL-a. Druga wynika z nowych SDK i ant: dotyczy tylko tych narzędzi, nie samego API.
| Zmiana | Stare zachowanie (2023-06-01) |
Nowe zachowanie | Skąd wynika |
|---|---|---|---|
temperature, top_p, top_k |
akceptowane na części modeli | błąd 400 na każdym modelu, nawet z wartością domyślną | wersja API |
Blok document w wiadomości assistant |
akceptowany | błąd 400 | wersja API |
citations w bloku text wiadomości user |
akceptowane | błąd 400 (także wewnątrz search_result) |
wersja API |
| Pola Admin API i Enterprise Analytics API | stare nazwy | stare nazwy zniknęły z odpowiedzi | wersja API |
| Nagłówek z kluczem API | X-Api-Key |
Authorization: Bearer <klucz> |
SDK i ant |
| Text Completions | dostępne | usunięte z SDK TypeScript, Go, Java i Ruby oraz z CLI | SDK i ant |
| Kliencka kompakcja w tool runnerze | opcja w TypeScript i Ruby | usunięta | SDK |
--api-key i --auth-token w ant |
flagi | usunięte | ant |
Najbardziej boli pierwszy wiersz, bo dla temperature nie ma bezpośredniego zamiennika. Szczegóły poniżej.
Parametry temperature, top_p i top_k: co się stanie
W wersji 2026-10-21 żądanie, które zawiera temperature, top_p albo top_k, zwraca 400, nawet gdy wartość jest domyślna. Dotyczy to Messages API, zliczania tokenów i każdego żądania w Message Batches utworzonych z tą wersją. W samych SDK te trzy parametry zniknęły z typów i z flag CLI.
Co to znaczy w praktyce, według przewodnika:
- Bez tych parametrów model próbkuje z wartościami domyślnymi, w tym z
temperaturerówną 1,0. To samo robi żądanie2023-06-01, które ich nie podaje. - Modele, które już akceptowały tylko wartości domyślne (Claude 4.7 i nowsze), zachowują się jak dotąd. O tej wcześniejszej zmianie na poziomie modeli piszę w tekście Claude Opus 4.7: model, który zmienił API, a o jej powtórce w tańszym tierze w opisie Claude Haiku 5.5.
- Na modelach, które przyjmują inne wartości (przewodnik podaje przykład Claude Sonnet 4.6), żądanie z obniżoną
temperaturetraci ten efekt. Przewodnik pisze: żadne inne ustawienie jej nie zastępuje. - Jeśli żądanie zależy od niestandardowej wartości, albo przestajesz ją wysyłać, albo to żądanie zostaje na
2023-06-01.
Moja ocena: jeśli przeszedłeś już na modele 4.7 lub nowsze, ten punkt dotknie Cię najmniej. Jeśli masz klasyfikator lub ekstraktor na starszym modelu z temperature ustawioną na 0, przetestuj go bez tego parametru, zanim podniesiesz SDK.
Dokumenty w wiadomościach assistant i cytowania w wiadomościach user
Dwie pozostałe zmiany w Messages API są wąskie, ale zwracają 400, więc łatwo je pominąć w testach.
Dokumenty w odpowiedziach asystenta. Blok document umieszczony bezpośrednio w wiadomości assistant zwraca 400. Dokument należy wysłać w wiadomości user. Dokument zagnieżdżony w innym bloku, na przykład w wyniku narzędzia pobierania stron, który zwrócił Claude, nadal przechodzi.
Cytowania w wiadomościach użytkownika. Blok text z niepustą tablicą citations w wiadomości user zwraca 400, także wewnątrz bloku search_result. Cytowania w blokach text wiadomości assistant (na przykład wcześniejsze odpowiedzi Claude’a odsyłane w historii) są nadal akceptowane. Działa też ustawienie "citations": {"enabled": true} na dokumentach i wynikach wyszukiwania.
Typowy ślad w kodzie: logika, która przebudowuje historię rozmowy, składa ją z zapisanych fragmentów albo wstrzykuje do niej dokumenty i źródła we własnym formacie.
Klucz API w nagłówku Authorization: co sprawdzić w bramkach
To zmiana, która najłatwiej wywróci produkcję, bo nie wymaga żadnej zmiany w Twoim kodzie. Nowe SDK i ant wysyłają klucz jako Authorization: Bearer <klucz>, a nie w nagłówku X-Api-Key. Samo API przyjmuje klucz w obu nagłówkach, więc program, który łączy się z API bezpośrednio, nie wymaga zmian. Kłopot mają pośrednicy, którzy czytają albo ustawiają X-Api-Key.
Sprawdź u siebie:
- Bramki i proxy. Reguły, które uwierzytelniają, limitują albo przepisują ruch po
X-Api-Key, przestaną widzieć klucz. Zmień je tak, by czytałyAuthorization, albo ustawX-Api-Keypo stronie klienta. - Logowanie i maskowanie sekretów. To moja uwaga, nie zapis z przewodnika: jeśli narzędzia maskują klucz tylko w
X-Api-Key, sprawdź, czy maskują teżAuthorization. - Middleware i własne
fetch. Kod, który czyta klucz zx-api-key, musi czytaćauthorization, gdzie klucz stoi po słowieBearer. - Ręczne nagłówki. W SDK Python, TypeScript, Go, PHP i Ruby kod ustawiający
X-Api-Keyna żądaniu przestaje zastępować klucz klienta: wychodzą wtedy dwa klucze. Kod usuwającyX-Api-Key, żeby wysłać samo uwierzytelnienie tokenem, przestaje działać, bo usunąć trzeba terazAuthorization. - Klient trzyma tylko jedno poświadczenie. Wcześniej klient z kluczem i tokenem wysyłał oba, każdy w osobnym nagłówku. Teraz przekazanie dwóch (na przykład
api_keyiauth_tokenw Pythonie) kończy się błędem (ValueError, w TypeScripcieTypeError). Jeśli wysyłasz token do bramki i klucz do API za nią, token przekaż jakoauth_token, aX-Api-Keydopisz własnym nagłówkiem, i niech bramka usunie swójAuthorizationprzed przekazaniem dalej.
Jeśli bramka musi dalej dostawać X-Api-Key, przewodnik pokazuje przeniesienie klucza z powrotem. W TypeScripcie wystarczy:
const client = new Anthropic({ apiKey, defaultHeaders: { "X-Api-Key": apiKey, Authorization: null }});W Pythonie robi się to funkcją auth na kliencie HTTP, która zamienia Authorization na X-Api-Key w każdym żądaniu, także w ponowieniach. Samo ant nie ma flagi ani zmiennej środowiskowej do dodawania własnych nagłówków, więc nie wyśle X-Api-Key: bramkę trzeba zmienić po jej stronie.
Wyjątki warte uwagi: klient Foundry nadal wysyła klucz jako x-api-key, a klienci Bedrock Mantle już wcześniej używali tokenu typu bearer.
Pozostałe usunięcia: Text Completions, kompakcja i flagi ant
Text Completions. Stare API Text Completions zostało usunięte z SDK TypeScript, Go, Java i Ruby oraz z CLI (komenda ant completions create zniknęła). Przewodnik odsyła do Messages API. W jego opisie nie ma wzmianki o Pythonie, C# i PHP, więc nie twierdzę, że tam coś zniknęło.
Kliencka kompakcja w tool runnerze. W SDK TypeScript (compactionControl) i Ruby (compaction_control:) usunięto kompakcję po stronie klienta na rzecz kompakcji po stronie API. Według przewodnika opcja przestała działać już wcześniej: w TypeScripcie od v0.129.0, w Ruby od v1.74.0 jej podanie rzucało błąd. Zamiennik to nagłówek beta compact-2026-01-12 i edycja compact_20260112 w context_management, z progiem co najmniej 50 000 tokenów. To inna rzecz niż kompakcja bezczynnych sesji w Claude Code, która jest funkcją narzędzia, a nie parametrem API.
Flagi w ant. --api-key i --auth-token zostały usunięte, bo wartość na linii poleceń widać w historii powłoki i w liście procesów. Polecenie, które ich używa, kończy się błędem flag provided but not defined. Zamiast tego użyj ANTHROPIC_API_KEY, --api-key-stdin albo ant auth login (dla tokenu: ANTHROPIC_AUTH_TOKEN lub --auth-token-stdin). Instalujący ant przez go install muszą dopisać /v2 do ścieżki modułu, a stara ścieżka dalej instaluje najnowszą wersję 1 bez błędu i ostrzeżenia.
Admin API i Enterprise Analytics API: zmienione pola
W 2026-10-21 odpowiedzi tych interfejsów nie zawierają starych nazw pól. Jeśli czytasz je w skryptach raportowych, zmień nazwy:
| Gdzie | Stare pole | Nowe pole |
|---|---|---|
| Grupy RBAC | roles |
role_ids |
| Członkowie grup RBAC | group_id |
rbac_group_id |
| Role RBAC | name |
display_name |
| Limity zapytań organizacji i workspace’ów | group_type |
group.type |
| Klucze API | workspace_id |
scope |
| Raporty użycia i kosztów per użytkownik | actor.email |
actor.email_address |
| Podsumowania aktywności | summaries |
data |
Najbardziej zdradliwa jest zmiana w kluczach API. Dawniej workspace_id równe null oznaczało klucz domyślnego workspace’u albo klucz dla wszystkich workspace’ów. Teraz klucz związany z workspace’em (także domyślnym) ma scope.workspace_id z prawdziwym identyfikatorem, a klucz dla wszystkich workspace’ów ma scope równy {"type": "organization"} bez workspace_id. Kod, który traktował null jako workspace domyślny, musi porównywać scope.workspace_id z identyfikatorem tego workspace’u. Znajdziesz go przez List Workspaces z include_default=true.
Zmiany w typach SDK
Nowe wydania zmieniają też typy, co przy kompilacji lub sprawdzaniu typów pokaże błędy, choć wysyłane żądania są te same. MessageParam przestał być jednym typem dla wszystkich ról i jest teraz unią trzech: UserMessageParam, AssistantMessageParam i SystemMessageParam (podobnie BetaMessageParam). W Pythonie wywołanie MessageParam(...) rzuca TypeError, więc wiadomość zapisuje się jako słownik. Wiadomość zapisaną jako literał słownika, na przykład {"role": "user", "content": "Hello"}, nie trzeba zmieniać. Do tego Go 2 wymaga Go 1.25 lub nowszego. W SDK dla C#, Go, Java, PHP i Ruby pola o jednej możliwej wartości stały się stałymi, a typy enum o jednej wartości zniknęły. W TypeScripcie pakiety platformowe (Bedrock, Vertex, Foundry, AWS, Google Cloud) trzeba podnieść do v1 razem z głównym SDK, bo inaczej menedżer pakietów zainstaluje obok drugą, starszą kopię.
Jak zablokować automatyczną aktualizację do nowego SDK
Cel: żadna zależność nie przeskoczy numeru głównego bez Twojej wiedzy. Poniższe jest moją rekomendacją, oparte na zapisach z przewodnika.
- Ogranicz zakres wersji w manifeście. Dla Pythona sensowne jest
anthropic<2, dla npm zakres, który nie dopuszcza1.0.0i wyżej, dla Rubiego zakres poniżej 2. Unikajlatest,*i>=bez górnej granicy. - Użyj pliku blokującego i zatwierdzaj aktualizacje ręcznie. Przypięte wersje w
uv.lock,package-lock.jsonlubpnpm-lock.yamloraz przegląd pull requestów od botów robią to, czego sam zakres nie zrobi. - PHP: uważaj na
composer require. Przewodnik zaznacza, żecomposer require "anthropic-ai/sdk"podnosi pakiet do 1.0.0, a samcomposer updatezostaje w obecnym ograniczeniu wersji. - Go: nowy numer główny to nowa ścieżka importu. Wersja 2 używa
.../anthropic-sdk-go/v2, więcgo getna starej ścieżce nie przeskoczy sam. - Przypnij
anthropic-versiontam, gdzie wysyłasz żądania sam. Bez SDK ustaw nagłówekanthropic-version: 2023-06-01, a przy migracji2026-10-21. Nagłówek jest wymagany. - Nie nadpisuj wersji w nowym SDK, żeby wrócić do
temperature. Dokumentacja Pythona pokazuje, że nagłówekanthropic-versionmożna nadpisać wdefault_headers, ale ostrzega, że może to dać błędne typy i niezdefiniowane zachowanie. Ponadto nowe SDK nie ma już tych parametrów w typach. Nie testowałem takiego obejścia i go nie polecam: stabilniej zostawić usługę na starym SDK. - Amazon Bedrock ze starszymi modelami.
2026-10-21jest tam dostępna tylko dla Claude 4.7 i nowszych. Dla starszych modeli zostań na dzisiejszej wersji SDK albo na wysyłanej dziś wersji API, a aby je przenieść, najpierw przełącz je na model 4.7 lub nowszy.
Lista kontrolna przed podniesieniem SDK
- Wyszukaj w repozytorium
temperature,top_p,top_ki usuń je albo zostaw tę usługę na starej wersji. - Przejrzyj kod budujący historię rozmowy pod kątem dokumentów w wiadomościach
assistanticitationsw wiadomościachuser. - Sprawdź bramki, proxy, reguły WAF, limity i maskowanie logów pod kątem
X-Api-KeyiAuthorization. - Poszukaj miejsc, gdzie klient dostaje jednocześnie klucz i token.
- Poszukaj
completions,compactionControlicompaction_controlw TypeScripcie, Go, Javie i Ruby. - Sprawdź skrypty z
ant:--api-key,--auth-token, ścieżkęgo install. - Zaktualizuj odczyt pól Admin API i Enterprise Analytics API.
- Uruchom testy na wersji
2026-10-21przed wdrożeniem. Przewodnik zaleca wydanie aktualizacji razem z poprawkami kodu.
Podobną pracę z przeglądem kodu przed migracją opisałem przy wyłączeniu GPT-4o i GPT-4.1 w API OpenAI. Różnica jest istotna: tam jest data wyłączenia (14 stycznia 2027), tu dokumentacja żadnej nie podaje.
Najczęstsze pytania o wersję API 2026-10-21
Czy muszę migrować na 2026-10-21? Dokumentacja tego nie wymaga i na przeczytanych przeze mnie stronach nie podaje daty wyłączenia 2023-06-01, choć zaleca najnowszą wersję. Czy termin pojawi się później, nie wiadomo, więc śledź notatki wydania.
Czy aktualizacja SDK sama przełączy wersję API? Tak. Nowy numer główny wysyła 2026-10-21 domyślnie. Aktualizacja w obrębie tego samego numeru głównego wersji API nie zmienia.
Czy mogę dalej używać temperature? Tylko na 2023-06-01, czyli ze starym SDK albo z własnym nagłówkiem przy wywołaniach bez SDK. Na 2026-10-21 żądanie z tym parametrem zwraca 400 na każdym modelu.
Czy wywołania cURL też się zmienią? Tylko jeśli sam ustawisz anthropic-version: 2026-10-21. Klucz w x-api-key nadal działa, bo API akceptuje oba nagłówki.
Czy ceny lub modele się zmieniły? Notatki i przewodnik, które przeczytałem, o tym nie mówią. Nie opisuję tu cen.
Czy zmiana Bearer dotyczy chmur? Zależy od klienta. Klienci Foundry nadal wysyłają x-api-key, a klienci Bedrock Mantle już wcześniej używali tokenu bearer.
Przy migracji pomaga polecenie /claude-api api-version z Claude Code 2.1.307 (21 października), które przenosi kod na wersję API 2026-10-21. Co zmieniły kolejne wydania Claude Code, opisuję w tekście o wersjach 2.1.309–2.1.312.
Źródła
- Migrating to API version 2026-10-21 (przewodnik migracji) - Anthropic, 21 października 2026
- Claude Platform release notes - wpis z 21 października 2026
- API versions - historia wersji API
- SDKs, CLI, and libraries - tabela najnowszych wersji
- Python SDK, sekcje Default headers i Semantic versioning
- Wydanie v2.0.0 repozytorium anthropic-sdk-python
Nowe materiały prosto na maila
Publikuję nowy artykuł albo lekcję kursu — dostajesz jednego maila. Nic poza tym.
Bez cyklu wydawniczego i newsów o każdej premierze modelu
Zapisy do newslettera otwieram partiami, żeby nie zamieniać go w kolejny kanał ze spamem i recyklingiem linków.
Jeśli chcesz dostać informację przy następnym otwarciu zapisów, napisz na [email protected].

O autorze
Marcin Szymański
Od kilkunastu lat buduję systemy w .NET i Azure — obecnie rozproszony monitoring PingView. Piszę tu o pracy człowiek + agenci AI na realnych workflow, nie na demach. Zawodowo prowadzę audyty, rescue projektów i wdrożenia AI-assisted delivery w zespołach.