For software vendors

Your AI answers guests
on every channel.

Repull delivers each guest message to your model with the thread and booking behind it, and sends the answer back on Airbnb, Booking.com or Vrbo. You bring the intelligence; we handle the channels.

What your product gets

The plumbing an AI assistant needs.

Your model decides what to say. Repull gets the message to it and the answer to the guest.

Every question, as it arrives

A signed webhook for each new guest message, with the thread id, channel, booking and text.

The context to answer well

Thread history, the reservation with dates, guests and stay terms, and the listing — one call each.

Replies you can trust

When a channel rewrites a message (Airbnb strips links and phone numbers), the response tells you exactly what the guest received.

How it works

Webhook in, answer out.

Subscribe to guest messages, look up the context, let your model write the reply, and send it. Use the event id as the idempotency key so a retried webhook never sends twice.

  1. 1

    Receive the message

    reservation.message.received arrives signed, with threadId and reservationId.

  2. 2

    Gather context

    Fetch the thread history and the reservation. Add your own knowledge base.

  3. 3

    Send the answer

    POST the reply. Repull delivers it on the guest's channel and records it in the thread.

assistant.ts · ts
// api(): fetch on api.repull.dev with your API key
// Subscribed to reservation.message.received
export async function POST(req: Request) {
  const event = await req.json() // verify X-Repull-Signature first
  if (event.event !== 'reservation.message.received') return new Response(null)

  const { threadId, reservationId, body } = event.data

  // Context: the thread so far and the booking it belongs to
  const history = await api(`/v1/conversations/${threadId}/messages?order=asc`)
  const booking = reservationId ? await api(`/v1/reservations/${reservationId}`) : null

  const reply = await yourModel.answer({ question: body, history, booking })

  const sent = await api(`/v1/conversations/${threadId}/messages`, {
    method: 'POST',
    headers: { 'Idempotency-Key': event.eventId },
    body: JSON.stringify({ message: reply }),
  })

  // Airbnb strips links and phone numbers — check what the guest actually got
  if (sent.contentRewritten) log('delivered as', sent.deliveredContent)
  return new Response(null)
}

Channel coverage

Where your assistant can answer

AirbnbRead and reply on reservations and inquiries.
Booking.comRead and reply, including attachments.
VrboRead and reply with text.
Host's PMSGuest messages from every channel the PMS manages, direct bookings included, for the PMSs we connect to. Replies go back through the PMS where its API allows it.

Coverage is checked against the live API. Full channel and PMS coverage

Alongside any PMS

Your customers keep the tools they already run.

The PMS stays in charge of the listing

On Airbnb and Vrbo, Repull connects with messaging-level access. The host's PMS keeps managing listings and calendars, and your product never competes with it for control.

Booking.com through the host's extranet login

In beta: reservations, messages and reviews from Booking.com, without the host moving their connectivity provider away from their PMS.

One integration, every channel

The same endpoints and the same webhook events whether the guest booked on Airbnb, Booking.com or Vrbo. You build it once.

How Repull works alongside a PMS→

The API behind it

Endpoints and events

reservation.message.received

Webhook: a new guest message, with thread, booking and channel.

GET /v1/conversations/{id}/messages

The conversation so far, for context.

GET /v1/reservations/{id}

Dates, guests, stay terms and status.

POST /v1/conversations/{id}/messages

Send the answer, idempotently.

POST /v1/reviews/{id}/reply

Let the same assistant answer reviews, where the channel allows replies.

MCP server and AI SDK provider

Give an agent Repull as tools instead of writing the calls yourself.

Put your AI in front of every guest.

Free to start. Wire up one webhook and answer your first guest today.