Stories APIstories.com ↗
Search & Other Stories' catalog and retrieve product details including price, sizes, colors, stock levels, and images via 2 structured endpoints.
What is the Stories API?
The & Other Stories API provides 2 endpoints to search the stories.com catalog and retrieve structured product data. Use search_products to find items by keyword and get paginated results including name, price, color, images, sizes, and stock status. Use get_product_details to pull full per-product information including fit description, category path, per-size stock quantities, color swatches, and SKU identifiers.
curl -X GET 'https://api.parse.bot/scraper/77e7f290-98a8-4e38-bc2d-8c0002c7c4e0/search_products?page=1&query=dress' \ -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 stories-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.
"""Walkthrough: & Other Stories SDK — search products, drill into details."""
from parse_apis.other_stories_product_api import Stories, ProductNotFound
client = Stories()
# Search for dresses — limit caps total items fetched across all pages.
for product in client.productsummaries.search(query="dress", limit=5):
print(product.name, product.price, product.color)
# Drill into the first result for full details (materials, sizes, stock).
item = client.productsummaries.search(query="jacket", limit=1).first()
if item:
detail = item.details()
print(detail.name, detail.brand, detail.price)
for size in detail.sizes:
print(size.name, size.in_stock, size.stock_quantity)
for mat in detail.materials:
print(mat.material, mat.percentage)
if detail.model_info:
print(detail.model_info.model_height, detail.model_info.model_size)
# Typed error handling for a product that doesn't exist.
try:
bad = client.productsummaries.search(query="nonexistent-xyz-999", limit=1).first()
if bad:
bad.details()
except ProductNotFound as exc:
print(f"Product not found: {exc.product_slug}")
print("exercised: productsummaries.search / ProductSummary.details / sizes / materials / model_info")
Full-text search over & Other Stories product catalog. Returns a paginated list of products matching the query keyword. Each page contains up to 10 products. Results include variant-level detail: name, SKU, price, color, available sizes, images, stock status, and color swatches. Pagination advances via page number.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination, starting at 1. |
| queryrequired | string | Search keyword to match against product names and categories (e.g., 'dress', 'jacket', 'shoes'). |
{
"type": "object",
"fields": {
"page": "current page number",
"query": "search keyword used",
"products": "array of product objects with name, sku, product_sku, price, price_numeric, price_before_discount, price_before_discount_numeric, color, images, main_image, sizes, product_url, category, in_stock, and swatches",
"total_results": "total number of matching products across all pages"
},
"sample": {
"data": {
"page": 1,
"query": "dress",
"products": [
{
"sku": "1289204001",
"name": "Satin Slip Midi Dress",
"color": "Pink Floral",
"price": "$ 129",
"sizes": [
"0",
"10",
"12"
],
"images": [
"https://media.stories.com/assets/005/8b/b3/8bb3775a524c1783e72009b8703e6b33c869af3b_xxl-1.jpg"
],
"category": "clothing/dresses/mididresses",
"in_stock": true,
"swatches": [
{
"hex": "#BD858C",
"name": "Pink Floral",
"available": true
}
],
"main_image": "https://media.stories.com/assets/005/8b/b3/8bb3775a524c1783e72009b8703e6b33c869af3b_xxl-1.jpg",
"product_sku": "1289204",
"product_url": "https://www.stories.com/en-us/product/satin-slip-midi-dress-pink-floral-1289204001/",
"price_numeric": 129,
"price_before_discount": "$ 129",
"price_before_discount_numeric": 129
}
],
"total_results": 396
},
"status": "success"
}
}About the Stories API
Endpoints and Data Coverage
The search_products endpoint accepts a required query string (e.g. 'dress', 'leather jacket') and an optional page integer for pagination. Each result in the returned products array includes name, sku, price, color, images, sizes, product_url, in_stock, and swatches. The total_results field lets you calculate page depth and build iterative crawls across a full search result set.
Product Detail Fields
The get_product_details endpoint accepts either a full product_url or a product_slug extracted from the URL path. The response returns a rich set of fields: name, brand, price, color, sku, fit, category, images (array of URLs), and a sizes array where each size object includes name, sku, in_stock, and stock_quantity. The swatches array provides per-variant color names and hex values, which is useful for programmatic color filtering or display.
Coverage Scope
The API covers the en-us storefront of stories.com, reflecting the U.S. product catalog. Product identification works via either the slug or the full URL, making it straightforward to chain search_products output directly into get_product_details calls using the product_url field returned in search results. The category field returns the full breadcrumb path, allowing downstream grouping by department or style segment.
The Stories API is a managed, monitored endpoint for stories.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when stories.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 stories.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 size and stock checker that polls
get_product_detailsfor specific SKUs and alerts when a size'sstock_quantitychanges. - Aggregate & Other Stories pricing data by category using the
categoryfield from product detail responses. - Create a color-filtered product browser using the
swatcheshex values returned by both endpoints. - Sync a fashion affiliate feed by paginating
search_productsresults and storingproduct_urlandpricefields. - Compare in-stock size availability across multiple product variants by iterating
sizesarrays fromget_product_details. - Track price changes over time for specific products by periodically calling
get_product_detailswith a storedproduct_slug. - Power a style recommendation engine by querying
search_productswith category keywords and indexing returnedname,color, andimagesfields.
| 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 & Other Stories have an official developer API?+
What does the `sizes` array in `get_product_details` actually contain?+
sizes array includes four fields: name (the size label, e.g. 'S', '38'), sku (variant-level identifier), in_stock (boolean), and stock_quantity (integer). This lets you check availability at the individual size level rather than just the product level.Does the API return customer reviews or ratings for products?+
Does `search_products` return results from all regional storefronts?+
Can I retrieve a product by its SKU directly rather than by URL or slug?+
get_product_details endpoint currently accepts either a product_url or a product_slug as the identifier. Direct lookup by sku is not supported. You can obtain the product_url from search_products results and pass it into get_product_details to retrieve full detail for a known SKU's parent product.