Lemon Squeezy Setup

Lemon Squeezy-Konto, API-Keys, Produkte, Varianten und Webhooks konfigurieren

Diese Anleitung führt dich durch die Konfiguration von Lemon Squeezy als deinen Zahlungsanbieter. Am Ende wirst du einen funktionierenden Checkout-Fluss mit Webhook-Verarbeitung haben. Das Setup dauert etwa 20 Minuten.
Stell vor dem Start sicher, dass du das Getting Started-Setup abgeschlossen hast und deine Anwendung lokal läuft.

Konto & Store einrichten

1

Lemon Squeezy-Konto erstellen

Gehe zu lemonsqueezy.com und erstelle ein Konto. Lemon Squeezy fungiert als dein Merchant of Record — sie übernehmen die gesamte Steuerberechnung, -erhebung und -abführung über alle Rechtsbereiche hinweg.
2

Store erstellen

Erstelle nach der Registrierung einen neuen Store im Dashboard. Wähle einen Store-Namen, der zu deinem Produkt passt. Notiere die Store-ID aus den Store-Einstellungen — du wirst sie für die Umgebungsvariablen benötigen.
3

Test-Modus aktivieren

Schalte den Test-Modus im Lemon Squeezy-Dashboard um (Schalter oben rechts). Alle Produkte, Varianten und Webhooks, die du im Test-Modus erstellst, sind von den Produktionsdaten isoliert. So kannst du den vollständigen Zahlungsfluss ohne echte Abbuchungen testen.

Produkte erstellen

Erstelle ein Produkt für jede Abonnement-Stufe in deinem Lemon Squeezy-Dashboard. Kit verwendet drei bezahlte Stufen — Basic, Pro und Enterprise.
1

Zu Produkten navigieren

Gehe im Lemon Squeezy-Dashboard zu Store > Products und klicke auf New Product.
2

Basic-Produkt erstellen

