Technische Evaluierung
Die Integrationsfragen, die SaaS-Plattformen uns vor einem ersten Gespräch schicken, jeweils beantwortet mit dem, was es heute gibt, und verlinkt mit der passenden Dokumentation. Fang mit dem Quickstart und der API-Referenz an, wenn du die API zuerst ausprobieren willst. Die kommerzielle Seite steht unter Repull für Plattformen.
F1 – F7
Ja. Genau dafür ist der gehostete Connect-Flow gebaut: Jeder deiner Endnutzer autorisiert sein eigenes Kanalkonto (zum Beispiel sein eigenes Airbnb-Gastgeberkonto) in deinem Repull-Workspace. Jedes verbundene Konto wird unabhängig verfolgt, mit eigenen Tokens versehen und auf seinen Zustand überwacht.
Docs: Connect (mehrere Kanäle), OAuth Connect, Connect Widget.
Es gibt keine technische Obergrenze für verbundene Konten. Abgerechnet wird pro Inserat: Free deckt bis zu 3 Inserate ab, Starter kostet 99 $/Monat mit 10 inklusiven Inseraten und 5 $ pro Inserat ab dem 11. bis 100, und über 100 Inseraten (wo eine Plattform mit vielen Gastgebern landet) gibt es einen Custom-Plan mit Volumenpreisen und einem einzigen Partner-Workspace für alle deine Kunden.
Docs: Preise, Repull für Plattformen.
Ja. Access- und Refresh-Tokens werden pro verbundenem Konto gespeichert, vollständig isoliert. Widerruft ein Nutzer den Zugriff, betrifft das nur sein Konto: Du bekommst für dieses Konto einen account.disconnected-Webhook mit einem maschinenlesbaren Grund, und alle anderen synchronisieren weiter.
Ja. Übergib deine interne Nutzer-ID als state, wenn du die Connect-Session erstellst. Wenn der Nutzer fertig ist, gibt dir der Webhook connect.session.completed diesen state zusammen mit dem verbundenen Konto zurück, du ordnest beides also einmal zu. Ab dann trägt jede Webhook-Zustellung einen account-Block (provider und externalAccountId, die eigene ID des Anbieters) sowie die Header X-Repull-Account und X-Repull-Account-Id, und Buchungen, Konversationen und Bewertungen tragen dasselbe Konto in jedem Datensatz.
Docs: OAuth Connect, Webhooks.
Ja. GET /v1/connect listet alle Verbindungen in deinem Workspace (ID, Anbieter, Status, externe Konto-ID). Außerdem gibt es einen eigenen Status-Endpunkt pro Kanal, zum Beispiel GET /v1/channels/airbnb/connection, der jedes verbundene Airbnb-Konto mit Status und Grund der letzten Trennung liefert und dafür gebaut ist, von einer Statusseite abgefragt zu werden.
Docs: API-Referenz, Connect.
Ja, genau so:
POST /v1/connect liefert die URL einer gehosteten Session (30 Minuten gültig)status=connected&accountId=… und deinem state zu deiner redirectUrl zurückgeleitetaccount.created und connect.session.completed werden ausgelöstDocs: Connect, Quickstart.
Ja, von Anfang bis Ende: Airbnb-Login, Berechtigungen und Scopes (nur lesen, Messaging oder voller Zugriff), Token-Austausch, Refresh-Tokens und Ablauf übernimmt Repull. Wird ein Refresh abgelehnt oder der Zugriff beim Anbieter widerrufen, wird das Konto markiert und du bekommst account.disconnected mit einem Grund (refresh_token_rejected, auth_expired, revoked_upstream, manual_disconnect), damit du den Nutzer durch denselben gehosteten Flow zur erneuten Anmeldung schicken kannst.
Docs: Airbnb-Kanal.
F8 – F9
Ja. Es gibt keine separate Sandbox: Jedes Konto bekommt bei der Registrierung einen sk_live_*-Key (kostenloser Plan, keine Kreditkarte), du testest also direkt gegen die echte API: Du legst echte Objekte, Buchungen und Webhook-Abos an und löschst sie wieder, wenn du fertig bist. Das Webhook-System hat eigene Testwerkzeuge: POST /v1/webhooks/{id}/test/{event_type} schickt realistische Beispiel-Payloads für jeden Event-Typ, dazu kommen Ping- und Wiederholungs-Endpunkte und vollständige Zustellprotokolle.
Ehrlicher Hinweis: Airbnb selbst bietet keine Sandbox-Gastgeberkonten, ein kompletter OAuth-Test braucht also in jeder Umgebung einen echten Airbnb-Login. Alles danach (Webhooks, Datenformate, Fehlerbehandlung) lässt sich vollständig mit Beispiel-Events testen, ohne echte Airbnb-Verbindung.
Docs: Webhooks verwalten.
Ja.Die gehosteten Connect-Seiten sind pro Workspace White-Label: App-Name, Logo (helle und dunkle Variante), Primär- und Akzentfarbe für beide Themes, Support-E-Mail in der Fußzeile, deine eigenen URLs zu AGB und Datenschutz, eine Standard-Weiterleitungs-URL und eine Standardsprache. Die URL bleibt auf connect.repull.dev, und die Seite trägt einen „Powered by Repull“-Link.
Docs: Connect Widget.
F10 – F14
Ja. Ein Nutzer kann mehrere Verbindungen gleichzeitig haben (Airbnb, Booking.com, Vrbo und ein PMS), und ein Workspace kann viele Konten pro Kanal haben: viele Airbnb-Gastgeber, viele Booking.com-Unterkünfte, viele Vrbo-Konten. Die einzige Grenze heute ist eine Verbindung pro Property-Management-System pro Workspace. Die gehostete Session kann eine Kanalauswahl zeigen oder über allowedProviders auf bestimmte Anbieter beschränkt werden.
Ja. DELETE /v1/connect/{provider} widerruft den OAuth-Token, wo der Kanal das unterstützt, löscht gespeicherte Zugangsdaten und stoppt alle Sync-Jobs dieser Verbindung. Übergib eine accountId, um ein Konto zu trennen, ohne die anderen auf demselben Kanal anzufassen.
Ja. GET /v1/listings ist cursor-paginiert und mit ?channel=airbnb|booking|vrbo filterbar. Jedes Inserat trägt ein channels[]-Array mit der Plattform, der ursprünglichen Objekt-ID des Kanals (externalId) und dem Aktiv- und Sync-Status, du weißt also immer, zu welchem Kanal ein Objekt gehört und wie seine native ID lautet. Optionale Erweiterungen mit ?include=content,details,amenities.
Docs: Objekte auflisten, Objektdetails, Inhalte und Details eines Inserats.
Airbnb: ja, über POST /v1/reviews/{id}/reply, wenn der Gastgeber mit vollem Zugriff verbunden ist. Airbnb erlaubt Schreibzugriff auf Bewertungen nur mit seiner Property-Management-Berechtigung, daher können Nur-Lesen- und Messaging-Verbindungen Bewertungen lesen, aber nicht beantworten. Booking.com und Vrbo: im Test. Antworten laufen über denselben Endpunkt, sind an einer echten Bewertung aber noch nicht bewiesen.
Docs: Bewertungen, OAuth Connect.
Ja. GET /v1/reviews ist ein kanalübergreifender Bewertungsstrom (Airbnb, Booking.com, Vrbo) mit Filtern für Plattform, Inserat, Bewertungsbereich, beantwortet oder offen sowie Gast- oder Gastgeber-Bewertungen. Aktualisierungen, einschließlich Gastgeber-Antworten, landen in denselben Datensätzen.
Die Webhooks review.created und review.responded melden dir, wenn eine Bewertung eingeht oder beantwortet wird. Der Endpunkt wird aus unserer Datenbank bedient, nie über einen Live-Aufruf beim Kanal, Abfragen ist also auch günstig.
Docs: Bewertungen auflisten.
F15
Der aktuelle Katalog steht unter Webhook-Event-Typen und maschinenlesbar unter GET /v1/webhooks/event-types (mit Beispiel-Payloads). Aktuelle Events:
reservation.createdreservation.updatedreservation.cancelledreservation.message.receivedreservation.message.sentreservation.message.updatedreservation.alteration.createdreservation.alteration.respondedreservation.request.createdreservation.request.updatedinquiry.createdinquiry.updatedlisting.createdlisting.updatedlisting.deletedlisting.suspendedlisting.reactivatedcalendar.updatedaccount.createdconnect.session.completedaccount.disconnectedreview.createdreview.respondedai.operation.completedai.operation.failedpayment.completedpayment.refundedpayout.completedmigration.completedmigration.failedrepull.pingusage.quota.warningZustellungen sind mit HMAC-SHA256 signiert (im Stil von Stripe), mit Wiederholungen, erneuter Zustellung und vollständigen Protokollen: Signaturen prüfen, Wiederholungen, Webhooks verwalten.
F16 – F17
Syncs sind Hintergrund-Jobs. Das Verbinden eines Kontos startet parallele Sync-Pipelines (Inserate, Kalender und Preise, Nachrichten, Bewertungen, Transaktionen) auf unserer Queue-Infrastruktur; du musst nichts davon verwalten. Die Dauer des ersten Syncs hängt vor allem von den Limits des Kanals selbst ab, sie wächst also mit der Kontogröße: Große Portfolios laufen im Hintergrund durch, während die Verbindung schon nutzbar ist.
Lesezugriffe sind cursor-paginiert mit bis zu 100 Einträgen pro Seite (stabil in jeder Tiefe), 100.000 Bewertungen sind also etwa 1.000 Aufrufe, eine Kleinigkeit beim Standardlimit von 600 Anfragen pro Minute. Änderungen kommen per Webhook, du musst also nie alles neu einlesen.
Docs: Rate Limits, Idempotenz.
Synchronisiert. Repull synchronisiert Kanaldaten in unsere eigene Datenbank und bedient die API von dort. Das ist eine zentrale Designentscheidung: schnelle, konsistente Lesezugriffe, die nie an der Airbnb-API blockieren oder in deren Limits laufen, und deine App funktioniert weiter, auch wenn die Quelle wackelt. Antworten enthalten einen data_freshness-Block (last_synced_at, Veraltet-Flag), damit du immer weißt, wie frisch die Daten sind.
F18 – F20
Pro Inserat, mit einem API-Kontingent pro Plan, nicht pro Buchung, Bewertung, Webhook oder verbundenem Konto. Free: 0 $, bis zu 3 Inserate, 1.000 Aufrufe/Monat. Starter: 99 $/Monat, 10 Inserate inklusive, 5 $ pro Inserat ab dem 11. bis 100, 100.000 Aufrufe/Monat, Webhooks inklusive. Custom: mehr als 100 Inserate mit Volumenpreisen und API-Limits passend zu deiner Integration.
Docs: Preise, Credits und Nutzung.
Das ist ein Fall für den Custom-Plan. Der Preis hängt in dieser Größenordnung von den Inseraten pro Nutzer und dem API-Volumen ab, und wir gestalten ihn als Plattformpartnerschaft, nicht als Preis pro Platz. Schick uns deine Zahlen, und du bekommst ein konkretes Angebot: so funktionieren Plattformpreise.
Starter enthält E-Mail-Support; Custom enthält bevorzugten E-Mail-Support, und für eine große Plattform-Integration können wir einen gemeinsamen Kanal mit unserem Engineering-Team einrichten.
Im Alltag ist die API auf Selbsthilfe ausgelegt: Jede Fehlerantwort enthält eine request_id, einen maschinenlesbaren Code, ein fix-Feld mit dem genauen nächsten Schritt und einen direkten Link in die Fehlerdokumentation.
Fragen? hello@repull.dev