KSeF Faktury
PL
Zapisz się na start
Wczesny dostęp

API jest we wczesnym dostępie: klucze testowe (KSeF TEST) wydajemy partiami osobom z listy startowej. Tryb produkcyjny włączymy później.

Poproś o dostęp

Referencja API

Faktury i korekty

Faktura powstaje z opłaconego zamówienia i przechodzi przez kolejkę: numer, XML FA(3), KSeF, PDF. Korekta powstaje ze zwrotu i odwołuje się do numeru KSeF faktury. Oba dokumenty mają te same statusy i pola.

Obiekt Invoice (faktura)

Faktura VAT wystawiona z opłaconego zamówienia. Korekty tej faktury są zagnieżdżone w polu corrections.

Pola

  • idstringwymagane

    Id dokumentu.

    Prefiks inv_

  • objectstringwymagane

    Rodzaj obiektu.

    Jedna z: invoice, correction · Zawsze invoice

  • livemodebooleanwymagane

    true w trybie produkcyjnym, false w testowym.

  • statusstringwymagane

    pending → queued → sending → accepted, rejected albo error; albo skipped (nie da się zafakturować) i waiting_for_plan_limit (wyczerpany limit planu).

    Jedna z: pending, queued, sending, accepted, rejected, skipped, waiting_for_plan_limit, error

  • orderobjectwymagane

    Zamówienie, z którego powstał dokument.

    Pokaż pola
    • external_idstringwymagane

      Twoje id zamówienia.

    • numberstring | nullwymagane

      Numer zamówienia.

  • numberstring | nullwymagane

    Numer faktury (bez luk w miesiącu), nadawany w kolejce.

  • ksef_numberstring | nullwymagane

    Numer KSeF, gdy KSeF przyjmie dokument.

  • ksef_environmentstringwymagane

    Środowisko KSeF: test dla kluczy testowych, prod dla produkcyjnych.

    Jedna z: test, demo, prod

  • issue_datestring | nullwymagane

    Data wystawienia.

    date

  • currencystring | nullwymagane

    Waluta faktury.

  • total_grossstring | nullwymagane

    Suma brutto w walucie faktury (ujemna dla korekt).

  • buyer_nipstring | nullwymagane

    NIP nabywcy.

  • pdf_urlstring | nullwymagane

    Publiczny link do PDF z niemożliwym do odgadnięcia tokenem, dla kupującego.

  • last_errornull | Errorwymagane

    Ostatni błąd dokumentu albo null. Kody błędów

    Pokaż pola
    • typestringwymagane

      Rodzaj błędu.

      Jedna z: invalid_request_error, authentication_error, permission_error, not_found_error, idempotency_error, rate_limit_error, invoice_error, ksef_error, api_error

    • codestringwymagane

      Stały kod do obsługi w programie. Lista kodów

      Jedna z: parameter_missing, parameter_invalid, body_invalid_json, body_too_large, buyer_nip_missing, buyer_nip_invalid, order_not_paid, order_cancelled, currency_not_supported, vat_rate_missing, vat_rate_unsupported, order_unprocessable, correction_requires_invoice, livemode_mismatch, resource_missing, route_not_found, method_not_allowed, pdf_not_ready, api_key_missing, api_key_invalid, live_mode_disabled, idempotency_key_reused, idempotency_key_invalid, rate_limited, internal_error, seller_not_configured, plan_limit_reached, invoice_build_failed, invoice_schema_invalid, original_not_invoiced, original_rejected, ksef_not_connected, ksef_auth_failed, ksef_duplicate_number, ksef_rejected, ksef_unavailable

    • messagestringwymagane

      Opis dla człowieka (po angielsku); może się zmieniać.

    • paramstring

      Ścieżka JSON parametru, np. order.buyer.nip.

    • ksef_codeinteger

      Własny kod liczbowy KSeF (np. 440 duplikat, 450 faktura niepoprawna).

    • doc_urlstringwymagane

      Link do opisu kodu na tej stronie.

  • createdintegerwymagane

    Utworzono (sekundy Unix).

  • updatedintegerwymagane

    Ostatnia zmiana (sekundy Unix).

  • correctionsarray of Correctionwymagane

    Korekty tej faktury.

    Zobacz obiekt Correction

