Ocena techniczna
Pytania o integrację, które platformy SaaS wysyłają nam przed pierwszą rozmową, każde z odpowiedzią opartą na tym, co istnieje dziś, i z linkiem do odpowiedniej dokumentacji. Zacznij od Quickstartu i referencji API, jeśli chcesz najpierw pobawić się API. Część komercyjna jest w Repull dla platform.
P1 – P7
Tak. Dokładnie do tego zbudowano hostowany proces Connect: każdy z Twoich użytkowników końcowych autoryzuje własne konto kanału (na przykład własne konto gospodarza Airbnb) w Twoim workspace’ie Repull. Każde połączone konto ma własne śledzenie, własne tokeny i własne monitorowanie stanu.
Dokumentacja: Connect (wiele kanałów), OAuth Connect, Connect Widget.
Nie ma technicznego limitu połączonych kont. Plany są rozliczane za ofertę: Free obejmuje do 3 ofert, Starter kosztuje 99 $/mies. z 10 ofertami w cenie i 5 $ za każdą ofertę od 11. do 100, a powyżej 100 ofert (gdzie ląduje platforma obsługująca wielu gospodarzy) jest plan Custom z ceną wolumenową i jednym workspace’em partnerskim dla wszystkich Twoich klientów.
Dokumentacja: Cennik, Repull dla platform.
Tak. Tokeny dostępu i odświeżania są przechowywane osobno dla każdego połączonego konta, w pełni odizolowane. Cofnięcie dostępu przez jednego użytkownika dotyczy tylko jego konta: dostajesz webhook account.disconnected dla tego konta z powodem czytelnym dla maszyny, a wszystkie pozostałe synchronizują się dalej.
Tak. Przekaż swoje wewnętrzne id użytkownika jako state przy tworzeniu sesji Connect. Gdy użytkownik skończy, webhook connect.session.completed zwraca Ci ten state razem z połączonym kontem, więc wiążesz je raz. Od tej chwili każde dostarczenie webhooka zawiera blok account (provider i externalAccountId, własne id dostawcy) oraz nagłówki X-Repull-Account i X-Repull-Account-Id, a rezerwacje, rozmowy i opinie mają to samo konto w każdym rekordzie.
Dokumentacja: OAuth Connect, Webhooki.
Tak. GET /v1/connect wymienia wszystkie połączenia w Twoim workspace’ie (id, dostawca, status, id konta zewnętrznego). Jest też osobny endpoint stanu dla kanału, np. GET /v1/channels/airbnb/connection, który zwraca każde połączone konto Airbnb ze statusem i powodem ostatniego rozłączenia, zaprojektowany do odpytywania z ekranu statusu.
Dokumentacja: Referencja API, Connect.
Tak, dokładnie taki:
POST /v1/connect zwraca URL hostowanej sesji (ważnej 30 minut)redirectUrl z status=connected&accountId=… i Twoim stateaccount.created i connect.session.completedDokumentacja: Connect, Quickstart.
Tak, od początku do końca: logowanie do Airbnb, uprawnienia i zakresy (tylko odczyt, wiadomości albo pełny dostęp), wymianę tokenów, tokeny odświeżania i wygasanie obsługuje Repull. Gdy odświeżenie zostanie odrzucone albo dostęp cofnięty po stronie kanału, konto jest oznaczane, a Ty dostajesz account.disconnected z powodem (refresh_token_rejected, auth_expired, revoked_upstream, manual_disconnect), żeby odesłać użytkownika przez ten sam hostowany proces do ponownego uwierzytelnienia.
Dokumentacja: Kanał Airbnb.
P8 – P9
Tak. Nie ma osobnego sandboxa: każde konto dostaje przy rejestracji klucz sk_live_* (darmowy plan, bez karty), więc testujesz bezpośrednio na prawdziwym API: tworzysz prawdziwe obiekty, rezerwacje i subskrypcje webhooków, a po skończeniu je usuwasz. System webhooków ma własne narzędzia testowe: POST /v1/webhooks/{id}/test/{event_type} wysyła realistyczne przykładowe payloady dla dowolnego typu zdarzenia, do tego endpointy ping i ponownej wysyłki oraz pełne dzienniki dostarczeń.
Uczciwe zastrzeżenie: Airbnb nie oferuje sandboxowych kont gospodarza, więc pełny test OAuth wymaga prawdziwego logowania do Airbnb niezależnie od środowiska. Wszystko, co dzieje się dalej (webhooki, kształt danych, obsługa błędów), przetestujesz w całości na przykładowych zdarzeniach, bez prawdziwego połączenia z Airbnb.
Dokumentacja: Zarządzanie webhookami.
Tak.Hostowane strony Connect są white-label dla każdego workspace’u: nazwa aplikacji, logo (wersja jasna i ciemna), kolor główny i akcentowy dla obu motywów, e-mail wsparcia w stopce, Twoje własne adresy regulaminu i polityki prywatności, domyślny URL przekierowania i domyślny język. Adres pozostaje na connect.repull.dev, a strona ma link „Powered by Repull”.
Dokumentacja: Connect Widget.
P10 – P14
Tak. Użytkownik może mieć kilka połączeń naraz (Airbnb, Booking.com, Vrbo i PMS), a workspace może mieć wiele kont na kanał: wielu gospodarzy Airbnb, wiele obiektów Booking.com, wiele kont Vrbo. Jedyny limit dziś to jedno połączenie z danym systemem zarządzania obiektami na workspace. Hostowana sesja może pokazać wybór wielu kanałów albo zostać ograniczona do konkretnych dostawców przez allowedProviders.
Dokumentacja: Connect (wiele kanałów), Pokrycie PMS.
Tak. DELETE /v1/connect/{provider} unieważnia token OAuth, jeśli kanał na to pozwala, usuwa zapisane poświadczenia i zatrzymuje wszystkie zadania synchronizacji tego połączenia. Przekaż accountId, żeby odłączyć jedno konto bez ruszania pozostałych na tym samym kanale.
Tak. GET /v1/listings jest stronicowany kursorem i filtrowany przez ?channel=airbnb|booking|vrbo. Każda oferta ma tablicę channels[] z platformą, oryginalnym id obiektu w kanale (externalId) i statusem aktywności oraz synchronizacji, więc zawsze wiesz, do którego kanału należy dany obiekt i jakie ma natywne id. Opcjonalne rozszerzenia przez ?include=content,details,amenities.
Dokumentacja: Lista obiektów, Szczegóły obiektu, Treść i szczegóły oferty.
Airbnb: tak, przez POST /v1/reviews/{id}/reply, jeśli gospodarz połączył się z pełnym dostępem. Airbnb pozwala na zapis opinii tylko z uprawnieniem do zarządzania obiektami, więc połączenia tylko do odczytu i do wiadomości mogą czytać opinie, ale nie mogą na nie odpowiadać. Booking.com i Vrbo: w fazie testów. Odpowiedzi idą przez ten sam endpoint, ale nie zostały jeszcze potwierdzone na prawdziwej opinii.
Dokumentacja: Opinie, OAuth Connect.
Tak. GET /v1/reviews to ujednolicony strumień opinii ze wszystkich kanałów (Airbnb, Booking.com, Vrbo) z filtrami po platformie, ofercie, zakresie ocen, z odpowiedzią lub bez, oraz opiniach gości lub gospodarzy. Aktualizacje, w tym odpowiedzi gospodarza, trafiają do tych samych rekordów.
Webhooki review.created i review.responded informują Cię, gdy przychodzi opinia albo dostaje odpowiedź. Endpoint jest serwowany z naszej bazy danych, nigdy przez wywołanie kanału na żywo, więc odpytywanie go też jest tanie.
Dokumentacja: Lista opinii.
P15
Aktualny katalog jest w Typach zdarzeń webhook, a w formie czytelnej dla maszyn pod GET /v1/webhooks/event-types (z przykładowymi payloadami). Obecne zdarzenia:
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.warningDostarczenia są podpisane HMAC-SHA256 (w stylu Stripe), z ponawianiem, ponowną wysyłką i pełnymi dziennikami: Weryfikacja podpisów, Ponawianie, Zarządzanie webhookami.
P16 – P17
Synchronizacje to zadania w tle. Połączenie konta uruchamia równolegle kilka potoków (oferty, kalendarz i ceny, wiadomości, opinie, transakcje) na naszej infrastrukturze kolejek; niczym nie musisz zarządzać. Czas pierwszej synchronizacji zależy głównie od limitów samego kanału, więc rośnie z wielkością konta: duże portfele kończą się w tle, gdy połączenie jest już używalne.
Odczyty są stronicowane kursorem do 100 elementów na stronę (stabilnie na dowolnej głębokości), więc 100 000 opinii to około 1000 wywołań, drobiazg przy domyślnym limicie 600 zapytań na minutę. Zmiany przychodzą webhookami, więc nigdy nie musisz przechodzić wszystkiego od nowa.
Dokumentacja: Limity zapytań, Idempotencja.
Są synchronizowane. Repull synchronizuje dane kanałów do naszej własnej bazy danych i serwuje z niej API. To kluczowa decyzja projektowa: szybkie, spójne odczyty, które nigdy nie blokują się na API Airbnb ani nie wpadają w jego limity, a Twoja aplikacja działa dalej, nawet gdy źródło ma problemy. Odpowiedzi zawierają blok data_freshness (last_synced_at, flaga nieaktualnych danych), więc zawsze wiesz, jak świeże są dane.
P18 – P20
Od liczby ofert, z limitem wywołań API w ramach planu, a nie od rezerwacji, opinii, webhooków czy połączonych kont. Free: 0 $, do 3 ofert, 1000 wywołań/mies. Starter: 99 $/mies., 10 ofert w cenie, 5 $ za każdą ofertę od 11. do 100, 100 000 wywołań/mies., webhooki w cenie. Custom: ponad 100 ofert z ceną wolumenową i limitami API dopasowanymi do Twojej integracji.
Dokumentacja: Cennik, Kredyty i zużycie.
To przypadek dla planu Custom. Cena w tej skali zależy od liczby ofert na użytkownika i wolumenu API, i ustalamy ją jako partnerstwo platformowe, a nie stawkę za stanowisko. Wyślij nam swoje liczby, a dostaniesz konkretną propozycję: jak działają ceny dla platform.
Starter obejmuje wsparcie e-mailowe; Custom obejmuje priorytetowe wsparcie e-mailowe, a przy dużej integracji platformy możemy założyć wspólny kanał z naszym zespołem inżynierów.
Na co dzień API jest zaprojektowane tak, żeby wszystko dało się rozwiązać samodzielnie: każda odpowiedź z błędem zawiera request_id, kod czytelny dla maszyny, pole fix z dokładnym kolejnym krokiem i bezpośredni link do dokumentacji błędów.
Pytania? hello@repull.dev