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. Sprawa jest prosta: 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):

Najważniejszy wniosek praktyczny: brakujący lub błędny numer podatkowy po cichu zamienia transakcję w B2C i nie trafia ona do KSeF. Dane zbierane w Stripe to więc nie formalność, lecz warunek poprawnego rozliczenia.

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 — 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. Kluczowy jest tu customer_update — bez niego 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: "1234563218" } ]
)

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:

Warto skonsultować się z księgowym. 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 kodem QR na wizualizacji. 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 warto wymusić 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 obszarów, w których warto skonsultować się z księgowym.