Marriott APImarriott.com ↗
Access Marriott hotel listings, property details, guest reviews, and room availability across all Marriott brands via a structured JSON API.
What is the Marriott API?
The Marriott API covers 4 endpoints that expose hotel listings, property metadata, guest reviews, and availability URLs across all Marriott brands worldwide. The list_hotels endpoint returns full arrays of properties for a given brand — including MARSHA codes, coordinates, and contact details — while get_hotel_details provides per-property flags like has_spa, has_golf, and bookable status. Review data and room availability links are also accessible through dedicated endpoints.
curl -X GET 'https://api.parse.bot/scraper/3736ff40-fd43-4adf-a6c0-81a3d2f86e39/list_hotels?brand=MC&locale=en-US' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace marriott-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.marriott_hotels_api import Marriott, HotelSummary, Hotel, Review, Brand
marriott = Marriott()
# List Westin hotels globally
for hotel_summary in marriott.hotelsummaries.list(brand=Brand.WESTIN, limit=3):
print(hotel_summary.name, hotel_summary.city, hotel_summary.country)
# Navigate from summary to full detail
detail = hotel_summary.details()
print(detail.name, detail.description_main, detail.year_built)
print(detail.has_fitness, detail.has_spa, detail.number_of_rooms)
# Access reviews via the detail resource's sub-resource
for review in detail.reviews.list(offset=0):
print(review.title, review.rating, review.user, review.submission_time)
# Check availability for specific dates
avail = detail.availability.check(check_in="2026-08-01", check_out="2026-08-03")
print(avail.url, avail.status_code, avail.message)
List all hotels for a specific Marriott brand. Returns an array of hotel objects with name, location, and contact information. Each brand has hundreds of properties worldwide; no server-side filtering beyond brand selection.
| Param | Type | Description |
|---|---|---|
| brand | string | Marriott brand code |
| locale | string | Locale for property names and descriptions (e.g., en-US, de-DE) |
{
"type": "object",
"fields": {
"total": "integer total number of hotels returned",
"hotels": "array of hotel summary objects with name, marsha_code, city, address, country, latitude, longitude, phone, brand"
},
"sample": {
"data": {
"total": 510,
"hotels": [
{
"city": "New York",
"name": "New York Marriott Marquis",
"brand": "MC",
"phone": "+1 (555) 012-3456",
"address": "1535 Broadway",
"country": "USA",
"latitude": "40.758855",
"longitude": "-73.985869",
"marsha_code": "NYCMQ"
}
]
},
"status": "success"
}
}About the Marriott API
Hotel Listings and Property Metadata
The list_hotels endpoint accepts an optional brand code and locale parameter, returning every property under that brand as an array of hotel objects. Each object includes name, marsha_code, city, address, country, latitude, longitude, phone, and brand. There is no server-side filtering beyond brand selection, so client-side filtering by city or country must be applied after retrieval. The MARSHA code returned here is the key identifier used by all other endpoints.
The get_hotel_details endpoint takes a property_id (MARSHA code) and an optional brand parameter, returning comprehensive metadata for that property: email, phone, address, currency, latitude, boolean amenity flags (has_spa, has_golf), and a bookable flag indicating whether the property accepts online reservations. The property must belong to the specified brand to return results.
Guest Reviews
The get_reviews endpoint retrieves paginated guest reviews for any property identified by its MARSHA code. Results are sorted by most recent submission and support offset-based pagination via limit and offset parameters. Each review object includes id, rating, title, text, user, submission_time, and is_recommended. The total field in the response indicates the full review count available for that property.
Room Availability
The get_rooms_and_pricing endpoint accepts a property_id plus optional check_in and check_out dates in YYYY-MM-DD format. When dates are omitted, it defaults to a window starting 30 days from today. The response returns a url pointing to the Marriott availability page for those dates, a status_code reflecting whether that page is currently accessible, and a message field with a plain status description. Actual nightly rates are not returned as structured fields — the URL is the entry point for pricing data.
The Marriott API is a managed, monitored endpoint for marriott.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when marriott.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official marriott.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a brand comparison tool by pulling
list_hotelsfor multiple Marriott brand codes and mapping properties bycountryorlatitude/longitude. - Aggregate amenity data across a portfolio of hotels using
has_spa,has_golf, andbookablefields fromget_hotel_details. - Monitor guest sentiment trends by paginating through
get_reviewsand trackingratingandis_recommendeddistributions over time. - Generate direct booking deep-links for a travel app using the
urlreturned byget_rooms_and_pricingwith specific check-in and check-out dates. - Build a property directory filtered by city or country by retrieving full brand arrays from
list_hotelsand filtering client-side. - Identify contactable properties for B2B outreach by extracting
emailandphonefields fromget_hotel_detailsfor a target brand.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Marriott provide an official public developer API?+
What does `get_rooms_and_pricing` actually return — can I get nightly room rates as structured data?+
url to the Marriott availability page, an HTTP status_code, and a message. Nightly rates and room type inventory are not returned as structured fields in the response. The URL can be used to direct users to the Marriott booking page for the requested dates.Can I filter the `list_hotels` results by city, country, or amenity on the server side?+
brand selection is available. The endpoint returns all properties for a brand, and any filtering by city, country, or fields like has_spa needs to be applied after you receive the full response array. You can fork this API on Parse and revise it to add a filtering endpoint for those parameters.Are loyalty program details, points redemption rates, or Bonvoy member pricing covered?+
How does pagination work for `get_reviews`, and how do I know when I've reached the last page?+
limit and offset parameters. The total field in the response contains the full count of reviews available for the property. When offset plus the count of reviews returned in the current page equals or exceeds total, you have retrieved all available reviews.