Endpoint reference
Reviews
Normalized, paginated reviews for one listing.
/v1/reviewsNormalized, paginated reviews for one listing.
Live calls are asynchronous — you poll for the result
stay_test_ key) and from live cache hits. A live (stay_live_) call that has to scrape returns HTTP 202 with a data.jobId instead of blocking. Poll GET /v1/jobs/{jobId} (always free) until data.status is completed, then read the payload below from data.result (not data); the reconstructed meta — credits, platformResults, warnings — sits at the top level. Jobs usually finish in tens of seconds but can run several minutes (240s+), so budget your wait. The @stayingapi/sdk auto-polls a 202 to completion and hands you this exact synchronous-looking envelope — the simplest way to consume the API. See the response envelope for all three shapes.Normalized, paginated reviews for one listing on one platform. Native rating scales are preserved and echoed alongside each rating (TripAdvisor/Airbnb/Vrbo use 5; Booking.com/Expedia/Hotels.com use 10) — never silently rescaled.
Parameters
| Parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
platform | enum | Yes | — | Platform enum. |
listingId | string | One of | — | Listing id on platform. |
url | string | One of | — | Full listing URL. |
limit | integer | No | 20 | 1–100. |
cursor | string | No | — | Opaque base64 cursor. |
language | string | No | — | ISO-639-1 filter. |
minRating | number | No | — | On the response ratingScale. |
sort | enum | No | recent | recent | rating_desc | rating_asc. |
Request & response
GET /v1/reviews?platform=booking&listingId=abramovic2&limit=20&sort=recent
Host: api.stayingapi.com
Authorization: Bearer stay_live_…{
"data": [
{
"platform": "booking",
"listingId": "abramovic2",
"reviewId": "r987",
"rating": 9, "ratingScale": 10,
"title": "Perfect family stay",
"text": "Spotless apartment a short walk from the old town…",
"author": "Jane D.", "date": "2026-05-10", "tripType": "family",
"language": "en", "ownerResponse": "Thank you!",
"liked": "Location and cleanliness", "disliked": null
}
],
"meta": {
"requestId": "req_rv…",
"platforms": ["booking"],
"cached": false, "partial": false,
"creditsCharged": 20, "currency": "USD",
"pagination": { "limit": 20, "cursor": null, "nextCursor": "eyJ…", "hasMore": true },
"platformResults": [
{ "platform": "booking", "status": "ok", "creditsCharged": 20, "cached": false, "count": 20 }
],
"warnings": []
}
}Code samples
The same call in every language that matters — all returning the identical unified schema.
curl -sS "https://api.stayingapi.com/v1/reviews?platform=booking&listingId=abramovic2&limit=20&sort=recent" \
-H "Authorization: Bearer $STAYINGAPI_KEY"Try it
Run this endpoint against the deterministic sandbox right now — a real 200, zero credits, no sign-up. The credit cost of the equivalent live call is per review · min 5.
/v1/reviewsRuns against the deterministic Booking sandbox fixture — a real 200, zero credits.
Run the call to see a live, deterministic sandbox response.
curl -sS "https://api.stayingapi.com/v1/reviews" \
-H "Authorization: Bearer $STAYINGAPI_KEY"Workflows using this
Ready-made automations built on /v1/reviews — an importable n8n workflow + a portable AI-agent skill each.
- Review-intelligence digest → weekly reputation report — Pull normalized reviews for a property on a schedule and deliver a weekly digest — average rating, recurring themes, and the latest complaints to act on.
- Agent-native scouting via MCP — Connect StayingAPI as a Claude/Cursor MCP connector and scout stays, compare prices and check availability conversationally — no keys pasted.
- Portfolio price & occupancy feed — A daily digest across a saved set of listings — price, rating and recent reviews per listing in one report.