15.08.2026

KSeF API – jak wysłać fakturę do KSeF?

KSeF API – jak wysłać fakturę do KSeF?

Pytanie „jak wysłać fakturę do KSeF przez API" wydaje się proste, dopóki nie zacznie się je realizować w praktyce — bo samo „wysłanie" to tylko jeden z kilku kroków, które muszą zajść poprawnie, żeby dokument został przyjęty i uzyskał numer KSeF. Poniżej rozkładamy ten proces na konkretne etapy.

Zanim wyślesz — czego potrzebujesz

  • Dane faktury — sprzedawca, nabywca, pozycje, stawki VAT, sposób płatności, w komplecie i bez braków.
  • Uwierzytelnienie — poprawnie skonfigurowany certyfikat, token lub inny mechanizm autoryzacji, zgodny z kontekstem podmiotu wysyłającego dokument (szerzej w artykule o autoryzacji).
  • Środowisko docelowe — na etapie testów zawsze środowisko TEST, nigdy produkcyjne.

Krok 1 — przygotowanie dokumentu FA(3)

Dane faktury muszą zostać przekształcone w dokument XML zgodny ze schematem logicznym FA(3) — z zachowaniem wymaganej struktury, kolejności elementów i formatu poszczególnych pól. To ten etap generuje najwięcej błędów walidacyjnych, jeśli robiony jest ręcznie, bez dokładnej znajomości schematu XSD. Warstwy pośredniczące (jak API KSeFService) pozwalają pominąć ręczne budowanie XML — wystarczy przekazać dane w prostszym formacie (np. JSON), a poprawny dokument generowany jest automatycznie.

Krok 2 — walidacja przed wysyłką

Dobra praktyka to walidacja dokumentu względem schematu XSD FA(3) zanim trafi do KSeF — pozwala to wyłapać błędy strukturalne od razu, zamiast dowiadywać się o nich dopiero po odrzuceniu przez system Ministerstwa Finansów.

Krok 3 — wysyłka dokumentu

Gotowy XML trafia do odpowiedniego endpointu API. Przy integracji przez API KSeFService wygląda to jako żądanie z plikiem XML w formacie multipart/form-data:

POST /api/v1/invoices/send
Content-Type: multipart/form-data

clientId, login, password, api_env, file (XML FA(3))

Krok 4 — odczyt statusu przetworzenia

Wysłanie żądania nie oznacza jeszcze, że faktura została zaakceptowana — to potwierdza dopiero status przetworzenia zwrócony przez system. Poprawna odpowiedź zawiera m.in. numer KSeF nadany dokumentowi:

{
  "success": true,
  "stage": "ksef_ok",
  "data": {
    "ksefNumber": "5771876968-20251209-0100805B192F-B3",
    "sessionReference": "20251209-SO-178C9DF000-9498D48B5B-BB"
  }
}

Krok 5 — pobranie UPO

Numer KSeF to jedno, ale formalnym dowodem doręczenia faktury do systemu jest Urzędowe Poświadczenie Odbioru (UPO) — pobierane osobnym żądaniem, na podstawie numeru referencyjnego sesji wysyłki. UPO warto zarchiwizować razem z oryginalnym dokumentem faktury.

Dlaczego faktura może zostać odrzucona

  • Błąd walidacji XSD — niezgodność struktury dokumentu ze schematem FA(3).
  • Błąd autoryzacji — niepoprawny certyfikat, token lub kontekst wysyłki.
  • Błędne dane kontrahenta — np. niepoprawny NIP lub niekompletne dane adresowe.
  • Niepoprawne stawki VAT lub sumy — rozbieżność między wartościami pozycji a sumami dokumentu.
  • Błąd przejściowy po stronie KSeF — chwilowa niedostępność systemu, którą dobra integracja obsługuje przez ponowienie żądania, a nie przez natychmiastowe zgłoszenie błędu użytkownikowi.

Wysyłka pojedyncza a wysyłka wsadowa

Przy pojedynczych fakturach wysyłka interaktywna (jedna faktura, jedno żądanie) jest wystarczająca. Przy większym wolumenie — dziesiątkach czy setkach dokumentów — warto skorzystać z wysyłki wsadowej, uwzględniającej limity zapytań nakładane przez KSeF, żeby uniknąć odrzuceń wynikających z przekroczenia limitu w krótkim czasie. Więcej o tym pisaliśmy w artykule o wysyłce masowej faktur oraz o automatyzacji wysyłki przez gotowe skrypty.

Podsumowanie

Wysłanie faktury do KSeF przez API to proces złożony z kilku etapów, z których każdy może być źródłem błędu: przygotowanie poprawnego dokumentu FA(3), walidacja, wysyłka, odczyt statusu i pobranie UPO. Zrozumienie tego, na którym etapie faktycznie znajduje się problem, jest kluczowe przy debugowaniu integracji — „faktura się nie wysłała" rzadko oznacza to samo co „faktura została odrzucona przez KSeF".

Chcesz przetestować pełny, gotowy przykład wysyłki? Sprawdź praktyczny przykład integracji krok po kroku lub dokumentację API z przykładami kodu.