Evaluación técnica

Repull para plataformas SaaS: 20 preguntas, respondidas

Las preguntas de integración que nos envían las plataformas SaaS antes de una primera llamada, cada una respondida con lo que existe hoy y enlazada a la documentación correspondiente. Empieza por el Quickstart y la referencia de la API si quieres trastear con la API primero. La parte comercial está en Repull para plataformas.

P1 – P7

Modelo de plataforma y conexiones

P1.¿Repull admite un modelo de plataforma SaaS, en el que un cliente de Repull conecta muchas cuentas independientes de usuarios finales?

Sí. Para esto está hecho exactamente el flujo Connect alojado: cada uno de tus usuarios finales autoriza su propia cuenta de canal (por ejemplo, su propia cuenta de anfitrión de Airbnb) en tu workspace de Repull. Cada cuenta conectada tiene su propio seguimiento, sus propios tokens y su propia monitorización de estado.

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

P2.¿Cuál es el número máximo de cuentas conectadas que admite una organización de Repull?

No hay un límite técnico de cuentas conectadas. Los planes se cobran por anuncio: Free cubre hasta 3 anuncios, Starter cuesta 99 $/mes con 10 anuncios incluidos y 5 $ por anuncio a partir del 11.º hasta 100, y por encima de 100 anuncios (donde acaba una plataforma que sirve a muchos anfitriones) es un plan Custom con precio por volumen y un único workspace de partner para todos tus clientes.

Docs: Precios, Repull para plataformas.

P3.¿Cada usuario conectado puede tener credenciales y tokens aislados?

Sí. Los tokens de acceso y de refresco se guardan por cuenta conectada, totalmente aislados. Que un usuario revoque el acceso solo afecta a su cuenta: recibes un webhook account.disconnected para esa cuenta con un motivo legible por máquina, y todas las demás siguen sincronizando.

P4.¿Podemos adjuntar nuestro propio identificador interno al crear una conexión, para que aparezca en cada webhook relacionado?

Sí. Pasa tu id interno de usuario como state al crear la sesión de Connect. Cuando el usuario termina, el webhook connect.session.completed te devuelve ese state junto con la cuenta conectada, así que los asocias una sola vez. A partir de ahí cada entrega de webhook lleva un bloque account (provider y externalAccountId, el id del propio proveedor) y las cabeceras X-Repull-Account y X-Repull-Account-Id, y las reservas, conversaciones y reseñas llevan la misma cuenta en cada registro.

Docs: OAuth Connect, Webhooks.

P5.¿Podemos obtener todas las conexiones de nuestra organización, por ejemplo con un endpoint tipo GET /connections?

Sí. GET /v1/connect lista todas las conexiones de tu workspace (id, proveedor, estado, id de cuenta externa). Además hay un endpoint de estado por canal, por ejemplo GET /v1/channels/airbnb/connection, que devuelve cada cuenta de Airbnb conectada con su estado y el motivo de la última desconexión, pensado para consultarlo desde una pantalla de estado.

Docs: Referencia de la API, Connect.

P6.¿Se admite el flujo crear sesión → redirigir → autorizar → volver → webhook → activa → API?

Sí, tal cual:

  1. 1POST /v1/connect devuelve la URL de una sesión alojada (30 minutos de vigencia)
  2. 2Rediriges a tu usuario a ella
  3. 3El usuario autoriza Airbnb (o elige otro canal en el selector)
  4. 4El usuario vuelve a tu redirectUrl con status=connected&accountId=… y tu state
  5. 5Se disparan los webhooks account.created y connect.session.completed
  6. 6La conexión está activa; la sincronización inicial arranca sola en segundo plano
  7. 7Lees datos por la API y recibes webhooks continuos

Docs: Connect, Quickstart.

P7.¿Repull gestiona por completo la autenticación de Airbnb: inicio de sesión, permisos, intercambio de tokens, refresco, caducidad y reautenticación?

Sí, de principio a fin: el inicio de sesión en Airbnb, la gestión de permisos y scopes (solo lectura, mensajería o acceso completo), el intercambio de tokens, los tokens de refresco y la caducidad los gestiona Repull. Cuando se rechaza un refresco o se revoca el acceso en origen, la cuenta se marca y recibes account.disconnected con un motivo (refresh_token_rejected, auth_expired, revoked_upstream, manual_disconnect) para que puedas devolver al usuario al mismo flujo alojado y que se vuelva a autenticar.

Docs: Canal de Airbnb.

P8 – P9

