Connect (multi-channel)

One hosted entry point that lets your users connect any of 13 channels — Airbnb, Booking.com, Vrbo, Plum Guide, plus 9 property management systems. We render a branded picker, walk the user through the per-channel handoff, and redirect them back to your app when they're done.

How it works

From your server, you create a Connect session. We give you a one-time URL on connect.repull.dev. Send your user there. We render a branded channel picker, the user clicks the channel they manage their listings on, and we take them through the rest of the flow. When everything's done, we redirect them back to your app with status query params on the URL.

  1. Your server calls POST /v1/connect with a redirectUrl.
  2. We return a url on connect.repull.dev.
  3. Redirect your user there.
  4. The picker shows a card for every channel they can connect (or just the ones in your allowed_providers list, if you set one).
  5. The user picks a channel; we walk them through that channel's connection pattern.
  6. The user lands on your redirectUrl when the connection is live.

Already know which channel you want?

Skip the picker — call POST /v1/connect/{provider} with the channel ID instead and the user lands directly on the per-provider screen.

The four connection patterns

Every channel falls into one of four patterns. The picker handles the differences for you — but if you build your own picker against GET /v1/connect/providers, you'll see these in the response.

  • OAuth— the user is redirected to the channel's consent screen, approves access in one click, and we exchange the resulting code for tokens. Used by Airbnb today; coming for Hostaway, Guesty, BookingSync.
  • Credentials— we render a hosted form that collects API keys (or a client ID / secret pair). On submit we validate against the channel's API and persist on success. Used by Plum Guide and most PMSes.
  • Activation— push-only channels (Vrbo). We generate a Basic-Auth credential pair, show the user a 3-step checklist for enabling Repull on the channel's side, and mark the connection live when the channel sends its first inbound request.
  • Claim— connectivity-provider designation (Booking.com). We hold the platform-level secret; the user designates Repull as their connectivity provider in the channel's Extranet, then hands us a Hotel ID to claim.

Start a Connect session

Server-to-server. Authenticate with your live API key. The session expires after 30 minutes if the user doesn't finish.

curl -X POST 'https://api.repull.dev/v1/connect' \
  -H 'Authorization: Bearer sk_live_...' \
  -H 'Content-Type: application/json' \
  -d '{
    "redirectUrl": "https://yourapp.com/connect/done",
    "allowed_providers": ["airbnb", "hostaway", "guesty"]
  }'

Body parameters

redirectUrlstringRequired

Where we send the user when they finish (or cancel). We append status query params to this URL.

statestring

Opaque correlation token. Echoed back in the response so you can match the session to a user without storing the session ID server-side.

allowed_providersstring[]

Optional whitelist of channel IDs the picker should show. Omit to show every channel.

Response

{
  "sessionId": "cs_8gQrT2v9k3M4nLp7wJxYzAbCdEfGhIjKlMnOp",
  "url": "https://connect.repull.dev/cs_8gQrT2v9k3M4nLp7wJxYzAbCdEfGhIjKlMnOp",
  "expiresAt": "2026-04-29T18:25:14.000Z",
  "state": null
}

List supported channels

The full registry is public. Use it to build your own picker or to validate which IDs you can pass to allowed_providers. No API key required.

curl https://api.repull.dev/v1/connect/providers

Each entry includes the channel ID, display name, category (ota or pms), connection pattern, status (live, beta, or coming-soon), logo URL, and a one-line description. The picker sorts OTAs first, then PMSes alphabetically.

Handle the redirect back

When the connection completes (or fails), we redirect the user to your redirectUrl with these query params appended:

?status=connected&provider=hostaway&accountId=42
# or
?status=cancelled
?status=expired

On connected, query GET /v1/connect/{provider} to confirm the connection is live and pull host metadata. For activation-pattern channels (Vrbo) the connection is pending until the channel pushes its first request — you'll get an account.connected webhook event when that happens.

AI