Obiekt Invoice
{
  "id": "inv_4fJ2kP9xQwErTy7uI0oPaSdF",
  "object": "invoice",
  "livemode": false,
  "status": "accepted",
  "order": {
    "external_id": "SO-1001",
    "number": "1001"
  },
  "number": "FV/2026/10/1",
  "ksef_number": "4235405606-20261019-0E7570400000-57",
  "ksef_environment": "test",
  "issue_date": "2026-10-19",
  "currency": "PLN",
  "total_gross": "163.99",
  "buyer_nip": "5260250274",
  "pdf_url": "https://app.ksefshop.pl/pdf/cmgxa1b2c0000/Qk9tZ2FsX3ZhbGlkX3Rva2VuX2V4YW1w",
  "last_error": null,
  "created": 1760865185,
  "updated": 1760865214,
  "corrections": []
}

Obiekt Correction (faktura korygująca)

Faktura korygująca (KOR) wystawiona ze zwrotu. Ma te same pola co faktura oraz invoice i refund.

Pola

  • idstringwymagane

    Id dokumentu.

    Prefiks cor_

  • objectstringwymagane

    Rodzaj obiektu.

    Jedna z: invoice, correction · Zawsze correction

  • livemodebooleanwymagane

    true w trybie produkcyjnym, false w testowym.

  • statusstringwymagane

    pending → queued → sending → accepted, rejected albo error; albo skipped (nie da się zafakturować) i waiting_for_plan_limit (wyczerpany limit planu).

    Jedna z: pending, queued, sending, accepted, rejected, skipped, waiting_for_plan_limit, error

  • orderobjectwymagane

    Zamówienie, z którego powstał dokument.

    Pokaż pola
    • external_idstringwymagane

      Twoje id zamówienia.

    • numberstring | nullwymagane

      Numer zamówienia.

  • numberstring | nullwymagane

    Numer faktury (bez luk w miesiącu), nadawany w kolejce.

  • ksef_numberstring | nullwymagane

    Numer KSeF, gdy KSeF przyjmie dokument.

  • ksef_environmentstringwymagane

    Środowisko KSeF: test dla kluczy testowych, prod dla produkcyjnych.

    Jedna z: test, demo, prod

  • issue_datestring | nullwymagane

    Data wystawienia.

    date

  • currencystring | nullwymagane

    Waluta faktury.

  • total_grossstring | nullwymagane

    Suma brutto w walucie faktury (ujemna dla korekt).

  • buyer_nipstring | nullwymagane

    NIP nabywcy.

  • pdf_urlstring | nullwymagane

    Publiczny link do PDF z niemożliwym do odgadnięcia tokenem, dla kupującego.

  • last_errornull | Errorwymagane

    Ostatni błąd dokumentu albo null. Kody błędów

    Pokaż pola
    • typestringwymagane

      Rodzaj błędu.

      Jedna z: invalid_request_error, authentication_error, permission_error, not_found_error, idempotency_error, rate_limit_error, invoice_error, ksef_error, api_error

    • codestringwymagane

      Stały kod do obsługi w programie. Lista kodów

      Jedna z: parameter_missing, parameter_invalid, body_invalid_json, body_too_large, buyer_nip_missing, buyer_nip_invalid, order_not_paid, order_cancelled, currency_not_supported, vat_rate_missing, vat_rate_unsupported, order_unprocessable, correction_requires_invoice, livemode_mismatch, resource_missing, route_not_found, method_not_allowed, pdf_not_ready, api_key_missing, api_key_invalid, live_mode_disabled, idempotency_key_reused, idempotency_key_invalid, rate_limited, internal_error, seller_not_configured, plan_limit_reached, invoice_build_failed, invoice_schema_invalid, original_not_invoiced, original_rejected, ksef_not_connected, ksef_auth_failed, ksef_duplicate_number, ksef_rejected, ksef_unavailable

    • messagestringwymagane

      Opis dla człowieka (po angielsku); może się zmieniać.

    • paramstring

      Ścieżka JSON parametru, np. order.buyer.nip.

    • ksef_codeinteger

      Własny kod liczbowy KSeF (np. 440 duplikat, 450 faktura niepoprawna).

    • doc_urlstringwymagane

      Link do opisu kodu na tej stronie.

  • createdintegerwymagane

    Utworzono (sekundy Unix).

  • updatedintegerwymagane

    Ostatnia zmiana (sekundy Unix).

  • invoicestring | nullwymagane

    Id korygowanej faktury.

  • refundobjectwymagane

    Zwrot, z którego powstała korekta.

    Pokaż pola
    • external_idstringwymagane

      Twoje id zwrotu.