Pruebas y personalización

P8.¿Qué entornos de prueba o sandbox hay disponibles: conexiones, cuentas o anuncios de prueba, datos simulados, respuestas sandbox?

Sí. No hay un sandbox aparte: cada cuenta recibe una clave sk_live_* al registrarse (plan gratuito, sin tarjeta), así que pruebas directamente contra la API real: creas propiedades, reservas y suscripciones de webhook reales y las borras cuando terminas. El sistema de webhooks tiene sus propias herramientas de prueba: POST /v1/webhooks/{id}/test/{event_type} dispara payloads de ejemplo realistas para cualquier tipo de evento, además de endpoints de ping y reenvío y registros completos de entregas.

Un matiz honesto: Airbnb no ofrece cuentas de anfitrión de sandbox, así que una prueba OAuth completa necesita un inicio de sesión real en Airbnb sea cual sea el entorno. Todo lo que viene después (webhooks, formatos de datos, gestión de errores) se puede probar entero con eventos de ejemplo, sin conexión real a Airbnb.

Docs: Gestionar webhooks.

P9.¿Se puede personalizar la interfaz de conexión: marca, logo, colores, textos, experiencia de redirección?

Sí.Las páginas Connect alojadas van en marca blanca por workspace: nombre de la app, logo (versión clara y oscura), colores principal y de acento para ambos temas, email de soporte en el pie, tus propias URLs de términos y privacidad, una URL de redirección por defecto y un idioma por defecto. La URL sigue en connect.repull.dev y la página lleva un enlace «Powered by Repull».

Docs: Connect Widget.

P10 – P14

Canales, propiedades y reseñas

P10.¿Un mismo usuario puede conectar varios canales a través de Repull?

Sí. Un usuario puede tener varias conexiones a la vez (Airbnb, Booking.com, Vrbo y un PMS), y un workspace puede tener muchas cuentas por canal: muchos anfitriones de Airbnb, muchas propiedades de Booking.com, muchas cuentas de Vrbo. El único límite hoy es una conexión por sistema de gestión de propiedades por workspace. La sesión alojada puede mostrar un selector multicanal o limitarse a proveedores concretos con allowedProviders.

Docs: Connect (multicanal), Cobertura de PMS.

P11.¿Hay un flujo de API para desconectar una cuenta de un canal?

Sí. DELETE /v1/connect/{provider} revoca el token OAuth cuando el canal lo permite, borra las credenciales guardadas y detiene todos los trabajos de sincronización de esa conexión. Pasa un accountId para desconectar una cuenta sin tocar las demás del mismo canal.

P12.¿Podemos obtener las propiedades y anuncios de los canales conectados, filtrados por canal, con el id original de la propiedad en el canal y su atribución?

Sí. GET /v1/listings tiene paginación por cursor y se filtra con ?channel=airbnb|booking|vrbo. Cada anuncio lleva un array channels[] con la plataforma, el id original de la propiedad en el canal (externalId) y el estado activo y de sincronización, así que siempre sabes a qué canal pertenece cada propiedad y cuál es su id nativo. Ampliaciones opcionales con ?include=content,details,amenities.

Docs: Listar propiedades, Detalles de la propiedad, Contenido y detalles del anuncio.

P13.¿Podemos publicar respuestas a reseñas en los canales compatibles (por ejemplo, Airbnb, Vrbo, Booking.com)?

Airbnb: sí, con POST /v1/reviews/{id}/reply, cuando el anfitrión se conectó con acceso completo. Airbnb solo permite escribir en reseñas con su permiso de gestión de propiedades, así que las conexiones de solo lectura y de mensajería pueden leer reseñas pero no responderlas. Booking.com y Vrbo: en pruebas. Las respuestas pasan por el mismo endpoint, pero todavía no se han demostrado con una reseña real.

Docs: Reseñas, OAuth Connect.

P14.¿Podemos recibir reseñas por la API? ¿Están disponibles las reseñas nuevas y sus actualizaciones?

Sí. GET /v1/reviews es un flujo unificado de reseñas de todos los canales (Airbnb, Booking.com, Vrbo) con filtros por plataforma, anuncio, rango de puntuación, respondidas o sin responder, y reseñas de huésped o de anfitrión. Las actualizaciones, respuestas del anfitrión incluidas, se reflejan en los mismos registros.

Los webhooks review.created y review.responded te avisan cuando llega una reseña o recibe respuesta. El endpoint se sirve desde nuestra base de datos, nunca desde una llamada en vivo al canal, así que consultarlo también sale barato.

