GET

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

GET https://api.stayapi.com/v1/marriott/bonvoy/rooms

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_rates is empty. On multi-night stays per_night and points are null; use total and points_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_id from the Search endpoint first
  • Each room type may have multiple rate plans with different prices and policies
  • Check members_only to identify Bonvoy member-exclusive rates
  • Use free_cancellation_until to show flexible booking options
  • Rates bookable with Bonvoy points include points, points_total, points_saved, and free_nights fields
  • For multi-night stays use points_total or sum nightly_rates. points and per_night are 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_rooms when provided; null means inventory counts are unavailable.
  • For ACRS hotels (source_of_rate: "ACRS") use total and points_total for 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 →

Meta Search

Search across multiple booking platforms

View Documentation →
Request
curl -X GET "https://api.stayapi.com/v1/marriott/bonvoy/rooms?property_id=BKKDT&check_in=2026-11-10&check_out=2026-11-13&adults=2&currency=USD" \
  -H "X-API-Key: YOUR_API_KEY"
Response
{
  "success": true,
  "property_id": "BKKDT",
  "room_types": [
    {
      "name": "Deluxe Room",
      "bed_type": "1 King",
      "view": "City View",
      "category": "STANDARD",
      "available_rooms": 5,
      "rates": [
        {
          "name": "Best Available Rate",
          "rate_plan_code": "BAR",
          "per_night": 185.00,
          "total": 555.00,
          "fees": 0,
          "currency": "USD",
          "members_only": false,
          "free_cancellation_until": "2026-11-08T18:00:00",
          "points": null,
          "points_total": null,
          "points_saved": null,
          "free_nights": null,
          "nightly_rates": [
            {"date": "2026-11-10", "cash": 185.00, "points": null, "free_night": false},
            {"date": "2026-11-11", "cash": 185.00, "points": null, "free_night": false},
            {"date": "2026-11-12", "cash": 185.00, "points": null, "free_night": false}
          ],
          "source_of_rate": "MARSHA"
        },
        {
          "name": "Member Rate",
          "rate_plan_code": "MBR",
          "per_night": 166.50,
          "total": 499.50,
          "fees": 0,
          "currency": "USD",
          "members_only": true,
          "free_cancellation_until": "2026-11-08T18:00:00",
          "points": null,
          "points_total": null,
          "points_saved": null,
          "free_nights": null,
          "nightly_rates": [
            {"date": "2026-11-10", "cash": 166.50, "points": null, "free_night": false},
            {"date": "2026-11-11", "cash": 166.50, "points": null, "free_night": false},
            {"date": "2026-11-12", "cash": 166.50, "points": null, "free_night": false}
          ],
          "source_of_rate": "MARSHA"
        }
      ]
    },
    {
      "name": "Executive Suite",
      "bed_type": "1 King",
      "view": "City View",
      "category": "SUITE",
      "available_rooms": 2,
      "rates": [
        {
          "name": "Redemption",
          "rate_plan_code": "MRYA",
          "per_night": null,
          "total": 555.00,
          "fees": 0,
          "currency": "USD",
          "members_only": true,
          "free_cancellation_until": "2026-11-08T18:00:00",
          "points": 45000,
          "points_total": 125000,
          "points_saved": 0,
          "free_nights": 0,
          "nightly_rates": [
            {"date": "2026-11-10", "cash": null, "points": 45000, "free_night": false},
            {"date": "2026-11-11", "cash": null, "points": 45000, "free_night": false},
            {"date": "2026-11-12", "cash": null, "points": 35000, "free_night": false}
          ],
          "source_of_rate": "MARSHA"
        }
      ]
    }
  ],
  "total": 2
}
Browse documentation