Przejdź do treści
KSeF Kit

Jakie dane klienta zebrać w Stripe, żeby złożyć fakturę do KSeF

Stripe zbiera dane klienta i liczy podatek (Stripe Tax), a KSeF Kit buduje z nich FA(3) i składa ją do KSeF. O sposobie rozliczenia VAT decydują dwa pola: customer_address.country i numer podatkowy nabywcy. Od każdego klienta zbierz: czy to firma (rozstrzyga prawidłowy numer podatkowy), nazwę, kraj (najważniejsze), pełny adres oraz VAT/NIP. Brakujący lub błędny numer po cichu zamienia fakturę B2B w B2C, a ta do KSeF już nie trafia.

Sprzedajesz przez Stripe na cały świat, w tym do UE, i chcesz, żeby faktury trafiały do KSeF z poprawnym VAT. Zacznij od tego, że Stripe sam do KSeF nie składa. Stripe zbiera dane, liczy podatek (Stripe Tax) i sprawdza format numeru podatkowego. To KSeF Kit buduje FA(3), ustala sposób rozliczenia VAT, dodaje adnotację o odwrotnym obciążeniu i składa dokument. Liczy się więc jedno: czy w Stripe znalazły się właściwe dane.

Co naprawdę decyduje o rozliczeniu VAT

KSeF Kit ustala sposób rozliczenia (VatTreatment) na podstawie customer_address.country oraz numerów podatkowych nabywcy (customer_tax_ids):

Brakujący lub błędny numer podatkowy po cichu zamienia transakcję w B2C, a taka nie trafia do KSeF. Dane zbierane w Stripe decydują więc o rozliczeniu, nie tylko o wyglądzie faktury.

Macierz decyzji: klient × lokalizacja → rozliczenie → dane

Klient + lokalizacja Rozliczenie Co zebrać
Firma + PL 23% krajowe, do KSeF nazwa, adres, NIP
Firma + inny kraj UE odwrotne obciążenie (0%/np.), do KSeF nazwa, adres, VAT-UE z prefiksem kraju, kraj; faktura z adnotacją „odwrotne obciążenie / reverse charge”
Firma + spoza UE nie podlega VAT-UE (np. art. 28b), do KSeF nazwa, adres, kraj, numer lokalny; uwaga na obowiązek rejestracji GST/VAT za granicą
Konsument + PL 23% nazwa, adres
Konsument + inny kraj UE VAT kraju klienta przez OSS adres + 2 niesprzeczne dowody lokalizacji; próg 10 000 €; poza KSeF
Konsument + spoza UE nie podlega VAT-UE / 0% adres, kraj; poza KSeF

Dwa wiersze konsumenckie (OSS oraz sprzedaż poza UE) nie idą do KSeF, bo KSeF Kit składa faktury B2B. Umieściliśmy je dla pełni obrazu, nie dlatego, że KSeF Kit je obsługuje.

Minimalny zestaw danych od każdego klienta

Jak zebrać te dane w Stripe Checkout

W Stripe Checkout włącz zbieranie adresu, numeru podatkowego i automatyczny podatek. Bez customer_update dane z Checkout nie zapiszą się na obiekcie Customer:

Stripe::Checkout::Session.create(
  mode: "payment",
  line_items: [ { price: price_id, quantity: 1 } ],
  billing_address_collection: "required",
  tax_id_collection: { enabled: true, required: "if_supported" },
  automatic_tax: { enabled: true },
  customer_update: { name: "auto", address: "auto" } # bez tego dane nie trafią na Customer
)

Tworzenie klienta „ręcznie”

Gdy zakładasz klienta poza Checkout, od razu przekaż nazwę, adres i numer podatkowy:

Stripe::Customer.create(
  name: "Kontrahent sp. z o.o.",
  address: { line1: "ul. Przykładowa 1", city: "Warszawa", postal_code: "00-001", country: "PL" },
  tax_id_data: [ { type: "pl_nip", value: "1111111111" } ]
)

