Zapier
Verbinde Rekomi ohne Code mit 8,000+ Apps. 11 Trigger, 11 Aktionen, 5 Suchen.
Die Zapier-Integration von Rekomi verbindet dein Affiliate-Programm mit Slack, Gmail, HubSpot, Notion, Google Sheets, Airtable, Discord, Mailchimp, Typeform und jeder anderen Zapier-App. Baue Automatisierungen ohne Code, die dein Team benachrichtigen, wenn sich ein Affiliate anmeldet, Conversions mit einem Vertriebs-CRM synchronisieren, große Auszahlungen in einem Slack-Kanal posten, neue Affiliates automatisch in eine E-Mail-Liste aufnehmen oder geprüfte Bewerber freigeben, sobald sie eine Umfrage abschicken.
Die Rekomi-App ist im Zapier-Marktplatz verfügbar: Rekomi auf Zapier ansehen. Angemeldete Marken können einen Zap auch direkt im Dashboard unter Integrationen → Zapier bauen. Deine Angaben sind dort schon vorausgefüllt, du sparst dir also die Registrierung bei Zapier.
Die Rekomi-App mit Zapier zu verbinden ist kostenlos; Aktionen und Trigger laufen mit deinem Rekomi-Konto in jedem aktuellen Plan. Nur die beiden unten genannten Aktionen sind an eine Planstufe gebunden (Bulk Invite Affiliates und Mint Embed Token).
Rekomi in Zapier verbinden
Die Rekomi-App ist im Zapier-Marktplatz unter dem Namen Rekomi veröffentlicht. Die Verbindung läuft über OAuth 2.0 mit PKCE: keine API-Schlüssel, kein Kopieren und Einfügen, keine geteilten Zugangsdaten. Verbindungen gelten pro Zapier-Konto: Jedes Teammitglied, das in eurem gemeinsamen Zapier-Workspace Zaps baut, verbindet seinen eigenen Rekomi-Nutzer, damit das Audit-Log sauber bleibt. Beachte: Um die Verbindung mit dem Standard-Scope (Berechtigungsumfang) für Lesen und Schreiben abzuschließen, brauchst du die Rolle Owner in der Rekomi-Organisation; Teammitglieder ohne diese Rolle bekommen auf dem Zustimmungsbildschirm einen 403 insufficient_role.
- Öffne in Zapier den Zap-Editor und füge einen Rekomi-Trigger oder eine Rekomi-Aktion hinzu. Wenn Zapier nach einem Konto fragt, klicke auf Connect a new account.
- Ein neuer Tab öffnet sich unter
app.rekomi.com/oauth/authorize. Melde dich an, falls du noch nicht angemeldet bist. Der Zustimmungsbildschirm zeigt die Organisation, an die die Verbindung gebunden wird (die gerade aktive); soll Zapier an eine andere Organisation gebunden werden, wechsle vorher im Rekomi-Dashboard die Organisation. - Der Zustimmungsbildschirm nennt den App-Namen (Zapier), den angeforderten Scope (
read_write offline_access) und deine aktive Organisation. Klicke auf Allow. - Das Fenster schließt sich automatisch, und Zapier zeigt den Namen deiner Organisation als verbundenes Konto an. Die Verbindung wird in jedem Zap wiederverwendet, den du mit demselben Zapier-Login baust.
Der Zustimmungsbildschirm zeigt immer die Scopes, die Zapier beim Autorisieren angefordert hat, und deine aktive Organisation. Musst du die Verbindung neu autorisieren, etwa nachdem du sie im Rekomi-Dashboard widerrufen hast oder um sie auf eine andere Organisation umzustellen, öffne app.rekomi.com/dashboard/settings/connected-apps, widerrufe die Zapier-Verbindung und gehe dann in Zapier auf My Apps → Rekomi → Reconnect.
Intern nutzt Zapier den standardkonformen Ablauf OAuth 2.0 Authorization Code + PKCE (S256). Der Token-Endpunkt ist https://api.rekomi.com/connect/token, Refresh-Tokens rotieren bei jeder Nutzung, und wer ein altes Refresh-Token erneut verwendet, widerruft die gesamte Token-Familie. Alle Details zum Protokoll findest du unter OAuth 2.0.
Trigger
Trigger lösen aus, wenn in Rekomi etwas passiert, und starten einen Zap. Rekomi-Trigger sind als REST-Hooks umgesetzt: Schaltest du einen Zap ein, abonniert Zapier einen Webhook-Endpunkt für deine Organisation; schaltest du ihn aus, meldet Zapier das Abonnement sauber ab. Es gibt kein Polling und keine verpassten Ereignisse, solange der Zap eingeschaltet ist.
| Trigger | Löst aus, wenn | Quellereignis | Beispielfelder der Ausgabe |
|---|---|---|---|
| New Conversion | Eine einem Affiliate zugeordnete Conversion erfasst wird: ein Verkauf, ein Bonus oder ein bezahlter Klick in einer Kampagne, die pro Klick vergütet (amountCents ist bei Klicks und Boni 0). Lead-Zeilen, bezahlt oder nicht, lösen stattdessen New Lead aus | conversion.created | conversionId, affiliateId, programId, amountCents, currency, commissionCents, status |
| New Lead | Ein Lead oder eine Anmeldung für einen Affiliate erfasst wird, noch vor einem Kauf | conversion.created (Lead-Zeilen) | conversionId, affiliateId, programId, status, attributionMethod |
| Conversion Approved | Die Provision einer ausstehenden Conversion freigegeben wird (von Hand, im Dashboard oder in der Stripe-App) | conversion.approved | Die vollständige Conversion-Zeile: conversionId, amountCents, currency, commissionCents, status und mehr |
| Conversion Refunded | Eine Conversion ganz oder teilweise erstattet oder zurückgebucht und ihre Provision zurückgeholt wird | conversion.refunded | conversionId, affiliateId, programId, refundedAmountCents, cumulativeRefundedAmountCents, commissionReversedCents, currency, isFullRefund, refundedAt, attributionMethod (Geldfelder sind in kleinsten Einheiten von currency angegeben; dieses Ereignis hat kein amountCents, commissionCents oder status) |
| New Affiliate Application | Sich jemand für eine deiner Kampagnen bewirbt | affiliate.created | affiliateId, programId, email, fullName, status, slug, applicationAnswers (jede Antwort aus dem Bewerbungsformular mit dem Feldschlüssel als Key, auch deine eigenen Felder) |
| Affiliate Approved | Die Bewerbung eines Affiliates freigegeben wird | affiliate.approved | affiliateId, programId, email, fullName, approvedAt, applicationAnswers |
| Payout Created | Eine Auszahlung für einen Affiliate eingeplant wird (eine pro Affiliate und Lauf) | payout.created | payoutId, affiliateId, amountCents, currency, method, status, lineItemConversionIds, periodStart, periodEnd |
| Payout Paid | Die Auszahlung an einen Affiliate abgeschlossen ist | payout.paid | payoutId, affiliateId, amountCents, currency, method (StripeConnect, PayPal oder GlobalPayouts), paidAt und dazu eine Transaktionsreferenz für den jeweiligen Auszahlungsweg: stripeTransferId (Stripe Express), paypalBatchId und paypalTransactionId (PayPal), gpOutboundPaymentId (Banküberweisung) oder externalTransactionId (ältere Zeilen mit Manual). Kein Feld status: Der Trigger ist der Status |
| Payout Failed | Die Auszahlung an einen Affiliate fehlschlägt (Guthaben reicht nicht, Auszahlungskonto fehlt, Überweisung abgelehnt) | payout.failed | payoutId, affiliateId, amountCents, currency, method, failureReason, failedAt. Kein Feld status |
| New Campaign Coupon | Ein Gutschein auf Kampagnenebene angelegt wird | campaign_coupon.created | campaignCouponId, programId, name, discountType, discountValue, duration, createdAt |
| New Affiliate Coupon | Ein einlösbarer Code für einen Affiliate erstellt wird | affiliate_coupon.created | affiliateCouponId, campaignCouponId, affiliateId, programId, code, createdAt, source |
Filter nur im Editor. Die Trigger New Campaign Coupon und New Affiliate Coupon bieten im Zap-Editor optionale Auswahlfelder Campaign und Affiliate. Sie sind dazu da, beim Bauen des Zaps realistische Beispieldaten abzurufen. Ist der Zap live, löst der Trigger für jedes passende Ereignis in deiner Organisation aus, egal was in den Auswahlfeldern steht. Willst du Live-Läufe eingrenzen, nutze einen normalen Filter-Schritt von Zapier.
Die vollständigen Payloads der Ereignisse (das JSON, das Rekomi tatsächlich sendet) stehen in der Dokumentation zu Webhooks. Zapier zeigt diese Felder eins zu eins in der Datenauswahl des Editors an.
Aktionen
Aktionen schreiben aus einer anderen Zapier-App heraus in dein Rekomi-Konto, typischerweise als zweiter Schritt eines Zaps, dessen Trigger aus einem anderen Produkt kommt.
| Aktion | Was sie tut | Pflichtangaben | Rückgabe |
|---|---|---|---|
| Create Campaign | Legt ein neues Affiliate-Programm an (Name, Slug, Provisionsregeln, optionale Laufzeit für wiederkehrende Provisionen, zugelassene Länder; automatische Freigabe standardmäßig an) | Name, Slug (Provisionstyp, Wert und Modell sind optional; Standard ist eine Provision von 20% pro Verkauf) | Das neue Programm mit id, slug und createdAt |
| Create Conversion | Erfasst einen manuellen Verkauf oder eine Bonusprovision für einen Affiliate | Kampagne, Affiliate, Betrag in Cent, Währung (optional abweichende Provision, E-Mail-Adresse des Kunden, Zeitpunkt, Notiz) | Die neue Conversion-Zeile |
| Record Lead / Signup | Erfasst einen Lead oder eine Anmeldung zum Empfehlungs-Slug eines Affiliates; darauf baut die Attribution über die E-Mail-Adresse bei einem späteren Verkauf auf | Empfehlungs-Slug, E-Mail-Adresse (optional Kampagne, Name); Lead-Tracking muss eingeschaltet sein | { ok: true } |
| Invite Affiliate | Sendet eine einzelne Einladungs-E-Mail im Design deiner Marke | Programm, E-Mail-Adresse | Die Einladung samt der einmaligen acceptUrl |
| Bulk Invite Affiliates | Sendet bis zu 50 Einladungen in einem Aufruf | Programm, Liste von E-Mail-Adressen (optional mit Slug und vollständigem Namen pro Zeile) | created, skipped und ein Array invites sowie mögliche slugConflicts |
| Approve Affiliate | Gibt die ausstehende Bewerbung eines Affiliates frei | Affiliate | Die aktualisierte Affiliate-Zeile (Status jetzt Approved) |
| Reject Affiliate | Lehnt einen ausstehenden Affiliate ab, optional mit Begründung | Affiliate, optionale Begründung | Die aktualisierte Affiliate-Zeile (Status jetzt Rejected) |
| Create Campaign Coupon | Legt einen übergeordneten Gutschein auf Kampagnenebene an | Programm, Name, Rabatttyp, Rabattwert, Laufzeit | Der neue Kampagnengutschein mit campaignCouponId |
| Generate Affiliate Coupon | Erstellt unter einem Kampagnengutschein einen einlösbaren Code für einen Affiliate | Affiliate, Kampagnengutschein, optional eigener Code | Der neue Affiliate-Gutschein mit code und affiliateCouponId |
| Revoke Affiliate Coupon | Deaktiviert den einlösbaren Code eines Affiliates | Affiliate-Gutschein | { ok: true } plus die deaktivierte Zeile |
| Mint Embed Token | Stellt ein kurzlebiges Token für die eingebettete White-Label-Ansicht des Dashboards aus | Affiliate, zugelassene Origins, optional expiresInHours | Das token im Klartext (wird einmal angezeigt), allowedOrigins, expiresAt |
Hinweise zu den Plänen.
- Bulk Invite Affiliates setzt ein bezahltes Abonnement voraus. In der Testphase kommt die Antwort
402 paid_plan_required(für den Missbrauchsweg über Massen-E-Mails gibt es keine Ausnahme in der Testphase), und Zapier zeigt sie als verständlichen Hinweis zum Upgrade an. - Mint Embed Token gehört zur White-Label-Funktion Embed und setzt die Planstufe Growth oder höher voraus. Niedrigere Planstufen bekommen
402 plan_tier_required. - Generate Affiliate Coupon, Revoke Affiliate Coupon und Create Campaign Coupon legen intern Stripe Coupons / Promotion Codes an oder ändern sie, wenn deine Organisation Stripe über die Rekomi-App verknüpft hat. Die Zeile bei Rekomi und die Zeile bei Stripe werden in einer einzigen Transaktion synchron gehalten: Lehnt Stripe das Anlegen ab, wird die Zeile bei Rekomi zurückgerollt.
Suchen
Suchen sind reine Abfragen ohne Schreibzugriff. Du nutzt sie meist in einem Zap mit dem Schalter „Find or Create“ oder um eine Angabe in eine Rekomi-ID aufzulösen, die du an einen späteren Schritt weitergibst.
| Suche | Eingabe | Rückgabe |
|---|---|---|
| Find Affiliate by Email | E-Mail-Adresse | Der passende Affiliate (oder ein leeres Ergebnis, wenn keiner gefunden wird) |
| Find Campaign by Name or Slug | Suche nach exakter Übereinstimmung (Groß- und Kleinschreibung spielt keine Rolle) mit dem Anzeigenamen oder dem URL-Slug der Kampagne | Die passende Kampagne (oder ein leeres Ergebnis, wenn keine gefunden wird) |
| Get Affiliate by ID | UUID des Affiliates | Der Affiliate oder ein leeres Ergebnis, wenn es die ID nicht gibt |
| Get Campaign by ID | UUID der Kampagne | Die Kampagne oder ein leeres Ergebnis, wenn es die ID nicht gibt |
| Get Conversion by ID | UUID der Conversion | Die Conversion einschließlich attributionMethod und couponCode oder ein leeres Ergebnis, wenn es die ID nicht gibt |
Jede Suche bietet die üblichen Such-Einstellungen von Zapier:
- „Successful if no results“: Ist das angehakt, gilt ein leeres Ergebnis als Erfolg, und der Zap läuft weiter. Praktisch in Kombination mit einem nachgelagerten Zweig „Create if not found“.
- „Return first match“ / „Return all matches“: Wähle, ob der Zap mit dem einen besten Treffer arbeitet oder sich auf alle Treffer verteilt. Beim Verteilen gibt es einen Zap-Lauf pro Treffer.
Rezepte
Sieben ausgearbeitete Beispiele zum Nachbauen. Jedes ist ein einzelner Zap; der optionale Schritt Filter oder Formatter ist normales Zapier-Handwerk und nichts Rekomi-Spezifisches.
1. Slack benachrichtigen, wenn eine hochpreisige Conversion eingeht
Du willst in #sales einen Slack-Ping, sobald ein einem Affiliate zugeordneter Verkauf über $500 liegt, aber nicht bei jedem kleinen Kauf.
- Trigger: Rekomi → New Conversion.
- Filter: Nur weiter, wenn
amountCentsgrößer als 50000 ist. - Aktion: Slack → Send Channel Message an
#salesmit der Affiliate-ID, dem Betrag und der Provision.
2. Freigegebene Affiliates in Mailchimp automatisch taggen
Wenn du einen neuen Affiliate freigibst, soll er in einer Mailchimp-Zielgruppe mit dem Tag partner landen, damit er automatisch deine Onboarding-Strecke für Affiliates bekommt.
- Trigger: Rekomi → Affiliate Approved.
- Aktion: Mailchimp → Add/Update Subscriber. Ordne
emailundfullNamezu und setze das Tagpartner.
3. Dringende E-Mail, wenn eine Auszahlung fehlschlägt
Schlägt eine Auszahlung fehl, hat der Affiliate meist das Onboarding bei Stripe Connect nicht abgeschlossen oder sein Connect-Konto ist eingeschränkt. Du willst sofort eine Warnung an das Finanzteam.
- Trigger: Rekomi → Payout Failed.
- Aktion: Gmail → Send Email an
finance@yourbrand.commit der Affiliate-ID,failureReasonund einem Link zur Zeile des Affiliates im Dashboard.
4. Conversions in ein Umsatzprotokoll in Google Sheets übernehmen
Die Finanzabteilung will jede Rekomi-Conversion in einer Google-Tabelle, um sie monatlich mit Stripe abzugleichen.
- Trigger: Rekomi → New Conversion.
- Aktion: Google Sheets → Create Spreadsheet Row. Ordne
conversionId,affiliateId,amountCents,currency,commissionCents,createdAtzu.
5. Erstattungen in HubSpot nachziehen
Wird eine Conversion erstattet, soll der zugehörige HubSpot-Deal zurück in die Phase Closed Lost, refunded wandern, damit dein Vertrieb ihn nicht weiter bearbeitet.
- Trigger: Rekomi → Conversion Refunded. Das Erstattungsereignis trägt
conversionIdund die erstatteten Beträge, nicht dieexternalEventIdder Conversion. - Suche: Rekomi → Get Conversion by ID. Übergib
conversionIdaus Schritt 1; das Ergebnis enthältexternalEventId(deine eigene Stripe-Rechnungs- oder Checkout-ID). - Aktion: HubSpot → Update Deal. Suche den Deal über diese
externalEventIdund ändere dann seine Phase. Ergänze einen Filter aufisFullRefundgleich true, wenn Teilerstattungen den Deal nicht verschieben sollen.
6. Anmeldungen aus deiner eigenen App als Rekomi-Leads erfassen
Der Anmeldeablauf deines Produkts läuft außerhalb des Tracking-Skripts von Rekomi (eine native App, ein eigener Funnel), aber Anmeldungen sollen trotzdem dem vermittelnden Affiliate gutgeschrieben werden, damit ein späterer Kauf richtig zugeordnet wird.
- Trigger: deine App oder dein Formular-Tool → New Signup (jeder Zapier-Trigger, der die E-Mail-Adresse des Besuchers und deinen
?via=-Slug liefert). - Aktion: Rekomi → Record Lead / Signup. Ordne den Empfehlungs-Slug und die E-Mail-Adresse zu. Der Lead erscheint sofort im Funnel des Affiliates, und die Attribution über die E-Mail-Adresse greift, sobald diese Person kauft.
7. Neue Bewerber nach einer Prüfumfrage in Typeform freigeben
Du lässt potenzielle Affiliates ein Typeform mit einem Bewertungsschema zur Selbsteinschätzung ausfüllen. Wer 8 oder mehr Punkte erreicht, soll automatisch freigegeben werden; niedrigere Werte bleiben zur manuellen Prüfung ausstehend.
- Trigger: Typeform → New Entry.
- Filter: Nur weiter, wenn das Feld
scoregrößer oder gleich 8 ist. - Aktion: Rekomi → Approve Affiliate. Übergib die Affiliate-ID aus dem versteckten Feld der Typeform-Antwort.
Fehler und Wiederherstellung
Die Middleware von Rekomi wandelt jeden Fehler aus dem Backend in eine verständliche Zapier-Meldung um. Die häufigsten:
| Fehler | Bedeutung | Was du tun kannst |
|---|---|---|
RefreshAuthError (401) | Dein OAuth-Token wurde widerrufen, die Token-Familie wurde durch Rotation ungültig, oder die Verbindung wurde im Dashboard entfernt. | Verbinde dich in Zapier über My Apps → Rekomi → Reconnect neu. Der Zap läuft beim nächsten Trigger-Ereignis weiter. |
402 plan_tier_required | Die Aktion braucht eine höhere Planstufe, am häufigsten Mint Embed Token in einer Organisation mit Starter. | Mach ein Upgrade unter app.rekomi.com/dashboard/settings/billing oder entferne diese Aktion aus dem Zap. Der Antwortinhalt des Fehlers enthält die Planstufen required und current. |
402 paid_plan_required | Bulk Invite Affiliates wurde aus einem Konto in der Testphase oder ohne Abonnement aufgerufen. | Schließe ein bezahltes Abonnement ab. Für Aktionen mit Massen-E-Mails gibt es zum Schutz vor Missbrauch keine Ausnahme in der Testphase. |
429 rate_limited | Du hast das Rate-Limit von Rekomi pro Token kurzzeitig überschritten. | Zapier wiederholt automatisch mit wachsendem Abstand. Du musst nichts tun, solange die Last nicht dauerhaft so hoch bleibt. |
400 validation_failed mit field | Eine bestimmte Eingabe hat die Validierung nicht bestanden. Die Zapier-Meldung lautet Field: message, zum Beispiel slug: slug_already_taken. | Korrigiere die betroffene Eingabe in der Konfiguration des Zap-Schritts. Bei Create Campaign schlägt das Formular im Dashboard über einen verzögerten Check-Slug-Endpunkt automatisch einen freien Slug vor, die Zapier-Aktion meldet den Konflikt dagegen als sauberen Fehler: Wähle einen anderen Slug und starte den Lauf erneut. |
5xx server_error | Vorübergehendes Problem bei Rekomi. | Zapier wiederholt automatisch. Bleibt ein Zap dauerhaft rot mit 5xx, wende dich an den Support. |
In der Zap History von Zapier kannst du jeden fehlgeschlagenen Lauf mit vollständiger Anfrage und Antwort ansehen und ihn erneut ausführen, sobald die Ursache behoben ist.
Planstufe
Die Rekomi-App in Zapier funktioniert in jedem aktuellen Plan. Zwei Aktionen sind an Bedingungen geknüpft:
- Bulk Invite Affiliates: aktives bezahltes Abonnement erforderlich (in der Testphase gesperrt).
- Mint Embed Token: Growth+ erforderlich (wie bei der Funktion Embed).
Alle anderen Trigger, Aktionen und Suchen funktionieren in jeder Organisation, auch in der Testphase. Die vollständige Tabelle der Planstufen steht in der API-Referenz.
Sicherheit
- OAuth-Referenz-Tokens. Zapier hält nicht auslesbare Referenz-Tokens (Opaque Tokens, keine JWTs). Sie liegen verschlüsselt auf den Servern von Rekomi und lassen sich jederzeit unter
app.rekomi.com/dashboard/settings/connected-appswiderrufen. Der Widerruf greift beim nächsten API-Aufruf: Zapier zeigt dann einenRefreshAuthErroran und fordert den Nutzer auf, sich neu zu verbinden. - Autorisierung mit PKCE-Schutz. Authorization Code + PKCE (S256) ist für den Zapier-Client Pflicht. Autorisierungscodes laufen nach 60 Sekunden ab und gelten nur einmal.
- Refresh-Rotation mit Widerruf der ganzen Familie. Refresh-Tokens rotieren bei jeder Nutzung; wird ein altes erneut verwendet, werden alle Tokens der Familie widerrufen (gemäß OAuth 2.0 Security BCP). Aktive Zaps, die innerhalb des rollierenden 30-Tage-Fensters erneuern, müssen praktisch nie neu autorisiert werden.
- HMAC-signierte Webhook-Zustellung. Jede Payload, die Rekomi an die Catch-URL von Zapier sendet, ist mit HMAC-SHA256 signiert und mit
X-Rekomi-Signature: t=<unix>,v1=<hex>versehen. Zapier prüft das auf seiner Seite; du musst nichts tun. - Audit-Log für alles. Jede erteilte Zustimmung, jede Token-Ausgabe, jede Erneuerung, jeder Widerruf im Dashboard und jede erkannte Wiederverwendung eines Tokens schreibt einen Eintrag, den du unter
/dashboard/settings/audit-logsiehst (Aktionen mit dem Präfixoauth.*). Auch jeder Schreibvorgang, den Zapier auslöst, schreibt einen Eintrag; Zapier-Traffic erkennst du am User-Agent der Anfrage (Rekomi-Zapier/<version>, zum BeispielRekomi-Zapier/2.2.0). - Trennung pro Organisation. Tokens sind an die Organisation gebunden, die du bei der Zustimmung gewählt hast, und können keine andere Organisation lesen oder ändern, auch wenn dein Clerk-Nutzer zu beiden gehört.
Siehe auch
- OAuth 2.0: Details zum Protokoll der Zapier-Verbindung (Autorisierungs-URL, Token-URL, Scopes, Refresh-Rotation, Widerruf).
- Webhooks: die zugrunde liegenden Ereignisformate hinter jedem Rekomi-Trigger. Zapier nutzt diese Schnittstelle über REST-Hook-Abonnements.
- API-Referenz: die direkten REST-Entsprechungen zu allem, was die Zapier-Aktionen intern tun. Hilfreich, wenn du etwas brauchst, das Zapier nicht anbietet.
- MCP-Server: das Gegenstück zu Zapier für KI-Assistenten, gleiche Rekomi-Schnittstelle, anderes Nutzungsmodell.
- Stripe verbinden: die Integration auf Seite der Marke, in die sich Zapier neben der Stripe-Verbindung einfügt.
- Verbindungen verwaltest du unter app.rekomi.com/dashboard/settings/connected-apps.