Tax API für Verkaufssteuer, GST und Umsatzsteuer
Verwenden Sie Stripe Tax APIs, um Steuerberechnungen in Ihrer benutzerdefinierten Integration zu implementieren.
Notiz
In diesem Leitfaden wird beschrieben, wie Stripe Tax mit einem nutzerdefinierten Zahlungsablauf, beispielsweise PaymentIntents, vernetzt wird. Sie können Stripe Tax auch mit Payment Links, Checkout, Billing und Invoicing ohne oder mit nur wenig Code vernetzen.
Beta
Um Ihre Integration von Stripe Tax mit Payment Intents zu vereinfachen, lesen Sie Berechnung von Steuern in Ihren nutzerspezifischen Zahlungsabläufen.
Mit den Stripe Tax APIs können Sie Steuern in nutzerdefinierten Zahlungsabläufen berechnen. Nachdem Ihr Kunde/Ihre Kundin die Zahlung abgeschlossen hat, zeichnen Sie die Transaktion auf, damit sie im Stripe Tax-Bericht angezeigt wird. In den Beispielen in diesem Leitfaden werden Stripe-APIs für Zahlungen verwendet. Sie können jedoch die Tax API mit jedem beliebigen Zahlungsdienstleister oder mehreren Zahlungsdienstleistern verwenden.
Video-Demo für den Einstieg
Dieses kurze Video führt durch eine Stripe Tax API-Integration, die PaymentIntents und das Payment Element nutzt.
Registrierungen hinzufügen
Stripe Tax berechnet nur Steuern in Ländern, in denen Sie für den Steuereinzug registriert sind. Sie müssen dazu im Dashboard Ihre Registrierungen hinzufügen.
Steuer berechnenServerseitig
Sie entscheiden, wann und wie oft Sie Steuern berechnen. Zum Beispiel können Sie:
- Zeigen Sie eine Steuerschätzung basierend auf der IP-Adresse Ihres Kunden/Ihrer Kundin an, wenn Ihr Kunde/Ihre Kundin den Bezahlvorgang durchläuft.
- Neuberechnung der Steuer, wenn Ihr/e Kunde/Kundin seine/ihre Rechnungs- oder Lieferadresse eingibt
- Berechnen Sie den endgültigen Steuerbetrag, der zu erheben ist, wenn Ihr/e Kunde/Kundin die Eingabe seiner/ihrer Adresse abgeschlossen hat.
Stripe erhebt eine Gebühr pro API-Aufruf zur Steuerberechnung. Sie können die API-Aufrufe zur Steuerberechnung drosseln, um Ihre Kosten zu verwalten.
Die folgenden Beispiele zeigen, wie Steuern in verschiedenen Szenarien berechnet werden. Stripe Tax berechnet nur Steuern in Ländern, in denen Sie für den Steuereinzug registriert sind. Sie müssen dazu im Dashboard Ihre Registrierungen hinzufügen.
Die Berechnungsantwort enthält Beträge, die Sie Ihrem Kunden/Ihrer Kundin anzeigen und zur Zahlung verwenden können:
Attribut | Beschreibung |
---|---|
amount_total | Die Gesamtsumme nach Berechnung der Steuer. Verwenden Sie dies, um den PaymentIntent Betrag festzulegen, der Ihrem Kunden in Rechnung gestellt werden soll. |
tax_amount_exclusive | Der Steuerbetrag, der zu den Beträgen Ihrer Positionen und den Versandkosten hinzukommt. Dieser Steuerbetrag erhöht den amount_ . Verwenden Sie dies, um Ihrem Kunden/Ihrer Kundin den Steuerbetrag anzuzeigen, der zur Zwischensumme der Transaktion hinzugefügt wurde. |
tax_amount_inclusive | Der Steuerbetrag, der in den Beträgen Ihrer Positionen und den Versandkosten enthalten ist (wenn Sie Preise ohne Steuer verwenden). Dieser Steuerbetrag erhöht nicht den amount_ . Verwenden Sie dies, um Ihren Kunden die in der Gesamtsumme enthaltene Steuer anzuzeigen. |
tax_breakdown | Eine Liste der Steuerbeträge, aufgeschlüsselt nach Land oder Bundesland und Steuersatz. Damit können Sie Ihren Kunden zeigen, welche Steuern Sie erheben. |
Umgang mit Fehlern beim Kundenstandort
Die Berechnung gibt den Fehlercode customer_
zurück, wenn die Adresse Ihres Kunden/Ihrer Kundin ungültig oder nicht präzise genug ist, um die Steuer zu berechnen:
{ "error": { "doc_url": "https://docs.stripe.com/error-codes#customer-tax-location-invalid", "code": "customer_tax_location_invalid", "message": "We could not determine the customer's tax location based on the provided customer address.", "param": "customer_details[address]", "type": "invalid_request_error" } }
Wenn Sie diesen Fehler erhalten, fordern Sie Ihren Kunden/Ihre Kundin auf, die eingegebene Adresse zu überprüfen und mögliche Tippfehler zu korrigieren.
Steuertransaktion erstellenServerseitig
Bei der Erstellung einer Steuertransaktion wird die von Ihrem Kunden/Ihrer Kundin erhobene Steuer aufgezeichnet, sodass Sie später Exporte herunterladen und Berichte erstellen können, um Ihre Steuererklärung zu unterstützen. Sie können eine Transaktion aus einer Berechnung bis zum Zeitstempel expires_at, 90 Tage nach ihrer Einrichtung, erstellen. Der Versuch, sie nach diesem Zeitpunkt zu verwenden, führt zu einem Fehler.
Notiz
Die Transaktion gilt an dem Tag als wirksam, an dem create_from_Calculation aufgerufen wird, und die Steuerbeträge werden nicht neu berechnet.
Wenn Sie eine Steuertransaktion erstellen, müssen Sie eine eindeutige reference
für die Steuertransaktion und jede Position angeben. Die Referenzen erscheinen in den Steuerexporten, um Ihnen zu helfen, die erhobene Steuer mit den Aufträgen in Ihrem System abzustimmen.
Eine Steuertransaktion mit der Referenz pi_
, den Positionsreferenzen L1
und L2
und den Versandkosten sieht in den Steuerexporten beispielsweise so aus:
ID | line_item_id | Typ | Währung | transaction_date | … |
---|---|---|---|---|---|
pi_123456789 | L1 | extern | USD | 2023-02-23 17:01:16 | … |
pi_123456789 | L2 | extern | USD | 2023-02-23 17:01:16 | … |
pi_123456789 | Versand | extern | USD | 2023-02-23 17:01:16 | … |
Wenn Ihr Kunde/Ihre Kundin zahlt, verwenden Sie die Berechnungs-ID, um die eingezogene Steuer zu erfassen. Es gibt zwei Möglichkeiten, dies zu tun:
- Wenn Ihr Server über einen Endpunkt verfügt, an dem Ihr Kunde/Ihre Kundin seine/ihre Bestellung aufgibt, können Sie die Steuertransaktion erstellen, nachdem die Bestellung erfolgreich abgeschickt wurde.
- Warten Sie auf das Webhook-Ereignis payment_intent.succeeded. Rufen Sie die Berechnungs-ID aus den PaymentIntent-
metadata
ab.
Im folgenden Beispiel wird eine Transaktion erstellt und die PaymentIntent-ID als eindeutige Referenz verwendet:
Speichern Sie die Steuer-Transaktions-ID, damit Sie später Erstattungen erfassen können. Sie können die Transaktions-ID in Ihrer Datenbank oder in den Metadaten der PaymentIntent speichern:
Rückerstattungen aufzeichnenServerseitig
Nachdem Sie eine Steuertransaktion erstellt haben, um einen Verkauf an Ihren Kunden/Ihre Kundin zu erfassen, müssen Sie möglicherweise Erstattungen erfassen. Diese werden ebenfalls als Steuertransaktionen mit type=reversal
dargestellt. Stornotransaktionen gleichen eine frühere Transaktion aus, indem sie Beträge mit entgegengesetztem Vorzeichen enthalten. Eine Transaktion, bei der beispielsweise ein Verkauf für 50 USD verbucht wurde, kann später eine vollständige Stornierung von -50 USD aufweisen.
Wenn Sie eine Rückerstattung ausstellen (mit Stripe oder außerhalb von Stripe), müssen Sie eine Steuerumkehr-Transaktion mit einer eindeutigen reference
erstellen. Gängige Strategien umfassen:
- Hängen Sie ein Suffix an die ursprüngliche Referenz an. Wenn die ursprüngliche Transaktion beispielsweise die Referenz
pi_
hat, erstellen Sie die Stornierung mit der Referenz123456789 pi_
123456789-refund - Verwenden Sie die ID der Stripe-Erstattung oder eine Erstattungs-ID aus Ihrem System. Zum Beispiel
re_
oder3MoslRBUZ691iUZ41bsYVkOg myRefund_
.456
Wählen Sie die Vorgehensweise, die für die Abstimmung Ihrer Kundenaufträge mit Ihren Steuerexporten am besten geeignet ist.
Vollständige Rückerstattung eines Verkaufs
Wenn Sie einen Verkauf in Ihrem System vollständig zurückerstatten, erstellen Sie eine Rückerstattung mit mode=full
.
Im folgenden Beispiel ist tax_
die Steuertransaktion, die den Verkauf an Ihren/ihre Kunden/in erfasst:
Dadurch wird die erstellte vollständige Stornotransaktion zurückgegeben:
{ "id": "tax_1MEFtXI6rIcR421e0KTGXvCK", "object": "tax.transaction", "created": 1670866467, "currency": "eur", "customer": null, "customer_details": { "address": { "city": null, "country": "IE",
Die vollständige Stornierung einer Transaktion hat keine Auswirkungen auf vorherige Teilstornierungen. Wenn Sie eine vollständige Stornierung erfassen, stellen Sie sicher, dass Sie alle vorherigen Teilstornierungen für dieselbe Transaktion vollständig stornieren, um doppelte Erstattungen zu vermeiden.
Teilweise Rückerstattung eines Verkaufs
After issuing a refund to your customer, create a reversal tax transaction with mode=partial
. This allows you to record a partial refund by providing the line item amounts refunded. You can create up to 30 partial reversals for each sale. Reversing more than the amount of tax you collected returns an error.
Im folgenden Beispiel wird nur eine Rückerstattung des ersten Postens der ursprünglichen Transaktion aufgezeichnet:
Dadurch wird die erstellte Teilstornotransaktion zurückgegeben:
{ "id": "tax_1MEFACI6rIcR421eHrjXCSmD", "object": "tax.transaction", "created": 1670863656, "currency": "eur", ... "line_items": { "object": "list", "data": [ {
Für jeden stornierten Posten müssen Sie den amount
und den amount_
angeben, die storniert wurden. Der amount
ist einschließlich Steuern, wenn die ursprüngliche Berechnungsposition einschließlich Steuern war.
Wie amount
und amount_
ermittelt werden, hängt von Ihrer Situation ab:
- Wenn Ihre Transaktionen immer nur eine einzige Position enthalten, verwenden Sie stattdessen vollständige Stornierungen.
- Wenn Sie immer ganze Positionen erstatten, verwenden Sie die ursprünglichen Transaktionspositionen
amount
undamount_
, jedoch mit negativen Vorzeichen.tax - Wenn Sie Teile von Einzelposten zurückerstatten, müssen Sie die zurückerstatteten Beträge berechnen. Bei einer Transaktion mit
amount=5000
undamount_
würden Sie nach der Hälfte der Posten einen teilweisen Storno mit dem Postentax=500 amount=-2500
undamount_
erstellen.tax=-250
Teilweise Rückerstattung eines Verkaufs durch einen Pauschalbetrag
Alternativ können Sie einen Storno mit mode=partial
erstellen. Hierfür geben Sie für den Betrag (inkl. Steuer) einen pauschalen Rückerstattungsbetrag an. Der Betrag wird anteilsmäßig auf die einzelnen Posten und die Versandkosten aufgeteilt, wobei auf den zu erstattenden Betrag eines jeden Artikels geachtet wird.
Die Transaktion im folgenden Beispiel besteht aus zwei Posten: einem Posten im Wert von 10 USD und einem Posten im Wert von 20 USD, beide werden mit 10 % besteuert. Der Gesamtbetrag der Transaktion beträgt 33,00 USD. Es wird eine Pauschalrückerstattung über 16,50 USD erfasst:
Dadurch wird die erstellte Teilstornotransaktion zurückgegeben:
{ "id": "tax_1NVcQYBUZ691iUZ4SBPukGa6", "object": "tax.transaction", "created": 1689780994, "currency": "usd", ... "line_items": { "object": "list", "data": [ {
Die Rückerstattungsbeträge und Steuer werden wie folgt pro Posten und Versandkosten der ursprünglichen Transaktion berechnet:
- Zunächst berechnen wir das gesamte verbleibende Guthaben der Transaktion, das zurückerstattet werden kann. Da für diese Transaktion keine weiteren Stornos verzeichnet wurden, beträgt der Gesamtbetrag 33,00 USD.
- Als Nächstes berechnen wir den zu erstattenden Gesamtbetrag pro Posten. Diesen Betrag ermitteln wir anhand des Anteils des verfügbaren Gesamtbetrags des zu erstattenden Artikels und des verbleibenden Gesamtbetrags der Transaktion. Das kann z. B. so aussehen: Der Artikel in Höhe von 10 USD, für den eine Rückerstattung von 11,00 USD verbleibt, entspricht 33,33 % des verbleibenden Gesamtbetrags der Transaktion. Der zurückzuerstattende Gesamtbetrag beträgt demnach
-16.
.50 USD * 33. 33% = -5. 50 USD - Abschließend wird der zu erstattende Gesamtbetrag auf
amount
undamount_
aufgeteilt. Auch dies geschieht anteilsmäßig, abhängig davon, welcher Steuerbetrag für den Posten im Vergleich zum insgesamt zu erstattenden Betrag zurückerstattet werden kann. Für einen beispielhaften Posten in Höhe von 10 USD entspricht die Steuer (1,00 USD) 9,09 % des verbleibenden zu erstattenden Gesamtbetrags (11,00 USD). Dertax amount_
ist alsotax -5.
.50 USD * 9. 09% = -0. 50 USD
Der Pauschalbetrag wird entsprechend des übrigen Rückerstattungsbetrags (what’s left to) der Transaktion aufgeteilt, nicht entsprechend des ursprünglich verbuchten Betrags. Hier ein Beispiel: Anstatt eine Pauschalrückerstattung über 16,50 USD zu erfassen, erfassen Sie zunächst einen teilweisen Storno über den Gesamtbetrag des Postens in Höhe von 10 USD:
Anschließend erfassen Sie einen pauschalen Stornobetrag über 16,50 USD:
Dies gibt die teilweise Stornotransaktion zurück:
{ "id": "tax_1NVxFIBUZ691iUZ4saOIloxB", "object": "tax.transaction", "created": 1689861020, "currency": "usd", ... "line_items": { "object": "list", "data": [ {
Da der verbleibende Gesamtbetrag der Transaktion jetzt 22,00 USD beträgt und der Artikel in Höhe von 10 USD vollständig zurückerstattet wird, werden die 16,50 USD vollständig auf den Artikel über 20 USD aufgeteilt. Die 16,50 USD werden dann gemäß der Logik aus Schritt 3 auf amount = -15.
und amount_
aufgeteilt. In der Zwischenzeit wird für den 10-USD-Posten der Transaktion eine Rückerstattung von 0 USD erfasst.
Eine teilweise Rückerstattung rückgängig machen
Steuertransaktionen sind unveränderlich, aber Sie können eine Teilerstattung aufheben, indem Sie eine vollständige Rückerstattung davon erstellen.
Dies kann in folgenden Fällen erforderlich sein:
- Die Zahlung Rückerstattung schlägt fehl und Sie haben die Ware oder Dienstleistung nicht an Ihre/n Kunden/in bereitgestellt
- Die falsche Bestellung oder die falschen Beträge werden zurückerstattet
- Der ursprüngliche Verkauf wird vollständig zurückerstattet und die teilweisen Rückerstattungen sind nicht mehr gültig
Im folgenden Beispiel ist tax_
die Transaktion, die die Teilrückerstattung darstellt:
Dadurch wird die erstellte vollständige Stornotransaktion zurückgegeben:
{ "id": "tax_1MEFADI6rIcR421e94fNTOCK", "object": "tax.transaction", "created": 1670863657, "currency": "eur", ... "line_items": { "object": "list", "data": [ {
Testen
Die Antwortstruktur im Test-Modus ist mit der im Live-Modus identisch. Sie können also vor der Live-Schaltung überprüfen, ob Ihre Integration funktioniert.
Achtung
Wir können nicht garantieren nicht, dass die Berechnungen im Test-Modus aktuelle Steuerergebnisse liefern.
Es besteht eine Beschränkung auf 1.000 Steuerberechnung im Test-Modus pro Tag. Wenden Sie sich an den Stripe-Support, wenn Sie ein höheres Limit benötigen.