Valutazione tecnica

Repull per piattaforme SaaS: 20 domande, con risposta

Le domande di integrazione che le piattaforme SaaS ci mandano prima di una prima call, ognuna con la risposta su ciò che esiste oggi e il link alla documentazione relativa. Parti dal Quickstart e dal riferimento API se vuoi prima smanettare con l’API. La parte commerciale è in Repull per le piattaforme.

D1 – D7

Modello di piattaforma e connessioni

D1.Repull supporta un modello da piattaforma SaaS, in cui un cliente Repull collega molti account indipendenti di utenti finali?

Sì. È esattamente ciò per cui è fatto il flusso Connect ospitato: ognuno dei tuoi utenti finali autorizza il proprio account di canale (per esempio il proprio account host Airbnb) nel tuo workspace Repull. Ogni account collegato ha il suo tracciamento, i suoi token e il suo monitoraggio dello stato.

Docs: Connect (multicanale), OAuth Connect, Connect Widget.

D2.Qual è il numero massimo di account collegati per un’organizzazione Repull?

Non c’è un limite tecnico agli account collegati. I piani si pagano per annuncio: Free copre fino a 3 annunci, Starter costa 99 $/mese con 10 annunci inclusi e 5 $ per annuncio dall’11° fino a 100, e oltre i 100 annunci (dove finisce una piattaforma che serve molti host) c’è un piano Custom con prezzi a volume e un unico workspace partner per tutti i tuoi clienti.

Docs: Prezzi, Repull per le piattaforme.

D3.Ogni utente collegato può avere credenziali e token isolati?

Sì. I token di accesso e di refresh sono salvati per account collegato, completamente isolati. Se un utente revoca l’accesso, la revoca riguarda solo il suo account: ricevi un webhook account.disconnected per quell’account con un motivo leggibile da macchina, e tutti gli altri continuano a sincronizzarsi.

D4.Possiamo associare un nostro identificativo interno quando creiamo una connessione, così da ritrovarlo in ogni webhook collegato?

Sì. Passa il tuo id utente interno come state quando crei la sessione Connect. Quando l’utente ha finito, il webhook connect.session.completed ti restituisce quello state insieme all’account collegato, così li associ una volta sola. Da lì in poi ogni consegna webhook contiene un blocco account (provider e externalAccountId, l’id del provider stesso) più gli header X-Repull-Account e X-Repull-Account-Id, e prenotazioni, conversazioni e recensioni riportano lo stesso account su ogni record.

Docs: OAuth Connect, Webhook.

D5.Possiamo recuperare tutte le connessioni della nostra organizzazione, per esempio con un endpoint tipo GET /connections?

Sì. GET /v1/connect elenca tutte le connessioni del tuo workspace (id, provider, stato, id dell’account esterno). C’è anche un endpoint di stato dedicato per canale, per esempio GET /v1/channels/airbnb/connection, che restituisce ogni account Airbnb collegato con il suo stato e il motivo dell’ultima disconnessione, pensato per essere interrogato da una pagina di stato.

Docs: Riferimento API, Connect.

D6.È supportato il flusso crea sessione → redirect → autorizza → ritorno → webhook → attiva → API?

Sì, esattamente così:

  1. 1POST /v1/connect restituisce l’URL di una sessione ospitata (valida 30 minuti)
  2. 2Ci mandi il tuo utente
  3. 3L’utente autorizza Airbnb (o sceglie un altro canale dal selettore)
  4. 4L’utente torna al tuo redirectUrl con status=connected&accountId=… e il tuo state
  5. 5Partono i webhook account.created e connect.session.completed
  6. 6La connessione è attiva; la sincronizzazione iniziale parte da sola in background
  7. 7Leggi i dati via API e ricevi webhook continui

Docs: Connect, Quickstart.

D7.Repull gestisce per intero l’autenticazione Airbnb: login, permessi, scambio dei token, refresh, scadenza, nuova autenticazione?

Sì, dall’inizio alla fine: login Airbnb, gestione di permessi e scope (sola lettura, messaggistica o accesso completo), scambio dei token, token di refresh e scadenze li gestisce Repull. Quando un refresh viene rifiutato o l’accesso viene revocato a monte, l’account viene segnalato e ricevi account.disconnected con un motivo (refresh_token_rejected, auth_expired, revoked_upstream, manual_disconnect), così puoi rimandare l’utente nello stesso flusso ospitato per autenticarsi di nuovo.

