Evaluación técnica
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
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.
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.
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.
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.
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.
Sí, tal cual:
POST /v1/connect devuelve la URL de una sesión alojada (30 minutos de vigencia)redirectUrl con status=connected&accountId=… y tu stateaccount.created y connect.session.completedDocs: Connect, Quickstart.
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
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.
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
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.
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.
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.
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.
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
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:
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.warningLas entregas van firmadas con HMAC-SHA256 (al estilo de Stripe), con reintentos, reenvío y registros completos: Verificar firmas, Reintentos, Gestionar webhooks.
P16 – P17
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.
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
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.
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.
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.
¿Dudas? hello@repull.dev