Integracja działa świetnie. Do momentu, w którym nagle przestaje.
CRM przestaje otrzymywać dane z formularza. Umowa nie trafia do klienta. Status płatności nie aktualizuje się w HubSpot. System ERP ma nowe informacje, ale CRM nadal pokazuje dane sprzed kilku godzin.
W logach pojawia się
429 Too Many Requests
I właśnie wtedy okazuje się, że samo „połączenie dwóch systemów przez API” to za mało.
Dobrze zaprojektowana integracja musi wiedzieć nie tylko co wysłać do HubSpot, ale również kiedy, jak często i co zrobić, jeśli HubSpot chwilowo nie przyjmie kolejnego żądania.
I właśnie tutaj pojawia się rate limiting.
Czym jest rate limiting w HubSpot?
Każde wywołanie API to żądanie wysyłane przez zewnętrzny system do HubSpot.
Może to być na przykład:
- pobranie kontaktu,
- utworzenie firmy,
- aktualizacja deala,
- wyszukanie rekordu,
- pobranie właściciela,
- utworzenie powiązania pomiędzy obiektami,
- aktualizacja własnego obiektu CRM.
Jeżeli integracja wykonuje kilka takich operacji dziennie, limity praktycznie nie są zauważalne.
Problem zaczyna się wtedy, gdy system obsługuje setki lub tysiące rekordów albo kilka aplikacji jednocześnie korzysta z tego samego konta HubSpot.
HubSpot ogranicza liczbę zapytań, które można wykonać w określonym czasie.
Rate limiting jest mechanizmem bezpieczeństwa, który chroni infrastrukturę przed sytuacją, w której jedna aplikacja wygenerowałaby ogromną liczbę zapytań i wpłynęła na działanie całej platformy.
Jakie są limity HubSpot API?
W praktyce warto zwrócić uwagę przede wszystkim na dwa rodzaje limitów: krótkookresowy oraz dzienny.
Limit krótkookresowy
Burst limit
Określa, ile zapytań aplikacja może wykonać w krótkim przedziale czasu.
Limit dzienny
Dzienna liczba wywołań API
Określa, ile zapytań może zostać wykonanych w ciągu dnia w ramach dostępnego limitu konta.
Dla prywatnie dystrybuowanych aplikacji ogólne limity wyglądają następująco:
Porównanie limitów według planu HubSpot
| Plan HubSpot | Limit na 10 sekund | Limit dzienny |
|---|---|---|
| Free / Starter | 100 zapytań | 250 000 |
| Professional | 190 zapytań | 625 000 |
| Enterprise | 190 zapytań | 1 000 000 |
W przypadku API Limit Increase limit krótkookresowy może zostać zwiększony, podobnie jak dostępny limit dzienny.
Najważniejsza różnica wygląda jednak tak:
Burst limit jest liczony per aplikacja, natomiast limit dzienny jest współdzielony pomiędzy aplikacjami działającymi na tym samym koncie HubSpot.
I właśnie ten drugi element potrafi powodować niespodzianki.
.png?width=1672&height=941&name=ChatGPT%20Image%2012%20wrz%202026%20o%2020_12_22%20(2).png)
Czy kilka integracji współdzieli limit HubSpot API?
Wyobraźmy sobie firmę posiadającą:
- integrację ERP z HubSpot,
- synchronizację systemu fakturowego,
- automatyczne generowanie umów,
- synchronizację danych z hurtownią,
- dodatkową aplikację raportową.
Każda z nich osobno może generować rozsądną liczbę zapytań.
Problem pojawia się wtedy, gdy patrzymy na cały ekosystem.
Jeżeli kilka integracji intensywnie synchronizuje dane, kolejna może zacząć otrzymywać błędy mimo tego, że sama wykonuje stosunkowo niewiele operacji.
Dlatego projektując architekturę HubSpot, nie patrzymy na pojedynczy skrypt.
Patrzymy na cały ruch generowany przez systemy firmy.
.png?width=1672&height=941&name=ChatGPT%20Image%2012%20wrz%202026%20o%2020_12_22%20(1).png)
429 Too Many Requests – co oznacza ten błąd w HubSpot?
Jeżeli aplikacja przekroczy dostępny limit, HubSpot może zwrócić:
HTTP 429 Too Many Requests
Nie powinno to automatycznie oznaczać awarii integracji.
W praktyce oznacza:
„Zwolnij. Spróbuj ponownie później.”
I tutaj bardzo łatwo odróżnić integrację przygotowaną do pracy produkcyjnej od prostego skryptu.
Najgorszy możliwy mechanizm wygląda tak:
Błędna obsługa 429
|
01
|
HubSpot zwraca 429 aplikacja przekroczyła dostępny limit |
|
02
|
Aplikacja od razu ponawia żądanie nie daje API czasu na odzyskanie dostępnego limitu |
|
03
|
HubSpot ponownie zwraca 429 problem nadal występuje |
|
04
|
Aplikacja ponawia żądanie kolejny raz liczba requestów jeszcze bardziej rośnie |
|
05
|
Ruch się kumuluje system sam pogłębia problem, przed którym próbuje się obronić |
System sam pogłębia problem, przed którym próbuje się obronić.
Retry i exponential backoff – jak obsłużyć błąd 429?
Integracja powinna posiadać mechanizm ponawiania nieudanych operacji.
Nie oznacza to jednak próbowania ponownie co sekundę aż do skutku.
Dobrym rozwiązaniem jest exponential backoff.
Przykładowo:
Exponential backoff
|
01
|
Pierwsza próba wykonana od razu |
|
02
|
Druga próba po 2 sekundach, jeśli poprzednia zakończyła się błędem 429 |
|
03
|
Trzecia próba po 4 sekundach, jeśli limit nadal jest przekroczony |
|
04
|
Czwarta próba po 8 sekundach |
Przerwa pomiędzy kolejnymi próbami stopniowo rośnie.
W systemach działających na większą skalę warto również dodać tzw. jitter, czyli niewielkie losowe przesunięcie czasu ponowienia.
Jeżeli 20 workerów jednocześnie otrzyma 429 i wszystkie spróbują ponownie dokładnie po dwóch sekundach, HubSpot ponownie otrzyma falę requestów w tym samym momencie.
Jitter pozwala rozproszyć ruch w czasie.
Kolejka zadań zamiast wyścigu requestów
.png?width=1672&height=941&name=ChatGPT%20Image%2012%20wrz%202026%20o%2020_12_23%20(3).png)
Przy większych automatyzacjach znacznie bezpieczniejszy model wygląda tak:
Przepływ zadania
|
01
|
Zdarzenie proces biznesowy uruchamia zadanie |
|
02
|
Kolejka zadanie czeka na bezpieczne wykonanie |
|
03
|
Worker pobiera i przetwarza zadanie |
|
04
|
Rate limiter kontroluje tempo wywołań API |
|
05
|
HubSpot API wykonuje operację |
|
06
|
Sukces zadanie zostaje zakończone |
Jeżeli HubSpot chwilowo nie może przyjąć kolejnego zapytania:
Obsługa błędu 429
|
01
|
Błąd 429 HubSpot chwilowo odrzuca kolejne żądanie |
|
02
|
Retry system wyznacza właściwy moment ponowienia |
|
03
|
Kolejka zadanie wraca do oczekiwania |
|
04
|
Ponowna próba operacja zostaje wykonana ponownie |
Dzięki temu proces biznesowy nie znika tylko dlatego, że API przez kilka sekund nie przyjęło kolejnego requestu.
To szczególnie ważne przy procesach takich jak:
- generowanie dokumentów,
- aktualizacja statusów umów,
- synchronizacja ERP,
- obsługa płatności,
- tworzenie kontaktów,
- wysyłanie komunikacji,
- synchronizacja dużych baz danych.
System ma prowadzić proces, a nie wymagać od człowieka pilnowania, czy każdy request zakończył się kodem 200.
Batch API – czy naprawdę potrzebujesz requestu dla każdego rekordu?
Drugim częstym problemem nie jest sam limit.
Jest nim sposób napisania integracji.
Załóżmy, że musimy zaktualizować 1000 kontaktów.
Najprostsze rozwiązanie wygląda tak:
Operacje wykonywane rekord po rekordzie
Kontakt 1: GET, a następnie PATCH
Kontakt 2: GET, a następnie PATCH
Kontakt 3: GET, a następnie PATCH
...
Bardzo szybko generujemy tysiące operacji.
HubSpot udostępnia jednak endpointy batchowe, dzięki którym wiele rekordów można obsłużyć w jednym żądaniu.
Dlatego przy projektowaniu większych integracji zawsze warto sprawdzić:
Czy naprawdę potrzebujemy wykonać osobny request dla każdego rekordu?
Czasem kilkaset wywołań można zastąpić kilkoma.
Oznacza to:
- mniejsze wykorzystanie limitów,
- szybszą synchronizację,
- mniejszą liczbę potencjalnych błędów,
- mniejsze obciążenie własnej infrastruktury.
Cache – najdroższy request to ten, którego nie trzeba było wykonać
Wyobraźmy sobie aplikację, która przy każdej operacji pobiera z HubSpot:
- listę właścicieli,
- definicje właściwości,
- konfigurację pipeline'u,
- informacje o obiekcie.
Jeżeli dane praktycznie się nie zmieniają, nie ma sensu pobierać ich setki razy.
Można wykorzystać cache.
Sprawdzenie cache
|
01
|
Sprawdź cache aplikacja najpierw szuka danych lokalnie |
|
02
|
Dane są dostępne użyj ich bez wykonywania kolejnego requestu do HubSpot |
|
03
|
Danych nie ma pobierz je z HubSpot, a następnie zapisz w cache |
To jedna z najprostszych metod ograniczenia liczby zapytań.
Webhook czy polling?
.png?width=1672&height=941&name=ChatGPT%20Image%2012%20wrz%202026%20o%2020_12_23%20(4).png)
Kolejny klasyczny przykład.
Chcemy dowiedzieć się, czy kontakt został zmieniony.
Możemy sprawdzać HubSpot regularnie:
Polling
|
01
|
Pierwsze sprawdzenie po 30 sekundach |
|
02
|
Kolejne sprawdzenie po następnych 30 sekundach |
|
03
|
Następne sprawdzenie i tak dalej, nawet jeśli żadne dane się nie zmieniły |
To polling.
System nie wie, czy cokolwiek się wydarzyło, więc cały czas pyta.
Przy jednej integracji może nie być problemu. Przy tysiącach rekordów robi się kosztownie.
Alternatywą są webhooki.
Webhook
|
01
|
HubSpot wykrywa zmianę kontaktu |
|
02
|
Webhook przekazuje informację o zdarzeniu |
|
03
|
Nasza aplikacja wykonuje odpowiednią operację |
Zamiast regularnie pytać system:
„Czy już coś się zmieniło?”
czekamy, aż system sam poinformuje nas o zmianie.
W dobrze zaprojektowanej architekturze webhooki obsługują zdarzenia na bieżąco, a synchronizacja okresowa pełni funkcję kontrolną.
CRM Search API ma własne limity
Warto zwrócić szczególną uwagę na endpointy wyszukiwania CRM.
CRM Search API posiada bardziej restrykcyjne limity niż ogólne API HubSpot.
Obecnie Search API może obsługiwać do 5 zapytań na sekundę, a pojedyncza strona odpowiedzi może zawierać maksymalnie 200 rekordów.
To istotne, ponieważ wyszukiwanie rekordów bardzo łatwo trafia do pętli.
Przykład:
Dla każdego zamówienia
|
01
|
Kontakt wyszukaj rekord po adresie e-mail |
|
02
|
Firma wyszukaj rekord po NIP |
|
03
|
Deal wyszukaj odpowiednią transakcję |
Przy większym imporcie szybko może okazać się, że to właśnie Search API, a nie ogólny limit konta, jest pierwszym wąskim gardłem.
Dlatego architektura integracji powinna uwzględniać limity konkretnych endpointów, a nie tylko globalny limit HubSpot.
Czy zwiększenie limitu HubSpot API rozwiązuje problem?
Czasami tak.
HubSpot oferuje możliwość zwiększenia dostępnych limitów API.
Ale zakup większego limitu nie powinien być pierwszą reakcją.
Jeżeli aplikacja wykonuje 500 000 requestów, z których 300 000 jest niepotrzebnych, większy limit nie naprawia architektury.
Pozwala jej tylko dłużej działać w nieefektywny sposób.
Zanim zwiększymy limit, warto sprawdzić:
- czy można zastosować batch API,
- czy nie odpytujemy ciągle tych samych danych,
- czy możemy zastosować cache,
- czy polling można zastąpić webhookami,
- czy wszystkie requesty są naprawdę potrzebne,
- czy integracje nie wykonują tej samej pracy niezależnie od siebie.
Dopiero później warto analizować zwiększenie dostępnej przepustowości.
Monitoring HubSpot API powinien być częścią integracji
Dobrze zaprojektowana integracja nie czeka na moment, w którym biznes zauważy problem.
HubSpot zwraca między innymi nagłówki pozwalające kontrolować dostępny limit:
Nagłówki limitów
X-HubSpot-RateLimit-Max
X-HubSpot-RateLimit-Remaining
X-HubSpot-RateLimit-Interval-Milliseconds
Można dzięki nim kontrolować, ile zapytań pozostało w aktualnym oknie czasowym.
HubSpot udostępnia również monitoring wykorzystania API bezpośrednio w platformie.
Dzięki temu można obserwować trendy, wykrywać nietypowe skoki wykorzystania i reagować zanim integracje zaczną otrzymywać błędy 429.
Bo jeżeli o przekroczeniu limitu dowiadujemy się od handlowca, który mówi:
„Od rana nie aktualizują mi się deale.”
to monitoring zadziałał zdecydowanie za późno.
Rate limiting to nie problem API, tylko architektury.
Limitów nie da się całkowicie wyeliminować.
Można natomiast zaprojektować system tak, aby użytkownik praktycznie ich nie zauważał.
Dobra integracja HubSpot powinna posiadać:
- kontrolę tempa wysyłania requestów,
- obsługę błędów 429,
- retry z exponential backoff,
- kolejkę zadań,
- mechanizm idempotencji,
- monitoring,
- cache,
- wykorzystanie endpointów batchowych,
- webhooki tam, gdzie jest to uzasadnione,
- mechanizm odzyskiwania zadań, które nie zostały wykonane.
Wtedy chwilowe przekroczenie limitu nie zatrzymuje procesu.
Zadanie trafia do kolejki, system zwalnia, wykonuje je ponownie i kontynuuje pracę.
Bez Excela. Bez ręcznego poprawiania danych. Bez osoby sprawdzającej codziennie rano, czy „integracja nadal działa”.
Integracja HubSpot powinna skalować się razem z biznesem
Integrację można zbudować tak, aby działała dzisiaj.
Można też zaprojektować ją tak, aby nadal działała wtedy, gdy liczba klientów, transakcji i automatyzacji wzrośnie pięciokrotnie.
To dwie zupełnie różne rzeczy.
W Velmanta projektujemy integracje HubSpot jako część całej architektury procesów firmy.
Analizujemy nie tylko jak połączyć system A z systemem B, ale przede wszystkim jak dane mają przepływać przez organizację, żeby proces działał stabilnie również wtedy, gdy firma zwiększy skalę.
Bo dobrze zaprojektowane API powinno być niewidoczne.
Dane po prostu trafiają tam, gdzie powinny. Procesy wykonują się automatycznie. A technologia wspiera ludzi zamiast tworzyć kolejne miejsce, którego ktoś musi pilnować.
Najczęściej zadawane pytania o limity HubSpot API
Co oznacza błąd 429 w HubSpot?
Błąd 429 Too Many Requests oznacza, że aplikacja przekroczyła dostępny limit wywołań API. Integracja powinna wtedy ograniczyć tempo requestów i ponowić operację zgodnie z odpowiednią strategią retry.
Ile requestów można wykonać do HubSpot API?
Limit zależy od planu HubSpot, rodzaju aplikacji oraz dostępnych rozszerzeń. Dla prywatnie dystrybuowanych aplikacji limity krótkookresowe i dzienne różnią się w zależności od posiadanej wersji HubSpot.
Jak uniknąć błędu 429 w HubSpot?
Najczęściej stosuje się rate limiting po stronie aplikacji, kolejki zadań, retry z exponential backoff, batch API, cache oraz webhooki zamiast nadmiernego pollingu.
Czy HubSpot Search API ma osobny limit?
Tak. CRM Search API posiada własne ograniczenia i dlatego przy większych synchronizacjach powinno być traktowane osobno od ogólnych limitów API HubSpot.
Czy można zwiększyć limit HubSpot API?
Tak, HubSpot oferuje możliwość zwiększenia dostępnych limitów. Zanim jednak zwiększymy limit, warto najpierw sprawdzić, czy integracja nie wykonuje zbędnych lub powtarzających się requestów.
Komentarze