Docs: Canale Airbnb.

D8 – D9

Test e personalizzazione

D8.Quali ambienti di test o sandbox sono disponibili: connessioni, account o annunci di prova, dati fittizi, risposte sandbox?

Sì. Non c’è una sandbox separata: ogni account riceve una chiave sk_live_* alla registrazione (piano gratuito, senza carta), quindi fai i test direttamente sull’API reale: crei proprietà, prenotazioni e sottoscrizioni webhook vere e le elimini quando hai finito. Il sistema di webhook ha strumenti di test propri: POST /v1/webhooks/{id}/test/{event_type} invia payload di esempio realistici per ogni tipo di evento, più endpoint di ping e reinvio e log completi delle consegne.

Una precisazione onesta: Airbnb non offre account host di sandbox, quindi un test OAuth completo richiede un vero login Airbnb in qualsiasi ambiente. Tutto quello che viene dopo (webhook, formati dei dati, gestione degli errori) si testa per intero con eventi di esempio, senza una connessione Airbnb reale.

Docs: Gestire i webhook.

D9.L’interfaccia di connessione si può personalizzare: brand, logo, colori, testi, esperienza di redirect?

Sì.Le pagine Connect ospitate sono in white label per workspace: nome dell’app, logo (versione chiara e scura), colori primario e d’accento per entrambi i temi, email di supporto nel footer, i tuoi URL di termini e privacy, un URL di redirect predefinito e una lingua predefinita. L’URL resta su connect.repull.dev e la pagina ha un link “Powered by Repull”.

Docs: Connect Widget.

D10 – D14

Canali, proprietà e recensioni

D10.Un singolo utente può collegare più canali tramite Repull?

Sì. Un utente può avere più connessioni insieme (Airbnb, Booking.com, Vrbo e un PMS), e un workspace può avere molti account per canale: molti host Airbnb, molte strutture Booking.com, molti account Vrbo. L’unico limite oggi è una connessione per gestionale (PMS) per workspace. La sessione ospitata può mostrare un selettore multicanale o essere limitata a provider specifici con allowedProviders.

Docs: Connect (multicanale), Copertura PMS.

D11.Esiste un flusso API per scollegare un account da un canale?

Sì. DELETE /v1/connect/{provider} revoca il token OAuth dove il canale lo consente, cancella le credenziali salvate e ferma tutti i job di sincronizzazione di quella connessione. Passa un accountId per scollegare un account senza toccare gli altri sullo stesso canale.

D12.Possiamo leggere proprietà e annunci dai canali collegati, filtrati per canale, con l’id originale della proprietà sul canale e l’attribuzione?

Sì. GET /v1/listings ha paginazione a cursore e si filtra con ?channel=airbnb|booking|vrbo. Ogni annuncio ha un array channels[] con la piattaforma, l’id originale della proprietà sul canale (externalId) e lo stato di attivazione e sincronizzazione, così sai sempre a quale canale appartiene ogni proprietà e qual è il suo id nativo. Espansioni opzionali con ?include=content,details,amenities.

Docs: Elencare le proprietà, Dettagli della proprietà, Contenuti e dettagli dell’annuncio.

D13.Possiamo pubblicare risposte alle recensioni sui canali supportati (per esempio Airbnb, Vrbo, Booking.com)?

Airbnb: sì, con POST /v1/reviews/{id}/reply, se l’host si è collegato con accesso completo. Airbnb consente di scrivere sulle recensioni solo con il suo permesso di gestione delle proprietà, quindi le connessioni in sola lettura e di messaggistica leggono le recensioni ma non possono rispondere. Booking.com e Vrbo: in test. Le risposte passano dallo stesso endpoint, ma non sono ancora state provate su una recensione reale.

Docs: Recensioni, OAuth Connect.

D14.Possiamo ricevere le recensioni tramite API? Sono disponibili le nuove recensioni e i loro aggiornamenti?

Sì. GET /v1/reviews è un flusso unificato di recensioni da tutti i canali (Airbnb, Booking.com, Vrbo) con filtri per piattaforma, annuncio, intervallo di voto, con o senza risposta, e recensioni dell’ospite o dell’host. Gli aggiornamenti, risposte dell’host comprese, finiscono sugli stessi record.

I webhook review.created e review.responded ti avvisano quando arriva una recensione o riceve una risposta. L’endpoint è servito dal nostro database, mai da una chiamata live al canale, quindi interrogarlo costa poco.

