Reviews
List reviews
/v1/reviewsRequest
curl https://api.repull.dev/v1/reviews?limit=20 \ -H "Authorization: Bearer $REPULL_API_KEY"
Response
{
"data": [
{
"id": "123",
"externalId": "123",
"platform": "booking",
"listingId": "123",
"reservationId": "123",
"reservationConfirmationCode": "Example text",
"guestId": "123",
"guestName": "Example",
"guestAvatar": null,
"reviewerRole": "Example text",
"rating": 0,
"categories": [
{
"category": "facilities",
"rating": 0,
"comment": null
}
],
"publicReview": "Example text",
"privateFeedback": null,
"isRevieweeRecommended": null,
"response": null,
"submittedAt": "Example text",
"updatedAt": "Example text",
"expiresAt": null,
"hidden": false,
"language": null,
"providerPropertyId": "123"
}
],
"pagination": {
"nextCursor": "eyJpZCI6MTIzfQ==",
"hasMore": true,
"total": 0
}
}Captured from a real response. Regenerated on every release, and CI fails if this shape stops matching the API.
Query Parameters
accountstringOnly one connected account's records, as `provider:externalAccountId` (e.g. `airbnb:79730216`, `booking:10167991`, `vrbo:36`, `hostaway:…`) — the pair on every webhook `account` block, on `connect.session.completed`, and on each record's `account`. See /for-platforms.
cursorstringOpaque cursor returned in the previous response's `pagination.nextCursor`.
offsetintegerFirst-class alias for cursor-based pagination. Mutually exclusive with `cursor` — passing both returns 422. Accepts integers in `[0, 10000]`; deeper walks must use `cursor` (constant per-page cost). The response always includes `pagination.nextCursor` so consumers can switch from offset → cursor mid-walk for deep pagination without re-keying.
limitintegerplatformstringlistingIdintegerRestrict to one internal Repull listing.
rating_minnumberrating_maxnumberstatusstring`responded` — host has replied. `unanswered` — host has not replied. `all` — no filter.
reviewerRolestring`guest` (default) — reviews written by guests about the host/property. `host` — reviews written by the host about guests. `all` — both.
Get a review
/v1/reviews/:idRequest
curl https://api.repull.dev/v1/reviews/321 \ -H "Authorization: Bearer $REPULL_API_KEY"
Response
{
"id": "123",
"externalId": "123",
"platform": "booking",
"listingId": "123",
"reservationId": "123",
"reservationConfirmationCode": "Example text",
"guestId": "123",
"guestName": "Example",
"guestAvatar": null,
"reviewerRole": "Example text",
"rating": 0,
"categories": [
{
"category": "facilities",
"rating": 0,
"comment": null
}
],
"publicReview": "Example text",
"privateFeedback": null,
"isRevieweeRecommended": null,
"response": null,
"submittedAt": "Example text",
"updatedAt": "Example text",
"expiresAt": null,
"hidden": false,
"language": null,
"providerPropertyId": "123"
}Captured from a real response. Regenerated on every release, and CI fails if this shape stops matching the API.
Reply to a review (Airbnb, Booking.com, VRBO, or through a PMS)
/v1/reviews/:id/replyNote
Request
curl -X POST https://api.repull.dev/v1/reviews/321/reply \
-H "Authorization: Bearer $REPULL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"message": "Thank you for staying with us!"
}'Response
{ "id": "200", "platform": "booking", "pms": null, "response": "Thank you for your kind words!" }Body Parameters
messagestringRequiredReply text. `response` is accepted as an alias.
Review a guest (Airbnb; publishes, final)
/v1/reviews/:id/guest-reviewNote
Request
curl -X POST https://api.repull.dev/v1/reviews/321/guest-review \
-H "Authorization: Bearer $REPULL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"publicReview": "Joanne was a great guest.",
"rating": 5,
"isRevieweeRecommended": true
}'Response
{ "id": "181567", "externalReviewId": "1776076418138684216", "submitted": true }Body Parameters
publicReviewstringRequiredYour review of the guest, shown on their Airbnb profile. Up to 1000 characters. `comment` is accepted as an alias.
isRevieweeRecommendedbooleanRequiredWhether you would host this guest again. Required by Airbnb; never assumed.
ratinginteger1–5, used for every category you do not rate in `categoryRatings`.
categoryRatingsarray`[{ category, rating, comment? }]` for `cleanliness`, `communication`, `respect_house_rules`. All three must end up rated.
privateFeedbackstringA note to the guest that is not published.