Marriott Bonvoy Rooms API
Get room types and rates for a specific Marriott Bonvoy property with real-time availability.
Copy for your AI agent
Paste into Claude, ChatGPT, Cursor or Copilot — endpoint, parameters, response fields and a curl example in Markdown.
Overview
Property Code Required
Use the property_id from the Search endpoint (e.g., "BKKDT", "LAXJW") to fetch rooms for a specific hotel.
The Marriott Bonvoy Rooms endpoint returns available room types with detailed rate plans, bed types, cancellation policies, and Bonvoy member-only pricing. Use this after the Search endpoint to get complete room-level details for a property.
Endpoint URL
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| property_id | string | Required | Marriott property code (e.g., "BKKDT", "LAXJW") |
| check_in | string | Required | Check-in date in YYYY-MM-DD format |
| check_out | string | Required | Check-out date in YYYY-MM-DD format |
| adults | integer | Optional | Number of adults (1-10). Default: 2 |
| rooms | integer | Optional | Number of rooms (1-8). Default: 1 |
| currency | string | Optional | Currency code (e.g., USD, EUR, GBP). Default: USD |
| corporate_code | string | Optional | Corporate or promotional rate code (e.g., MMP, AAA). |
Property Codes
Get property codes from the Search endpoint. Each hotel in the search response includes a property_id field you can use here.
Response Format
The response includes room types grouped by category, each containing one or more rate plans with pricing and cancellation details.
Response Structure
- success: Boolean indicating request success
- property_id: The requested property code
- room_types: Array of room type objects
- total: Total number of room types available
Room Type Fields
| Field | Type | Description |
|---|---|---|
| name | string | Room type name (e.g., "Deluxe Room", "Executive Suite") |
| bed_type | string | Bed configuration (e.g., "1 King", "2 Double") |
| view | string | Room view (e.g., "City View", "Pool View") |
| category | string | Room category (e.g., "STANDARD", "SUITE") |
| available_rooms | integer or null | Number of rooms still available, or null when not provided |
| rates | array | Array of rate plan objects (see below) |
Rate Plan Fields
| Field | Type | Description |
|---|---|---|
| name | string | Rate plan name (e.g., "Best Available Rate", "Member Rate") |
| rate_plan_code | string | Rate plan identifier. Use this to distinguish plans within a room type; names may repeat. |
| per_night | float or null | Cash room rate for the check-in night only, or null when unavailable. Nightly rates vary; see nightly_rates, and use total for the stay. Null for ACRS rates on multi-night stays |
| total | float | Total cash price for the stay including taxes and fees (cash rates). Award rates also carry a cash figure Marriott attaches to the product; it is not the award price, use points_total |
| fees | float | Additional fees |
| currency | string | Currency code |
| members_only | boolean | Whether rate requires Bonvoy membership |
| free_cancellation_until | string or null | Free cancellation deadline (ISO 8601 datetime), or null when not provided |
| points | integer or null | Bonvoy points for the check-in night only; null for cash-only rates. Not a stay total; use points_total. Null for ACRS rates on multi-night stays |
| points_total | integer or null | Bonvoy points for the whole stay; null for cash-only rates. Equals the sum of nightly_rates[].points when the breakdown is present |
| points_saved | integer or null | Points saved vs standard redemption (when available) |
| free_nights | integer or null | Number of free nights included in points redemption |
| nightly_rates | array | Per-night breakdown in stay order, one object per night: date (YYYY-MM-DD), cash (room rate before taxes and fees, or null), points (integer or null), free_night (boolean). Empty for ACRS rates |
| source_of_rate | string or null | Marriott reservation system behind the rate: MARSHA (legacy) or ACRS (new) |
ACRS hotels
Marriott is moving hotels from its legacy MARSHA reservation system to ACRS. ACRS hotels are returned the same way, with source_of_rate: "ACRS" and these differences:
- Rate plan and room codes differ from MARSHA ones and are longer (for example
RETAIL,MEM5TT76,MAREXP) - There is no per-night breakdown:
nightly_ratesis empty. On multi-night staysper_nightandpointsare null; usetotalandpoints_total - Room names include the room description (for example "1 King Bed, Hearing Accessible"), so accessible variants are distinguishable
Error Responses
The API returns standard HTTP error codes with detailed error messages following the RFC 7807 Problem Details format.
400 Bad Request
Invalid request parameters (e.g., invalid dates, missing property_id)
{
"type": "https://api.stayapi.com/errors/invalid-dates",
"title": "Invalid Dates",
"status": 400,
"detail": "Check-out date must be after check-in date"
}
404 Not Found
PROPERTY_NOT_FOUND: no Marriott property matches the property_id.
{
"type": "https://api.stayapi.com/errors/property-not-found",
"title": "Property Not Found",
"status": 404,
"detail": "Marriott property ZZZQX not found",
"error_code": "PROPERTY_NOT_FOUND"
}
502 Bad Gateway
Upstream service error from Marriott; usually transient, worth one retry after a few seconds
{
"type": "https://api.stayapi.com/errors/upstream-error",
"title": "Upstream Error",
"status": 502,
"detail": "The upstream service could not complete the request.",
"error_code": "UPSTREAM_ERROR"
}
502 Upstream Property Rejected
Marriott's room-rate services rejected the property_id ("Invalid Property Code") and Marriott could not complete the lookup. Retry later; the price calendar may still price the property
{
"type": "https://api.stayapi.com/errors/upstream-property-rejected",
"title": "Upstream Property Rejected",
"status": 502,
"detail": "The upstream service could not complete the request.",
"error_code": "UPSTREAM_PROPERTY_REJECTED"
}
Usage Tips
Best Practices
- Get the
property_idfrom the Search endpoint first - Each room type may have multiple rate plans with different prices and policies
- Check
members_onlyto identify Bonvoy member-exclusive rates - Use
free_cancellation_untilto show flexible booking options - Rates bookable with Bonvoy points include
points,points_total,points_saved, andfree_nightsfields - For multi-night stays use
points_totalor sumnightly_rates.pointsandper_nightare the check-in night only and nightly prices vary by day of week - The same room can list several award rate plans (for example two "Redemption with Points Upgrade" plans at different prices), so key on
rate_plan_code, not on the rate name - Check
available_roomswhen provided; null means inventory counts are unavailable. - For ACRS hotels (
source_of_rate: "ACRS") usetotalandpoints_totalfor multi-night stays; there is no per-night breakdown
Rate Limiting
This endpoint is subject to your plan's rate limits. Each request counts as one API call regardless of the number of room types returned.
Related Endpoints
Marriott Bonvoy Search
Search for Marriott hotels by coordinates to get property codes
View Documentation →Marriott Bonvoy Price Calendar
Find the cheapest check-in dates before requesting rooms
View Documentation →