Docs: Elencare le recensioni.

D15

Webhook

D15.Potete fornire l’elenco completo degli eventi webhook disponibili?

Il catalogo aggiornato è su Tipi di eventi webhook e in formato leggibile da macchina su GET /v1/webhooks/event-types (con payload di esempio). Eventi attuali:

Prenotazioni
reservation.createdreservation.updatedreservation.cancelledreservation.message.receivedreservation.message.sentreservation.message.updatedreservation.alteration.createdreservation.alteration.respondedreservation.request.createdreservation.request.updated
Richieste info
inquiry.createdinquiry.updated
Annunci
listing.createdlisting.updatedlisting.deletedlisting.suspendedlisting.reactivated
Calendario
calendar.updated
Account
account.createdconnect.session.completedaccount.disconnected
Recensioni
review.createdreview.responded
IA
ai.operation.completedai.operation.failed
Pagamenti
payment.completedpayment.refundedpayout.completed
Migrazioni
migration.completedmigration.failed
Sistema
repull.pingusage.quota.warning

Le consegne sono firmate HMAC-SHA256 (in stile Stripe), con tentativi automatici, reinvio e log completi: Verificare le firme, Tentativi, Gestire i webhook.

D16 – D17

Scala e architettura

D16.Come gestisce Repull le sincronizzazioni grandi, per esempio 800 proprietà e 100.000 recensioni? API bulk, job in background, limiti di paginazione, durata della sincronizzazione completa?

Le sincronizzazioni sono job in background. Collegare un account avvia in parallelo più pipeline (annunci, calendario e prezzi, messaggi, recensioni, transazioni) sulla nostra infrastruttura di code; tu non devi gestire niente. La durata della sincronizzazione iniziale dipende soprattutto dai limiti del canale stesso, quindi cresce con la dimensione dell’account: i portafogli grandi finiscono in background mentre la connessione è già utilizzabile.

Le letture hanno paginazione a cursore fino a 100 elementi per pagina (stabile a qualsiasi profondità), quindi 100.000 recensioni sono circa 1.000 chiamate, niente rispetto al limite predefinito di 600 richieste al minuto. Le modifiche arrivano via webhook, così non devi mai ripassare tutto.

Docs: Limiti di richieste, Idempotenza.

D17.I dati vengono letti in tempo reale dalle API di Airbnb e dei canali, oppure Repull li salva e sincronizza?

Sono sincronizzati. Repull sincronizza i dati dei canali nel nostro database e serve l’API da lì. È una scelta di progetto centrale: letture veloci e coerenti che non si bloccano mai sull’API di Airbnb né ne subiscono i limiti, e la tua app continua a funzionare anche quando la fonte ha problemi. Le risposte includono un blocco data_freshness (last_synced_at, indicatore di dati non aggiornati) così sai sempre quanto sono freschi i dati.

D18 – D20

Prezzi e supporto

D18.Il prezzo si basa su chiamate API, account collegati, proprietà, prenotazioni o recensioni?

Per annuncio, con una quota di chiamate API per piano, non per prenotazione, recensione, webhook o account collegato. Free: 0 $, fino a 3 annunci, 1.000 chiamate/mese. Starter: 99 $/mese, 10 annunci inclusi, 5 $ per annuncio dall’11° fino a 100, 100.000 chiamate/mese, webhook inclusi. Custom: oltre 100 annunci con prezzi a volume e limiti API su misura per la tua integrazione.

Docs: Prezzi, Crediti e utilizzo.

D19.Quanto costerebbe per 1.000 utenti property manager collegati?

È territorio del piano Custom. Il prezzo a quella scala dipende dagli annunci per utente e dal volume API, e lo impostiamo come una partnership di piattaforma, non come una tariffa per postazione. Mandaci i tuoi numeri e ricevi una proposta concreta: come funzionano i prezzi per le piattaforme.

D20.Esiste un canale di supporto tecnico dedicato per i problemi di integrazione?

Starter include supporto via email; Custom include supporto prioritario via email e, per un’integrazione di piattaforma grande, possiamo aprire un canale condiviso con il nostro team di ingegneria.

Nel quotidiano l’API è pensata per cavarsela da sola: ogni risposta di errore contiene un request_id, un codice leggibile da macchina, un campo fix con il passo successivo esatto e un link diretto alla documentazione degli errori.

RepullDomande delle piattaforme SaaS

Domande? hello@repull.dev