Docs: Listar reseñas.

P15

Webhooks

P15.¿Podéis darnos la lista completa de eventos de webhook disponibles?

El catálogo en vivo está en Tipos de eventos de webhook y en formato legible por máquina en GET /v1/webhooks/event-types (con payloads de ejemplo). Eventos actuales:

Reservas
reservation.createdreservation.updatedreservation.cancelledreservation.message.receivedreservation.message.sentreservation.message.updatedreservation.alteration.createdreservation.alteration.respondedreservation.request.createdreservation.request.updated
Consultas
inquiry.createdinquiry.updated
Anuncios
listing.createdlisting.updatedlisting.deletedlisting.suspendedlisting.reactivated
Calendario
calendar.updated
Cuentas
account.createdconnect.session.completedaccount.disconnected
Reseñas
review.createdreview.responded
IA
ai.operation.completedai.operation.failed
Pagos
payment.completedpayment.refundedpayout.completed
Migraciones
migration.completedmigration.failed
Sistema
repull.pingusage.quota.warning

Las entregas van firmadas con HMAC-SHA256 (al estilo de Stripe), con reintentos, reenvío y registros completos: Verificar firmas, Reintentos, Gestionar webhooks.

P16 – P17

Escala y arquitectura

P16.¿Cómo gestiona Repull sincronizaciones grandes, por ejemplo 800 propiedades y 100.000 reseñas? ¿APIs en lote, trabajos en segundo plano, límites de paginación, duración de la sincronización completa?

Las sincronizaciones son trabajos en segundo plano. Conectar una cuenta lanza en paralelo varias canalizaciones (anuncios, calendario y precios, mensajes, reseñas, transacciones) en nuestra infraestructura de colas; tú no gestionas nada de eso. La duración de la sincronización inicial depende sobre todo de los límites del propio canal, así que crece con el tamaño de la cuenta: las carteras grandes terminan en segundo plano mientras la conexión ya se puede usar.

Las lecturas tienen paginación por cursor de hasta 100 elementos por página (estable a cualquier profundidad), así que 100.000 reseñas son unas 1.000 llamadas, nada frente al límite por defecto de 600 peticiones por minuto. Los cambios llegan por webhooks, así que nunca tienes que volver a rastrear.

Docs: Límites de peticiones, Idempotencia.

P17.¿Los datos se obtienen en vivo de las APIs de Airbnb y de los canales, o Repull los guarda y sincroniza?

Se sincronizan. Repull sincroniza los datos de los canales en nuestra propia base de datos y sirve la API desde ahí. Es una decisión de diseño central: lecturas rápidas y consistentes que nunca se bloquean por la API de Airbnb ni chocan con sus límites, y tu app sigue funcionando aunque el origen falle. Las respuestas incluyen un bloque data_freshness (last_synced_at, indicador de desactualización) para que siempre sepas lo frescos que están los datos.

P18 – P20

Precios y soporte

P18.¿El precio se basa en llamadas a la API, cuentas conectadas, propiedades, reservas o reseñas?

Por anuncio, con una cuota de llamadas a la API por plan, no por reserva, reseña, webhook ni cuenta conectada. Free: 0 $, hasta 3 anuncios, 1.000 llamadas/mes. Starter: 99 $/mes, 10 anuncios incluidos, 5 $ por anuncio a partir del 11.º hasta 100, 100.000 llamadas/mes, webhooks incluidos. Custom: más de 100 anuncios con precio por volumen y límites de API a la medida de tu integración.

Docs: Precios, Créditos y uso.

P19.¿Cuánto costaría para 1.000 usuarios gestores de propiedades conectados?

Eso es terreno del plan Custom. El precio a esa escala depende de los anuncios por usuario y del volumen de API, y lo planteamos como una alianza de plataforma, no como una tarifa por puesto. Mándanos tus números y te llega una propuesta concreta: cómo funcionan los precios para plataformas.

P20.¿Hay un canal de soporte técnico dedicado para problemas de integración?

Starter incluye soporte por email; Custom incluye soporte prioritario por email y, para una integración de plataforma grande, podemos abrir un canal compartido con nuestro equipo de ingeniería.

En el día a día la API está pensada para resolverse sola: cada respuesta de error lleva un request_id, un código legible por máquina, un campo fix con el siguiente paso exacto y un enlace directo a la documentación de errores.

RepullPreguntas de plataformas SaaS

¿Dudas? hello@repull.dev