Rechnungsstellung
[billing] [admin]
Stripe-Connect-basierte Abrechnung — licensio = Plattform, Tenants = Connected Accounts. Plattformgebühr plan-abhängig (Free 15%, Basic 5%, Pro 2%, Scale 1% — siehe Plans). Stripe Tax automatisch.
Für wen
Admins. Der Tab "Rechnungsstellung" sammelt alle Daten, die Stripe für korrekte Rechnungen, MwSt, Zahlungs-Abwicklung braucht.
Was du einstellst
Rechtlicher Name + Rechtsform
- z.B. "Plant Technology GmbH"
- Wird in Stripe als
business_profile.namegesetzt - Erscheint auf jeder Rechnung als Absender
Adresse
- Straße, PLZ, Stadt, Land
- Wird in Stripe als
company.addressversucht zu setzen (Express-Accounts akzeptieren das oft nur via Onboarding)
Steuer
- USt-ID — wird zu Stripe-
tax_idshinzugefügt - Steuernummer — informativ, auf Rechnungen abgedruckt
- Stripe Tax muss separat im Stripe-Dashboard aktiviert werden (Tab Tax → Automatic Tax ON)
Kontakt
- E-Mail (für Stripe-Mails)
- Telefonnummer
Rechnungs-Logo
Eigenes Logo das auf Stripe-Rechnungen erscheint. Upload via:
- licensio-Storage (für Vorschau im Admin)
- Stripe Files API mit
purpose: 'business_icon' accounts.updateauf Connected Account mitsettings.branding.logo
Empfohlen: PNG quadratisch, ≥256x256, < 200 KB.
Schritt für Schritt
1. Stripe-Connect aktivieren
Einstellungen → Stripe → Account anlegen → Stripe-Onboarding (Express Account). Liefert deine Bankdaten, Person-Verifikation etc.
2. Rechnungsstellung-Tab füllen
Alle Felder ausfüllen + Logo hochladen. Speichern triggert automatisch Stripe-Sync (best-effort).
3. Stripe Tax im Dashboard aktivieren
- dashboard.stripe.com → Tax → Settings
- Automatic Tax auf ON
- Tax registrations → Deutschland hinzufügen
- Firmenadresse muss vollständig sein
4. Erstes Paket testen
Pakete erstellen → bei Speichern wird Stripe-Product + Price erzeugt. Im Stripe-Dashboard sichtbar unter Products des Connected Accounts.
5. Erste Zahlung
Kunde durchläuft Stripe-Checkout (Subscription für monatliche Pakete oder Single-Charge für einmalige). Webhook-Events bestätigen Zahlung in licensio.
Stripe Tax — Logik
| Sender | Empfänger | USt-ID | Ergebnis |
|---|---|---|---|
| DE | DE | beliebig | 19 % MwSt |
| DE | EU | mit USt-ID | Reverse Charge 0 % |
| DE | EU | ohne USt-ID | Lokaler Satz des Empfängerlandes |
| DE | Nicht-EU | beliebig | 0 % |
Stripe wendet das automatisch an, wenn automatic_tax: { enabled: true } und tax_behavior: 'exclusive' (Netto-Preise).
Webhook-Events (eingehend)
Es gibt zwei Stripe-Webhooks mit unterschiedlichen Zwecken — Verwechslung führt zu Signaturfehlern und kaputten Plan-Updates.
Tenant-Portal-Webhook — /api/stripe/webhook (<slug>.licensio.io)
Verarbeitet Zahlungen deiner Endkunden (Stripe Connect):
checkout.session.completed— Erstzahlung erfolgreichsetup_intent.succeeded— Payment-Method gespeichert (Flow B)invoice.paid— wiederkehrende Zahlunginvoice.payment_failed— Zahlung gescheitert (Notification + Mahnung)charge.refunded— Erstattungcustomer.subscription.updated/.deleted— Abo-Lifecycleaccount.updated— Connected-Account-Status
Secret in ENV: STRIPE_WEBHOOK_SECRET (Portal-Vercel-Projekt).
licensio-Platform-Webhook — /api/stripe/licensio-webhook (admin.licensio.io)
Verarbeitet deine eigene Plan-Subscription bei licensio (Basic / Pro):
checkout.session.completed— neue Plan-Subscription nach Self-Service-Signupcustomer.subscription.updated— Plan-Wechsel (Basic ↔ Pro), Renewalscustomer.subscription.deleted— Kündigung → Tenant fällt zurück auffreeinvoice.payment_failed— Zahlungsfehler bei deiner Plan-Rechnung
Secret in ENV: LICENSIO_STRIPE_WEBHOOK_SECRET (Admin-Vercel-Projekt). Schreibt direkt in tenants.plan, plan_started_at, licensio_stripe_customer_id, licensio_subscription_id.
Rechnungen im Portal
Kunden sehen ihre Stripe-Rechnungen direkt im Portal-Account-Tab "Lizenz & Vertrag" → Rechnungen-Kachel mit PDF-Download (über Stripe Invoices API).
Häufige Fragen
Wie hoch ist die Plattformgebühr?
Plan-abhängig: Free 15%, Basic 5%, Pro 2%, Scale 1% (application_fee_percent auf jeder Stripe-Subscription). Der Rest geht an dich. Sichtbar im Stripe-Dashboard als Application Fee. Details: Plans.
Wer sieht meine Stripe-Daten? Nur du. licensio-Plattform-Admins haben Read-Zugriff für Support-Fälle, aber keine Modifikations-Rechte.
Was wenn der Stripe-Webhook fehlschlägt?
Webhook-Endpoint mit STRIPE_WEBHOOK_SECRET validiert Signaturen. Bei Fehler retryt Stripe automatisch (~mehrere Stunden). Fehler-Logs in Vercel-Logs sichtbar.
Kann ich Rechnungen auch ohne Stripe schicken? Aktuell läuft alles über Stripe. Manuelle Rechnungsstellung (PDF generation außerhalb Stripe) ist nicht implementiert.
Reverse Charge bei EU-Kunden — wie?
Stripe Tax erkennt EU-USt-IDs automatisch (validiert via VIES). Wenn Kunde im Checkout USt-ID eingibt, wird Reverse Charge angewandt. tax_id_collection ist in unseren Checkouts aktiviert.
Verwandt
- Pakete — Stripe-Sync pro Paket
- Kunden — Stripe-Customer-Sync pro Kunde
- Einstellungen — alle Admin-Tabs