Skip to content
Język: Polski

API dla programistów

Format błędów API i kody błędów

Zaktualizowano 1 listopada 2026 5 min czytania

Jak zbudowane są odpowiedzi z błędami w API LinkHarbor, co oznaczają najważniejsze kody błędów i jak Twój kod powinien na nie reagować.

Każda odpowiedź API z błędem ma ten sam format. Twój kod powinien polegać na kodzie błędu w polu error, a nie na tekście w message – kod pozostaje stały, a tekst może się zmienić i jest tłumaczony na język konta.

Budowa odpowiedzi z błędem

Przykład: 422 validation_failed
{
  "error": "validation_failed",
  "message": "Some of the information provided is invalid. Please check and try again.",
  "details": [
    { "field": "title", "reason": "minLength", "message": "…" }
  ],
  "request_id": "6b1f0c2e-…"
}
error
Kod czytelny maszynowo, na przykład not_found. Przy większości błędów jest też w nagłówku X-Error-Code – ale polegaj na polu w treści odpowiedzi.
message
Opis czytelny dla człowieka w języku konta: przy kluczu API w języku właściciela workspace, przy połączonej aplikacji w języku osoby, która ją połączyła. Bez ważnego tokenu – na przykład przy 401 z kontroli tokenu – język zależy od Accept-Language, a w przeciwnym razie jest to angielski. Nagłówek Content-Language podaje język.
details
Pojawia się tylko wtedy, gdy jest coś więcej do przekazania. Przy 422 z walidacji danych wejściowych to lista z field, reason i message dla każdego problemu; przy 422 z logiki biznesowej i wszystkich innych błędach to obiekt, na przykład z reason, retry_after_sec lub listą issues. Przy przekroczeniu rozmiaru zawiera field, reason i limit, a przy 413 request_too_large max_bytes i max_kb. Sprawdzaj więc, czy details jest listą.
request_id
ID żądania. Jest też w nagłówku X-Request-Id. Podaj je, gdy kontaktujesz się z pomocą techniczną.

Wyjątki: odpowiedź 429 rate_limited ma pole retry_after_sec zamiast details; przy 429 i 403 insufficient_scope w treści brakuje request_id. 401 z kontroli tokenu i 422 z kontroli schematu nie mają nagłówka X-Error-Code, a przy kontroli schematu tłumaczony jest tylko message najwyższego poziomu; teksty w details pozostają po angielsku. Nagłówek X-Request-Id jest ustawiany zawsze.

Najważniejsze kody

