Weiter zum Inhalt
Konto erstellen oder anmelden
Das Logo der Stripe-Dokumentation
/
KI fragen
Konto erstellenAnmelden
Jetzt starten
Zahlungen
Umsatz
Plattformen und Marktplätze
Geldmanagement
Entwicklerressourcen
APIs und SDKsHilfe
ÜbersichtZahlung annehmenAktualisieren Sie Ihre Integration
Online-Zahlungen
ÜbersichtIhren Use case finden
Payment Links verwenden
Vorgefertigte Checkout-Seite verwenden
Erstellen Sie eine benutzerdefinierte Integration mit Elements
    Übersicht
    QuickStart-Leitfäden
    Stripe Elements
    Vergleichen Sie Checkout-Sitzungen und PaymentIntents
    Erweiterte Integration entwerfen
    Erscheinungsbild anpassen
    Zahlungsmethoden verwalten
    Zusätzliche Informationen erfassen
    Abonnement-Integration erstellen
    Dynamische Aktualisierungen
    Rabatte hinzufügen
    Steuern auf Ihre Zahlungen einziehen
    Gutschriften einlösen
    Lassen Sie Kundinnen/Kunden in ihrer Landeswährung zahlen
    Zahlungsmethoden von Kundinnen und Kunden speichern und abrufen
    Belege und bezahlte Rechnungen senden
    Zahlungen auf Ihrem Server manuell genehmigen
    Eine Zahlung separat autorisieren und einziehen
    Elements mit Checkout Sessions API-Änderungsprotokoll (Beta)
In-App-Integration erstellen
Verwenden Sie Managed PaymentsWiederkehrende Zahlungen
Präsenzzahlungen
Terminal
Zahlungsmethoden
Zahlungsmethoden hinzufügen
Zahlungsmethoden verwalten
Schnellerer Bezahlvorgang mit Link
Zahlungsvorgänge
Analytik
Salden und Abwicklungsdauer
Compliance und Sicherheit
Währungen
Abgelehnte Zahlungen
Anfechtungen
Betrugsprävention
Betrugsprävention von Radar
Auszahlungen
ZahlungsbelegeRückerstattungen und Stornierungen
Erweiterte Integrationen
Nutzerdefinierte Zahlungsabläufe
Flexibles Acquiring
Multiprozessor-Orchestrierung
Mehr als Zahlungen
Unternehmensgründung
Krypto
Agentenbasierter Handel
Financial Connections
Climate
Identitäten verifizieren
Vereinigte Staaten
Deutsch
StartseiteZahlungenBuild a custom integration with Elements

Steuern einziehen

Erfahren Sie, wie Sie Stripe Tax in Ihrer kundenspezifischen Integration mit Elements zur Berechnung und zum Einzug von Steuern einsetzen.

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.

Wenn Ihr benutzerdefinierter Zahlungsablauf die Payment Intents API verwendet, lesen Sie Steuern in benutzerdefinierten Zahlungsabläufen berechnen. Diese Integration bietet automatische Haftungsverfolgung, Zahlungsbelege und Unterstützung im Dashboard. Außerdem bieten wir eine öffentliche Vorschaufunktion, mit der Sie das Tax ID Element verwenden können, um Steuer-IDs von Kundinnen und Kunden zu erfassen. Weitere Informationen finden Sie unten unter Steuer-IDs von Kundinnen und Kunden erfassen.

Alternativ können Sie Stripe Tax mit Payment Links, Checkout, Billing und Invoicing ohne Code oder mit Low-Code integrieren.

This video walks through a Stripe Tax API integration that uses the Payment Intents API and the Payment Element.

Videoinhalte werden geladen …

Registrierungen hinzufügen

Stripe Tax berechnet Steuern nur in Ländern, in denen Sie für den Einzug von Steuern registriert sind. Sie müssen Ihre Registrierungen im Dashboard hinzufügen.

OptionalKundenadresse erfassen
Clientseitig

Die von Ihnen erhobene Steuer hängt in der Regel vom Standort Ihrer Kundin oder Ihres Kunden ab. Um die Steuer möglichst genau zu berechnen, erfassen Sie die vollständige Adresse Ihrer Kundin oder Ihres Kunden. Bevor Sie eine Adresse erfassen, können Sie Ihrer Kundin oder Ihrem Kunden eine Schätzung auf der Grundlage der jeweiligen IP-Adresse anzeigen.

Hinweis

Die folgenden Beispiele verwenden ein einfaches benutzerdefiniertes Adressformular, aber Sie können auch das Adresselement verwenden, um Kundenadressen mit Autovervollständigungs- und Lokalisierungsfunktionen zu erfassen.

Das folgende Formular erfasst eine vollständige Postanschrift:

checkout.html
<form> <label for="address_line1">Address Line 1</label> <input type="text" id="address_line1" /> <label for="address_city">City</label> <input type="text" id="address_city" /> <label for="address_state">State</label> <select id="address_state"> <option value="WA">Washington</option> <!-- add more states here --> </select> <label for="address_postal_code">Postal code</label> <input type="text" id="address_postal_code" /> <label for="address_country">Country</label> <select id="address_country"> <option value="US">United States</option> <option value="DE">Germany</option> <option value="IE">Ireland</option> <!-- add more countries here --> </select> </form>

Sie können die Adresse wie folgt an Ihren Server-Endpoint übergeben:

