Developers/Katalog błędów

Katalog błędów

Każda odpowiedź błędowa ma stabilny `code` (string) i `meta.request_id`. Kod cytuj w support tickets - szybciej znajdziemy logi.

Envelope

json
{
  "error": {
    "code": "QUOTA_EXCEEDED",
    "message": "Wyczerpano dzienny limit walidacji (1450 / 1000).",
    "details": {
      "plan": "pro",
      "period": "daily",
      "used": 1450,
      "limit": 1000
    }
  },
  "meta": {
    "request_id": "a3f9c1d8b2e7f4a1"
  }
}
request_id w nagłówku
Każda odpowiedź ma też nagłówek X-Request-Id z tą samą wartością - wygodne do logowania, gdy nie chcesz parsować body błędnej odpowiedzi.

Tabela kodów

HTTPCodeSDK exceptionReakcjaOpis
400INVALID_BODYNaprawKsefErrorPopraw payloadBody nie jest JSON-em lub brakuje wymaganego pola (np. xml).
400INVALID_XMLNaprawKsefErrorPopraw XMLTreść nie ma struktury KSeF - brak elementów Faktura / Naglowek.
400FILE_TOO_LARGENaprawKsefErrorZmniejsz / podzielXML przekracza limit 10 MB.
400VALIDATION_ERRORNaprawKsefValidationErrorPopraw payloadWalidacja schematu Zod nie przeszła. Szczegóły w `details[]`.
400INVALID_CONTENT_TYPENaprawKsefErrorUstaw headerWymagane Content-Type: application/json lub application/xml.
400UNSAFE_URLNaprawKsefErrorUżyj publicznego URLWebhook URL wskazuje na localhost / adres prywatny (SSRF guard).
400UNKNOWN_EVENTNaprawKsefErrorSprawdź event_typesPróba subskrypcji nieznanego typu eventu webhooka.
401MISSING_AUTHNaprawKsefAuthErrorDodaj headerBrak nagłówka Authorization: Bearer ...
401INVALID_KEY_FORMATNaprawKsefAuthErrorSprawdź kluczKlucz nie pasuje do nk_(live|test)_<32 hex>.
401INVALID_KEYNaprawKsefAuthErrorRotuj kluczKlucz nieprawidłowy, wygasły, lub unieważniony.
403INSUFFICIENT_SCOPENaprawKsefForbiddenErrorWystaw nowy kluczKlucz nie ma wymaganego scope (np. webhooks).
404WEBHOOK_NOT_FOUNDNaprawKsefNotFoundErrorSprawdź idWebhook o podanym id nie istnieje w organizacji.
409IDEMPOTENCY_CONFLICTNaprawKsefIdempotencyConflictErrorZmień kluczTen Idempotency-Key został już użyty z innym body lub jest w trakcie.
422VALIDATION_ERRORNaprawKsefValidationErrorPopraw payloadPola obecne ale niepoprawne semantycznie (np. enum out of range).
429RATE_LIMITEDNaprawKsefRateLimitErrorCzekaj Retry-AfterWyczerpany limit minutowy/dzienny klucza.
429QUOTA_EXCEEDEDNaprawKsefRateLimitErrorUpgrade planuQuota planu (dzienna/miesięczna) wyczerpana. Webhook quota.exceeded jest emitowany.
500VALIDATION_FAILEDNaprawKsefServerErrorPonów / supportWewnętrzny błąd silnika walidacji - request_id w meta.
500BUILD_FAILEDNaprawKsefServerErrorPonów / supportWewnętrzny błąd generatora korekty.
503DOWNSTREAM_UNAVAILABLENaprawKsefServerErrorRetryZewnętrzny system (np. baza) chwilowo niedostępny - SDK auto-retry.

Reagowanie w kodzie

typescript
import {
  NaprawKsef,
  NaprawKsefAuthError,
  NaprawKsefForbiddenError,
  NaprawKsefRateLimitError,
  NaprawKsefValidationError,
  NaprawKsefServerError,
} from "@naprawksef/sdk";

try {
  await client.validate.run({ xml });
} catch (e) {
  if (e instanceof NaprawKsefAuthError) {
    alert("Klucz API wygasł - wystaw nowy w dashboardzie.");
  } else if (e instanceof NaprawKsefValidationError) {
    showFieldErrors(e.details);
  } else if (e instanceof NaprawKsefRateLimitError) {
    enqueueWithDelay(e.retryAfterSeconds);
  } else if (e instanceof NaprawKsefServerError) {
    reportToSentry(e); // klient pewnie nie zwinie tego
  } else {
    throw e;
  }
}