Jede Organisation hat immer einen Kanal mit dem technischen Namen
default. Er ist der universelle Fallback und kann nicht gelöscht werden. Vertriebskanäle sind organisatorisch, sie isolieren keine Daten. Kunden, Subscriptions, Rechnungen, Produkte und Preise bleiben organisationsweit.In den Beispielen ist
$BASE_URL die Basis-URL deiner Fynn-API und $API_TOKEN ein API-Token, das als Authorization: Bearer mitgeschickt wird.Kanal-Auflösung
Fynn löst den aktiven Vertriebskanal pro eingehendem Request auf, nachdem der Tenant feststeht. Es gewinnt der erste Treffer in dieser Kette:1
Header X-Sales-Channel-Id
Expliziter Kanal per Header
X-Sales-Channel-Id: <uuid>. Wird für interne Wallet- und Tool-Zugriffe genutzt, wenn der Aufrufer den Kanal kennt.2
Header X-Cart-Token
X-Cart-Token: <token> löst den Warenkorb auf; dessen Kanal stammt aus dem CheckoutLink. Das ist der reguläre Weg im Checkout der Kundenfront.3
Domain (Host / Origin / Referer)
Der Host der Anfrage wird über die Customerfront-Domain zum Kanal aufgelöst. Bei Cross-Origin-Aufrufen der Kundenfront-SPA (der
Host ist dann die API-Domain) wird zusätzlich Origin, dann Referer, dann X-Source-Domain herangezogen, dieselbe Header-Reihenfolge, mit der auch der Tenant aufgelöst wird.4
Default-Kanal
Greift keiner der Schritte, wird der
default-Kanal der Organisation verwendet.Der salesChannel am Kunden
Jeder Kunde gehört genau einem Vertriebskanal an. Die Zuordnung steuert, welches Branding der Kunde in Bestätigungen, Dokumenten und im Self-Service sieht.
Beim Anlegen und Aktualisieren (Eingabe)
Die FelderPOST /customers und PATCH /customers/{id} akzeptieren ein optionales Feld salesChannel:
- Wert ist die UUID oder der technische Name des Kanals (zum Beispiel
"default"). - Der Kanal muss existieren und zur aktuellen Organisation gehören, andernfalls antwortet die API mit
422und einer Validierungsmeldung am Feld. - Lässt du das Feld bei der Anlage leer, weist Fynn den aktuell aufgelösten bzw. den
default-Kanal zu.
Kunde einem Kanal zuordnen
Kanal eines Kunden ändern
In der Ausgabe (Lesen)
In Kunden-Antworten (sowie eingebettet in CheckoutLink, Cart und Webhook-Envelopes) erscheint der Kanal als kompakte Referenz:Vertriebskanäle verwalten
Die folgenden Endpunkte verwalten Kanäle und ihre Einstellungen. Sie erfordern ein API-Token mit der Berechtigungsales-channel:read (lesend) bzw. sales-channel:write (schreibend).
Kanal anlegen
Beim Anlegen wird automatisch eine Standard-Customerfront-Domain aus
name und einem festen Suffix erzeugt. Der name ist später unveränderlich, weil er in URLs und Logs auftaucht.
Kanal aktualisieren
PATCH /api/sales-channels/{id} ist partiell, nur übergebene Felder werden geändert.
Vollständige Kanal-Repräsentation
GET /api/sales-channels/{id} liefert die volle Sicht inklusive eingebetteter Appearance-Felder:
Coupon-Gate
allowCoupons ist ein Kanal-weites Gate. Steht es auf false, sind Coupons in keinem CheckoutLink dieses Kanals einlösbar, egal was der einzelne CheckoutLink erlaubt. Ein CheckoutLink kann Coupons nur weiter einschränken, nie gegen den Kanal erlauben.
Neu angelegte Kanäle haben
allowCoupons = true.
Zahlungsmethoden-Whitelist
allowedPaymentMethods wirkt als Whitelist:
- Leeres Array → keine kanalspezifische Einschränkung; alle Methoden mit aktivem Gateway sind erlaubt.
- Befülltes Array → nur die gelisteten Methoden, sofern ihr Gateway aktiv konfiguriert ist.
GET /api/sales-channels/payment-methods/available.
Eigene Domains
Jeder Kanal hat genau eine Standard-Domain (automatisch, nicht editierbar) und optional eine eigene Domain. Ein einzelner CNAME genügt, das TLS-Zertifikat wird automatisch ausgestellt und erneuert. Es gibt keinen selbstverwalteten TXT-Nachweis.Domain hinzufügen
dnsInstructions enthält immer den CNAME und zusätzlich etwaige Validierungs-Einträge, die du ebenfalls anlegen musst.
Die zwei Status
Eine eigene Domain hat zwei voneinander unabhängige Status:
Die Domain wird erst produktiv (und zur Standard-Adresse des Kanals), wenn
sslStatus = active ist. Ab da löst Fynn Anfragen über diese Domain auf den Kanal auf.
Verifizieren
POST /api/sales-channels/{id}/custom-domain/verify prüft den Status einmal synchron:
- Ist der Status
active, wird die Domain verifiziert und zur Standard-Customerfront-Domain des Kanals befördert. pending/pending_validationwerden ohne Fehler zurückgegeben, versuche es später erneut.error(das Zertifikat kann nicht ausgestellt werden) führt zu einer Fehlerantwort.
Entfernen
DELETE /api/sales-channels/{id}/custom-domain entfernt die eigene Domain und setzt die Kanal-Adresse auf die Standard-Domain zurück. Der Checkout bleibt also durchgehend erreichbar.
Weiterleitungs-URLs und returnUrl
Die optionalen URLs auf dem Kanal steuern, wohin der Kunde nach dem Zahlvorgang geleitet wird. Bleibt eine URL leer, fällt der Kunde auf die Standardseite der Kundenfront (/self-service/transaction/{status}) zurück.
Startest du Payment-Method-Setups über die API, wird nach Abschluss die Kanal-
returnUrl aufgerufen. Lässt du sie leer, kannst du pro Request dynamisch ein redirectUrl im PaymentMethodSetup mitgeben, das stattdessen verwendet wird.
Webhooks
Jeder ausgehende Webhook trägt den HeaderX-Sales-Channel mit dem technischen Namen des Kanals, dem das auslösende Objekt zugeordnet ist (oder default, wenn keiner gesetzt ist). So routest du eingehende Events empfängerseitig nach Marke, ohne den Payload zu parsen.
Verwandte Themen
Vertriebskanäle (Anleitung)
Die Einstellungen in der Wallet, Schritt für Schritt mit Screenshots.
Kunden
Kundenverwaltung und das
salesChannel-Feld im Kontext.Eigene E-Mail-Domain
Sendedomain pro Kanal einrichten.
Webhooks
Echtzeit-Events empfangen und nach Kanal routen.