Obiekt Correction
{
  "id": "cor_8hG3jK2lMnBvCxZ1aS4dF6gH",
  "object": "correction",
  "livemode": false,
  "status": "pending",
  "order": {
    "external_id": "SO-1001",
    "number": null
  },
  "number": null,
  "ksef_number": null,
  "ksef_environment": "test",
  "issue_date": null,
  "currency": null,
  "total_gross": null,
  "buyer_nip": null,
  "pdf_url": null,
  "last_error": null,
  "created": 1760951000,
  "updated": 1760951000,
  "invoice": "inv_4fJ2kP9xQwErTy7uI0oPaSdF",
  "refund": {
    "external_id": "RF-1"
  }
}

Lista faktur

GET /v1/invoices

Faktury od najnowszych, z zagnieżdżonymi korektami. Paginacja przez limit i starting_after, filtr external_id zwraca fakturę jednego zamówienia.

Parametry

  • limitquery · integer

    Ile obiektów na stronie.

    Domyślnie 10 · 1-100

  • starting_afterquery · string

    Id ostatniego obiektu poprzedniej strony.

  • external_idquery · string

    Tylko faktura tego zamówienia.

Odpowiedzi

GET /v1/invoices
curl "https://app.ksefshop.pl/v1/invoices?limit=10" \
  -H "Authorization: Bearer $KSEF_API_KEY"
Odpowiedź
{
  "object": "list",
  "url": "/v1/invoices",
  "has_more": false,
  "data": []
}

Utwórz fakturę z opłaconego zamówienia

POST /v1/invoices

Przyjmuje opłacone zamówienie i od razu odpowiada fakturą w statusie pending. Kolejka nadaje numer, buduje FA(3), wysyła do KSeF i renderuje PDF; zwykle po 10-60 sekundach status to accepted. Nabywca musi mieć poprawny polski NIP.

Wyślij order (format neutralny, ceny brutto) albo woocommerce_order (zamówienie z REST API WooCommerce v3). Dla tego samego external_id dostaniesz istniejącą fakturę i kod 200 zamiast 201.

Parametry

  • Idempotency-Keyheader · string

    Dowolny unikalny tekst (1-255 znaków), np. order-SO-1001. Ponowienie z tym samym kluczem przez 24 godziny zwraca pierwszą odpowiedź. Idempotencja

Treść żądania (JSON)

Dokładnie jedno z pól: order albo woocommerce_order.

  • orderOrder

    Zamówienie w formacie neutralnym (ceny brutto, jawne stawki VAT).

    Pokaż pola
    • external_idstringwymagane

      Twoje id zamówienia; jedna faktura na external_id. Litery, cyfry i ._:-, do 64 znaków.

    • numberstring

      Numer zamówienia drukowany na fakturze (domyślnie external_id).

    • created_atstring

      Kiedy złożono zamówienie.

      Data i czas ISO 8601

    • paid_atstringwymagane

      Moment zapłaty; od niego zależy data obowiązku podatkowego i data kursu NBP.

      Data i czas ISO 8601

    • currencystring

      PLN albo waluta z tabeli A NBP. Waluty obce

      Domyślnie PLN

    • payment_methodstring

      Forma płatności na fakturze.

      Jedna z: card, transfer, cash, mobile · Domyślnie card

    • buyerobjectwymagane

      Nabywca z polskim NIP.

      Pokaż pola
      • nipstringwymagane

        Polski NIP, z prefiksem PL lub bez, z myślnikami lub spacjami. Sprawdzamy sumę kontrolną.

      • namestringwymagane

        Nazwa firmy nabywcy.

      • address_line1stringwymagane

        Ulica i numer.

      • address_line2string

        Kod pocztowy i miasto.

      • emailstring

        Na ten adres wysyłamy PDF faktury.

    • linesarray of OrderLinewymagane

      Pozycje zamówienia.

      1-1000 elementów

      Pokaż pola
      • namestringwymagane

        Nazwa towaru lub usługi.

        maks. 512 znaków

      • skustring

        Kod produktu (opcjonalnie).

      • quantityintegerwymagane

        Liczba sztuk.

      • unit_pricedecimal stringwymagane

        Cena jednostkowa brutto przed rabatem na pozycji.

        Kwota jako tekst z kropką, np. "49.00"

      • discountdecimal string

        Rabat brutto na całą pozycję.

        Kwota jako tekst z kropką, np. "49.00"

      • vat_ratestringwymagane

        Stawka VAT: 23, 8, 5 albo 0 (0% krajowe). Zwolnienie (zw) nie jest jeszcze obsługiwane.

        Jedna z: 23, 8, 5, 0

    • shippingarray of object

      Koszty dostawy jako osobne pozycje.

      Pokaż pola
      • namestringwymagane

        Nazwa dostawy, np. „Kurier InPost”.

      • pricedecimal stringwymagane

        Cena dostawy brutto.

        Kwota jako tekst z kropką, np. "49.00"

      • vat_ratestringwymagane

        Stawka VAT dostawy.

        Jedna z: 23, 8, 5, 0

  • woocommerce_orderobject

    Zamówienie z REST API WooCommerce v3 (pola id, number, status, currency, daty, billing, meta_data z NIP, line_items, shipping_lines, fee_lines, tax_lines). Tak wysyła je wtyczka WooCommerce.

