# Steuern für Zahlungen außerhalb von Stripe einziehen Verwenden Sie die Stripe Tax API, um Steuern auf Zahlungen zu berechnen und zu erklären, die außerhalb von Stripe abgewickelt werden. Verwenden Sie die Stripe Tax API, um Steuern auf Zahlungen zu berechnen und zu erklären, die Sie außerhalb von Stripe abwickeln. Dies funktioniert mit jedem Drittanbieter-Zahlungsabwickler oder Ihren internen Zahlungs- und Abrechnungssystemen. > #### Sie verwenden Stripe für Zahlungen? > > Wenn Sie Zahlungen mit Stripe abwickeln, ziehen Sie stattdessen diese Integrationen in Betracht: > > - [Stripe Tax mit PaymentIntents](https://docs.stripe.com/tax/payment-intent.md) für die automatische Verwaltung von Steuertransaktionen - [Stripe Tax mit Checkout](https://docs.stripe.com/tax/checkout.md), [Invoicing](https://docs.stripe.com/tax/invoicing.md) oder [Subscriptions](https://docs.stripe.com/tax/subscriptions.md) für integrierten Steuer-Support ## 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](https://docs.stripe.com/tax/registering.md#add-a-registration). ## Optional: Kundenadresse erfassen [Serverseitig] 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](https://docs.stripe.com/tax/standalone-tax-api.md#ip-address) anzeigen. Die für die Steuerberechnung erforderlichen Adressdaten [variieren je nach Land der Kundin oder des Kunden](https://docs.stripe.com/tax/customer-locations.md#supported-formats): - **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 Ihres/Ihrer Kund/in. - **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](https://docs.stripe.com/api/tax/calculations/create.md). Zum Beispiel können Sie Folgendes tun: - Zeigen Sie eine Steuerschätzung [basierend auf der IP-Adresse Ihrer Kundin oder Ihres Kunden](https://docs.stripe.com/tax/standalone-tax-api.md#ip-address) 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](https://stripe.com/tax/pricing) 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](https://docs.stripe.com/tax/registering.md#add-a-registration). #### Beispiel - Vereinigte Staaten: Posten ohne Steuer 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](https://docs.stripe.com/tax/set-up.md#preset-tax-code) Ihres Kontos. ```curl curl https://api.stripe.com/v1/tax/calculations \ -u "<>:" \ -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" ``` #### Beispiel - Vereinigte Staaten: mehrere Posten mit Versand Dieses Beispiel enthält mehrere Posten ohne Steuern sowie Versandkosten in Höhe von 5 USD. ```curl curl https://api.stripe.com/v1/tax/calculations \ -u "<>:" \ -d currency=usd \ -d "line_items[0][amount]=1000" \ -d "line_items[0][reference]=L1" \ -d "line_items[0][tax_code]=txcd_99999999" \ -d "line_items[1][amount]=5000" \ -d "line_items[1][reference]=L2" \ -d "line_items[1][tax_code]=txcd_99999999" \ -d "line_items[2][amount]=9999" \ -d "line_items[2][reference]=L3" \ -d "line_items[2][tax_code]=txcd_99999999" \ -d "shipping_cost[amount]=500" \ -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" ``` #### Beispiel - Vereinigte Staaten: Posten mit Menge In New York unterliegen Kleidungsstücke nicht der Verkaufssteuer, wenn jeder Artikel weniger als 110 USD kostet. In diesem Beispiel gibt es ein Kleidungsstück mit einem Gesamtpreis von 150 USD und einer Menge von 3. Das bedeutet, dass jedes Kleidungsstück 50 USD kostet und von der Umsatzsteuer befreit ist. ```curl curl https://api.stripe.com/v1/tax/calculations \ -u "<>:" \ -d currency=usd \ -d "line_items[0][amount]=15000" \ -d "line_items[0][quantity]=3" \ -d "line_items[0][reference]=Clothing" \ -d "line_items[0][tax_code]=txcd_30011000" \ -d "shipping_cost[amount]=500" \ -d "customer_details[address][state]=NY" \ -d "customer_details[address][postal_code]=10001" \ -d "customer_details[address][country]=US" \ -d "customer_details[address_source]=shipping" ``` #### Beispiel - Europa: Posten inklusive Steuer In diesem Beispiel wird die Steuer für eine Rechnungsadresse in Irland berechnet, wo die Steuer normalerweise in den Preisen für Nicht-Geschäftskundinnen und -kunden enthalten ist. Der Posten hat einen Preis von 29,99 EUR und verwendet das Steuerkennzeichen `txcd_10302000` (ebook). ```curl curl https://api.stripe.com/v1/tax/calculations \ -u "<>:" \ -d currency=eur \ -d "line_items[0][amount]=2999" \ -d "line_items[0][reference]=L1" \ -d "line_items[0][tax_behavior]=inclusive" \ -d "line_items[0][tax_code]=txcd_10302000" \ -d "customer_details[address][country]=IE" \ -d "customer_details[address_source]=billing" ``` #### Beispiel - Europa: mehrere Posten mit Versand In diesem Beispiel wird die Steuer für eine Versandadresse in Irland berechnet, wo die Steuer in der Regel in den Preisen für Nicht-Geschäftskundinnen und -kunden enthalten ist. Der zu versendende Artikel hat einen Preis von 59,99 EUR und die Versandkosten betragen 5 EUR. Da beide Beträge inklusive Steuern sind, zahlt die Kundin oder der Kunde immer 64,99 EUR. ```curl curl https://api.stripe.com/v1/tax/calculations \ -u "<>:" \ -d currency=eur \ -d "line_items[0][amount]=5999" \ -d "line_items[0][reference]=L1" \ -d "line_items[0][tax_behavior]=inclusive" \ -d "line_items[0][tax_code]=txcd_99999999" \ -d "shipping_cost[amount]=500" \ -d "shipping_cost[tax_behavior]=inclusive" \ -d "customer_details[address][line1]=123 Some House" \ -d "customer_details[address][city]=Dublin" \ -d "customer_details[address][country]=IE" \ -d "customer_details[address_source]=shipping" ``` #### Beispiel - Absenderadresse Mit dieser Beta-Funktion werden Steuern auf Grundlage der Absenderadresse erhoben, wenn Sie in bestimmten Bundesstaaten (z. B. Illinois) eine Absenderadresse angeben und die Sendung physische Waren enthält. Enthält die Sendung sowohl physische Waren als auch Dienstleistungen, werden die Steuern für beides auf Basis der Absenderadresse berechnet. In diesem Beispiel wird die Steuer auf der Grundlage des Versandorts in Naperville, Illinois, berechnet, anstatt des Unternehmensstandorts (außerhalb von Illinois) und der Lieferadresse in Springfield, Illinois. ```curl curl https://api.stripe.com/v1/tax/calculations \ -u "<>:" \ -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 "shipping_cost[amount]=500" \ -d "shipping_cost[tax_behavior]=exclusive" \ -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 [Berechnungsantwort](https://docs.stripe.com/api/tax/calculations/object.md) enthält Beträge, die Sie Ihren Kundinnen und Kunden anzeigen und zur Zahlung verwenden können: | Attribut | Beschreibung | | -------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [amount_total](https://docs.stripe.com/api/tax/calculations/object.md#tax_calculation_object-amount_total) | Der Gesamtbetrag nach der Steuerberechnung. Verwenden Sie dies als den Betrag, den Sie Ihrer Kunden/Ihrem Kunden berechnen. | | [tax_amount_exclusive](https://docs.stripe.com/api/tax/calculations/object.md#tax_calculation_object-tax_amount_exclusive) | Der 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_inclusive](https://docs.stripe.com/api/tax/calculations/object.md#tax_calculation_object-tax_amount_inclusive) | Der 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_breakdown](https://docs.stripe.com/api/tax/calculations/object.md#tax_calculation_object-tax_breakdown) | Eine 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: ```json { "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. ## 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](https://docs.stripe.com/tax/reports.md), um Ihre Steuererklärung zu unterstützen. Sie können eine [Transaktion](https://docs.stripe.com/api/tax/transactions/create_from_calculation.md) aus einer Berechnung bis zum Zeitstempel [expires_at](https://docs.stripe.com/api/tax/calculations/object.md#tax_calculation_object-expires_at), 90 Tage nach ihrer Einrichtung, erstellen. Verwendungsversuche nach diesem Zeitpunkt führen zu einem Fehler. > 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 `order_123456789`, den Postenreferenzen `L1` und `L2` sowie Versandkosten sieht in den aufgeschlüsselten Steuerexporten beispielsweise so aus: | ID | line_item_id | Typ | Währung | transaction_date | | --------------- | ------------ | ------ | ------- | ------------------- | | order_123456789 | L1 | extern | usd | 2023-02-23 17:01:16 | | order_123456789 | L2 | extern | usd | 2023-02-23 17:01:16 | | order_123456789 | Versand | extern | usd | 2023-02-23 17:01:16 | Wenn Ihre Kundin/Ihr Kunde zahlt, verwenden Sie die Berechnungs-ID, um die eingezogene Steuer zu erfassen. Sie können die Steuertransaktion erstellen, nachdem die Zahlung in Ihrem System erfolgreich abgewickelt wurde – zum Beispiel in Ihrem Endpoint zur Bestellungsabgabe oder als Reaktion auf einen Zahlungserfolg-Rückruf Ihres Abwicklers. Im folgenden Beispiel wird eine Transaktion erstellt und eine eindeutige Bestell- oder Zahlungsreferenz verwendet: ```curl curl https://api.stripe.com/v1/tax/transactions/create_from_calculation \ -u "<>:" \ -d calculation={{TAX_CALCULATION}} \ -d reference=order_12345 \ -d "expand[]=line_items" ``` Speichern Sie die [Steuertransaktions-ID](https://docs.stripe.com/api/tax/transactions/object.md#tax_transaction_object-id), um spätere Rückerstattungen zu erfassen. Sie können die Transaktions-ID in Ihrer Datenbank zusammen mit der zugehörigen Bestellung speichern. ## 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, müssen Sie eine Storno-Steuertransaktion mit einer eindeutigen `reference` erstellen. Gängige Strategien sind: - Fügen Sie der ursprünglichen Referenz ein Suffix hinzu. Wenn die ursprüngliche Transaktion beispielsweise die Referenz `order_123456789` hat, erstellen Sie die Stornierung mit der Referenz `order_123456789-refund`. - Verwenden Sie eine Rückerstattungs-ID aus Ihrem System. Zum Beispiel `myRefund_456`. Wählen Sie die Vorgehensweise, die zum Abgleichen Ihrer Kundenbestellungen mit Ihren [Steuerexporten](https://docs.stripe.com/tax/reports.md) 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: ```curl curl https://api.stripe.com/v1/tax/transactions/create_reversal \ -u "<>:" \ -d mode=full \ -d original_transaction=tax_1MEFAAI6rIcR421eB1YOzACZ \ -d reference=order_123456789-cancel \ -d "expand[]=line_items" ``` Dadurch wird die erstellte vollständige Stornotransaktion zurückgegeben: ```json { "id": "tax_1MEFtXI6rIcR421e0KTGXvCK", "object": "tax.transaction", "created": 1670866467, "currency": "eur", "customer": null, "customer_details": { "address": { "city": null, "country": "IE", "line1": null, "line2": null, "postal_code": null, "state": null }, "address_source": "billing", "ip_address": null, "tax_ids": [], "taxability_override": "none" }, "line_items": { "object": "list", "data": [ { "id": "tax_li_MyCIgTuP9F9mEU", "object": "tax.transaction_line_item", "amount": -4999, "amount_tax": -1150, "livemode": false, "metadata": { }, "quantity": 1, "reference": "L1", "reversal": { "original_line_item": "tax_li_MyBXPByrSUwm6r" }, "tax_behavior": "exclusive", "tax_code": "txcd_10000000", "type": "reversal" }, { "id": "tax_li_MyCIUNXExXmJKU", "object": "tax.transaction_line_item", "amount": -1090, "amount_tax": -90, "livemode": false, "metadata": { }, "quantity": 1, "reference": "L2", "reversal": { "original_line_item": "tax_li_MyBX3Wu3qd2mXj" }, "tax_behavior": "exclusive", "tax_code": "txcd_10000000", "type": "reversal" } ], "has_more": false, "total_count": 2, "url": "/v1/tax/transactions/tax_1MEFtXI6rIcR421e0KTGXvCK/line_items" }, "livemode": false, "metadata": { }, "reference": "order_123456789-cancel", "reversal": { "original_transaction": "tax_1MEFAAI6rIcR421eB1YOzACZ" }, "shipping_cost": null, "tax_date": 1670863654, "type": "reversal" } ``` Das vollständige Stornieren einer Transaktion hat keinen Einfluss auf vorherige Teilstornierungen. Wenn Sie eine vollständige Stornierung erfassen, müssen Sie alle vorherigen Teilstornierungen für dieselbe Transaktion [vollständig stornieren](https://docs.stripe.com/tax/off-stripe.md#reversals-void-refund), um doppelte Rückerstattungen zu vermeiden. ### Teilweise Rückerstattung eines Verkaufs Nachdem Sie Ihrer Kundin oder Ihrem Kunden eine Rückerstattung ausgestellt haben, erstellen Sie eine Storno-Steuertransaktion mit `mode=partial`. Damit können Sie eine teilweise Rückerstattung erfassen, indem Sie die zurückerstatteten Postenbeträge angeben. Sie können bis zu 30 Teilstornierungen pro Verkauf erstellen. Wenn Sie mehr als den eingezogenen Steuerbetrag stornieren, wird ein Fehler zurückgegeben. Im folgenden Beispiel wird nur eine Rückerstattung des ersten Postens der ursprünglichen Transaktion aufgezeichnet: ```curl curl https://api.stripe.com/v1/tax/transactions/create_reversal \ -u "<>:" \ -d mode=partial \ -d original_transaction=tax_1MEFAAI6rIcR421eB1YOzACZ \ -d reference=order_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 order_123456789 (customer was unhappy)" \ -d "expand[0]=line_items" ``` Dadurch wird die erstellte Teilstornotransaktion zurückgegeben: ```json { "id": "tax_1MEFACI6rIcR421eHrjXCSmD", "object": "tax.transaction", "created": 1670863656, "currency": "eur", ... "line_items": { "object": "list", "data": [ { "id": "tax_li_MyBXC98AhtaR37", "object": "tax.transaction_line_item", "amount": -4999, "amount_tax": -1150, "livemode": false, "metadata": { }, "quantity": 1, "reference": "L1", "reversal": { "original_line_item": "tax_li_MyBXPByrSUwm6r" }, "tax_behavior": "exclusive", "tax_code": "txcd_10000000", "type": "reversal" } ], "has_more": false, "total_count": 1, "url": "/v1/tax/transactions/tax_1MEFACI6rIcR421eHrjXCSmD/line_items" }, "livemode": false, "metadata": { "refund": "{{REFUND_ID}}", "description": "Refunding order_123456789 (customer was unhappy)" }, "reference": "order_123456789-refund_1", "reversal": { "original_transaction": "tax_1MEFAAI6rIcR421eB1YOzACZ" }, "shipping_cost": null, "tax_date": 1670863654, "type": "reversal" } ``` 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](https://docs.stripe.com/tax/off-stripe.md#reversals-full). - 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 vollständig 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: ```curl curl https://api.stripe.com/v1/tax/transactions/create_reversal \ -u "<>:" \ -d mode=partial \ -d original_transaction=tax_1NVcKqBUZ691iUZ4xMZtcGYt \ -d reference=order_234567890-refund_1 \ -d flat_amount=-1650 \ -d "metadata[refund]={{REFUND_ID}}" \ --data-urlencode "metadata[refund_reason]=Refunded 16.50 USD of order_234567890 (customer was unhappy)" \ -d "expand[]=line_items" ``` Dadurch wird die erstellte Teilstornotransaktion zurückgegeben: ```json { "id": "tax_1NVcQYBUZ691iUZ4SBPukGa6", "object": "tax.transaction", "created": 1689780994, "currency": "usd", ... "line_items": { "object": "list", "data": [ { "id": "tax_li_OICqymcWjlbevq", "object": "tax.transaction_line_item", "amount": -500, "amount_tax": -50, "livemode": false, "metadata": {}, "product": null, "quantity": 1, "reference": "refund_li_1", "reversal": { "original_line_item": "tax_li_OICmRXkFuWr8Df" }, "tax_behavior": "exclusive", "tax_code": "txcd_10103000", "type": "reversal" }, { "id": "tax_li_OICq2H1qHjwyzX", "object": "tax.transaction_line_item", "amount": -1000, "amount_tax": -100, "livemode": false, "metadata": {}, "product": null, "quantity": 1, "reference": "refund_li_2", "reversal": { "original_line_item": "tax_li_OICmxhnSJxF7rY" }, "tax_behavior": "exclusive", "tax_code": "txcd_10103000", "type": "reversal" } ], "has_more": false, "total_count": 2, "url": "/v1/tax/transactions/tax_1NVcQYBUZ691iUZ4SBPukGa6/line_items" }, "livemode": false, "metadata": { "refund": "{{REFUND_ID}}", "description": "Refunding order_234567890 (customer was unhappy)" }, "reference": "order_234567890-refund_1", "reversal": { "original_transaction": "tax_1NVcKqBUZ691iUZ4xMZtcGYt" }, "shipping_cost": null, "tax_date": 1670863654, "type": "reversal" } ``` 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. 1. 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`. 1. 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: ```curl curl https://api.stripe.com/v1/tax/transactions/create_reversal \ -u "<>:" \ -d mode=partial \ -d original_transaction=tax_1NVcKqBUZ691iUZ4xMZtcGYt \ -d reference=order_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 order_234567890 (customer was unhappy)" \ -d "expand[0]=line_items" ``` Anschließend erfassen Sie einen pauschalen Stornobetrag über 16,50 USD: ```curl curl https://api.stripe.com/v1/tax/transactions/create_reversal \ -u "<>:" \ -d mode=partial \ -d original_transaction=tax_1NVcKqBUZ691iUZ4xMZtcGYt \ -d reference=order_234567890-refund_2 \ -d flat_amount=-1650 \ -d "metadata[refund]={{REFUND_ID}}" \ --data-urlencode "metadata[refund_reason]=Refunded 16.50 USD of order_234567890 (customer was still unhappy)" \ -d "expand[]=line_items" ``` Das gibt die teilweise Stornotransaktion zurück: ```json { "id": "tax_1NVxFIBUZ691iUZ4saOIloxB", "object": "tax.transaction", "created": 1689861020, "currency": "usd", ... "line_items": { "object": "list", "data": [ { "id": "tax_li_OIYM8xd8BzrATd", "object": "tax.transaction_line_item", "amount": 0, "amount_tax": 0, "livemode": false, "metadata": {}, "product": null, "quantity": 1, "reference": "refund_li_1", "reversal": { "original_line_item": "tax_li_OICmRXkFuWr8Df" }, "tax_behavior": "exclusive", "tax_code": "txcd_10103000", "type": "reversal" }, { "id": "tax_li_OIYMNBH6s8oQj9", "object": "tax.transaction_line_item", "amount": -1500, "amount_tax": -150, "livemode": false, "metadata": {}, "product": null, "quantity": 1, "reference": "refund_li_2", "reversal": { "original_line_item": "tax_li_OICmxhnSJxF7rY" }, "tax_behavior": "exclusive", "tax_code": "txcd_10103000", "type": "reversal" } ], "has_more": false, "total_count": 2, "url": "/v1/tax/transactions/tax_1NVxFIBUZ691iUZ4saOIloxB/line_items" }, "livemode": false, "metadata": {}, "reference": "order_234567890-refund_2", "reversal": { "original_transaction": "tax_1NVcKqBUZ691iUZ4xMZtcGYt" }, "shipping_cost": null, "tax_date": 1670863654, "type": "reversal" } ``` 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](https://docs.stripe.com/api/tax/transactions/create_reversal.md#tax_transaction_create_reversal-mode) erstellen. Dies kann in folgenden Fällen erforderlich sein: - Die Zahlungsrückerstattung schlägt fehl und Sie haben Ihrer Endkundin/Ihrem Endkunden die Ware oder Dienstleistung 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: ```curl curl https://api.stripe.com/v1/tax/transactions/create_reversal \ -u "<>:" \ -d mode=full \ -d original_transaction=tax_1MEFACI6rIcR421eHrjXCSmD \ -d reference=order_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: ```json { "id": "tax_1MEFADI6rIcR421e94fNTOCK", "object": "tax.transaction", "created": 1670863657, "currency": "eur", ... "line_items": { "object": "list", "data": [ { "id": "tax_li_MyBXMOlwenCyFB", "object": "tax.transaction_line_item", "amount": 4999, "amount_tax": 1150, "livemode": false, "metadata": { }, "quantity": 1, "reference": "L1", "reversal": { "original_line_item": "tax_li_MyBXC98AhtaR37" }, "tax_behavior": "exclusive", "tax_code": "txcd_10000000", "type": "reversal" } ], "has_more": false, "total_count": 1, "url": "/v1/tax/transactions/tax_1MEFADI6rIcR421e94fNTOCK/line_items" }, "livemode": false, "metadata": { "refund_reason": "User called to cancel because they picked the wrong item" }, "reference": "order_123456789-refund_1-cancel", "reversal": { "original_transaction": "tax_1MEFACI6rIcR421eHrjXCSmD" }, "shipping_cost": null, "tax_date": 1670863654, "type": "reversal" } ``` ## Testen Verwenden Sie *Sandboxes* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes), deren Antwortstruktur mit dem Live-Modus identisch ist, um sicherzustellen, dass Ihre Integration korrekt funktioniert, bevor Sie live gehen. > 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](https://support.stripe.com/contact). Hinweise zu automatisierten Tests und Strategien zur Umgehung von Begrenzungen in Testumgebungen finden Sie unter [Automatisierte Tests](https://docs.stripe.com/automated-testing.md). ## Steuertransaktionen anzeigen Sie können alle Steuertransaktionen für Ihr Konto auf der Seite [Steuertransaktionen](https://dashboard.stripe.com/test/tax/transactions) 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. > 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](https://docs.stripe.com/tax/off-stripe.md#tax-transaction). Für erweiterte Optionen wie Versandkosten, Preise inklusive Steuer, IP-Adressschätzung und mehr lesen Sie die [Dokumentation zur Standalone Tax API](https://docs.stripe.com/tax/standalone-tax-api.md). ## See also - [Eigenständige Steuer-API](https://docs.stripe.com/tax/standalone-tax-api.md) - [Stripe Tax API, vereinfacht](https://docs.stripe.com/tax/payment-intent/simplified.md) - [Stripe Tax API, nutzerdefiniert](https://docs.stripe.com/tax/payment-intent/custom.md) - [Testen Sie Ihre Steuer-Integration](https://docs.stripe.com/tax/testing.md) - [Berichterstattung und Einreichung](https://docs.stripe.com/tax/reports.md)