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

API dla programistów · wczesny dostęp

API KSeF Faktury

Wysyłasz opłacone zamówienie w JSON. My nadajemy numer faktury bez luk, budujemy XML FA(3) sprawdzony ze schematem XSD, wysyłamy go do KSeF i zwracamy numer KSeF oraz PDF z kodem QR. Do tego klucze testowe i produkcyjne, idempotencja i podpisane webhooki.

  • OpenAPI 3.1 i kolekcja Postman
  • KSeF TEST bez limitu faktur
  • Przykłady w cURL, PHP, Node.js i Pythonie
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ź · po 10-60 s
{
  "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": []
}

Co się dzieje po wysłaniu zamówienia

Żądanie wraca od razu. Resztę robi kolejka, a stan widzisz w polu status, w zdarzeniach i w webhookach.

  1. pendingAPI sprawdziło zamówienie (NIP, stawki VAT, kwoty) i zapisało dokument.
  2. queuedFaktura dostała numer: bez luk, osobno w każdym miesiącu.
  3. sendingXML FA(3) sprawdzony ze schematem XSD idzie do KSeF certyfikatem lub tokenem sprzedawcy.
  4. acceptedKSeF nadał numer KSeF. PDF z kodem QR jest gotowy, kupujący dostaje go e-mailem.
  5. rejectedKSeF odrzucił dokument. Kod KSeF i nasz kod błędu są w last_error.
  6. skippedZamówienia nie da się zafakturować, np. brak stawki VAT. Powód w last_error.

Od czego zacząć

Co obsługuje API

  • Faktury FA(3) z opłaconych zamówień z polskim NIP: stawki 23, 8, 5 i 0%, rabaty, koszty dostawy, do 1000 pozycji.
  • Numeracja bez luk nadawana w kolejce, osobno w każdym miesiącu, z Twoim wzorem.
  • Wysyłka do KSeF Twoim certyfikatem lub tokenem KSeF, z automatycznym ponawianiem, gdy KSeF nie odpowiada.
  • PDF w układzie wizualizacji Ministerstwa Finansów z numerem KSeF i kodem QR, plus publiczny link dla kupującego.
  • Korekty przy zwrotach towaru i dostawy, powiązane z numerem KSeF faktury pierwotnej. Korekty
  • Waluty obce z tabeli A NBP, z VAT w złotych po kursie NBP. Waluty
  • Klucze testowe i produkcyjne z osobnymi danymi, idempotencja, podpisane webhooki, zdarzenia do uzgadniania.
  • Format WooCommerce: zamówienie z REST API WooCommerce można wysłać bez przerabiania. WooCommerce

Sklep na Shopify nie potrzebuje API: aplikacja KSeF Faktury robi to samo bez programowania.

Specyfikacja i kolekcja Postman

Ta dokumentacja jest generowana z pliku OpenAPI 3.1, tego samego, którym testujemy API. Kolekcja Postman ma dwa foldery: Reference (każdy endpoint) i Scenarios (pierwsza faktura, EUR, WooCommerce, błędny NIP, idempotencja, korekta, PDF, webhooki). W środowiskach wpisz swój klucz w miejsce REPLACE_ME.

KSeF Faktury

Wczesny dostęp do API

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