Lege den Produktnamen fest (z. B. „Basic Plan"), füge eine Beschreibung hinzu und konfiguriere die Preisgestaltung. Wiederhole den Vorgang für Pro und Enterprise.

Bonus-Credit-Produkte (nur credit-basiertes Modell)

Wenn du das credit-basierte Preismodell verwendest und Bonus-Credit-Aufladungen anbieten möchtest, erstelle zusätzliche Produkte für die Bonus-Pakete jeder Stufe. Diese müssen Einmalkauf-Produkte sein (keine Abonnements):
1

Bonus-Credit-Produkte erstellen

Erstelle für jede bezahlte Stufe (Basic, Pro, Enterprise) bis zu 2 Produkte, die die Credit-Pakete repräsentieren. Setze den Zahlungstyp auf einmalig (nicht wiederkehrend). Zum Beispiel:
ProduktnameZahlungstypPreisCredits
Basic 500 CreditsEinmalig€4,99500
Basic 1200 CreditsEinmalig€9,991.200
Pro 2000 CreditsEinmalig€9,992.000
Pro 5000 CreditsEinmalig€19,995.000
Enterprise 8000 CreditsEinmalig€19,998.000
Enterprise 20000 CreditsEinmalig€39,9920.000
Jedes Produkt benötigt genau eine Variante. Passe Preise und Credit-Mengen an dein Geschäftsmodell an.
2

Variant-IDs notieren

Kopiere jede Variant-ID aus dem Lemon Squeezy-Dashboard. Du fügst diese als NEXT_PUBLIC_BONUS_{TIER}_PACKAGE{N}_VARIANT_ID zu deinen Umgebungsvariablen hinzu. Die vollständige Liste der Bonus-Credit-Konfigurationsvariablen findest du unter Umgebungsvariablen.

Varianten erstellen

Varianten repräsentieren die spezifischen Preisoptionen innerhalb jedes Produkts. Die Anzahl der Varianten hängt von deinem Preismodell ab.

Klassisches SaaS (6 Varianten)

Klassisches SaaS erfordert 6 Varianten — monatliche und jährliche Abrechnung für jede bezahlte Stufe:
ProduktVarianteAbrechnungBeispielpreis
BasicBasic MonatlichMonatlich9,99 $/Monat
BasicBasic JährlichJährlich99,99 $/Jahr
ProPro MonatlichMonatlich29,99 $/Monat
ProPro JährlichJährlich299,99 $/Jahr
EnterpriseEnterprise MonatlichMonatlich99,99 $/Monat
EnterpriseEnterprise JährlichJährlichNur auf Anfrage
Für jedes Produkt klicke auf Variante hinzufügen und konfiguriere den Abrechnungszeitraum und den Preis. Notiere die Variant-ID jeder Variante — sichtbar in der URL der Variant-Einstellungen oder auf dem API-Tab.

Credit-basiert (3 Varianten)

Credit-basiertes Pricing erfordert 3 Varianten — nur monatliche Abrechnung für jede bezahlte Stufe:
ProduktVarianteAbrechnungBeispielpreisCredits/Monat
BasicBasic MonatlichMonatlich€9,90/Monat1.500
ProPro MonatlichMonatlich€19,90/Monat5.000
EnterpriseEnterprise MonatlichMonatlich€39,90/Monat15.000
Credit-basiertes Pricing unterstützt keine jährliche Abrechnung — alle Abonnements verlängern sich monatlich mit Credit-Resets, die am Abrechnungszyklus ausgerichtet sind.

API-Key-Konfiguration

1

API-Key generieren

Gehe im Lemon Squeezy-Dashboard zu Settings > API und klicke auf Generate API Key. Gib ihm einen beschreibenden Namen wie „Kit Production" oder „Kit Development".
2

API-Key kopieren

Kopiere den generierten Key sofort — Lemon Squeezy zeigt ihn nur einmal an. Bewahre ihn sicher auf.
3

Zu Umgebungsvariablen hinzufügen

Füge den API-Key zu deiner Datei apps/boilerplate/.env.local hinzu:
bash
LEMONSQUEEZY_API_KEY="dein_api_key_hier"

Webhook-Konfiguration

Webhooks sind die Art, wie Lemon Squeezy deine Anwendung über Abonnement-Events benachrichtigt. Kit verarbeitet 11 verschiedene Event-Typen über einen einzigen Endpunkt.
1

Webhook-Endpunkt erstellen

Gehe im Lemon Squeezy-Dashboard zu Settings > Webhooks und klicke auf Add Endpoint.
Setze die Webhook-URL auf:
https://deine-domain.com/api/webhooks/lemonsqueezy
Für die lokale Entwicklung benötigst du eine öffentlich zugängliche URL. Verwende einen Tunnel-Dienst wie ngrok:
bash
ngrok http 3000
Dann verwende die generierte ngrok-URL: https://abc123.ngrok.io/api/webhooks/lemonsqueezy
2

Webhook-Secret generieren

Lemon Squeezy generiert ein Signing-Secret für jeden Webhook-Endpunkt. Kopiere dieses Secret — es wird für die HMAC-SHA256-Signaturverifizierung verwendet, um sicherzustellen, dass Webhooks authentisch sind.
Füge es zu deiner apps/boilerplate/.env.local hinzu:
bash
LEMONSQUEEZY_WEBHOOK_SECRET="dein_webhook_secret_hier"
3

Webhook-Events auswählen

Aktiviere alle 11 Events, die Kit verarbeitet: subscription_created, subscription_updated, subscription_cancelled, subscription_resumed, subscription_expired, subscription_paused, subscription_unpaused, subscription_payment_success, subscription_payment_failed, subscription_payment_recovered und order_created. Details zu jedem Event findest du unter Webhooks & Portal.

Checkliste Umgebungsvariablen

Hier ist der vollständige Satz zahlungsbezogener Umgebungsvariablen. Kopiere diesen Block in deine apps/boilerplate/.env.local und fülle die Werte aus deinem Lemon Squeezy-Dashboard ein:
# === Lemon Squeezy Core ===
LEMONSQUEEZY_API_KEY="lmsq_..."
LEMONSQUEEZY_STORE_ID="12345"
LEMONSQUEEZY_WEBHOOK_SECRET="whsec_..."

# === Pricing Model ===
NEXT_PUBLIC_PRICING_MODEL="classic_saas"
CURRENCY="EUR"

# === Classic SaaS Variant IDs ===
NEXT_PUBLIC_LEMONSQUEEZY_BASIC_MONTHLY_VARIANT_ID="123456"
NEXT_PUBLIC_LEMONSQUEEZY_BASIC_YEARLY_VARIANT_ID="123457"
NEXT_PUBLIC_LEMONSQUEEZY_PRO_MONTHLY_VARIANT_ID="123458"
NEXT_PUBLIC_LEMONSQUEEZY_PRO_YEARLY_VARIANT_ID="123459"
NEXT_PUBLIC_LEMONSQUEEZY_ENTERPRISE_MONTHLY_VARIANT_ID="123460"

# === Trial (Optional) ===
TRIAL_DAYS="14"

Test-Modus

Lemon Squeezy bietet eine vollständige Testumgebung. Alle Testdaten (Produkte, Abonnements, Webhooks) sind vollständig von der Produktion isoliert.

Test-Kreditkarten

Verwende diese Kartennummern im Test-Modus:
KarteNummerErgebnis
Visa4242 4242 4242 4242Erfolgreiche Zahlung
Visa4000 0000 0000 0002Abgelehnte Zahlung
Mastercard5555 5555 5555 4444Erfolgreiche Zahlung
Verwende ein beliebiges zukünftiges Ablaufdatum und eine beliebige 3-stellige CVC.

Webhook-Zustellung prüfen

Überprüfe nach dem Erstellen eines Test-Abonnements das Lemon Squeezy-Dashboard unter Settings > Webhooks. Jeder Endpunkt zeigt ein Zustellungsprotokoll mit:
  • HTTP-Statuscode (sollte 200 sein)
  • Antworttext
  • Wiederholungsversuche (falls der Endpunkt nicht erreichbar war)
Kit gibt 200 für alle erfolgreich empfangenen Webhooks zurück, auch wenn der Handler auf einen internen Fehler stößt. Dies verhindert, dass Lemon Squeezy Webhooks, die empfangen wurden, aber nicht verarbeitet werden konnten, erneut versucht.

Verifizierung

Überprüfe nach Abschluss des Setups, ob alles End-to-End funktioniert:
1

Entwicklungsserver starten

bash
pnpm dev:boilerplate
2

Tunnel starten (wenn Webhooks lokal getestet werden)

bash
ngrok http 3000
Aktualisiere die Webhook-URL im Lemon Squeezy-Dashboard auf deine ngrok-URL.
3

Test-Abonnement erstellen

Navigiere zur Abrechnungsseite in deiner Anwendung, wähle einen Plan und schließe den Checkout mit einer Test-Kreditkarte ab. Nach der Zahlung solltest du sehen:
  1. Einen subscription_created-Webhook im Lemon Squeezy-Zustellungsprotokoll
  2. Einen neuen Subscription-Datensatz in deiner Datenbank
  3. Die Stufe des Nutzers, aktualisiert in der User-Tabelle
  4. Initialisierte Credits (bei Verwendung des credit-basierten Modells)
4

Anwendungsstatus prüfen

Überprüfe, ob die Abrechnungsseite das aktive Abonnement widerspiegelt. Der Nutzer sollte seinen aktuellen Plan, das nächste Abrechnungsdatum und einen Link zum Kundenportal sehen.