HTTPerrorZnaczenieCo zrobić
400invalid_jsonTreść nie jest poprawnym JSON-emSprawdź JSON
400bad_requestBłędny Content-Type lub nieprawidłowo zbudowane żądanieUstaw Content-Type: application/json
401missing_bearer_tokenBrak tokenu w nagłówku AuthorizationUstaw nagłówek Authorization: Bearer …
401invalid_tokenToken wygasł lub jest nieprawidłowy albo klucz został usuniętyPobierz nowy token; jeśli to nie pomoże, sprawdź klucz
401invalid_api_keyBłędne ID klucza lub sekret przy wymianie tokenuSprawdź dane dostępowe
402plan_limit_reachedOsiągnięto limit planu, na przykład dla krótkich linkówZmień plan na wyższy lub usuń wpisy
403insufficient_scopeBrak zakresu lub endpoint niedostępny dla kluczy APIUtwórz klucz z właściwym zakresem
403forbiddenBrak uprawnień do tej akcjiWykonaj ją w panelu
403feature_not_availableFunkcja nie jest zawarta w planieSprawdź plan
403block_type_requires_planTyp bloku dostępny tylko w wyższym planieWybierz inny typ bloku lub zmień plan na wyższy
403template_lockedSzablon premium niedostępny w obecnym planieWybierz szablon z GET /v1/templates/available
403workspace_suspended, workspace_read_only, workspace_grace_expiredWorkspace zablokowany lub tylko do odczytu z powodu zaległej płatnościUreguluj płatność w panelu
404not_foundZasób nie istnieje lub nie należy do Twojego workspaceSprawdź ID
409conflictOgólny konflikt z bieżącym stanemWczytaj stan ponownie, zmień dane wejściowe
409workspace_template_in_useSzablon workspace jest nadal używany przez strony; ich liczba znajduje się w details.countPrzełącz strony na inny szablon, a potem go usuń
409handle_taken, slug_takenHandle lub slug krótkiego linku jest już zajętyWybierz inną wartość
409form_in_use, page_not_private, page_not_published, never_publishedKonflikt ze stanem: formularz nadal jest na stronie, strona nie jest prywatna lub nie jest opublikowana, strona nigdy nie była opublikowanaZmień stan, a potem spróbuj ponownie
409page_limit_reached, link_limit_reached, block_limit_reached, form_limit_reached, asset_limit_reached, asset_storage_limit_reached, workspace_template_limit_reachedOsiągnięto limit liczby lub miejsca w planieUsuń wpisy lub zmień plan na wyższy
409draft_not_publishableWersja robocza ma problemy; lista znajduje się w details.issuesUsuń problemy, a potem opublikuj ponownie
413request_too_largeTreść większa niż dozwolona dla tego endpointu (64 KB, 1 MB lub 2 MB); limit znajduje się w details.max_kbWysyłaj mniej danych na żądanie, zobacz Limity zapytań
413payload_too_largePrzesłany plik jest większy niż 10 MBZmniejsz plik
422validation_failedNieprawidłowe dane wejściowe lub nieznane pole; szczegóły w detailsPopraw pola zgodnie z details
422handle_reserved, target_url_invalid, target_url_scheme, target_url_hostHandle zarezerwowany albo docelowy URL nieprawidłowy lub niedozwolonyWybierz inną wartość
422workspace_template_disabledWybrany szablon workspace jest wyłączonyWłącz szablon w sekcji „Domeny i szablony” lub wybierz inny
422template_css_external, template_section_invalidSzablon workspace: CSS wczytuje coś z zewnętrznych serwerów albo sekcja {{#if}}/{{#unless}}/{{#each}} jest umieszczona nieprawidłowoUsuń zewnętrzne adresy albo zamknij sekcję w tym samym tagu lub tekście
422custom_css_externalWłasny CSS wczytuje coś z zewnętrznych serwerówUsuń zewnętrzne adresy z CSS
429rate_limited, api_key_lockedZa dużo żądań albo klucz zablokowany po nieudanych próbachOdczekaj tyle, ile podaje Retry-After lub details.retry_after_sec
500internal_errorNieoczekiwany błądSpróbuj ponownie później, zanotuj request_id
503service_unavailableUsługa chwilowo niedostępnaSpróbuj ponownie po przerwie

Odczytywanie błędów danych wejściowych

Przy 422 validation_failed details wymienia każdy problem osobno: field to ścieżka pola (z ukośnikami dla zagnieżdżonych obiektów, na przykład theme_config/button_style), reason to złamana reguła, taka jak required, minLength, maxLength, enum lub additionalProperties. Przy additionalProperties komunikat mówi, które pola są nieznane – często chodzi o literówkę w nazwie pola.

Zalecana obsługa w kodzie

  • 400, 413 i 422: nie ponawiaj, tylko popraw żądanie
  • 401 invalid_token: pobierz raz nowy token i ponów
  • 403: nie ponawiaj; sprawdź zakres, plan lub to, kto może wykonać tę akcję
  • 404: sprawdź ID; po usunięciu to normalne
  • 409: wczytaj stan ponownie i zdecyduj, czy akcja jest nadal potrzebna
  • 429: odczekaj tyle, ile podaje Retry-After, a potem ponów – zobacz Limity zapytań
  • 500 i 503: ponów kilka razy z rosnącymi przerwami

Nic nie znaleziono?

Napisz, czego potrzebujesz, a nasz zespół pomocy technicznej pomoże Ci osobiście.

Skontaktuj się z pomocą