REI APIrei.com ↗
Access REI.com product data via API: search the full catalog, browse categories, retrieve specs, check store availability, and read customer reviews.
What is the REI API?
The REI.com API exposes 6 endpoints covering the full outdoor gear catalog at rei.com, from product search and category browsing to per-product specifications and customer reviews. The get_product_detail endpoint returns a structured response with brand, media gallery, a features list, a full specifications object, and a review summary with rating histogram — all keyed by the product's style number.
curl -X GET 'https://api.parse.bot/scraper/b144cedc-d78a-4fc3-ad4f-c7479ad6fd67/get_category_products?page=1&sortby=relevance&pagesize=30&category_slug=backpacking-tents' \ -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 rei-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.
"""REI.com Gear API — search products, browse categories, read reviews."""
from parse_apis.rei.com_gear_api import REI, Sort, ProductNotFound
client = REI()
# Search the catalog for backpacking tents — limit caps total items fetched.
for product in client.products.search(query="backpacking tent", limit=3):
print(product.brand, product.title, product.regular_price)
# Browse a category sorted by brand name using the Sort enum.
tent_category = client.category(name="backpacking-tents")
for product in tent_category.products(sortby=Sort.TITLE, limit=3):
print(product.prod_id, product.brand, product.title, product.available)
# Drill into one product's reviews via sub-resource navigation.
product = client.products.search(query="tent", limit=1).first()
if product:
for review in product.reviews.list(pagesize=5, limit=3):
print(review.rating, review.author, review.title)
# Fetch full product detail by style number (point lookup).
try:
detail = client.products.get(style_number="243702")
print(detail.title, detail.brand)
except ProductNotFound as exc:
print(f"Product not found: {exc.style_number}")
# List top-level categories to discover available slugs.
for cat in client.categories.list(limit=3):
print(cat.name, cat.label, cat.count)
print("exercised: products.search / category.products / product.reviews.list / products.get / categories.list")
Fetches paginated product listings for a specific REI category. Products include brand, title, price, rating, availability, color options, and image links. Pagination metadata and category facets are included for further drill-down. Sort options are limited to relevance and brand alphabetical.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| sortby | string | Sort order for results. |
| pagesize | integer | Results per page. Accepted values: 30, 90. |
| category_slugrequired | string | Category slug from REI URL path (e.g., 'camping-and-hiking', 'backpacking-tents', 'sleeping-bags'). Discoverable via get_category_navigation. |
{
"type": "object",
"fields": {
"page": "integer, current page number",
"facets": "array of facet objects for filtering",
"results": "array of product objects with prodId, brand, title, regularPrice, rating, reviewCount, available, link, and color details",
"total_pages": "integer, total number of pages",
"total_results": "integer, total number of products matching the category"
},
"sample": {
"data": {
"page": 1,
"facets": [],
"results": [
{
"link": "/product/243736/rei-co-op-half-dome-3-tent-with-footprint",
"brand": "REI Co-op",
"title": "Half Dome 3 Tent with Footprint",
"prodId": "243736",
"rating": "4.5833",
"available": true,
"reviewCount": "24",
"regularPrice": "399.0"
}
],
"total_pages": 6,
"total_results": 168
},
"status": "success"
}
}About the REI API
Search and Category Browsing
The search_products endpoint accepts a query string and returns paginated product tiles with fields including prodId, brand, title, regularPrice, rating, reviewCount, available, link, and color details. Results come back sorted by relevance only. The get_category_products endpoint works the same way but takes a category_slug (e.g., backpacking-tents or sleeping-bags) instead of a query string, and supports sorting by relevance or brand. Both endpoints accept pagesize values of 30 or 90, return a total_results count, and include a facets array you can use to understand how products break down within that result set.
Product Detail and Store Availability
get_product_detail takes a style_number (the prodId from search or category results) and returns a detailed object: specifications containing a specs array of name/value pairs covering attributes like best use, seasons, capacity, and weight; a features array with ordered text bullets; a media array with image paths; and a reviewSummary with overall rating, total review count, and a ratingHistogram. If the style number does not exist, the endpoint returns a stale_input response rather than an error. get_store_availability accepts the same style_number plus an optional zip_code and returns an availability object scoped to nearby physical REI locations.
Customer Reviews and Category Navigation
get_product_reviews fetches paginated reviews from Bazaarvoice for any style number. Each review object includes id, title, rating, text, author, date, recommended, helpful_votes, and not_helpful_votes. Page size is configurable from 1 to 100 reviews. Reviews are ordered most-recent first. get_category_navigation requires no inputs and returns REI's camping-and-hiking taxonomy as a tree: each item carries a name slug (directly usable in get_category_products), a label, a product count, and a children array of subcategories with the same shape.
The REI API is a managed, monitored endpoint for rei.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when rei.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 rei.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 gear comparison tool using
specificationsfields like weight, seasons, and capacity across multiple sleeping bag or tent style numbers. - Track REI pricing changes over time by polling
regularPricefromsearch_productsorget_category_productsfor a target category. - Find the nearest store stocking a specific product by passing a
zip_codeandstyle_numbertoget_store_availability. - Aggregate customer sentiment for a product line by collecting
rating,recommended, andhelpful_votesfromget_product_reviews. - Auto-populate a gear database by walking the
get_category_navigationtree and fetching product listings for each subcategory slug. - Surface the top-rated items in a category by sorting
reviewCountandratingfields fromget_category_productsresults. - Feed an outdoor retail chatbot with accurate product descriptions, features, and specs using
get_product_detailresponses.
| 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 REI have an official public developer API?+
What does get_product_detail return beyond basic pricing?+
specifications object with a specs array of name/value pairs covering attributes like best use, seasons, capacity, and weight. It also includes a features array with ordered text bullets, a media array with image paths, and a reviewSummary with an overall rating, total count, and a per-star ratingHistogram.Does get_category_navigation cover all REI departments, or just camping and hiking?+
Are sale prices or member-only pricing exposed anywhere in the API?+
regularPrice field. Sale prices, REI Co-op member pricing, or clearance flags are not exposed as separate fields. You can fork this API on Parse and revise it to surface promotional pricing fields if they appear on product listings.What are the pagination limits for search and category endpoints?+
search_products and get_category_products accept a pagesize of either 30 or 90. Other values are not accepted. The response includes total_results and total_pages so you can walk the full result set programmatically.