# Über Agenten verkaufen Verkaufen Sie Ihre Produkte über KI-Agenten mit der Agentic Commerce Suite. > Die Agentic Commerce Suite ist in den USA verfügbar. Verwenden Sie die Agentic Commerce Suite (ACS), um mit dem Verkauf über Agenten mit einer einzigen Integration zu beginnen. ACS hilft Ihnen dabei, Ihre Produkte auffindbar zu machen und agentische Zahlungen über mehrere Handels-Protokolle hinweg zu akzeptieren. So können Sie Produkt-, Preis- und Verfügbarkeitsinformationen mit Agenten teilen und gleichzeitig Änderungen an Ihren bestehenden Handelssystemen minimieren. Wenn Sie eine Plattform betreiben, lesen Sie den [Leitfaden für Plattformen](https://docs.stripe.com/connect/saas/tasks/enable-in-context-selling-on-ai-agents.md). ## Stripe-Konto einrichten Wenn Sie noch kein Stripe-Konto haben, [erstellen Sie eines](https://stripe.com/register). Verifizieren Sie zuerst Ihre E-Mail und aktivieren Sie anschließend Zahlungen, indem Sie geschäftliche und persönliche Daten angeben, ein Bankkonto für Auszahlungen verknüpfen und die Zwei-Faktor-Authentifizierung einrichten. Gehen Sie dann zu [Onboarding für agentenbasierten Handel](https://dashboard.stripe.com/agentic-commerce) im Stripe-Dashboard. Dort werden Sie durch das Erstellen eines [Stripe-Profils](https://docs.stripe.com/get-started/account/profile.md) und das Konfigurieren der Einstellungen für agentenbasierten Handel geführt. ## Steuern konfigurieren Verwenden Sie [Stripe Tax](https://docs.stripe.com/tax.md), um Steuern zu verwalten und Konfigurationen auf einzelne Produkte anzuwenden. Befolgen Sie den [Leitfaden zur Steuereinrichtung](https://docs.stripe.com/tax/set-up.md?dashboard-or-api=api), um Stripe Tax zu konfigurieren. Wenn Sie einen [Katalog-Feed erstellen](https://docs.stripe.com/agentic-commerce/for-sellers.md#upload-feed), legen Sie die Spalte `stripe_product_tax_code` fest, um ein Produkt mit einer Steuerbehandlung zu verknüpfen. Wenn Sie [Anrok](https://www.anrok.com) für die Steuerberechnung verwenden, legen Sie in Ihrem Katalog-Feed stattdessen die Spalte `third_party_tax_code` fest. Weitere Informationen zu diesen Feldern finden Sie in der [Referenz zu Preis- und Aktionsfeldern](https://docs.stripe.com/agentic-commerce/product-feed.md#price-and-promotions). ## Support-Informationen und Richtlinien konfigurieren Fügen Sie auf der Seite [Einstellungen für Agentic Commerce](https://dashboard.stripe.com/settings/agentic-commerce) Links zu Ihrer **Rückerstattungs- und Rückgaberichtlinie**, Ihren **Allgemeinen Geschäftsbedingungen** und Ihrer **Datenschutzerklärung** hinzu. Optional können Sie einen Link zu Ihrer **Geschäftsrichtlinie** angeben. ## Katalog-Feed erstellen Erstellen Sie einen [Katalogfeed](https://docs.stripe.com/agentic-commerce/product-feed.md), um Ihre Produkt- und Bestandsdaten mit Agenten zu teilen. Senden Sie Ihre Daten über das Dashboard oder die API. Um die Daten aktuell zu halten, empfehlen wir, Produktdaten einmal täglich hochzuladen und häufiger inkrementelle Aktualisierungen für Bestand und Preise zu senden. > Feed-Uploads werden als unabhängige, asynchrone Aufgaben verarbeitet. Wir garantieren nicht, dass Uploads in der Reihenfolge verarbeitet oder abgeschlossen werden, in der Sie sie übermitteln. Wenn Sie mehrere Dateien kurz hintereinander hochladen, kann ein späterer Upload vor einem früheren abgeschlossen sein. #### API Verwenden Sie Stripe-APIs, um Ihre Produktdaten-CSV hochzuladen. Wir empfehlen die Verwendung der Sandbox, um das Parsing, Feldzuordnungen und die Datenqualität zu validieren, bevor Sie Live-Updates aktivieren. > If you use a [restricted API key](https://docs.stripe.com/keys.md#create-restricted-api-key), it must have **Product Catalog Import** write permission. Without this permission, API requests return a `403` error. ### Import erstellen Erstellen Sie mithilfe der [Product Catalog Import API](https://docs.stripe.com/api/v2/commerce/product-catalog-imports.md) ein `ProductCatalogImport`-Objekt. Bei einer erfolgreichen Anfrage wird ein [ProductCatalogImport-Objekt](https://docs.stripe.com/api/v2/commerce/product-catalog-imports/object.md) im Status `awaiting_upload` zurückgegeben. Das Feld `status_details.awaiting_upload.upload_url.url` in der Antwort enthält die vorab signierte URL für Ihren Datei-Upload. ```curl curl -X POST https://api.stripe.com/v2/commerce/product_catalog/imports \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-04-22.preview" \ --json '{ "feed_type": "product", "mode": "upsert", "metadata": { "file_name": "march_11_2026_product_upload.csv" } }' ``` ```json { "id": "pcimprt_xxx", "object": "v2.commerce.product_catalog_import", "created": "2026-03-26T00:35:01.000Z", "feed_type": "product", "status": "awaiting_upload", "status_details": { "awaiting_upload": { "upload_url": { "expires_at": "2026-03-26T00:40:02.000Z", "url": "https://stripeusercontent.com/files/us-west-2/upload/wksp_xxx" } } }, "livemode": true } ``` ### CSV hochladen Laden Sie Ihre CSV-Datei über die vorgefertigte URL hoch. Die Datei muss im CSV- oder TSV-Format vorliegen, wobei jede Zeile ein Produkt oder eine Variante darstellt. Die maximale Dateigröße beträgt 4 GB. ```curl curl -X PUT \ -H "Content-Type: text/csv" \ --data-binary @"/path/to/your/file.csv" \ "{{PRESIGNED_URL}}" ``` Sobald Stripe die Datei erhalten hat, wechselt der Importstatus von `awaiting_upload` zu `processing`. Stripe überprüft die Datei und nimmt die Einträge auf. ### Status des Feeds überwachen und Fehler beheben Stripe verarbeitet Ihre Produktdaten, validiert und bereinigt sie und indexiert sie dann in einem Format, das Sie an KI-Agenten senden können. Sie können den Fortschritt der Indexierung auf zwei Arten überwachen: #### API Verwenden Sie eine `GET`-Anfrage, um das Importobjekt abzufragen und das Feld `status` zu überprüfen. Fahren Sie mit der Abfrage fort, bis das Objekt einen Endzustand erreicht: `succeeded`, `succeeded_with_errors` oder `failed`. ```curl curl https://api.stripe.com/v2/commerce/product_catalog/imports/{{PRODUCTCATALOGIMPORT_ID}} \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-04-22.preview" ``` Wenn der Import fehlerfrei abgeschlossen wird, wird der Status `succeeded` erreicht. Wenn die Datei strukturell gültig ist, aber Fehler auf Zeilenebene enthält, wird der Status `succeeded_with_errors` erreicht. Wenn der Import nicht abgeschlossen werden kann, beispielsweise weil die Datei nie hochgeladen wurde, nicht lesbar ist oder ein interner Fehler auftritt, wird der Status `failed` erreicht. Wenn Ihr Importstatus `succeeded_with_errors` lautet, können Sie die Fehlerdatei herunterladen: 1. Suchen Sie in der Antwort das Feld `status_details.succeeded_with_errors.error_file.url`. 1. Laden Sie die CSV-Datei direkt von dieser URL herunter, bevor sie abläuft. 1. Die CSV-Datei enthält nur die Zeilen, bei denen ein Fehler aufgetreten ist, wobei die Spalte `stripe_error_message` am Anfang jeden Fehler beschreibt. > Die URLs der Fehlerdateien verfallen nach 5 Minuten. Um eine neue URL zu erhalten, [rufen Sie den Abruf-Endpoint neu auf](https://docs.stripe.com/api/v2/commerce/product-catalog-imports/retrieve.md). #### Webhooks Stripe sendet Webhook-Ereignisse an das Terminal, sobald die Indizierung der Produktdaten abgeschlossen ist. Richten Sie einen Endpoint ein, der auf die Ereignisse `v2.commerce.product_catalog.imports.succeeded`, `v2.commerce.product_catalog.imports.succeeded_with_errors` und `v2.commerce.product_catalog.imports.failed` reagiert. Jedes Ereignis enthält das Objekt `v2.commerce.product_catalog_import`. Eine Schritt-für-Schritt-Anleitung finden Sie im [Webhooks-Leitfaden](https://docs.stripe.com/webhooks.md). Hier ist ein Beispiel für die Nutzlast des Webhooks `v2.commerce.product_catalog.imports.succeeded`: ```javascript { "id": "evt_65THl3VA5Zt5cTqbP16T9R4DRrSQbEWmWeLUx7WmOR8B", "object": "v2.core.event", "type": "v2.commerce.product_catalog.imports.succeeded", "created": "2026-03-26T00:40:00.000Z", "livemode": true, "reason": null, "related_object": { "id": "pcimprt_61THl3VA5Zt5cTqbP16T9R4DRrSQbEWmWeLUx7WmOR8K", "type": "v2.commerce.product_catalog.imports", "url": "/v2/commerce/product_catalog/imports/pcimprt_61THl3VA5Zt5cTqbP16T9R4DRrSQbEWmWeLUx7WmOR8K" }, "changes": { "before": {"status": "PROCESSING"}, "after": {"status": "SUCCEEDED"} }, "data": {} } ``` Der Webhook enthält nicht das vollständige Importobjekt. Verwenden Sie die Eigenschaft `related_object.url`, um es abzurufen: ```curl curl https://api.stripe.com/v2/commerce/product_catalog/imports/{{PRODUCTCATALOGIMPORT_ID}} \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-04-22.preview" ``` Wenn Ihr Importstatus `succeeded_with_errors` lautet, können Sie die Fehlerdatei herunterladen: 1. Suchen Sie in der Antwort das Feld `status_details.succeeded_with_errors.error_file.url`. 1. Laden Sie die CSV-Datei direkt von dieser URL herunter, bevor sie abläuft. 1. Die CSV-Datei enthält nur die Zeilen, bei denen ein Fehler aufgetreten ist, wobei die Spalte `stripe_error_message` am Anfang jeden Fehler beschreibt. > Die URLs der Fehlerdateien verfallen nach 5 Minuten. Um eine neue URL zu erhalten, rufen Sie den Abruf-Endpoint erneut auf. #### Dashboard Rufen Sie im Dashboard die Seite [Feedverlauf](https://dashboard.stripe.com/agentic-commerce/feed-history) auf und laden Sie Ihre Produktdaten-CSV hoch. ## Benutzerdefinierte Bestell-URL einrichten Standardmäßig gibt Stripe einen [Zahlungsbeleg](https://docs.stripe.com/receipts.md) an eine Kundin/einen Kunden zurück, nachdem Sie die Bestellung bestätigt haben. So geben Sie Ihre selbst gehostete Bestell-URL an: 1. Wählen Sie auf der Seite [Einstellungen für den Agentic Commerce](https://dashboard.stripe.com/settings/agentic-commerce) im Dashboard im Dropdown-Menü **Art des Zahlungsbelegs** die Option **Benutzerdefinierte Seite** aus. 1. Geben Sie Ihre Bestell-URL im Feld **Benutzerdefinierte Seiten-URL** an. Ihre URL muss über die Vorlagen-Variable `{CHECKOUT_SESSION_ID}` verfügen. Nachdem Ihre Bestellung bestätigt wurde, ersetzt Stripe sie automatisch durch eine Checkout-Session-ID. Mit der ID können Sie die Checkout-Session aufrufen und die Informationen zur Bestellung anzeigen. ## Auf Einkäufe reagieren und Bestellungen ausführen Überwachen Sie Bestellungen, die über KI-Chat-Agenten aufgegeben wurden, auf drei Arten: #### Dashboard Zeigen Sie Bestellungen auf der [Transaktionsseite](https://dashboard.stripe.com/payments) im Dashboard an – sie sind mit dem ursprünglichen Agenten gekennzeichnet. Sie können Transaktionen auch nach Agentennamen filtern. #### Webhooks Stripe sendet `checkout.session.completed`, wenn der Agent eine Bestellung abgeschlossen hat. Jede Bestellung generiert ein eindeutiges Ereignis `checkout.session.completed`. Der Webhook enthält das [CheckoutSession](https://docs.stripe.com/api/checkout/sessions/object.md)-Objekt. Richten Sie einen Endpoint ein, um Ereignisse vom Typ `checkout.session.completed` zu überwachen. Schritt-für-Schritt-Anleitung finden Sie im [Webhook-Leitfaden](https://docs.stripe.com/webhooks.md). ```javascript const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY); // Use the secret provided by Stripe CLI for local testing // or your webhook endpoint's secret const endpointSecret = 'whsec_...'; app.post('/webhook', (request, response) => { const sig = request.headers['stripe-signature']; let event; try { event = stripe.webhooks.constructEvent(request.body, sig, endpointSecret); } catch (err) { response.status(400).send(`Webhook Error: ${err.message}`); return; } if (event.type === 'checkout.session.completed') { const session = event.data.object; // Fulfill the order using the session data fulfillCheckout(session.id); } response.status(200).send(); }); ``` Folgendes ist ein Beispiel für die Nutzlast des Webhooks `checkout.session.completed`: ```javascript { "id": "evt_1SUz6YRhxngcl2jFHhAi1Wiu", "object": "event", "api_version": "2025-10-29.clover", "created": 1763511518, "data": { "object": { "id": "cs_test_a1exHOZ77Pg40P1hPtcWe2oT2xI8G9ruoQohXq6jkKldIPQaGsNSPQmOGZ", "object": "checkout.session", ... "total_details": { "amount_discount": 0, "amount_shipping": 0, "amount_tax": 0 } } }, "livemode": false, ... "type": "checkout.session.completed" } ``` Nachdem Sie den Webhook erhalten haben, rufen Sie alle erforderlichen Felder mit einem einzigen API-Aufruf ab. Um mehrere Anfragen zu vermeiden, erweitern Sie die Unterressourcen mithilfe des Erweiterungsparameters [erweitern](https://docs.stripe.com/api/expanding_objects.md) mit dem Vorschau-Header `Stripe-Version: 2025-12-15.preview`. ```curl curl https://api.stripe.com/v1/checkout/sessions/{{SESSION_ID}}?expand[]=line_items.data.price.product&expand[]=line_items.data.taxes&expand[]=payment_intent.latest_charge \ -u <>: \ -H "Stripe-Version: 2025-12-15.preview" ``` Erfahren Sie mehr über die Felder in der erweiterten [CheckoutSession](https://docs.stripe.com/api/checkout/sessions/object.md), beispielsweise über `amount_total`, Menge und SKU-ID. ### Referenz zum Feld „Checkout-Sitzung“ | Bestellfeld | Verfügbare Ressource | API-Pfad | | ------------------------------------------ | --------------------------------------------- | ----------------------------------------------------------------------------------- | | **Bestelldatum** | `CheckoutSession.PaymentIntent.LatestCharge` | `CheckoutSessions.PaymentIntent.LatestCharge.created` | | **Bestellmenge** | `CheckoutSessions` | `CheckoutSession.LineItems.Data[].quantity` | | **SKU** | `CheckoutSessions` | `CheckoutSession.LineItems.Data[].price.external_reference` | | **Produktbeschreibung** | `CheckoutSessions` | `CheckoutSession.LineItems.Data[].price.product.description` | | **Preis pro Einheit** | `CheckoutSessions` | `CheckoutSession.LineItems.Data[].price.unit_amount` | | **Steuerbetrag** | `CheckoutSessions` | `CheckoutSession.LineItems.Data[].Taxes[].amount` | | **Steuerart** | `CheckoutSessions` | `CheckoutSession.LineItems.Data[].Taxes[].Rate.tax_type` | | **Steuersatz** | `CheckoutSessions` | `CheckoutSession.LineItems.Data[].Taxes[].Rate.percentage` | | **ShippingAddress** | `CheckoutSessions` | `CheckoutSessions.CollectedInformation.shipping_details` | | **BillingAddress** | `CheckoutSessions.PaymentIntent.LatestCharge` | `CheckoutSessions.PaymentIntent.LatestCharge.billing_details` | | **Last4** | `CheckoutSessions.PaymentIntent.LatestCharge` | `CheckoutSessions.PaymentIntent.LatestCharge.payment_method_details.card.last4` | | **ExpMonth** | `CheckoutSessions.PaymentIntent.LatestCharge` | `CheckoutSessions.PaymentIntent.LatestCharge.payment_method_details.card.exp_month` | | **ExpYear** | `CheckoutSessions.PaymentIntent.LatestCharge` | `CheckoutSessions.PaymentIntent.LatestCharge.payment_method_details.card.exp_year` | | **CreditCardType** | `CheckoutSessions.PaymentIntent.LatestCharge` | `CheckoutSessions.PaymentIntent.LatestCharge.payment_method_details.card.brand` | | **Endbetrag** | `CheckoutSessions` | `CheckoutSessions.amount_total` | | **GTIN** (Private preview) | `CheckoutSessions` | `CheckoutSession.LineItems.Data[].price.product.identifiers.gtin` | | **MPN** (Private preview) | `CheckoutSessions` | `CheckoutSession.LineItems.Data[].price.product.identifiers.mpn` | | **Details zum Agenten** (Private preview): | `CheckoutSession.PaymentIntent` | `CheckoutSessions.PaymentIntent.agent_details` | | **Bestellnr.** | `CheckoutSession.PaymentIntent.LatestCharge` | `CheckoutSessions.PaymentIntent.LatestCharge.receipt_number` | #### Batch-Abwicklung Führen Sie Großbestellungen über den [List CheckoutSessions-Endpoint](https://docs.stripe.com/api/checkout/sessions/list.md) aus, anstatt jede Bestellung einzeln auszuführen. ```curl # List all successful CheckoutSessions in the last hour curl https://api.stripe.com/v1/checkout/sessions?created[gt]={{TIMESTAMP}}&status=complete \ -u <>: ``` Verwenden Sie den Parameter `starting_after`, um doppelte Ausführung zu verhindern. ```curl curl https://api.stripe.com/v1/checkout/sessions?created[gt]={{TIMESTAMP}}&status=complete&starting_after={{LAST_SESSION_ID}} \ -u <>: ``` ## Ihre Integration testen Sie können Ihre Integration direkt über das Dashboard in einer [Sandbox](https://docs.stripe.com/sandboxes.md) testen: 1. Go to the [Agentic Commerce](https://dashboard.stripe.com/agentic-commerce) page, then click **View feed**. 1. Hover over the product you want to test, then click **Test**. ## Aktivieren Sie Verkäufe über einen KI-Chat-Agenten Wenn Sie bereit sind, über eine KI-Schnittstelle zu verkaufen, lesen Sie bitte die Bedingungen für den Agenten durch und aktivieren Sie den Agenten im Dashboard. Stripe sendet dem Agenten eine Genehmigungsanfrage, die dieser akzeptieren muss. Um den Verkauf über einen KI-Chat-Agenten zu unterbrechen oder zu beenden, deaktivieren Sie den Agenten im Dashboard. ## Optional: Manuelle Erfassung einrichten Standardmäßig erfasst Stripe Zahlungen sofort nach dem Kauf. Um sie manuell zu erfassen, öffnen Sie im Dashboard die Seite [Einstellungen für den Agentic Commerce](https://dashboard.stripe.com/settings/agentic-commerce) und setzen Sie den Erfassungsmodus auf „Manuell“. Wenn Sie die manuelle Erfassung aktivieren, rufen Sie die Methode `capture` im `PaymentIntent` auf: ```curl curl -X POST https://api.stripe.com/v1/payment_intents/{{PAYMENT_INTENT_ID}}/capture \ -u <>: \ -H "Stripe-Version: 2025-09-30.preview" ``` ## Optional: Hook zur Bestellungsfreigabe einrichten Bevor wir eine Zahlung bestätigen, prüfen wir den in Ihren Product Catalog-Daten niedergelassenen Bestand und führen Betrugsprüfungen mit [Radar](https://docs.stripe.com/radar.md) durch. Um zu prüfen, ob wir einen Kauf abschließen, konfigurieren Sie einen Hook für Bestellungsgenehmigungen. Bevor wir den Bezahlvorgang abschließen, senden wir eine Anfrage zur Genehmigung an Ihren Dienst. Genehmigen Sie die Anfrage oder lehnen Sie sie ab. Stripe erzwingt eine Zeitüberschreitung von vier Sekunden für Ihren Hook. Wenn Ihr Hook nicht innerhalb dieser Zeit reagiert, lehnt Stripe die Zahlung ab. So richten Sie einen Hook für die Bestellungsfreigabe ein: 1. Geben Sie den Endpoint auf der Seite [Agentic-Commerce-Einstellungen](https://dashboard.stripe.com/settings/agentic-commerce) im Dashboard an. 1. **Bestellungsgenehmigungen** aktivieren 1. Implementieren Sie Ihre Logik am Endpoint und verwenden Sie die folgenden Anfrage- und Antwortformate. > Stripe gibt einen Statuscode `424` an Agenten zurück, wenn Ihr Endpoint einen anderen Statuscode als `2xx` zurückgibt. Da einige Agenten diese API-Anfragen möglicherweise wiederholen, müssen Sie sicherstellen, dass Ihr Endpoint idempotent ist. ### Format der Anfrage Stripe sendet die folgende Anfrage an Ihren Endpoint: ```typescript { type: "v1.delegated_checkout.finalize_checkout", id: string, livemode: boolean, // account ID context?: string, // request specific data data: { amount_subtotal?: number, amount_total?: number, billing_details?: { name?: string, address?: { line1?: string, line2?: string, city?: string, state?: string, postal_code?: string, country?: string } }, currency: string, email?: string, line_items_details: Array<{ id: string, unit_amount: number, quantity: number, name: string }>, payment_method_details?: { type: "card" | ..., card?: { brand: "amex" | "visa" | "master_card" | ..., country?: string, exp_month: number, exp_year: number, fingerprint?: string, funding: "credit" | "debit" | "prepaid" | "unknown", iin?: string, last4: string, wallet?: { type: "apple_pay" | "google_pay" | ... } } }, phone?: string, shipping_details?: { name?: string, address?: { line1?: string, line2?: string, city?: string, state?: string, postal_code?: string, country?: string }, }, total_details?: { amount_discount?: number, amount_shipping?: number, amount_tax?: number } } } ``` ### Format der Antwort Ihr Endpoint muss `200` HTTP-Antworten im folgenden Format zurückgeben: ```typescript { manual_approval_details: { type: "approved" | "declined", declined?: { reason: string } }, // Connect only: set an application fee for the transaction application_fee_details?: { application_fee_amount: number, transfer_data?: { amount?: number, } } } ``` ## Optional: Hook für die Anpassung des Bezahlvorgangs einrichten Standardmäßig berechnet Stripe Steuern und Versandoptionen für Ihre Produkte anhand der in Ihrem [Produktkatalog](https://docs.stripe.com/agentic-commerce/product-feed.md) definierten Optionen. So berechnen Sie Steuern oder Versandoptionen sowie Kosten dynamisch mit Ihrer Logik: 1. Geben Sie den Endpoint auf der Seite [Agentic-Commerce-Einstellungen](https://dashboard.stripe.com/settings/agentic-commerce) im Dashboard an. 1. Aktivieren Sie **Individuelle Steuersätze** oder **Individuelle Versandoptionen**. 1. Implementieren Sie Ihre Logik am Endpoint und verwenden Sie die folgenden Anfrage- und Antwortformate. > Stripe gibt einen Statuscode `424` an Agenten zurück, wenn Ihr Endpoint einen anderen Statuscode als `2xx` zurückgibt. Da einige Agenten diese API-Anfragen möglicherweise wiederholen, müssen Sie sicherstellen, dass Ihr Endpoint idempotent ist. ### Format der Anfrage Stripe sendet die folgende Anfrage an Ihren Endpoint: ```typescript { type: "v1.delegated_checkout.customize_checkout", id: string, livemode: boolean, // Connected account ID context?: string, // Request specific data data: { // Used by the seller to determine whether they can set manual tax rates on line items automatic_tax: { enabled: boolean, }, currency: string, line_item_details?: Array<{ id: string, sku_id: string, unit_amount: number, amount_discount: number, amount_subtotal: number, amount_tax: number, amount_total: number, quantity: number, name: string, tax_rates: Array<{ rate: { id: string, display_name: string, percentage: number, inclusive: boolean, } // Amount of tax applied for this rate. amount: number }> }>, shipping_details?: { // Same as the shipping rate object described at https://docs.stripe.com/api/shipping_rates/object#shipping_rate_object shipping_rate?: { id: string, display_name?: string, metadata?: Map, tax_code?: string , tax_behavior: 'unspecified' | 'inclusive' | 'exclusive', fixed_amount: { amount: number, currency: 'usd' | 'cad' | etc., currency_options.: { amount: number, tax_behavior: 'unspecified' | 'inclusive' | 'exclusive', } }, delivery_estimate?: { maximum: { unit: 'business_day' | 'day' | 'hour' | 'month' | 'year', value: number }, minimum: { unit: 'business_day' | 'day' | 'hour' | 'month' | 'year', value: number } } }, // Same as the shipping rate object described at https://docs.stripe.com/api/shipping_rates/object#shipping_rate_object shipping_rates?: Array<{ id: string, display_name?: string, metadata?: Map, tax_code?: string, tax_behavior: 'unspecified' | 'inclusive' | 'exclusive', fixed_amount: { amount: number, currency: 'usd' | 'cad' | etc., currency_options.: { amount: number, tax_behavior: 'unspecified' | 'inclusive' | 'exclusive', } }, delivery_estimate?: { maximum: { unit: 'business_day' | 'day' | 'hour' | 'month' | 'year', value: number }, minimum: { unit: 'business_day' | 'day' | 'hour' | 'month' | 'year', value: number } } }, address?: { line1?: string, line2?: string, city?: string, state?: string, postal_code?: string, country?: string } }, amount_total?: number, amount_subtotal?: number, total_details?: { amount_discount?: number, amount_shipping?: number, amount_tax?: number } } } ``` ### Format der Antwort Ihr Endpoint muss eine `200` HTTP-Antwort im folgenden Format zurückgeben: ```typescript { shipping_options?: Array<{ // ID of the shipping rate, or data provided to create the shipping rate. Only provide one; not both shipping_rate?: string, shipping_rate_data: { display_name?: string, fixed_amount: { amount: number, currency: 'usd' | 'cad' | etc., }, metadata?: Map, tax_code?: string , tax_behavior?: 'unspecified' | 'inclusive' | 'exclusive', // Same as the shipping rate object described at https://docs.stripe.com/api/shipping_rates/create#create_shipping_rate-delivery_estimate delivery_estimate?: { maximum: { unit: 'business_day' | 'day' | 'hour' | 'month' | 'year', value: number }, minimum: { unit: 'business_day' | 'day' | 'hour' | 'month' | 'year', value: number } } }, }>, line_items?: Array<{ // Corresponding ID of the line item to update id: string, // List of tax rates to apply to this line item // Provide either `rate` or `rate_data` tax_rates: Array<{ // ID of a v1 tax rate rate?: string, // Or `rate_data`. // This will use an existing tax rate that matches the params or will create one if a matching rate does not exist rate_data?: { display_name: string, inclusive: boolean, // percentage out of 100 percentage: number, } }, }> } ``` ## Optional: Ihre Hooks testen Sie können Ihren Hook zur Bestellungsgenehmigung oder zur Anpassung Ihres Bezahlvorgangs testen, indem Sie einen öffentlich zugänglichen Endpoint bereitstellen, der Hook-Anfragen mit einer `POST`-Methode akzeptieren kann. Richten Sie Ihre Endpoint-Funktion so ein, dass sie Folgendes tut: 1. Verarbeitung von `POST`-Anfragen mit einer JSON-Nutzlast 1. Gibt einen erfolgreichen Statuscode (`200`) zurück Verwenden Sie für die lokale Entwicklung ein Tunneling-Tool wie [ngrok](https://ngrok.com/), um Ihren lokalen Endpoint freizulegen. ### Beispiel-Endpoint Dieser Codeausschnitt zeigt eine Endpoint-Funktion, die `v1.delegated_checkout.finalize_checkout`-Anfragen empfängt und eine `200`-Antwort zurückgibt. Den Signierungsschlüssel finden Sie unter dem **Agentic Commerce Extension**-Ereignisziel in Ihren Webhook-Einstellungen im [Developer Dashboard](https://docs.stripe.com/development/dashboard.md). #### Ruby ```ruby require 'json' require 'sinatra' require 'stripe' set :port, 4242 # Replace with your endpoint's secret from your webhook settings endpoint_secret = 'whsec_...' # Using Sinatra post '/hooks' do payload = request.body.read sig_header = request.env['HTTP_STRIPE_SIGNATURE'] # Verify the webhook signature begin Stripe::Webhook::Signature.verify_header( payload, sig_header, endpoint_secret ) rescue Stripe::SignatureVerificationError => e status 400 return end # Handle the payload payload = JSON.parse(payload) case payload['type'] when 'v1.delegated_checkout.finalize_checkout' # Check inventory and accept payment data = { manual_approval_details: { type: 'approved' } } end status 200 body data.to_json end ``` ## Optional: Inkrementelle Bestandsaktualisierungen senden Neben dem Hochladen Ihrer Produktdaten können Sie über die [Imports-API](https://docs.stripe.com/api/v2/commerce/product-catalog-imports.md) auch einzelne Aktualisierungen des Produktbestands übermitteln. Verwenden Sie denselben Upload-Prozess wie beim Hochladen der Produktdaten, setzen Sie jedoch `feed_type` auf `inventory`. Bestands-Feeds unterstützen ausschließlich den `upsert`-Modus. ```curl curl -X POST https://api.stripe.com/v2/commerce/product_catalog/imports \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-04-22.preview" \ --json '{ "feed_type": "inventory", "mode": "upsert", "metadata": { "file_name": "march_11_2026_inventory_upload.csv" } }' ``` ## Optional: Inkrementelle Preisaktualisierungen senden Laden Sie Ihre Produktdaten hoch und senden Sie anschließend einzelne Preisaktualisierungen über die [Imports-API](https://docs.stripe.com/api/v2/commerce/product-catalog-imports.md). Verwenden Sie denselben Upload-Prozess wie beim Hochladen der Produktdaten und setzen Sie`feed_type` auf `pricing`. Preis-Feeds unterstützen ausschließlich den `upsert`-Modus. ```curl curl -X POST https://api.stripe.com/v2/commerce/product_catalog/imports \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-04-22.preview" \ --json '{ "feed_type": "pricing", "mode": "upsert", "metadata": { "file_name": "march_11_2026_pricing_upload.csv" } }' ``` ## Optional: Umgang mit Rückerstattungen und Zahlungsanfechtungen Wenn eine Kundin oder ein Kunde die Bestellung auf Ihrer Website oder über den Kundenservice nach erfolgreichem Bezahlvorgang storniert, veranlassen Sie eine Rückerstattung. Wenn Sie bereits die Checkout Sessions oder PaymentIntents API verwenden, funktioniert Ihr bestehender Workflow für Rückerstattungen ohne Änderungen auch für agentenbasierte Bezahlvorgänge. Verwalten Sie Rückerstattungen und Zahlungsanfechtungen im Dashboard auf der [Transaktionsseite](https://dashboard.stripe.com/payments) oder verwenden Sie die [Refunds API](https://docs.stripe.com/api/refunds.md), um Stornierungen und Rückerstattungen programmgesteuert abzuwickeln. ## See also - [Gemeinsam genutzte Zahlungstoken](https://docs.stripe.com/agentic-commerce/concepts/shared-payment-tokens.md)