Updated Oct 2026
Hostaway reviews API in Python: Airbnb, Booking.com and Vrbo guest reviews, replies
Airbnb has no public reviews API and Booking.com paused new partners, so for a property manager the practical route to guest reviews is the channel manager. Hostaway’s API returns the guest-to-host reviews of every listing across Airbnb, Booking.com and Vrbo, with a 0-to-10 rating, and lets you respond once per review. This guide does it with requests, following Hostaway’s documentation, which is also how Prisma’s Hostaway connector works (in beta). The travel picture is on hotel reviews API and reply to Airbnb reviews by API.
pip install requestsCredentials: your Hostaway account id and an API secret (Hostaway → Settings → Hostaway API → Create).
1. Get a token (lasts about 24 months)
import os, requests
API = "https://api.hostaway.com/v1"
r = requests.post(f"{API}/accessTokens", headers={"Content-Type": "application/x-www-form-urlencoded", "Cache-control": "no-cache"},
data={"grant_type": "client_credentials", "client_id": os.environ["HOSTAWAY_ACCOUNT_ID"], "client_secret": os.environ["HOSTAWAY_API_SECRET"], "scope": "general"}, timeout=30)
r.raise_for_status()
H = {"Authorization": f"Bearer {r.json()['access_token']}", "Content-Type": "application/json", "Cache-control": "no-cache"}Store the token; request a new one only after a 403, which is how Hostaway signals a revoked token.
2. Listings
listings = requests.get(f"{API}/listings", headers=H, params={"limit": 500}, timeout=30).json()["result"]
for l in listings:
print(l["id"], l.get("name") or l.get("internalListingName"), l.get("address"), l.get("airbnbListingUrl"))
LISTING_ID = listings[0]["id"]3. Published guest reviews, newest first
def reviews(listing_id, submitted_after=None, limit=100):
offset = 0
while True:
params = {"listingMapIds[]": listing_id, "type": "guest-to-host", "statuses[]": "published", "sortBy": "submittedAt", "sortOrder": "desc", "limit": limit, "offset": offset}
if submitted_after:
params["submittedAtStart"] = submitted_after # "YYYY-MM-DD HH:MM:SS" UTC
r = requests.get(f"{API}/reviews", headers=H, params=params, timeout=30)
r.raise_for_status()
batch = r.json()["result"]
if not batch:
break
yield from batch
offset += limit
for rev in reviews(LISTING_ID):
stars = None if rev.get("rating") is None else max(1, min(5, round(rev["rating"] / 2)))
print(rev["id"], rev.get("channelId"), rev.get("rating"), stars, rev.get("guestName"), rev.get("submittedAt"), (rev.get("publicReview") or "")[:80], "| responded" if (rev.get("revieweeResponse") or "").strip() else "")Fields: id, listingMapId, type, status, rating (0 to 10; halve it for a 5-star scale), publicReview (the guest’s text), revieweeResponse (your response, if any), guestName, submittedAt, departureDate and channelId (which channel the review came from). Dates are YYYY-MM-DD HH:MM:SS in UTC. Responses to the API are wrapped in {"status": "success", "result": ...}; a status of fail carries a message.
4. Respond (once, within the channel’s window)
requests.post(f"{API}/reviews/{rev['id']}/respond", headers=H, json={"revieweeResponse": "Thank you, Laura! The new coffee machine is in for your next stay."}, timeout=30).raise_for_status()One response per review; a second attempt fails, and it can’t be edited or deleted. Airbnb accepts responses for 30 days after the review; other channels have their own windows. Read the review back (GET /v1/reviews/{id}) before retrying a request that timed out.
5. The same job through Prisma
Prisma connects a Hostaway account with the account id and secret (checked before storing, encrypted), imports each listing as a location, maps the 0-10 rating to stars next to the original, syncs published guest reviews and publishes responses through /respond; after a dropped request it reads the review back instead of responding twice. One key then covers Hostaway (and Hospitable and Guesty, the same way) plus Google, Tripadvisor, Expedia and 50+ other platforms.
H = {"Authorization": f"Bearer {os.environ['PRISMA_API_KEY']}"}
r = requests.get("https://api.prismareviews.com/v1/reviews", headers=H, params={"platform": "hostaway", "has_reply": "false", "limit": 100}, timeout=30)
for rev in r.json()["data"]:
print(rev["rating"], rev["author"], rev["text"])
requests.post(f"https://api.prismareviews.com/v1/reviews/{rev['id']}/reply", headers=H, json={"text": "Thank you, Laura! The new coffee machine is in for your next stay."}, timeout=30).raise_for_status()Hostaway is in beta in Prisma, with replies live. Connection fields: Platforms. A test key returns sample reviews so the code runs now.
FAQ
Can I get Airbnb reviews by API?
Not from Airbnb directly: it has no public reviews API. If the listings are managed in a connected channel manager such as Hostaway, Hospitable or Guesty, their APIs return the guest reviews from Airbnb, Booking.com and Vrbo, and let you respond within each channel’s window.
How does the Hostaway API authenticate?
POST /v1/accessTokens with grant_type client_credentials, your Hostaway account id as client_id, the API secret as client_secret and scope general. The token lasts about 24 months; a 403 means it was revoked and you request a new one.
Can I respond to a guest review more than once through Hostaway?
No. POST /v1/reviews/{id}/respond works once per review, and only inside the channel’s response window (30 days on Airbnb). A second attempt fails, and the response can’t be edited or removed.
Airbnb, Booking.com and Vrbo reviews next to Google and Tripadvisor.
2 locations free. Test keys return sample reviews from every platform.