curl -X GET 'https://api.parse.bot/scraper/88e27cd6-f757-4886-9a09-4368d813335d/search_products?sort=popular_score&keyword=nike&per_page=5' \ -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 kream-co-kr-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: KREAM SDK — search products, drill into details, check filters."""
from parse_apis.kream_co_kr_api import Kream, SortOrder, InputNotFound
client = Kream()
# Browse popular Nike products; limit= caps total items fetched across pages.
for item in client.product_summaries.search(keyword="nike", sort=SortOrder.POPULAR, limit=5):
print(item.name, item.price, item.brand_name)
# Drill down: take the first result and fetch its full detail.
hit = client.product_summaries.search(keyword="jordan", limit=1).first()
if hit is not None:
product = hit.details()
print(product.name, product.style_code, product.colorway)
print("market:", product.market.lowest_ask, product.market.highest_bid)
# Per-size pricing from the options table
for opt in (product.options or []):
print(f" size {opt.option}: ask={opt.lowest_ask}, bid={opt.highest_bid}")
# Recent sales
for sale in product.recent_sales[:3]:
print(f" sold size {sale.option} at {sale.price} on {sale.date}")
# Point lookup by a known product id (discovered from the search above).
if hit is not None:
try:
detail = client.products.get(product_id=hit.product_id)
print(detail.name, detail.wish_count, detail.review_count)
except InputNotFound:
print("product not found")
# Discover available filters and sort options for a keyword.
filters = client.search_filters.get(keyword="nike")
print(f"{filters.result_count} results; {len(filters.sort_options)} sort options")
for group in filters.filters:
print(f" filter: {group.key} — {group.title}")
print("exercised: product_summaries.search / details / products.get / search_filters.get")
Returns one page of products from KREAM's product search/browse feed. Works with a free-text keyword, with filters only (category/brand browsing without a keyword), or both; at least one of keyword or a filter must be given. Each row is a product card: ids, English and Korean names, style code, brand, category, the card's displayed price in KRW (a market price, not retail), discount rate, image, and the card's wish/review/trade counters as displayed text (abbreviated by the site, e.g. '23.4만'; exact counters are on get_product). Pagination is page-based: cursor is the page number (1-based) and per_page the page size (1-50, larger values are clamped to 50; the page window is cursor x per_page, so change per_page consistently across pages). next_cursor/has_more give the continuation; result_count is the site's total match count for the query. Filter values (shop_category_id, brand_name, color, price ranges, sizes, delivery methods, keyword_filter) are the wire values published by list_search_filters. A page beyond the available results or an unknown filter value is rejected by the site and returned as stale_input. Nonsense keywords still return the site's fuzzy suggestions rather than an empty list.
| Param | Type | Description |
|---|---|---|
| sort | string | Result ordering. |
| color | string | Color code from list_search_filters.filters[key=color] (e.g. black, white). |
| price | string | KRW price range as 'min-max' with either side optional, e.g. -100000, 300000-500000, 5000000-. |
| cursor | integer | 1-based page number. |
| gender | string | Gender segment filter. |
| keyword | string | Free-text search term (brand, model, style code, Korean or English). Omit to browse by filters only. |
| per_page | integer | Products per page, 1-50; values above 50 are clamped to 50. |
| brand_name | string | Exact brand name as published in list_search_filters.filters[key=brand] (e.g. Nike, Jordan). |
| under_retail | boolean | true keeps only products currently priced below retail. |
| clothing_size | string | Apparel size code, e.g. M or 30. |
| discount_rate | string | Discount-rate range as a fraction, e.g. -0.3, 0.3-0.5, 0.5-. |
| sneakers_size | string | Shoe size in KREAM's mm scale, e.g. 270. |
| keyword_filter | string | One of the keyword-refinement chips the site offers for the keyword, taken from list_search_filters.keyword_filters[*].sections[*].choices[*].value (e.g. '나이키 바람막이'). |
| delivery_method | string | Delivery filter code from list_search_filters.filters[key=delivery], e.g. quick_delivery. |
| exclude_sold_out | boolean | true hides sold-out products. |
| shop_category_id | string | Site category id, e.g. 1 (sneakers) or 22 (windbreakers), from list_search_filters.filters[key=category].sections[*].choices[*].value. |
{
"type": "object",
"fields": {
"sort": "sort applied",
"cursor": "page number returned",
"keyword": "echo of the search term, null when browsing by filters",
"has_more": "true when another page exists",
"per_page": "page size applied after clamping",
"products": "array of product cards; product_id is the key for get_product; price is the displayed KRW market price (float); display_discount_rate is a fraction (0.37 = 37%) or null; *_count_text are the site's abbreviated counters",
"next_cursor": "next page number, null on the last page",
"result_count": "site's total number of matching products for the query"
},
"sample": {
"data": {
"sort": "recommend",
"cursor": 1,
"keyword": "nike",
"has_more": true,
"per_page": 5,
"products": [
{
"url": "https://kream.co.kr/products/12831",
"name": "Nike Air Force 1 '07 Low White",
"price": 93000,
"brand_id": "4",
"image_url": "https://kream-phinf.pstatic.net/.../a_56586590956f4404862cbdaeff6a5e63.png",
"brand_name": "Nike",
"price_text": "93,000원",
"product_id": "12831",
"style_code": "315122-111/CW2288-111",
"is_b2c_only": false,
"category_name": "신발",
"translated_name": "나이키 에어포스 1 '07 로우 화이트",
"wish_count_text": "23.4만",
"shop_category_id": "1",
"subcategory_name": "스니커즈",
"trade_count_text": "78.7만",
"review_count_text": "3.5만",
"display_discount_rate": 0.37,
"has_immediate_delivery_item": true
}
],
"next_cursor": 2,
"result_count": 42147
},
"status": "success"
}
}About the Kream API
The Kream API on Parse exposes 3 endpoints for the publicly available data on kream.co.kr. Calls return JSON over HTTPS and are billed per successful response.
Pin a release with the API-Snapshot-Version header so canonical updates don't silently change your contract.