Discover/RH API
live

RH APIrh.com

Access RH.com's full product catalog via API. Browse categories, search products, get pricing, dimensions, images, and related items across all RH collections.

Endpoint health
verified 9h ago
get_product_images
search_products
get_category_products
get_related_products
get_subcategories
6/6 passing latest checkself-healing
Endpoints
6
Updated
22d ago

What is the RH API?

The RH.com API provides 6 endpoints covering the full RH furniture and home décor catalog, from navigating the category tree with get_subcategories to retrieving granular product data including dimensions, feature lists, pricing tiers, and alternate images via get_product_details. It supports keyword and category-scoped search, pagination, and related product lookups — giving structured access to RH's entire product range without manual browsing.

Try it

No input parameters required.

api.parse.bot/scraper/ec1ebefc-f5f4-4651-8a4b-6f7160dc6a39/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/ec1ebefc-f5f4-4651-8a4b-6f7160dc6a39/get_subcategories' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

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 rh-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.rh_restoration_hardware_api import RH, Category, ProductSummary, Product, RelatedProduct, ProductNotFound

client = RH()

# Get the full category navigation tree
root = client.categories.tree()
print(root.display_name, root.id)

# Walk the child categories
for child in root.child_categories:
    print(child.display_name, child.target_url)

# Construct a category by known ID and browse its products
living = client.category(id="cat160024")
for product in living.products():
    print(product.display_name, product.repository_id, product.price_info.currency_symbol, product.price_info.list_prices)
    break

# Search for products across the catalog
for item in client.productsummaries.search(query="sofa"):
    print(item.display_name, item.image_url)
    # Drill into full product details
    detail = item.details()
    print(detail.display_name, detail.id)
    print(detail.dimensions)
    print(detail.price_range_display.currency_symbol, detail.price_range_display.list_prices)
    # Get related products
    for related in detail.related():
        print(related.display_name, related.image_url)
    # Get all images
    for image_url in detail.images():
        print(image_url)
    break
All endpoints · 6 totalmissing one? ·

Retrieve the full navigation tree of product categories from rh.com. Returns a single root category object containing nested child categories up to 3 levels deep. Each category includes an id, displayName, targetUrl, and childCategories array. Use category IDs from this tree to filter search_products or call get_category_products.

Input

No input parameters required.

Response
{
  "type": "object",
  "fields": {
    "id": "string, root category identifier",
    "targetUrl": "string or null, URL path for the category",
    "displayName": "string, root category display name",
    "childCategories": "array of nested category objects, each with id, displayName, targetUrl, and childCategories"
  },
  "sample": {
    "data": {
      "id": "cat1696090",
      "targetUrl": null,
      "displayName": "Global Nav",
      "childCategories": [
        {
          "id": "cat160024",
          "targetUrl": "/catalog/category/category.jsp?categoryId=cat160024",
          "displayName": "Living",
          "childCategories": [
            {
              "id": "cat1481016",
              "targetUrl": "/catalog/category/collections.jsp/cat1481016",
              "displayName": "Fabric Seating",
              "childCategories": [
                {
                  "id": "cat24710015",
                  "targetUrl": "/catalog/category/collections.jsp/cat24710015",
                  "displayName": "Seating Collections"
                }
              ]
            }
          ]
        }
      ]
    },
    "status": "success"
  }
}

About the RH API

Category Navigation and Product Search

The get_subcategories endpoint returns the complete RH navigation hierarchy as a nested tree — a root category object with childCategories arrays going up to 3 levels deep. Each node includes an id, displayName, and targetUrl. These category IDs feed directly into search_products (via the category_id parameter) and get_category_products for scoped browsing. The search_products endpoint accepts a free-text query (e.g., 'sofa', 'table lamp'), an optional category_id, and limit/offset integers for pagination. When a search term triggers a redirect on RH's site, the response includes a redirectUrl field indicating where the search was routed.

Product Details and Pricing

get_product_details takes a product_id obtained from search or category results and returns a detailed record: displayName, longDescription (HTML-encoded), a dimensions array, a featureList (which may contain HTML markup), and alternateImages — each with imageUrl, caption, and a lifestyleImage flag. Pricing is exposed through priceRangeDisplay, which contains separate arrays for listPrices, memberPrices, and salePrices alongside a currencySymbol. The productLineItem.availableOptions array surfaces configurable product variants such as finish, size, or fabric.