Odpowiedzi

POST /v1/invoices
curl -X POST https://app.ksefshop.pl/v1/invoices \
  -H "Authorization: Bearer $KSEF_API_KEY" \
  -H "Idempotency-Key: order-SO-1001" \
  -H "Content-Type: application/json" \
  -d '{
  "order": {
    "external_id": "SO-1001",
    "number": "1001",
    "paid_at": "2026-10-19T09:13:05Z",
    "currency": "PLN",
    "payment_method": "card",
    "buyer": {
      "nip": "5260250274",
      "name": "Testowa Firma sp. z o.o.",
      "address_line1": "ul. Prosta 20",
      "address_line2": "00-850 Warszawa",
      "email": "jan@example.com"
    },
    "lines": [
      {
        "name": "Kubek ceramiczny 350 ml",
        "sku": "KUB-350",
        "quantity": 2,
        "unit_price": "49.00",
        "vat_rate": "23"
      },
      {
        "name": "Książka: Podstawy księgowości",
        "sku": "KS-001",
        "quantity": 1,
        "unit_price": "59.90",
        "discount": "9.90",
        "vat_rate": "5"
      }
    ],
    "shipping": [
      {
        "name": "Kurier InPost",
        "price": "15.99",
        "vat_rate": "23"
      }
    ]
  }
}'
Odpowiedź
{
  "id": "inv_4fJ2kP9xQwErTy7uI0oPaSdF",
  "object": "invoice",
  "livemode": false,
  "status": "accepted",
  "order": {
    "external_id": "SO-1001",
    "number": "1001"
  },
  "number": "FV/2026/10/1",
  "ksef_number": "4235405606-20261019-0E7570400000-57",
  "ksef_environment": "test",
  "issue_date": "2026-10-19",
  "currency": "PLN",
  "total_gross": "163.99",
  "buyer_nip": "5260250274",
  "pdf_url": "https://app.ksefshop.pl/pdf/cmgxa1b2c0000/Qk9tZ2FsX3ZhbGlkX3Rva2VuX2V4YW1w",
  "last_error": null,
  "created": 1760865185,
  "updated": 1760865214,
  "corrections": []
}

Pobierz fakturę lub korektę

GET /v1/invoices/{id}

Zwraca fakturę (inv_..., razem z korektami) albo korektę (cor_...). Tym endpointem sprawdzasz status, numer KSeF i ewentualny błąd w last_error.

Parametry

  • idpath · stringwymagane

    Identyfikator obiektu.

    Prefiks inv_ / cor_

Odpowiedzi

GET /v1/invoices/{id}
curl https://app.ksefshop.pl/v1/invoices/inv_4fJ2kP9xQwErTy7uI0oPaSdF \
  -H "Authorization: Bearer $KSEF_API_KEY"
Odpowiedź
{
  "id": "inv_4fJ2kP9xQwErTy7uI0oPaSdF",
  "object": "invoice",
  "livemode": false,
  "status": "accepted",
  "order": {
    "external_id": "SO-1001",
    "number": "1001"
  },
  "number": "FV/2026/10/1",
  "ksef_number": "4235405606-20261019-0E7570400000-57",
  "ksef_environment": "test",
  "issue_date": "2026-10-19",
  "currency": "PLN",
  "total_gross": "163.99",
  "buyer_nip": "5260250274",
  "pdf_url": "https://app.ksefshop.pl/pdf/cmgxa1b2c0000/Qk9tZ2FsX3ZhbGlkX3Rva2VuX2V4YW1w",
  "last_error": null,
  "created": 1760865185,
  "updated": 1760865214,
  "corrections": []
}

Pobierz PDF

GET /v1/invoices/{id}/pdf

PDF w układzie wizualizacji Ministerstwa Finansów, z numerem KSeF i kodem QR (KOD I) do weryfikacji. Dopóki PDF się renderuje, dostaniesz 409 pdf_not_ready. Kupującemu przekaż raczej publiczny link pdf_url z obiektu faktury.