pl_nip zależy od wersji. Wymaga wersji API 2026-01-28.clover+ oraz stripe-ruby ≥ 18.2.0. Na starszych wersjach zapisuj polskie firmy jako eu_vat (PL…) i usuwaj prefiks PL przy budowie FA(3).

Stripe przez gem Pay

Gem Pay przekazuje nazwę i adres przez stripe_attributes (metoda lub lambda zwracająca {name:, address:}). Parametr automatic_tax i ustawienia Checkout Pay przyjmuje w payment_processor.checkout(...) / .subscribe(...). Sam numer podatkowy nie ma w Pay osobnego wrappera. Przekaż tax_id_data przez stripe_attributes albo sięgnij po payment_processor.api_record i natywne API Stripe:

class User < ApplicationRecord
  pay_customer stripe_attributes: :stripe_attributes

  def stripe_attributes(_pay_customer)
    {
      name: company_name,
      address: { line1: address_line1, city: city, postal_code: postal_code, country: country },
      tax_id_data: [ { type: "eu_vat", value: vat_number } ] # Pay sam nie owinie tax-id
    }
  end
end

Walidacja: Stripe sprawdza format, KSeF wymaga więcej

Stripe sprawdza tylko format numeru, a nie jego ważność prawną. Dla KSeF to za mało. KSeF Kit dodatkowo:

Zapytaj księgowego. Część przypadków jest niuansowa: odwrotne obciążenie bez potwierdzonego numeru VAT, próg 10 000 € dla OSS oraz obowiązek rejestracji VAT/GST za granicą przy sprzedaży poza UE. To decyzje podatkowe, nie tylko techniczne.

Sprzedajesz globalnie przez Stripe?

Kiedy dane w Stripe są kompletne, KSeF Kit rozpoznaje typ transakcji i składa poprawną fakturę ustrukturyzowaną, z przeliczeniem VAT na złote, i wylicza link weryfikacyjny KOD I dla faktur eksportowych. Zobacz integrację Stripe + KSeF oraz fakturę eksportową a KSeF.

Najczęstsze pytania

Jakie minimum danych zebrać od klienta w Stripe?

Informację, czy to firma, czy konsument (rozstrzyga ją prawidłowy numer podatkowy), nazwę, kraj (najważniejsze pole), pełny adres rozliczeniowy oraz numer VAT/NIP. Przy sprzedaży B2C za granicę dochodzą dwa niesprzeczne dowody lokalizacji. Bez kraju i numeru podatkowego transakcja staje się B2C i nie trafia do KSeF.

Czy Stripe sam składa fakturę do KSeF i dodaje adnotację o odwrotnym obciążeniu?

Nie. Stripe zbiera dane i liczy podatek (Stripe Tax), ale nie składa faktur do KSeF, nie dodaje polskiej adnotacji o odwrotnym obciążeniu i sprawdza wyłącznie format numeru podatkowego, a nie jego ważność. Złożeniem FA(3) i adnotacjami zajmuje się KSeF Kit.

Co się dzieje, gdy klient nie poda numeru podatkowego?

Bez prawidłowego numeru transakcja jest traktowana jako B2C i nie trafia do KSeF. Brakujący lub błędny NIP czy numer VAT po cichu zamienia fakturę B2B w B2C, dlatego wymuś podanie numeru już w Checkout.

Jak zebrać NIP polskiej firmy w Stripe?

Typ pl_nip działa od wersji API 2026-01-28.clover i stripe-ruby ≥ 18.2.0. Na starszych wersjach zapisuj polskie firmy jako eu_vat z wartością PL + 10 cyfr, a prefiks PL usuwasz przy budowie FA(3).

Czy do odwrotnego obciążenia wystarczy numer VAT zebrany w Checkout?

Numer to konieczne minimum, ale samo jego zebranie nie wystarczy. Odwrotne obciążenie powinno opierać się na numerze VAT-UE potwierdzonym w VIES. To jeden z tych przypadków, w których lepiej zapytać księgowego.