Related Products and Images

get_related_products returns an array of upsell or complementary items for a given product_id, each with id, displayName, imageUrl, and its own priceRangeDisplay object. If no related products exist, the endpoint returns an empty array rather than an error. get_product_images retrieves all image URLs for a product — the main image plus alternates — returning protocol-relative URLs suitable for use with either HTTP or HTTPS.

Reliability & maintenanceVerified

The RH API is a managed, monitored endpoint for rh.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when rh.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 rh.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.

Last verified
9h ago
Latest check
6/6 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Build a furniture comparison tool using priceRangeDisplay fields (listPrices, memberPrices, salePrices) from get_product_details.
  • Populate an interior design app's product catalog by crawling categories via get_subcategories and fetching items with get_category_products.
  • Generate SEO product pages by extracting displayName, longDescription, featureList, and dimensions from get_product_details.
  • Power a recommendation widget by pairing get_product_details with get_related_products for a given product.
  • Aggregate high-resolution product imagery for visual search or training datasets using get_product_images and alternateImages from get_product_details.
  • Monitor RH category structure changes over time by periodically calling get_subcategories and diffing the returned navigation tree.
  • Filter and index RH's catalog by product configuration options using productLineItem.availableOptions from get_product_details.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 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.

Frequently asked questions
Does RH have an official public developer API?+
RH does not publish a public developer API or documented data access program for its product catalog as of mid-2025.
What does search_products return when a search term redirects to a category page?+
The response still returns a resultList with totalNumRecs and records, but also includes a non-null redirectUrl string indicating the category URL the search resolved to. You can use this URL or the associated category_id for follow-up calls to get_category_products.
Does the API return customer reviews or ratings for products?+
Not currently. The API covers product details, pricing, dimensions, features, images, and related items. You can fork it on Parse and revise to add a reviews endpoint if that data is needed.
Are member prices always present in priceRangeDisplay?+
The memberPrices array is returned in the priceRangeDisplay object from both get_product_details and get_related_products, but individual entries may be empty or omitted if the product has no member pricing configured. The listPrices and salePrices arrays follow the same pattern.
Does the API support filtering search results by price range or product attributes?+
search_products currently supports filtering by query keyword and category_id, plus pagination via limit and offset. Attribute-level or price-range filters are not currently exposed as parameters. You can fork the API on Parse and revise it to add those filtering inputs.
Page content last updated . Spec covers 6 endpoints from rh.com.
Related APIs in EcommerceSee all →
zarahome.com API
Search and browse Zara Home's furniture and home décor catalog. Retrieve product details including name, category, price, available sizes or dimensions, materials, colors, and availability status. Browse by category or search by keyword across the full product range.
houzz.com API
Search for home decor and furniture products, view detailed information and customer reviews, find professional designers and contractors with their ratings, and browse design inspiration photos all in one place. Build your ideal home by accessing comprehensive product catalogs, professional portfolios, and curated design ideas from the Houzz marketplace.
chairish.com API
Search and browse vintage furniture and decor listings on Chairish, view detailed product information with pricing and availability, and research sellers through their profiles and customer reviews. Explore product categories and discover shop recommendations to find exactly what you're looking for.
homedepot.com API
Search and browse Home Depot's product catalog to compare pricing, check real-time availability, and review detailed product specifications. Find products across all categories, look up store locations and hours, and check fulfillment options including in-store pickup and delivery.
hm.com API
Search H&M's US product catalog by keyword and instantly retrieve detailed information like prices, product images, available sizes, and real-time stock availability. Perfect for comparing items, tracking product details, or building shopping applications powered by H&M's current inventory data.
bhphotovideo.com API
Search and browse B&H Photo's massive inventory of cameras, electronics, and photography gear with instant access to pricing, specifications, images, and customer reviews. Filter products by category, compare detailed specs, and discover used items all in one integrated platform.
furniture.com API
Search and browse Furniture.com's product catalog by keywords, then narrow results using filters like color, material, style, type, and brand. Sort by price or ratings and navigate through results with pagination to find the perfect furniture for your needs.
lowes.com API
Search and browse products from Lowe's, including product listings by category, detailed product information, and pricing. Retrieve comprehensive details on specific items to compare options and make informed purchasing decisions.