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.
1. Search the listings collection
GET /v1/listings is a searchable, paginated collection. Narrow the candidate set with these filters:
| Param | Description |
|---|---|
q | Substring search over listing name / address. |
status | active, inactive, or archived. |
channel | Only listings linked to that channel (e.g. airbnb, booking). |
include | Comma-separated. Accepts content and details to hydrate rows in the same call. |
limit / cursor | Page 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/listings→connections[].airbnbId/hostIdagainstlistingId.GET /v1/channels/booking/properties→connections[].hotelIdagainstlistingId.
Booking rooms
POST /v1/connect/booking/map-rooms — see the Provider capability matrix.