Parametry

  • idpath · stringwymagane

    Identyfikator obiektu.

    Prefiks inv_ / cor_

Odpowiedzi

GET /v1/invoices/{id}/pdf
curl https://app.ksefshop.pl/v1/invoices/inv_4fJ2kP9xQwErTy7uI0oPaSdF/pdf \
  -H "Authorization: Bearer $KSEF_API_KEY" \
  --fail -o faktura.pdf
Odpowiedź
%PDF-1.7
… plik PDF (application/pdf) z numerem KSeF i kodem QR

Utwórz korektę (zwrot)

POST /v1/invoices/{id}/corrections

Zwrot staje się fakturą korygującą (KOR, TypKorekty 2) z pozycjami różnicowymi (ujemne ilości), która wskazuje numer KSeF faktury pierwotnej. Kolejka czeka, aż faktura pierwotna zostanie przyjęta w KSeF.

Wyślij refund (format neutralny) albo woocommerce_order razem z woocommerce_refund.

Parametry

  • idpath · stringwymagane

    Identyfikator obiektu.

    Prefiks inv_

  • Idempotency-Keyheader · string

    Dowolny unikalny tekst (1-255 znaków), np. order-SO-1001. Ponowienie z tym samym kluczem przez 24 godziny zwraca pierwszą odpowiedź. Idempotencja

Treść żądania (JSON)

Albo refund, albo woocommerce_order + woocommerce_refund.

  • refundRefund

    Zwrot w formacie neutralnym.

    Pokaż pola
    • external_idstringwymagane

      Twoje id zwrotu; jedna korekta na external_id.

    • reasonstring

      Przyczyna korekty drukowana na fakturze, np. „Zwrot towaru”.

    • created_atstring

      Kiedy zwrócono pieniądze.

      Data i czas ISO 8601

    • linesarray of object

      Zwrócone pozycje (co najmniej jedno z: lines, shipping).

      Pokaż pola
      • namestringwymagane

        Nazwa pozycji jak na fakturze.

      • skustring

        Kod produktu.

      • quantityintegerwymagane

        Liczba zwróconych sztuk (dodatnia).

      • unit_pricedecimal stringwymagane

        Cena jednostkowa brutto.

        Kwota jako tekst z kropką, np. "49.00"

      • vat_ratestringwymagane

        Stawka VAT pozycji.

        Jedna z: 23, 8, 5, 0

    • shippingobject

      Zwrócone koszty dostawy.

      Pokaż pola
      • pricedecimal stringwymagane

        Zwrócona kwota dostawy brutto; stawka VAT jak w dostawie z faktury.

        Kwota jako tekst z kropką, np. "49.00"

  • woocommerce_orderobject

    Zamówienie WooCommerce, którego dotyczy zwrot.

  • woocommerce_refundobject

    Zwrot z REST API WooCommerce v3.

Odpowiedzi

POST /v1/invoices/{id}/corrections
curl -X POST https://app.ksefshop.pl/v1/invoices/inv_4fJ2kP9xQwErTy7uI0oPaSdF/corrections \
  -H "Authorization: Bearer $KSEF_API_KEY" \
  -H "Idempotency-Key: refund-RF-1" \
  -H "Content-Type: application/json" \
  -d '{
  "refund": {
    "external_id": "RF-1",
    "reason": "Zwrot towaru",
    "lines": [
      {
        "name": "Kubek ceramiczny 350 ml",
        "sku": "KUB-350",
        "quantity": 1,
        "unit_price": "49.00",
        "vat_rate": "23"
      }
    ],
    "shipping": {
      "price": "15.99"
    }
  }
}'
Odpowiedź
{
  "id": "cor_8hG3jK2lMnBvCxZ1aS4dF6gH",
  "object": "correction",
  "livemode": false,
  "status": "pending",
  "order": {
    "external_id": "SO-1001",
    "number": null
  },
  "number": null,
  "ksef_number": null,
  "ksef_environment": "test",
  "issue_date": null,
  "currency": null,
  "total_gross": null,
  "buyer_nip": null,
  "pdf_url": null,
  "last_error": null,
  "created": 1760951000,
  "updated": 1760951000,
  "invoice": "inv_4fJ2kP9xQwErTy7uI0oPaSdF",
  "refund": {
    "external_id": "RF-1"
  }
}
KSeF Faktury

Wczesny dostęp do API

Klucze testowe wydajemy partiami. Zostaw e-mail: napiszemy, gdy dostęp będzie gotowy.