Przejdź do głównej zawartości

Błędy

Każdy błąd publicznego API ma format RFC 9457 i Content-Type: application/problem+json:

{
"type": "https://developers.rezeri.com/errors/insufficient_scope",
"title": "Forbidden",
"status": 403,
"detail": "The API key lacks the required scope 'bookings:write'.",
"code": "insufficient_scope",
"request_id": "6f1c2a9e0b7d4e8f9a3b5c1d2e4f6a8b"
}
  • type — adres opisu błędu w tym katalogu (https://developers.rezeri.com/errors/<code>).
  • title — standardowa nazwa statusu HTTP.
  • status — kod statusu HTTP.
  • detail — opis po angielsku dla człowieka. Może się zmienić, więc nie porównuj go w kodzie.
  • code — stały identyfikator błędu. Programuj na podstawie code, nie detail.
  • request_id — identyfikator żądania. Podaj go, kontaktując się z pomocą techniczną.
  • errors[] (opcjonalnie) — lista błędów pól z kluczami field, code, message.

Przy błędach walidacji (validation_error, unknown_field) errors[].code to typ błędu walidatora (np. missing, string_too_long) — lista tych typów nie jest zamknięta. errors[].message bywa po polsku; opieraj się na field i code.

{
"type": "https://developers.rezeri.com/errors/client_email_required",
"title": "Unprocessable Entity",
"status": 422,
"detail": "The organization requires the client's email.",
"code": "client_email_required",
"request_id": "6f1c2a9e0b7d4e8f9a3b5c1d2e4f6a8b",
"errors": [
{
"field": "client.email",
"code": "client_email_required",
"message": "The organization requires the client's email."
}
]
}

Odpowiedź z błędem ma zawsze Cache-Control: no-store, a 401 dodatkowo WWW-Authenticate: Bearer.

StatusKodZnaczenie
400bad_requestŻądanie nie mogło zostać przetworzone, np. naruszona reguła biznesowa bez własnego kodu.
401unauthorizedUwierzytelnienie nie powiodło się.
401missing_api_keyBrak klucza API w nagłówku Authorization: Bearer <klucz>.
401invalid_api_keyKlucz API jest nieprawidłowy albo został unieważniony.
401wrong_environmentKlucz należy do innego środowiska (np. klucz test użyty na produkcji).
403forbiddenBrak uprawnień do wykonania operacji.
403organization_unavailableOrganizacja klucza jest niedostępna (np. konto właściciela jest nieaktywne lub w trakcie usuwania).
403plan_requiredPlan organizacji nie obejmuje dostępu do API.
403api_not_enabledDostęp produkcyjny do API nie jest włączony dla tej organizacji.
403insufficient_scopeKlucz API nie ma wymaganego scope dla tego endpointu.
403booking_limit_reachedOrganizacja osiągnęła limit rezerwacji swojego planu.
404not_foundZasób nie istnieje albo nie należy do organizacji klucza.
405method_not_allowedMetoda HTTP nie jest obsługiwana dla tej ścieżki.
409conflictOperacja jest sprzeczna z bieżącym stanem zasobu.
409idempotency_in_progressŻądanie z tym Idempotency-Key jest wciąż przetwarzane; ponów je za chwilę.
409idempotency_outcome_unknownPierwotne żądanie przerwało się po możliwym utworzeniu rezerwacji; sprawdź GET /v1/bookings przed ponowieniem z nowym kluczem.
409booking_unavailableOrganizacja nie przyjmuje teraz rezerwacji.
409slot_unavailableWybrany termin nie jest dostępny.
409not_payableRezerwacji nie można teraz opłacić online.
409awaiting_acceptanceRezerwacja czeka na akceptację usługodawcy, zanim będzie można ją opłacić.
409already_paidRezerwacja jest już opłacona.
409not_cancellableRezerwacji nie można anulować w jej obecnym stanie.
409cancellation_window_closedRezerwacja już się rozpoczęła, więc nie można jej anulować.
409webhook_endpoint_limitOrganizacja ma już maksymalną liczbę endpointów webhooków; usuń nieużywany.
409terms_changedWarunki rezerwacji zmieniły się od ich pobrania (terms_hash jest nieaktualny); pobierz GET /v1/booking-terms ponownie i pokaż je klientowi.
422validation_errorŻądanie nie przeszło walidacji; szczegóły są w errors[].
422unknown_fieldŻądanie zawiera pole lub parametr spoza schematu.
422idempotency_key_requiredBrak nagłówka Idempotency-Key albo ma on nieprawidłową długość (1–255 znaków).
422idempotency_key_reusedTen Idempotency-Key został już użyty z innym żądaniem.
422invalid_cursorKursor paginacji jest nieprawidłowy albo pochodzi z innej listy.
422invalid_rangeData to jest wcześniejsza niż from.
422range_too_largeZakres dat przekracza dozwolone 31 dni.
422mode_requiredUsługa jest dostępna online i stacjonarnie, więc trzeba podać mode.
422mode_not_supportedUsługa nie jest dostępna w wybranym trybie (mode).
422terms_requiredOrganizacja ma warunki do akceptacji, a w żądaniu brakuje terms_accepted: true albo terms_hash z GET /v1/booking-terms.
422early_performance_requiredKlient musi zażądać rozpoczęcia usługi przed upływem 14 dni na odstąpienie od umowy (early_performance_requested: true).
422client_email_requiredOrganizacja wymaga adresu e-mail klienta.
422client_phone_requiredOrganizacja wymaga numeru telefonu klienta.
422return_url_requiredRezerwacja opłacana online wymaga pola return_url.
422return_url_not_allowedreturn_url musi być adresem https w domenie dozwolonej dla klucza API.
422webhook_url_invalidAdres endpointu webhooków jest niepoprawny; wymagany pełny adres https.
422webhook_url_not_allowedAdres endpointu webhooków nie wskazuje na publiczny adres (adresy prywatne i lokalne są blokowane).
422webhook_event_not_subscribedEndpoint nie subskrybuje typu zdarzenia, o który prosisz w POST /v1/webhook-endpoints/{id}/test; dodaj go do events albo wybierz inny typ.
422webhook_test_booking_missingOrganizacja nie ma jeszcze żadnej rezerwacji, z której zbudować przykładowe zdarzenie; utwórz rezerwację testową albo podaj booking_id.
429rate_limitedPrzekroczono limit żądań; ponów po liczbie sekund z nagłówka Retry-After.
429client_booking_limitZa dużo rezerwacji dla tego klienta lub pracownika; ponów później.
500internal_errorNieoczekiwany błąd po stronie Rezeri; zgłoś go z request_id.
502payment_provider_errorOperator płatności nie otworzył sesji płatności; ponów żądanie.
503idempotency_unavailableMagazyn idempotencji jest chwilowo niedostępny; ponów żądanie za chwilę.