Pair PMS Listings

TL;DR

To map a listing you already track (by its Airbnb or Booking id) onto its Repull id: search GET /v1/listings (filter by channel), then read GET /v1/listings/{id} and match on channels[].externalId.

If you're importing from an existing system, you already have a channel-specific id for each property (its Airbnb listing id, its Booking.com hotel id). Pairing is the one-time step of resolving each of those to its Repull id so your records line up. After that, you use the Repull id everywhere — see IDs & External IDs.

GET /v1/listings is a searchable, paginated collection. Narrow the candidate set with these filters:

ParamDescription
qSubstring search over listing name / address.
statusactive, inactive, or archived.
channelOnly listings linked to that channel (e.g. airbnb, booking).
includeComma-separated. Accepts content and details to hydrate rows in the same call.
limit / cursorPage size (default 20, max 100) and cursor pagination.
# Listings that are linked to Airbnb, matching "sable"
curl "https://api.repull.dev/v1/listings?channel=airbnb&q=sable&include=details" \
  -H "Authorization: Bearer sk_live_YOUR_KEY"
{
  "data": [
    { "id": 4118, "name": "R-Sable 1302", "status": "active" }
  ],
  "pagination": { "next_cursor": null, "has_more": false }
}

Unknown params are caught for you

GET /v1/listings rejects unknown query params and unknown include values with 422 invalid_params and a did_you_mean hint, so a typo like ?chanel=airbnb fails loudly instead of returning everything.

2. Confirm on the external id

Read the candidate with GET /v1/listings/{id} and match the channel id you hold against channels[].externalId. This is the authoritative per-listing view of every channel the property is linked to.

curl https://api.repull.dev/v1/listings/4118 \
  -H "Authorization: Bearer sk_live_YOUR_KEY"
{
  "id": 4118,
  "name": "R-Sable 1302",
  "channels": [
    { "platform": "airbnb",  "externalId": "12345678", "active": true, "syncEnabled": true },
    { "platform": "booking", "externalId": "998877",   "active": true, "syncEnabled": true }
  ]
}

Your Airbnb listing id 12345678 matches channels[0].externalId — store 4118 as the Repull id for that property. Repeat per listing.

Going the other way

If you'd rather start from the channel, the per-channel routes list every connection grouped under its Repull listingId — so you can build the id map in one pass:

  • GET /v1/channels/airbnb/listingsconnections[].airbnbId / hostId against listingId.
  • GET /v1/channels/booking/propertiesconnections[].hotelId against listingId.

Booking rooms

Booking.com properties contain room types. If you're pairing at the room level, map each Booking room to a Repull listing during Connect with POST /v1/connect/booking/map-rooms — see the Provider capability matrix.
AI