On APIon.com ↗
Access On Running product data, shoe variants, category listings, prices, availability, and editorial articles via 6 structured endpoints.
What is the On API?
The On Running API exposes 6 endpoints covering the full on.com product catalog and editorial content. Use search_products to query shoes and apparel by keyword and get back names, prices, SKUs, color variants, and image URLs. Other endpoints retrieve products by category, pull per-product variant availability, enumerate all shoe variants across genders, and surface articles from On's editorial hub.
curl -X GET 'https://api.parse.bot/scraper/aaac0b11-8b08-45ba-b71d-1a014af71824/search_products?page=0&limit=5&query=cloud' \ -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 on-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.on_running_api import OnRunning, Product, CategoryProduct, ProductDetail, Variant, Shoe, Article, ArticleDetail, Gender, ProductType
client = OnRunning()
# Search for Cloud shoes and drill into details
for product in client.products.search(query="cloud", limit=3):
print(product.name, product.price, product.sku, product.color)
detail = product.details()
print(detail.name, detail.brand, detail.currency)
for variant in detail.variants:
print(variant.sku, variant.color, variant.price, variant.availability)
# Browse women's apparel by category
for item in client.categoryproducts.list(gender=Gender.WOMENS, product_type=ProductType.SHOES, limit=5):
print(item.name, item.price, item.color, item.tags)
# List all shoes
for shoe in client.shoes.list_all(limit=10):
print(shoe.name, shoe.gender, shoe.price, shoe.color)
# Browse articles and get details
for article in client.articles.list(limit=3):
print(article.title, article.url)
article_info = article.details()
print(article_info.title, article_info.summary)
Full-text search across On Running's US product catalog. query matches product names and descriptions. Returns one entry per color variant with price, SKU, and image. Paginates via zero-indexed page number; each page returns up to limit items. total_hits and nb_pages describe the full result set.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (0-indexed) |
| limit | integer | Results per page |
| queryrequired | string | Search keyword (e.g. 'cloud', 'runner') |
{
"type": "object",
"fields": {
"page": "integer current page number",
"nb_pages": "integer total number of pages",
"products": "array of product objects with name, product_type, gender, price, compare_at_price, image_url, product_url, sku, color",
"total_hits": "integer total number of matching products"
},
"sample": {
"data": {
"page": 0,
"nb_pages": 50,
"products": [
{
"sku": "3WF1006",
"name": "Cloud 6",
"color": "Salt | Gardenia",
"price": 160,
"gender": "womens",
"image_url": "https://images.ctfassets.net/hnk2vsx53n6l/4ziTmq1yEtf3Sp1UXQVsb6/7825f615f81f623ecf85a1b174397622/8a56c403d65a75e3d5fbd91352a61a7e26c778b7.png",
"product_url": "https://www.on.com/en-us/products/cloud-6-3wf1006/womens/salt-gardenia-shoes-3WF10064657",
"product_type": "shoes",
"compare_at_price": 160
}
],
"total_hits": 1354
},
"status": "success"
}
}About the On API
Product Search and Category Browsing
search_products accepts a required query string plus optional page (0-indexed) and limit parameters, returning an array of product objects with name, product_type, gender, price, compare_at_price, image_url, product_url, sku, and color, along with total_hits and nb_pages for pagination. get_products_by_category filters by gender (mens, womens, kids) and product_type (shoes, apparel, accessories); note that some combinations—such as kids plus accessories—return zero results. Both endpoints share a similar product object shape but get_products_by_category also returns tags.
Product Detail and Full Shoe Catalog
get_product_detail takes a full product URL and returns a single detailed object: name, brand, price, currency, description, a list of image_urls, and a variants array. Each variant includes sku, name, color, price, currency, availability, and url—making this endpoint the right choice when you need to know whether a specific colorway or size is in stock. get_all_shoes requires no inputs and returns every shoe variant across all genders in one response, with a top-level count and a shoes array containing name, gender, price, url, sku, color, and image.
Editorial Content
get_articles_list fetches the Off Stories editorial hub and returns an array of article objects, each with a title and url, plus a total count. get_article_detail accepts a single article URL and returns the title, summary (from the meta description), and a json_ld object containing schema.org BlogPosting structured data—headline, author, and publisher. Full article body text is not reliably available due to client-side rendering on the stories pages.
The On API is a managed, monitored endpoint for on.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when on.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 on.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 shoe price tracker that monitors
priceandcompare_at_pricechanges across search results over time. - Aggregate
availabilityper variant fromget_product_detailto alert users when a specific colorway restocks. - Generate a gender-segmented product feed using
get_products_by_categorywithmens,womens, andkidsfilters. - Populate a product comparison tool with variant SKUs, colors, and images from
get_product_detail. - Index On Running editorial content by title and URL using
get_articles_listfor a brand content tracker. - Build a full shoe catalog snapshot using
get_all_shoesto track new colorway launches across genders. - Extract
json_ldstructured data from articles viaget_article_detailto feed a content metadata pipeline.
| 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 On Running have an official developer API?+
What does `get_product_detail` return that the listing endpoints don't?+
get_product_detail returns per-variant availability status, the full product description, all image_urls, and a currency code. The listing endpoints (search_products, get_products_by_category) return summary-level fields like price and image_url but omit availability and the variant-level breakdown.Does `get_all_shoes` include apparel and accessories?+
get_all_shoes covers only the shoes product type across mens, womens, and kids. Apparel and accessories are available through get_products_by_category with the appropriate product_type filter. You can fork this API on Parse and revise it to add a similar bulk-fetch endpoint for apparel or accessories.Is full article body text available from the editorial endpoints?+
get_article_detail returns a summary from the meta description and json_ld structured data (headline, author, publisher), but full article body text is not reliably extracted due to client-side rendering on story pages. You can fork this API on Parse and revise the article endpoint to add body extraction if the rendering constraints change.