checkout.js
const address = { line1: document.getElementById('address_line1').value, city: document.getElementById('address_city').value, state: document.getElementById('address_state').value, postal_code: document.getElementById('address_postal_code').value, country: document.getElementById('address_country').value, }; var response = fetch('/preview-cart', { method: 'POST', body: JSON.stringify({address: address}), headers: {'Content-Type': 'application/json'}, }).then(function(response) { return response.json(); }).then(function(responseJson) { // Handle errors, or display calculated tax to your customer. });

Die für die Steuerberechnung erforderlichen Adressdaten variieren je nach Land der Kundin oder des Kunden:

  • Vereinigte Staaten: Wir benötigen mindestens die Postleitzahl Ihrer Kundinnen und Kunden. Für eine möglichst genaue Steuerberechnung empfehlen wir die Angabe einer vollständigen Adresse.
  • Kanada: Wir benötigen die Postleitzahl oder die Provinz Ihrer Kundin oder Ihres Kunden.
  • Andere Länder: Wir benötigen nur den Ländercode Ihrer Kundin oder Ihres Kunden.

Steuer berechnen
Serverseitig

Sie entscheiden, wann und wie oft Sie Steuern berechnen. Zum Beispiel können Sie Folgendes tun:

  • Zeigen Sie eine Steuerschätzung basierend auf der IP-Adresse Ihrer Kundin oder Ihres Kunden an, wenn Ihre Kundin oder Ihr Kunde den Bezahlvorgang beginnt.
  • 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 Zuständigkeitsbereichen, in denen Sie für den Steuereinzug registriert sind. Sie müssen dazu im Dashboard Ihre Registrierungen hinzufügen.

In diesem Beispiel wird die Steuer für eine US-Versandadresse berechnet. Der Posten hat einen Preis von 10 USD und verwendet den voreingestellten Steuercode Ihres Kontos.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/tax/calculations \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d currency=usd \ -d "line_items[0][amount]"=1000 \ -d "line_items[0][reference]"=L1 \ -d "customer_details[address][line1]"="920 5th Ave" \ -d "customer_details[address][city]"=Seattle \ -d "customer_details[address][state]"=WA \ -d "customer_details[address][postal_code]"=98104 \ -d "customer_details[address][country]"=US \ -d "customer_details[address_source]"=shipping

Die Berechnungsantwort enthält Beträge, die Sie Ihren Kundinnen und Kunden anzeigen und zur Zahlung verwenden können:

AttributBeschreibung
amount_totalDie Gesamtsumme nach Berechnung der Steuer. Verwenden Sie diesen Wert, um den PaymentIntent-Betrag festzulegen, der Ihrer Kundin oder Ihrem Kunden in Rechnung gestellt werden soll.
tax_amount_exclusiveDer Steuerbetrag, der zu den Beträgen Ihrer Posten und den Versandkosten hinzukommt. Dieser Steuerbetrag erhöht den amount_total. Verwenden Sie dies, um Ihrem Kunden/Ihrer Kundin den Steuerbetrag anzuzeigen, der zur Zwischensumme der Transaktion hinzugefügt wurde.
tax_amount_inclusiveDer Steuerbetrag, der in den Beträgen Ihrer Posten und den Versandkosten enthalten ist (wenn Sie Preise ohne Steuer verwenden). Dieser Steuerbetrag erhöht nicht den amount_total. Verwenden Sie dies, um Ihren Kundinnen und Kunden die in der Gesamtsumme enthaltene Steuer anzuzeigen.
tax_breakdownEine Liste der Steuerbeträge, aufgeschlüsselt nach nationalen und bundesstaatlichen Steuersätzen. Damit können Sie Ihrer Kundschaft zeigen, welche Steuern Sie erheben.

Fehler bei Kundenstandorten behandeln

Die Berechnung gibt den Fehlercode customer_tax_location_invalid 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, bitten Sie Ihre Kundin oder Ihren Kunden, die eingegebene Adresse zu überprüfen und mögliche Tippfehler zu korrigieren.

Berechnung mit einem anderen Abwickler verwenden

Wenn Sie Transaktionen außerhalb von Stripe abwickeln, können Sie die folgenden Schritte überspringen und die Berechnung auf Ihre extern verarbeiteten Transaktionen anwenden.

Steuertransaktion erstellen
Serverseitig

Bei der Erstellung einer Steuertransaktion wird die von Ihrer Kundin oder Ihrem Kunden erhobene Steuer aufgezeichnet, sodass Sie später Exporte herunterladen und Berichte erstellen, 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. Verwendungsversuche nach diesem Zeitpunkt führen zu einem Fehler.

Hinweis

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 jeden Posten angeben. Die Referenzen erscheinen in den Steuerexporten, um Ihnen zu helfen, die erhobene Steuer mit den Bestellungen in Ihrem System abzugleichen.

Eine Steuertransaktion mit der Referenz pi_123456789, den Postenreferenzen L1 und L2 sowie den Versandkosten sieht in den Steuerexporten beispielsweise so aus:

IDline_item_idTypWährungtransaction_date
pi_123456789L1externusd2023-02-23 17:01:16
pi_123456789L2externusd2023-02-23 17:01:16
pi_123456789Versandexternusd2023-02-23 17:01:16

Wenn Ihre Kundin oder Ihr Kunde zahlt, verwenden Sie die Berechnungs-ID, um die erhobene Steuer zu erfassen. Das können Sie auf zwei Arten tun:

  • Wenn Ihr Server über einen Endpunkt verfügt, an dem Ihre Kundin oder Ihr Kunde die 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:

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/tax/transactions/create_from_calculation \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d calculation={{TAX_CALCULATION}} \ -d reference=
"{{PAYMENT_INTENT_ID}}"
\ -d "expand[]"=line_items

Speichern Sie die Steuertransaktions-ID, um Rückerstattungen später zu dokumentieren. Sie können die Transaktions-ID in Ihrer Datenbank oder in den Metadaten des PaymentIntent speichern:

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/payment_intents/
{{PAYMENT_INTENT_ID}}
\ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d "metadata[tax_transaction]"={{TAX_TRANSACTION}}

Rückerstattungen aufzeichnen
Serverseitig

Nachdem Sie eine Steuertransaktion erstellt haben, um einen Verkauf an eine Kundin oder einen Kunden 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_123456789 hat, erstellen Sie die Stornierung mit der Referenz pi_123456789-refund.
  • Verwenden Sie die ID der Stripe-Rückerstattung oder eine Rückerstattungs-ID aus Ihrem System. Zum Beispiel re_3MoslRBUZ691iUZ41bsYVkOg oder myRefund_456.

Wählen Sie die Vorgehensweise, die zum Abgleichen Ihrer Kundenbestellungen 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_1MEFAAI6rIcR421eB1YOzACZ die Steuertransaktion, die den Verkauf an Ihre Kundin oder Ihren Kunden erfasst:

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/tax/transactions/create_reversal \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d mode=full \ -d original_transaction=tax_1MEFAAI6rIcR421eB1YOzACZ \ -d reference=pi_123456789-cancel \ -d "expand[]"=line_items

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",

Das vollständige Stornieren einer Transaktion hat keine Auswirkungen auf vorherige Teilstornierungen. Vergewissern Sie sich beim Erfassen einer vollständigen Stornierung, dass Sie alle vorherigen Teilstornierungen für dieselbe Transaktion vollständig stornieren, um doppelte Erstattungen zu vermeiden.

Teilweise Rückerstattung eines Verkaufs

Nach dem Ausstellen einer Rückerstattung an Ihre Kundin oder Ihren Kunden, erstellen Sie eine Storno-Steuertransaktion mit mode=partial. Damit können Sie eine Teilerstattung erfassen, indem Sie die erstatteten Beträge der einzelnen Posten angeben. Sie können bis zu 30 Teilrückbuchungen für jeden Verkauf erstellen. Wenn Sie mehr als den von Ihnen erhobenen Steuerbetrag stornieren, wird ein Fehler zurückgegeben.

Im folgenden Beispiel wird nur eine Rückerstattung des ersten Postens der ursprünglichen Transaktion aufgezeichnet:

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/tax/transactions/create_reversal \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d mode=partial \ -d original_transaction=tax_1MEFAAI6rIcR421eB1YOzACZ \ -d reference=pi_123456789-refund_1 \ -d "line_items[0][original_line_item]"=tax_li_MyBXPByrSUwm6r \ -d "line_items[0][reference]"=L1 \ -d "line_items[0][amount]"=-4999 \ -d "line_items[0][amount_tax]"=-1150 \ -d "metadata[refund]"=
"{{REFUND_ID}}"
\ --data-urlencode "metadata[refund_reason]"="Refunded line 1 of pi_123456789 (customer was unhappy)" \ -d "expand[0]"=line_items

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 stornierten amount und amount_tax angeben. Der amount ist inklusive Steuern, wenn die ursprüngliche Berechnung des Postens inklusive Steuern war.

Wie amount und amount_tax ermittelt werden, hängt von Ihrer Situation ab:

  • Wenn Ihre Transaktionen immer nur einen einzigen Posten enthalten, verwenden Sie stattdessen vollständige Stornierungen.
  • Wenn Sie immer ganze Posten erstatten, verwenden Sie die ursprünglichen Transaktionsposten amount und amount_tax, jedoch mit negativen Vorzeichen.
  • Wenn Sie Teile von Einzelposten zurückerstatten, müssen Sie die zurückerstatteten Beträge berechnen. Zum Beispiel: Bei einer Verkaufs­transaktion mit amount=5000 und amount_tax=500 erstellen Sie nach der Rückerstattung der Hälfte des Postens eine Teilrückbuchung mit Posten amount=-2500 und amount_tax=-250.

Steuerberichte mit teilweisen Rückerstattungen

Wenn Sie einen Steuerbetrag so zurückerstatten, dass die gesamte Steuer nicht mehr proportional zur Zwischensumme ist, kann das Ihre Steuerberichterstattung unzuverlässig machen. Die steuerpflichtigen und nicht steuerpflichtigen Beträge werden nicht automatisch angepasst und der Grund für die Stornierung der Steuer (z. B. Produkt ausgenommen, Kunde/Kundin ausgenommen oder Umkehrung der Steuerschuld) wird nicht widergespiegelt. Wir empfehlen, keine Steuerbeträge für Teilposten zurückzuerstatten. Stornieren Sie stattdessen die Transaktion und erstellen Sie eine neue mit entsprechenden Eingaben für eine genaue Steuerberechnung.

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:

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/tax/transactions/create_reversal \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d mode=partial \ -d original_transaction=tax_1NVcKqBUZ691iUZ4xMZtcGYt \ -d reference=pi_234567890-refund_1 \ -d flat_amount=-1650 \ -d "metadata[refund]"=
"{{REFUND_ID}}"
\ --data-urlencode "metadata[refund_reason]"="Refunded $16.50 of pi_234567890 (customer was unhappy)" \ -d "expand[]"=line_items

Dadurch wird die erstellte Teilstornotransaktion zurückgegeben:

{ "id": "tax_1NVcQYBUZ691iUZ4SBPukGa6", "object": "tax.transaction", "created": 1689780994, "currency": "usd", ... "line_items": { "object": "list", "data": [ {

Rückerstattungsbeträge und Steuern werden wie folgt pro Posten und Versandkosten der ursprünglichen Transaktion berechnet:

  1. 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.
  2. 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 Postens und des verbleibenden Gesamtbetrags der Transaktion. Das kann z. B. so aussehen: Der Posten 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.
  3. Abschließend wird der zu erstattende Gesamtbetrag auf amount und amount_tax aufgeteilt. Auch das 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). Der amount_tax ist also -5.50 USD * 9.09% = -0.50 USD.

Der Pauschalbetrag wird entsprechend dem für die Transaktion noch zu erstattenden Betrag aufgeteilt, nicht entsprechend dem ursprünglich erfassten Betrag. Anstatt beispielsweise eine Erstattung in Höhe von pauschal 16,50 USD zu erfassen, erfassen Sie zunächst eine Teilstornierung für den Gesamtbetrag des Postens im Wert von 10 USD:

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/tax/transactions/create_reversal \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d mode=partial \ -d original_transaction=tax_1NVcKqBUZ691iUZ4xMZtcGYt \ -d reference=pi_234567890-refund_1 \ -d "line_items[0][original_line_item]"=tax_li_OICmRXkFuWr8Df \ -d "line_items[0][reference]"=partial_refund_l1 \ -d "line_items[0][amount]"=-1000 \ -d "line_items[0][amount_tax]"=-100 \ -d "metadata[refund]"=
"{{REFUND_ID}}"
\ --data-urlencode "metadata[refund_reason]"="Refunded line 1 of pi_234567890 (customer was unhappy)" \ -d "expand[0]"=line_items

Anschließend erfassen Sie einen pauschalen Stornobetrag über 16,50 USD:

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/tax/transactions/create_reversal \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d mode=partial \ -d original_transaction=tax_1NVcKqBUZ691iUZ4xMZtcGYt \ -d reference=pi_234567890-refund_2 \ -d flat_amount=-1650 \ -d "metadata[refund]"=
"{{REFUND_ID}}"
\ --data-urlencode "metadata[refund_reason]"="Refunded $16.50 of pi_234567890 (customer was still unhappy)" \ -d "expand[]"=line_items

Das 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 Posten in Höhe von 10 USD vollständig zurückerstattet wird, werden die 16,50 USD vollständig auf den Posten über 20 USD aufgeteilt. Die 16,50 USD werden dann gemäß der Logik aus Schritt 3 auf amount = -15.00 USD und amount_tax = -1.50 USD 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 Teilrückerstattung stornieren, indem Sie eine vollständige Stornierung erstellen.

Dies kann in folgenden Fällen erforderlich sein:

  • Die Rückerstattung der Zahlung schlägt fehl und Sie haben die Ware oder Dienstleistung Ihrer Kundin oder Ihrem Kunden nicht bereitgestellt
  • Die falsche Bestellung oder die falschen Beträge werden zurückerstattet
  • Der ursprüngliche Verkauf wird vollständig zurückerstattet und die Teilrückerstattungen sind nicht mehr gültig

Im folgenden Beispiel ist tax_1MEFACI6rIcR421eHrjXCSmD die Transaktion, die die Teilrückerstattung darstellt:

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/tax/transactions/create_reversal \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d mode=full \ -d original_transaction=tax_1MEFACI6rIcR421eHrjXCSmD \ -d reference=pi_123456789-refund_1-cancel \ -d "metadata[refund_reason]"="User called to cancel because they selected the wrong item" \ -d "expand[]"=line_items

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

Verwenden Sie Sandboxes, deren Antwortstruktur mit dem Live-Modus identisch ist, um sicherzustellen, dass Ihre Integration korrekt funktioniert, bevor Sie live gehen.

Warnung

In Testumgebungen ist nicht garantiert, dass die Berechnungen aktuelle Steuerergebnisse liefern. Sie sind auf 1.000 Steuerberechnungen pro Tag beschränkt. Wenn Sie ein höheres Limit benötigen, wenden Sie sich bitte an den Stripe-Support. Hinweise zu automatisierten Tests und Strategien zur Umgehung von Begrenzungen in Testumgebungen finden Sie unter Automatisierte Tests.

Steuertransaktionen anzeigen

Sie können alle Steuertransaktionen für Ihr Konto auf der Seite Steuertransaktionen im Dashboard einsehen. Klicken Sie auf eine einzelne Transaktion, um eine detaillierte Aufschlüsselung der berechneten Steuern nach Zuständigkeitsbereich und nach einzelnen Produkten anzuzeigen, die in der Transaktion enthalten sind.

Hinweis

Die Steuertransaktionsseite enthält nur Transaktionen und keine Berechnungen. Wenn Sie eine Berechnung erwarten und sie auf dieser Seite nicht finden können, überprüfen Sie, ob Sie aus der Berechnung erfolgreich eine Steuertransaktion erstellt haben.

OptionalIntegrationsbeispiele

Sie können Steuern für Ihre Kundin oder Ihren Kunden berechnen, bevor Sie Zahlungsmethode erfassen und einen PaymentIntent erstellen. Beispielsweise können Sie den Gesamtbetrag des Warenkorbs anzeigen, wenn die Kundin oder der Kunde die Postleitzahl angibt.

Im folgenden Beispiel definiert Ihr Server einen Endpoint /preview-cart, an den die Kundenadresse von Ihrem clientseitigen Formular gesendet wird. Der Server kombiniert die Posten des Warenkorbs mit der Kundenadresse, um die Steuer zu berechnen.

server.js
Node.js
Java
Ruby
PHP
Python
Go
.NET
No results
// Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys const stripe = require('stripe')(
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
); const express = require('express'); const app = express(); // Parse the request body as JSON. app.use(express.json()); app.post('/preview-cart', async (req, res) => {

Wenn Sie bereit sind, Zahlungen entgegenzunehmen, erstellen Sie einen PaymentIntent aus dem Ergebnis der Steuerberechnung. Speichern Sie die Steuerberechnungs-ID in den Metadaten des PaymentIntent oder in Ihrer eigenen Datenbank, damit Sie eine Steuertransaktion erstellen können, wenn Ihre Kundin oder Ihr Kunde die Zahlung abschließt.

Das folgende Beispiel zeigt einen Server-Endpunkt, der die Steuer berechnet, einen PaymentIntent erstellt (oder aktualisiert) und das Ergebnis an den Client zurückgibt. Sie können dann die Steuer für Ihre Kundin oder Ihren Kunden anzeigen. Verwenden Sie das client_secret, um die Zahlung anzunehmen.

server.js
Node.js
Java
Ruby
PHP
Python
Go
.NET
No results
// Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys const stripe = require('stripe')(
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
); const express = require('express'); const app = express(); // Parse the request body as JSON. app.use(express.json()); app.post('/calculate-cart', async (req, res) => {

Wenn Ihre Integration das Payment Element verwendet, rufen Sie Updates vom Server ab, nachdem Sie den PaymentIntent aktualisiert haben.

OptionalBerechnung der Steuer auf die Versandkosten
Serverseitig

Verwenden Sie den Parameter shipping_cost, um die Steuer auf die Versandkosten zu berechnen:

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/tax/calculations \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d currency=usd \ -d "line_items[0][amount]"=1000 \ -d "line_items[0][reference]"=L1 \ -d "customer_details[address][line1]"="920 5th Ave" \ -d "customer_details[address][city]"=Seattle \ -d "customer_details[address][state]"=WA \ -d "customer_details[address][postal_code]"=98104 \ -d "customer_details[address][country]"=US \ -d "customer_details[address_source]"=shipping \ -d "shipping_cost[amount]"=500 \ -d "shipping_cost[tax_code]"=txcd_92010001

Übergeben Sie die ID einer vorhandenen ShippingRate, um dessen amount, tax_code und tax_behavior zu verwenden:

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/tax/calculations \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d currency=usd \ -d "line_items[0][amount]"=1000 \ -d "line_items[0][reference]"=L1 \ -d "customer_details[address][line1]"="920 5th Ave" \ -d "customer_details[address][city]"=Seattle \ -d "customer_details[address][state]"=WA \ -d "customer_details[address][postal_code]"=98104 \ -d "customer_details[address][country]"=US \ -d "customer_details[address_source]"=shipping \ -d "shipping_cost[shipping_rate]"=shr_1Mlh8YI6rIcR421eUr9SJzAD

OptionalSteuern mit einer IP-Adresse schätzen
Serverseitig

Wenn Sie die IP-Adresse Ihrer Kundinnen und Kunden angeben, wird sie geolokalisiert und als Kundenstandort verwendet. Auf diese Weise können Sie Kundinnen und Kunden eine Steuerschätzung anzeigen, bevor sie ihre Postanschrift angeben.

Vorsicht

Da der Standort einer IP-Adresse möglicherweise weit vom tatsächlichen Standort der Kundin oder des Kunden entfernt ist, raten wir davon ab, eine IP-Adresse zur Ermittlung des endgültigen Steuerbetrags zu verwenden.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/tax/calculations \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d currency=usd \ -d "line_items[0][amount]"=1000 \ -d "line_items[0][reference]"=L1 \ -d "customer_details[ip_address]"="127.0.0.1"

OptionalSteueridentifikationsnummern von Kundinnen und Kunden erfassen
Serverseitig

In einigen Fällen, wie etwa bei grenzüberschreitenden Dienstleistungen, muss Ihre Kundin oder Ihr Kunde die Steuer möglicherweise auf Reverse-Charge-Basis abrechnen. Anstatt die Steuer einzuziehen, müssen Sie eine Rechnung mit dem Text „Steuer vom Leistungsempfänger zu zahlen“ ausstellen. Dies informiert Ihre Kundin oder Ihren Kunden darüber, dass sie oder er für die Steuer auf den Kauf verantwortlich ist.

Geben Sie die Steueridentifikationsnummern Ihrer Kundinnen und Kunden an, um automatisch zu bestimmen, wann die Umkehrung der Steuerschuld (Reverse Charge) angewendet wird:

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/tax/calculations \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d currency=usd \ -d "line_items[0][amount]"=1000 \ -d "line_items[0][reference]"=L1 \ -d "customer_details[address][country]"=IE \ -d "customer_details[address_source]"=billing \ -d "customer_details[tax_ids][0][type]"=eu_vat \ -d "customer_details[tax_ids][0][value]"=DE123456789

Wenn Sie eine Steueridentifikationsnummer mit einem ungültigen Format angeben, gibt die Berechnung den Fehlercode tax_id_invalid zurück:

{ "error": { "code": "tax_id_invalid", "doc_url": "https://docs.stripe.com/error-codes#tax-id-invalid", "message": "Invalid value for eu_vat.", "param": "customer_details[tax_ids][0][value]", "type": "invalid_request_error" } }

Die Tax API validiert Steueridentifikationsnummern nicht automatisch gegen staatliche Datenbanken. Um eine Steueridentifikationsnummer vor der Steuerberechnung zu validieren, müssen Sie die Validierung der Kunden-Steueridentifikationsnummer verwenden.

OptionalPreisangaben inklusive Steuern
Serverseitig

Standardmäßig wird die Steuer zusätzlich zu den von Ihnen angegebenen Beträgen für Einzelposten und Versandkosten berechnet. Um die in Ihren Preisen enthaltene Steuer zu berechnen, setzen Sie tax_behavior für den Einzelposten oder die Versandkosten auf inklusive.

Im folgenden Beispiel zahlt die Kundin oder der immer 100 EUR:

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/tax/calculations \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d currency=eur \ -d "line_items[0][amount]"=10000 \ -d "line_items[0][reference]"=L1 \ -d "line_items[0][tax_behavior]"=inclusive \ -d "line_items[0][tax_code]"=txcd_10103000 \ -d "customer_details[address][country]"=IE \ -d "customer_details[address_source]"=billing

Die Antwort gibt die enthaltene Steuer zurück:

{ ... "amount_total": 10000, ... "tax_amount_exclusive": 0, "tax_amount_inclusive": 1870, "tax_breakdown": [ { "amount": 1870, "inclusive": true, "tax_rate_details": { "country": "IE", "percentage_decimal": "23.0", "state": null, "tax_type": "vat" }, "taxability_reason": "standard_rated", "taxable_amount": 8130 } ], ... }

OptionalEin vorhandenes Produktobjekt verwenden
Serverseitig

Sie können für jeden Posten ein Produktobjekt angeben. Wenn das Produkt einen tax_code hat, verwenden wir diesen als tax_code – sofern er nicht bereits ausgefüllt ist. Andere Produktwerte einschließlich tax_behavior und Preis werden bei der Steuerberechnung nicht berücksichtigt.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/tax/calculations \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d currency=usd \ -d "line_items[0][amount]"=1000 \ -d "line_items[0][reference]"=L1 \ -d "line_items[0][product]"=
"{{PRODUCT_ID}}"
\ -d "customer_details[address][country]"=IE \ -d "customer_details[address_source]"=billing

OptionalEin vorhandenes Kundenobjekt verwenden
Serverseitig

Wenn Sie ein Kundenobjekt angeben, kopieren und verwenden wir automatisch die Kundenadresse und die Steueridentifikationsnummern für die Berechnung:

  • Wenn die shipping-Adresse von Kundinnen oder Kunden vorhanden ist, wird sie in customer_details.address kopiert.
  • Andernfalls, falls die address der Kundin oder des Kunden vorhanden ist, wird sie in customer_details.address kopiert.
  • Andernfalls, wenn die Kunden-tax.ip_address vorhanden ist, wird sie in customer_details.ip_address kopiert.
  • Andernfalls, wenn der tax.tax_exempt der Kundin oder des Kunden vorhanden ist, wird er in customer_details.taxability_override kopiert.

Die Steueridentifikationsnummern von Kundinnen und Kunden werden in customer_details.tax_ids kopiert.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/tax/calculations \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d currency=usd \ -d "line_items[0][amount]"=1000 \ -d "line_items[0][reference]"=L1 \ -d customer=
"{{CUSTOMER_ID}}"

OptionalKundensteuerbarkeit aufheben
Serverseitig

In bestimmten Fällen müssen Sie keine Steuer erheben, z. B. wenn Ihre Kundin oder Ihr Kunde steuerbefreit ist. Sie können die Steuerbefreiung über den Parameter taxability_override an Stripe Tax übermitteln.

So geben Sie die Überschreibung der Kundensteuerpflicht in Ihren Berechnungen an:

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/tax/calculations \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d currency=usd \ -d "line_items[0][amount]"=1000 \ -d "line_items[0][reference]"=L1 \ -d "customer_details[address][line1]"="920 5th Ave" \ -d "customer_details[address][city]"=Seattle \ -d "customer_details[address][state]"=WA \ -d "customer_details[address][postal_code]"=98104 \ -d "customer_details[address][country]"=US \ -d "customer_details[address_source]"=billing \ -d "customer_details[taxability_override]"=customer_exempt

Umkehrung der Steuerschuld

In einigen Regionen, wie z. B. in der Europäischen Union, gilt ein „Reverse-Charge“-System, bei dem Kundinnen und Kunden für die Abrechnung der Steuern verantwortlich ist, wenn sie als Unternehmen einkaufen. Damit Stripe Tax die korrekte steuerliche Behandlung anwendet, empfehlen wir Ihnen, Steueridentifikationsnummern von Ihren Kundinnen und Kunden zu erfassen. Manchmal liegen Ihnen die Steueridentifikationsnummern Ihrer Kundinnen und Kunden nicht vor oder Sie haben separat festgelegt, dass die Umkehrung der Steuerschuld gilt. In solchen Fällen können Sie taxability_override verwenden, um Stripe Tax zu zwingen, das Reverse-Charge-Verfahren anzuwenden.

So geben Sie die Überschreibung der Kundensteuerpflicht in Ihren Berechnungen an:

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/tax/calculations \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d currency=eur \ -d "line_items[0][amount]"=1000 \ -d "line_items[0][reference]"=L1 \ -d "customer_details[address][country]"=IE \ -d "customer_details[address_source]"=billing \ -d "customer_details[taxability_override]"=reverse_charge

OptionalEinen Absenderort angeben
Serverseitig

Wenn Sie Waren von einem anderen Standort als Ihrem Hauptgeschäftssitz aus versenden, können Sie diese Adresse für die Steuerberechnungen angeben.

Verwenden Sie den Parameter ship_from_details, um einen Absenderort anzugeben. In diesem Beispiel ist der/die Nutzer/in in Florida ansässig, der Kunde/die Kundin ist in Springfield, IL und der/die Nutzer/in versendet die Waren aus Naperville, IL:

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/tax/calculations \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d currency=usd \ -d "line_items[0][amount]"=1000 \ -d "line_items[0][reference]"=L1 \ -d "line_items[0][tax_behavior]"=exclusive \ -d "line_items[0][tax_code]"=txcd_99999999 \ -d "customer_details[address][city]"=Springfield \ -d "customer_details[address][state]"=IL \ -d "customer_details[address][postal_code]"=62704 \ -d "customer_details[address][country]"=US \ -d "customer_details[address_source]"=billing \ -d "ship_from_details[address][city]"=Naperville \ -d "ship_from_details[address][state]"=IL \ -d "ship_from_details[address][postal_code]"=60540 \ -d "ship_from_details[address][country]"=US

Die Antwort gibt die berechnete Steuer basierend auf dem Versandort der Bestellung (Naperville, IL) zurück, anstatt auf dem Bestimmungsort (Springfield, IL) oder dem Geschäftssitz der Verkäuferin oder des Verkäufers:

{ ... "amount_total": 1078, ... "tax_amount_exclusive": 78, ... "tax_breakdown": [ { "amount": 78, "inclusive": true, "tax_rate_details": { "country": "US", "percentage_decimal": "7.75", "state": "IL", "tax_type": "sales_tax" }, "taxability_reason": "standard_rated", "taxable_amount": 1000 } ], ... }

Weitere Informationen zur Berechnung von Steuern in diesen Szenarien finden Sie in der Dokumentation zu Stripe Tax.

OptionalEinzelhandelsliefergebühr berechnen
Serverseitig

Stripe Tax unterstützt die Berechnung der Liefergebühr für Einzelhändler/innen in Minnesota und Colorado.

Nachdem Sie in den unterstützten Bundesstaaten eine Steuerregistrierung vom Typ state_retail_delivery_fee hinzugefügt haben, wird die Liefergebühr für Einzelhändler/innen anhand von Steuerberechnungen berechnet.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/tax/registrations \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d country=US \ -d "country_options[us][state]"=CO \ -d "country_options[us][type]"=state_retail_delivery_fee \ -d active_from=now

Um die Liefergebühr für Einzelhändler/innen zu berechnen, rufen Sie die Tax Calculations API unter Verwendung eines Steuercodes für physische Posten auf, z. B. txcd_30011000, der für Kleidung und Schuhe steht.

Nicht alle physischen Artikel lösen die Berechnung der Liefergebühr für Einzelhändler/innen aus. Informationen dazu, wann die Steuer anfällt, finden Sie in der Dokumentation des jeweiligen Bundesstaats:

  • Einzelhandelsliefergebühr – Colorado
  • Einzelhandelsliefergebühr – Minnesota
Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/tax/calculations \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d currency=usd \ -d "line_items[0][amount]"=1000 \ -d "line_items[0][reference]"=L1 \ -d "line_items[0][tax_behavior]"=exclusive \ -d "line_items[0][tax_code]"=txcd_30011000 \ -d "shipping_cost[amount]"=400 \ -d "customer_details[address][line1]"="1437 Bannock St Room 451" \ -d "customer_details[address][city]"=Springfield \ -d "customer_details[address][state]"=CO \ -d "customer_details[address][postal_code]"=80202 \ -d "customer_details[address][country]"=US \ -d "customer_details[address_source]"=shipping

Die Antwort gibt die berechnete Steuer mit der Liefergebühr für Einzelhändler/innen für Colorado zurück. Diese erscheint als zusätzlicher Eintrag im tax_breakdown-Objekt, wobei tax_breakdown.tax_rate_details.rate_type auf flat_amount gesetzt ist:

{ ... "amount_total": 2165, ... "tax_amount_exclusive": 165, ... "tax_breakdown": [ { "amount": 88, "inclusive": false, "tax_rate_details": { "percentage_decimal": "8.81", "rate_type": "percentage", "tax_type": "sales_tax", ... }, "taxability_reason": "standard_rated", "taxable_amount": 1000 }, ... { "amount": 29, "inclusive": false, "tax_rate_details": { "flat_amount": { "amount": 29, "currency": "usd" }, "percentage_decimal": "0.0", "rate_type": "flat_amount", "tax_type": "retail_delivery_fee", ... }, "taxability_reason": "standard_rated", "taxable_amount": 1000 } ], ... }

OptionalDetaillierte Aufschlüsselung der Steuern nach Posten
Serverseitig

Die übergeordnete tax_breakdown wird immer zurückgegeben und bietet eine einfache Aufschlüsselung, die sich für die Anzeige einer Liste von Steuern beim Bezahlvorgang oder auf einem Zahlungsbeleg eignet.

Sie können den taxability_reason verwenden, um zu verstehen, warum während der Integration keine Steuer angewendet wird. Zum Beispiel bedeutet not_collecting, dass in dem Land oder Bundesstaat, in dem die Steuer fällig wäre, keine Steuer erhoben wird. Durch das Hinzufügen von Steuerregistrierungen zu Ihren Kontoeinstellungen geben Sie Stripe an, wo Sie Steuern erheben. Wenn Sie eine Registrierung für Washington hinzugefügt haben, wird in Ihrem Ergebnis als Steuerpflichtgrund standard_rated angezeigt, was darauf hinweist, dass das Produkt zum Standardsatz besteuert wird.

Erweitern Sie das Attribut tax_breakdown des Postens, um eine detaillierte Aufschlüsselung einschließlich lokaler Steuern und Attribute zu erhalten, die den Grund für die einzelnen Steuern erklären.

  • Das Feld tax_type aus tax_rate_details ist eine übergeordnete Angabe zum Steuertyp, die möglicherweise nicht immer mit dem in Berichten und Transaktionen zurückgegebenen Typ übereinstimmt. Beispielsweise wird nicht zwischen US-amerikanischer Sales Tax und Use Tax unterschieden.
  • Verwenden Sie das Feld display_name aus tax_rate_details in Ihrem Bezahlvorgang, um alle Steuern anzuzeigen. Die Steuern werden basierend auf dem Standort der Kundin oder des Kunden und den Steuerinformationen des Produkts lokalisiert. Wenn beispielsweise für Deutschland die Umsatzsteuer (USt.) angewendet wird, weil sich die Kundin oder der Kunde in Deutschland befindet und das Produkt am Bestimmungsort besteuert wird – etwa txcd_10103001: Software as a service (SaaS) for business use –, wird Umsatzsteuer (USt) angezeigt, also die deutsche Bezeichnung für VAT. Wenn dagegen für Frankreich Umsatzsteuer (VAT) angewendet wird, weil die Firmenadresse in Frankreich liegt und das Produkt am Ursprungsort besteuert wird – etwa txcd_20030000: General – Services –, wird Taxe sur la valeur ajoutée (TVA) angezeigt, also die französische Bezeichnung für VAT.
Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/tax/calculations \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d currency=usd \ -d "line_items[0][amount]"=1000 \ -d "line_items[0][reference]"=L1 \ -d "customer_details[address][line1]"="920 5th Ave" \ -d "customer_details[address][city]"=Seattle \ -d "customer_details[address][state]"=WA \ -d "customer_details[address][postal_code]"=98104 \ -d "customer_details[address][country]"=US \ -d "customer_details[address_source]"=shipping \ -d "expand[0]"="line_items.data.tax_breakdown"
{ ... "tax_breakdown": [ { "amount": 103, "inclusive": false, "tax_rate_details": { "country": "US", "percentage_decimal": "10.25", "state": "WA", "tax_type": "sales_tax" }, "taxability_reason": "standard_rated", "taxable_amount": 1000 } ],

OptionalHäufige Fehler beheben
Serverseitig

Befolgen Sie die folgenden Schritte, um Fehler in Ihrer Steuerintegration zu beheben.

Fehler wegen ungültiger Steuercodes beheben

Wenn Sie einen Ungültiger Steuercode-Fehler erhalten, können Sie in den Produktsteuercodes eine Liste der verfügbaren Steuercodes einsehen. Gehen Sie dann wie folgt vor, um das Problem zu beheben:

  1. Prüfen Sie den Steuercode: Stellen Sie sicher, dass Sie einen gültigen Steuercode aus der Liste der verfügbaren Steuercodes verwenden. Häufige Fehler sind:

    • Leere Zeichenfolge oder null als Steuercode verwenden
    • Falsch geschriebener Steuercode
    • Verwenden eines nicht vorhandenen Steuercodes
  2. Aktualisieren Sie Ihren Code: Achten Sie darauf, beim Erstellen einer TaxCalculation einen gültigen Steuercode zu übergeben. Zum Beispiel:

    Command Line
    cURL
    Stripe CLI
    Ruby
    Python
    PHP
    Java
    Node.js
    Go
    .NET
    No results
    curl https://api.stripe.com/v1/tax/calculations \ -u "
    sk_test_BQokikJOvBiI2HlWgH4olfQ2
    :"
    \ -d currency=usd \ -d "line_items[0][amount]"=1000 \ -d "line_items[0][reference]"=L1 \ -d "line_items[0][tax_code]"=txcd_10000000 \ -d "customer_details[address][line1]"="354 Oyster Point Blvd" \ -d "customer_details[address][city]"="South San Francisco" \ -d "customer_details[address][state]"=CA \ -d "customer_details[address][postal_code]"=94080 \ -d "customer_details[address][country]"=US \ -d "customer_details[address_source]"=shipping
  3. Verwenden Sie den Standard-Steuercode: Stripe Tax verwendet einen Standard-Steuercode für Berechnungen, wenn kein spezifischer Steuercode für ein Produkt oder in einer Steuerberechnungsanfrage angegeben ist. Den Standardwert können Sie in Ihren Steuereinstellungen einsehen und aktualisieren.

    Verwenden Sie die API, um den Standard-Steuercode zu aktualisieren:

    Command Line
    cURL
    Stripe CLI
    Ruby
    Python
    PHP
    Java
    Node.js
    Go
    .NET
    No results
    curl https://api.stripe.com/v1/tax/settings \ -u "
    sk_test_BQokikJOvBiI2HlWgH4olfQ2
    :"
    \ -d "defaults[tax_code]"=txcd_10000000
  4. Überprüfen Sie Ihren Produktkatalog: Wenn Sie Steuercodes verwenden, die mit Produkten in Ihrem Stripe-Produktkatalog verknüpft sind, stellen Sie sicher, dass die Steuercodes Ihren Produkten korrekt zugeordnet sind.

  5. Überprüfen Sie die Daten auf Inkonsistenzen: Stellen Sie sicher, dass der Steuercode korrekt aus Ihrer Datenbank oder Ihrem Frontend an Ihren serverseitigen Code übergeben wird, der den API-Aufruf an Stripe ausführt.

Verwenden Sie für genauere Steuerberechnungen den spezifischsten Steuercode, der für Ihr Produkt oder Ihre Dienstleistung gilt. Wenn Sie sich nicht sicher sind, welchen Steuercode Sie verwenden sollen, lesen Sie die Dokumentation zu Steuercodes.

Wenn weiterhin Probleme auftreten, prüfen Sie die Dokumentation zur Tax Settings API.

Steueridentifikationsnummern von Kundinnen und Kunden erfassen

Die Anzeige der Steueridentifikationsnummer und des rechtlichen Unternehmensnamens einer Kundin/eines Kunden auf Rechnungen ist eine gängige Anforderung. Sie können das Steueridentifikationsnummern-Element verwenden, um diese Informationen zu erfassen. Diese Funktion befindet sich in der öffentlichen Vorschau.

Haftungsausschluss

Die Payment Intents API wurde entwickelt, um Steueridentifikationsnummern von Unternehmen zu erfassen, die in bestimmten Zuständigkeitsbereichen ähnliche Formate wie persönliche Steueridentifikationsnummern haben können. Sie müssen sicherstellen, dass bei der Verwendung dieser Funktion nur Steueridentifikationsnummern von Unternehmen angegeben werden, wie für dieses Feld vorgesehen.

Beta aktivieren

Für das Steueridentifikationsnummernelement mit der Payment Intents API müssen Sie die Beta elements_tax_id_1 aktivieren. Fügen Sie Beta zu Ihrer Stripe.js-Initialisierung hinzu:

const stripe = Stripe(
'pk_test_TYooMQauvdEDq54NiTphI7jx'
, { betas: ['elements_tax_id_1'], });

Erstellen Sie eine CustomerSession (optional)

Wenn Sie Steueridentifikationsnummern für eine/n Kundin/Kunden speichern und für wiederkehrende Kundinnen/Kunden erneut anzeigen möchten, müssen Sie eine CustomerSession erstellen. Die CustomerSession bietet sicheren, vorübergehenden Zugriff auf Kundendaten, ohne Ihren geheimen API Schlüssel dem Client offenzulegen.

Wenn Sie CustomerSession nicht verwenden, funktioniert das Steueridentifikationsnummernelement weiterhin, jedoch ohne Speicher- und Wiederanzeigefunktion. Sie können getValue verwenden, um die Steueridentifikationsnummern aus dem Element auszulesen und manuell zu verarbeiten.

Erstellen oder rufen Sie zunächst eine Kundin/einen Kunden ab:

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/customers \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ --data-urlencode email="customer@example.com" \ -d name="Jenny Rosen"

Erstellen Sie eine CustomerSession mit aktiviertem Steueridentifikationsnummernelement:

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/customer_sessions \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d customer=
"{{CUSTOMER_ID}}"
\ -d "components[tax_id_element][enabled]"=true \ -d "components[tax_id_element][features][tax_id_redisplay]"=enabled \ -d "components[tax_id_element][features][tax_id_save]"=enabled

Die CustomerSession gibt ein client_secret zurück, das Sie an den Client übergeben.

PaymentIntent oder SetupIntent erstellen

Erstellen Sie einen PaymentIntent oder SetupIntent auf Ihrem Server. Fügen Sie bei Verwendung der CustomerSession den Kundenparameter ein, um die Speicherung der Steueridentifikationsnummer zu aktivieren und die Funktionalität erneut anzuzeigen:

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/payment_intents \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d amount=1099 \ -d currency=usd \ -d customer=
"{{CUSTOMER_ID}}"

Hinweis

Sie müssen beim Erstellen des PaymentIntent oder SetupIntent keine steueridentifikationsnummernspezifischen Parameter angeben. Das Steueridentifikationsnummernelement übernimmt automatisch die Erfassung der Steueridentifikationsnummer und speichert sie für die Kunde/den Kunden, wenn eine CustomerSession mit den entsprechenden Berechtigungen vorhanden ist.

Initialisieren Sie Elements

Erstellen Sie eine Elements-Instanz mit dem clientSecret aus Ihrem PaymentIntent oder SetupIntent.

Um Steueridentifikationsnummern für eine Kundin/einen Kunden zu speichern und für wiederkehrende Kundinnen/Kunden erneut anzuzeigen, fügen Sie das customerSessionClientSecret ein:

const stripe = Stripe(
'pk_test_TYooMQauvdEDq54NiTphI7jx'
, { betas: ['elements_tax_id_1'], }); // Fetch the clientSecret from your server const {clientSecret} = await fetch('/create-payment-intent', { method: 'POST', headers: { 'Content-Type': 'application/json' }, }).then((res) => res.json()); // Fetch the customerSessionClientSecret from your server const {customerSessionClientSecret} = await fetch('/create-customer-session', { method: 'POST', headers: { 'Content-Type': 'application/json' }, }).then((res) => res.json()); const elements = stripe.elements({ clientSecret, customerSessionClientSecret, appearance: { /* ... */ } });

Steueridentifikationsnummernelement erstellen und verbinden

Erstellen Sie eine Instanz des Steueridentifikationsnummernelements und binden Sie sie in Ihre Seite ein:

<form id="payment-form"> <div id="tax-id-element"> <!--Stripe.js injects the Tax ID Element--> </div> <button type="submit">Pay</button> </form>
const taxIdElement = elements.create('taxId', { visibility: 'auto', // 'auto' | 'always' | 'never' }); taxIdElement.mount('#tax-id-element');

Sie können das Steueridentifikationsnummer-Element mit Optionen wie visibility, fields und validation anpassen. Weitere Informationen finden Sie unter Erstellen eines Steueridentifikationsnummer-Elements.

Verwendung mit dem Adresselement (optional)

Wenn Sie das Steueridentifikationsnummernelement zusammen mit dem Adresselement verwenden, ermittelt Stripe automatisch die Art der Steueridentifikationsnummer und das Element anhand der Adresse der Kundin/des Kunden.

Zahlung abschließen

Wenn die Kundin/der Kunde das Zahlungsformular absendet, rufen Sie confirmPayment oder confirmSetup auf. Stripe übernimmt automatisch die Steueridentifikationsnummer und speichert sie bei erfolgreicher Zahlung für die Kundin/den Kunden:

const form = document.getElementById('payment-form'); form.addEventListener('submit', async (event) => { event.preventDefault(); const {error} = await stripe.confirmPayment({ elements, confirmParams: { return_url: 'https://example.com/order/complete', }, }); if (error) { // Handle error console.error(error.message); } // Customer gets redirected to return_url if successful });

Sie können getValue auch auf Client-Seite verwenden, um die Steueridentifikationsnummern vor der Übermittlung der Zahlung zu lesen.

Ihre Integration testen

In Testumgebungen können Sie jede alphanumerische Zeichenfolge eingeben, die das korrekte Format eines unterstützten Steuer-ID-Typs (z. B. DE123456789 für eu_vat) aufweist. Eine vollständige Liste beispielhafter Steuer-IDs finden Sie im Leitfaden zur Kundensteuer-ID. Sie können auch unsere Test-Steuer-IDs verwenden, um verschiedene Verifizierungsabläufe zu testen.

Validierung von Steuer-IDs

Während der Zahlung oder Einrichtungsbestätigung verifiziert Stripe, dass die angegebenen Steueridentifikationsnummern korrekt formatiert sind. Deren Gültigkeit wird jedoch nicht geprüft. Sie sind für die Gültigkeit der Kundendaten verantwortlich. Zur Unterstützung führt Stripe automatisch eine asynchrone Validierung mit staatlichen Datenbanken für europäische Umsatzsteuer (EU-USt.) und USt.-Steuer im Vereinigten Königreich (GB USt.) durch. Erfahren Sie mehr über die von uns durchgeführte Validierung und wie Sie den Status dieser Prüfungen aufrufen können.

Unterstützte Steuer-ID-Typen

Das Steueridentifikationsnummernelement unterstützt die Erfassung von Steueridentifikationsnummern in den folgenden Ländern und Regionen:

LandEnumBeschreibungBeispiel
Auswirkungen auf die Steuerberechnung
Ägypteneg_tinEgyptian Tax Identification Number123456789Ja
Albanienal_tinAlbania Tax Identification NumberJ12345678NJa
Angolaao_tinAngola Tax Identification Number5123456789Nein
Armenienam_tinArmenia Tax Identification Number02538904Ja
Arubaaw_tinAruba Tax Identification Number12345678Ja
Aserbaidschanaz_tinAzerbaijan Tax Identification Number0123456789Ja
Äthiopienet_tinEthiopia Tax Identification Number1234567890Ja
Australienau_abnAustralian Business Number (AU ABN)12345678912Ja
Bahamasbs_tinBahamas Tax Identification Number123.456.789Nein
Bahrainbh_vatBahraini VAT Number123456789012345Ja
Bangladeschbd_binBangladesh Business Identification Number123456789-0123Ja
Barbadosbb_tinBarbados Tax Identification Number1123456789012Nein
Belarusby_tinBelarus TIN Number123456789Ja
Belgieneu_vatEuropean VAT numberBE0123456789Ja
Beninbj_ifuBenin Tax Identification Number (Identifiant Fiscal Unique)1234567890123Ja
Bosnien und Herzegowinaba_tinBosnia and Herzegovina Tax Identification Number123456789012Ja
Bulgarieneu_vatEuropean VAT numberBG0123456789Ja
Burkina Fasobf_ifuBurkina Faso Tax Identification Number (Numéro d'Identifiant Fiscal Unique)12345678AJa
Cabo Verdecv_nifCape Verde Tax Identification Number (Número de Identificação Fiscal)213456789Nein
Chilecl_tinChilean TIN12.345.678-KJa
Costa Ricacr_tinCosta Rican tax ID1-234-567890Nein
Dänemarkeu_vatEuropean VAT numberDK12345678Ja
Deutschlandeu_vatEuropean VAT numberDE123456789Ja
Ecuadorec_rucEcuadorian RUC number1234567890001Nein
Estlandeu_vatEuropean VAT numberEE123456789Ja
Finnlandeu_vatEuropean VAT numberFI12345678Ja
Frankreicheu_vatEuropean VAT numberFRAB123456789Ja
Georgienge_vatGeorgian VAT123456789Ja
Griechenlandeu_vatEuropean VAT numberEL123456789Ja
Guineagn_nifGuinea Tax Identification Number (Número de Identificação Fiscal)123456789Ja
Indienin_gstIndian GST number12ABCDE3456FGZHJa
Irlandeu_vatEuropean VAT numberIE1234567ABJa
Islandis_vatIcelandic VAT123456Ja
Italieneu_vatEuropean VAT numberIT12345678912Ja
Kambodschakh_tinCambodia Tax Identification Number1001-123456789Ja
Kameruncm_niuCameroon Tax Identification Number (Numéro d'Identifiant fiscal Unique)M123456789000LNein
Kanadaca_bnCanadian BN123456789Nein
Kanadaca_gst_hstCanadian GST/HST number123456789RT0002Ja
Kanadaca_pst_bcCanadian PST number (British Columbia)PST-1234-5678Nein
Kanadaca_pst_mbCanadian PST number (Manitoba)123456-7Nein
Kanadaca_pst_skCanadian PST number (Saskatchewan)1234567Nein
Kanadaca_qstCanadian QST number (Québec)1234567890TQ1234Ja
Kasachstankz_binKazakhstani Business Identification Number123456789012Ja
Keniake_pinKenya Revenue Authority Personal Identification NumberP000111111ANein
Kirgisistankg_tinKyrgyzstan Tax Identification Number12345678901234Nein
Kongo-Kinshasacd_nifCongo (DR) Tax Identification Number (Número de Identificação Fiscal)A0123456MNein
Kroatieneu_vatEuropean VAT numberHR12345678912Ja
Laosla_tinLaos Tax Identification Number123456789-000Nein
Lettlandeu_vatEuropean VAT numberLV12345678912Ja
Liechtensteinli_vatLiechtensteinian VAT number12345Ja
Litaueneu_vatEuropean VAT numberLT123456789123Ja
Luxemburgeu_vatEuropean VAT numberLU12345678Ja
Maltaeu_vatEuropean VAT numberMT12345678Ja
Marokkoma_vatMorocco VAT Number12345678Ja
Mauretanienmr_nifMauritania Tax Identification Number (Número de Identificação Fiscal)12345678Nein
Mexikomx_rfcMexican RFC numberABC010203AB9Nein
Montenegrome_pibMontenegro PIB Number12345678Nein
Nepalnp_panNepal PAN Number123456789Ja
Neuseelandnz_gstNew Zealand GST number123456789Ja
Niederlandeeu_vatEuropean VAT numberNL123456789B12Ja
Nigeriang_tinNigerian Tax Identification Number12345678-0001Nein
Nordmazedonienmk_vatNorth Macedonia VAT NumberMK1234567890123Ja
Norwegenno_vatNorwegian VAT number123456789MVAJa
Omanom_vatOmani VAT NumberOM1234567890Ja
Österreicheu_vatEuropean VAT numberATU12345678Ja
Perupe_rucPeruvian RUC number12345678901Ja
Philippinenph_tinPhilippines Tax Identification Number123456789012Ja
Poleneu_vatEuropean VAT numberPL1234567890Ja
Polenpl_nipPolish NIP number1234567890Nein
Portugaleu_vatEuropean VAT numberPT123456789Ja
Republik Moldaumd_vatMoldova VAT Number1234567Ja
Rumänieneu_vatEuropean VAT numberRO1234567891Ja
Russlandru_innRussian INN1234567891Ja
Russlandru_kppRussian KPP123456789Ja
Sambiazm_tinZambia Tax Identification Number1004751879Nein
Saudi-Arabiensa_vatSaudi Arabia VAT123456789012345Ja
Schwedeneu_vatEuropean VAT numberSE123456789123Ja
Schweizch_vatSwitzerland VAT numberCHE-123.456.789 MWSTJa
Senegalsn_nineaSenegal NINEA Number12345672A2Nein
Serbienrs_pibSerbian PIB number123456789Nein
Simbabwezw_tinZimbabwe Tax Identification Number1234567890Nein
Singapursg_gstSingaporean GSTM12345678XJa
Slowakeieu_vatEuropean VAT numberSK1234567891Ja
Slowenieneu_vatEuropean VAT numberSI12345678Ja
Spanienes_cifSpanish NIF number (previously Spanish CIF number)A12345678Nein
Spanieneu_vatEuropean VAT numberESA1234567ZJa
Südafrikaza_vatSouth African VAT number4123456789Ja
Südkoreakr_brnKorean BRN123-45-67890Ja
Surinamesr_finSuriname FIN Number1234567890Ja
Tadschikistantj_tinTajikistan Tax Identification Number123456789Ja
Taiwantw_vatTaiwanese VAT12345678Ja
Tansaniatz_vatTanzania VAT Number12345678AJa
Thailandth_vatThai VAT1234567891234Ja
Tschechische Republikeu_vatEuropean VAT numberCZ1234567890Ja
Türkeitr_tinTurkish Tax Identification Number0123456789Ja
Ugandaug_tinUganda Tax Identification Number1014751879Ja
Ukraineua_vatUkrainian VAT123456789Ja
Ungarneu_vatEuropean VAT numberHU12345678Ja
Uruguayuy_rucUruguayan RUC number123456789012Ja
Usbekistanuz_tinUzbekistan TIN Number123456789Nein
Usbekistanuz_vatUzbekistan VAT Number123456789012Ja
Vereinigte Arabische Emirateae_trnUnited Arab Emirates TRN123456789012345Ja
Vereinigtes Königreicheu_vatNorthern Ireland VAT numberXI123456789Ja
Vereinigtes Königreichgb_vatUnited Kingdom VAT numberGB123456789Ja
Zyperneu_vatEuropean VAT numberCY12345678ZJa

Steueridentifikationsnummer in Berechnungen verwenden (optional)

In einigen Fällen, wie etwa bei grenzüberschreitenden Dienstleistungen, muss Ihre Kundin/Ihr Kunde die Steuer möglicherweise auf Reverse Charge-Basis abrechnen. Anstatt die Steuer einzuziehen, müssen Sie eine Rechnung mit dem Text „Umkehrung der Steuerschuld“ ausstellen.

Wenn Sie die Steueridentifikationsnummern Ihrer Kundin/Ihres Kunden an Stripe Tax übermitteln, ermitteln wir automatisch, wann die Umkehrung der Steuerschuld angewendet werden muss:

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/tax/calculations \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d currency=usd \ -d "line_items[0][amount]"=1000 \ -d "line_items[0][reference]"=L1 \ -d "customer_details[address][country]"=IE \ -d "customer_details[address_source]"=billing \ -d "customer_details[tax_ids][0][type]"=eu_vat \ -d "customer_details[tax_ids][0][value]"=DE123456789

Wenn Sie eine Steueridentifikationsnummer mit einem ungültigen Format angeben, gibt die Berechnung den Fehlercode tax_id_invalid zurück.

Siehe auch

  • Stripe Tax mit Connect verwenden
War diese Seite hilfreich?
JaNein
  • Benötigen Sie Hilfe? Kontaktieren Sie den Kundensupport.
  • Schauen Sie sich unser Änderungsprotokoll an.
  • Fragen? Sales-Team kontaktieren.
  • LLM? Lesen Sie llms.txt.
  • Unterstützt von Markdoc