KREAM API & Scraper
The KREAM API turns kream.co.kr, South Korea's largest sneaker and streetwear resale marketplace, into clean JSON in five actions: search, product/detail, product/price_history, category and categories.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
Search returns 50 products a page with the immediate-buy price (the lowest ask), the discount against the release price, English and Korean names, brand, style code, category and wish, review and trade counts, with KREAM's own sorts (popular, lowest ask, highest bid, premium, most wished, newest release) and filters (brand, category, gender, shoe or clothing size, price range, delivery type, below release price). product/detail returns the live market: lowest ask, highest bid, last trade and its change, total trades, the premium over the release price, and every size with its own lowest ask and highest bid, split by delivery type (normal, fast from KREAM's warehouse, and 95-point fast delivery), plus the 5 most recent trades and the 5 best asks and bids. product/price_history returns KREAM's price chart for 1 month to all time, for all sizes or one size. Verification on 2026-09-15: 20 of 20 searches and 37 of 37 product reads succeeded, 53 of 53 controlled cases passed, 8 of 8 products matched the public product page on name, style code, brand, price and availability, and search rows agreed with product records on 37 of 37 products. Prices are KRW. No KREAM account needed - one ReefAPI key and the standard { ok, data, meta, error } envelope.
On KREAM the lowest ask, the last trade and the release price are three different numbers
A resale price is not one number. KREAM publishes the price you can buy at now, the price the last pair traded at, and the retail price at launch, and the overall ask and bid can come from different sizes. The API keeps each one in its own field. Measured on 2026-09-15.
| KREAM product | Lowest ask | Highest bid | Last trade | Release price |
|---|---|---|---|---|
| Nike Air Force 1 '07 Low White | 93,000 KRW (size 285) | 137,000 KRW (size 240) | 93,000 KRW | 149,000 KRW |
| New Balance x Paperboy Paris x Beams 920 Ice Boy | 340,000 KRW | 300,000 KRW | 300,000 KRW | 299,000 KRW |
| Nike Park Swoosh Full Zip Hoodie Black | 48,000 KRW (size XL) | 50,000 KRW (size XXXXL) | 49,000 KRW | not published |
| Nike Air Force 1 '07 Low White, size 240 only | 149,000 KRW (95-point fast delivery) | 137,000 KRW | - | 149,000 KRW |
The overall highest bid can be above the overall lowest ask because they belong to different sizes; compare sizes[] instead. price_premium is the lowest ask minus the release price (41,000 KRW on the New Balance 920), not the last trade. For one size, lowest_ask is the cheapest of three delivery types: on the Air Force 1 in size 240 that was 149,000 KRW for 95-point fast delivery, against 167,000 KRW for fast delivery and 158,000 KRW for normal delivery.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/kream/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "nike"
}
}{
"ok": true,
"meta": {
"api": "kream",
"endpoint": "search",
"mode": "live",
"latency_ms": 2330.9,
"record_count": 50,
"bytes": 1457414,
"cache_hit": false,
"pagination": {
"page": 1,
"has_more": true,
"page_size": 50,
"total": 42647
},
"upstream_requests": 1
},
"data": {
"results": [
{
"product_id": "12831",
"url": "https://kream.co.kr/products/12831",
"name": "Nike Air Force 1 '07 Low White",
"name_ko": "나이키 에어포스 1 '07 로우 화이트",
"name_tag": null,
"brand": {
"id": "4",
"name": "Nike"
},
"style_code": "315122-111/CW2288-111",
"style_codes": [
"315122-111",
"CW2288-111"
],
"category": {
"id": "1",
"path": [
"[trimmed-depth]",
"[trimmed-depth]"
]
},
"listing_type": "resale",
"product_type": "product_100",
"image": "https://kream-phinf.pstatic.net/MjAyNDA2MjJfMTMx/MDAxNzE5MDI5ODMzOTg2.8TsdHQrXy3-tcIMHceZOG5eBSdl_-ybtjFhLVIZDOXEg.TUQIZNOi5ptP4zsfcdsi3EBAgTwh2jruSeKGnbMekaQg.PNG/a_56586590956f4404862cbdaeff6a5e63.png",
"price": 94000,
"price_display": "94,000원",
"price_type": "lowest_ask",
"currency": "KRW",
"pre_coupon_price": null,
"coupon_applied": false,
"discount_percent": 36,
"discount_basis": "release_price",
"fast_delivery": true,
"sold_out_temporarily": false,
"upcoming_release_date": null,
"wish_count_approx": 234000,
"wish_count_display": "23.4만",
"review_count_approx": 35000,
"review_count_display": "3.5만",
"trade_count_approx": 788000,
"trade_count_display": "78.8만",
"badges": [
"빠른배송",
"내일 도착 예정"
],
"rating": null,
"rating_scale": null
},
{
"product_id": "24137",
"url": "https://kream.co.kr/products/24137",
"name": "Nike P-6000 Metallic Silver",
"name_ko": "나이키 P-6000 메탈릭 실버",
"name_tag": null,
"brand": {
"id": "4",
"name": "Nike"
},
"style_code": "CN0149-001",
"style_codes": [
"CN0149-001"
],
"category": {
"id": "1",
"path": [
"[trimmed-depth]",
"[trimmed-depth]"
]
},
"listing_type": "resale",
"product_type": "product_100",
"image": "https://kream-phinf.pstatic.net/MjAyNjAzMjdfMTI3/MDAxNzc0NTkzMTE5ODgz.S8p7iMr8-A5IGNV1uLp0ULLV9b8793y87dekSM1u3SEg.vVftSdZfQZcBI9iLCVa8nFMooirlJ-R2YPeVTRX9wFkg.PNG/a_cdb862ed7b234b8494a4b82568a2c3cc.png",
"price": 82000,
"price_display": "82,000원",
"price_type": "lowest_ask",
"currency": "KRW",
"pre_coupon_price": null,
"coupon_applied": false,
"discount_percent": 49,
"discount_basis": "release_price",
"fast_delivery": true,
"sold_out_temporarily": false,
"upcoming_release_date": null,
"wish_count_approx": 28000,
"wish_count_display": "2.8만",
"review_count_approx": 4922,
"review_count_display": "4,922",
"trade_count_approx": 40000,
"trade_count_display": "4만",
"badges": [
"빠른배송",
"내일 도착 예정"
],
"rating": null,
"rating_scale": null
},
{
"product_id": "432838",
"url": "https://kream.co.kr/products/432838",
"name": "Nike P-6000 White Metallic Silver",
"name_ko": "나이키 P-6000 화이트 메탈릭 실버",
"name_tag": null,
"brand": {
"id": "4",
"name": "Nike"
},
"style_code": "CD6404-107",
"style_codes": [
"CD6404-107"
],
"category": {
"id": "1",
"path": [
"[trimmed-depth]",
"[trimmed-depth]"
]
},
"listing_type": "resale",
"product_type": "product_100",
"image": "https://kream-phinf.pstatic.net/MjAyNjAzMzBfMjM4/MDAxNzc0ODU2ODQ2MTQ2.cwf9N-1tg6hNNHMjA1xaV5M35ZYqBsntFWK8TTzkrH8g.XQBwSaeOIwos4MC86LAwcFLml4esjywD2tnkqv3mGE0g.PNG/a_fc279e0a14ca46f99bb44974f9515d1f.png",
"price": 68000,
"price_display": "68,000원",
"price_type": "lowest_ask",
"currency": "KRW",
"pre_coupon_price": null,
"coupon_applied": false,
"discount_percent": 54,
"discount_basis": "release_price",
"fast_delivery": true,
"sold_out_temporarily": false,
"upcoming_release_date": null,
"wish_count_approx": 5596,
"wish_count_display": "5,596",
"review_count_approx": 1009,
"review_count_display": "1,009",
"trade_count_approx": 5811,
"trade_count_display": "5,811",
"badges": [
"빠른배송",
"내일 도착 예정"
],
"rating": null,
"rating_scale": null
}
],
"count": 50,
"total_results": 42647,
"page": 1,
"page_size": 50,
"has_more": true,
"next_page": 2,
"draws_dropped": 0,
"sort_applied": "recommended",
"query_used": "nike",
"corrected": false,
"correction_type": null,
"rows_matching_query_words": 50,
"query": "nike"
}
}What the KREAM API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search KREAM by keyword. Each product comes with its immediate-buy price (lowest ask), its discount against the release price, English and Korean names, brand, style code, category, fast-delivery availability and wish / review / trade counts. Sort by popularity, price, premium, wishes, reviews or release date and filter by brand, category, gender, shoe or clothing size, price range, delivery type and below-release-price. KREAM DRAW entries are removed unless you ask for them. | Pricing teams call search to search KREAM by keyword. | query, page, sort, category_id, brand, ... |
| product/detail | The full KREAM product by `product_id` (or URL): English and Korean names, brand, style code, colorway, release price and date, every image, and the live market — lowest ask, highest bid, last trade and its change, total trades, premium over the release price, last trade per delivery channel — plus every size with its own lowest ask, highest bid and normal / fast / 95점 fast-delivery asks, the 5 most recent trades, the 5 best asks and bids, wish and review counts and delivery options. Brand-store listings return their fixed price, list price and discount instead. | Marketplace operators call product/detail to get the full KREAM product by `product_id` (or URL). | product_id, max_rotations |
| product/price_history | KREAM's price chart for a product over 1 month, 3 months, 6 months, 1 year or all time — for all sizes or for one size — as dated points with the first, last, lowest and highest price in the period. | Catalog enrichment teams call product/price_history to get kREAM's price chart for a product over 1 month, 3 months, 6 months, 1 year or all time. | product_id, size, period, max_rotations |
| category | Every product in one KREAM category, paged, with the same rows, sorts and filters as search. Category ids come from `categories`. | Retail analysts call category to get every product in one KREAM category, paged, with the same rows, sorts and filters as search. | category_id, page, sort, brand, gender, ... |
| categories | KREAM's category tree: the top-level categories, or the sub-categories of one of them, with the `category_id` to pass to `category` or to search's category filter. | Pricing teams call categories to get kREAM's category tree. | parent, max_rotations |
Call search from your stack
curl -X POST https://api.reefapi.com/kream/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"nike"}'import requests
r = requests.post(
"https://api.reefapi.com/kream/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "nike"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/kream/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "nike"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.kream.search with {"query":"nike"}.Who uses this API and why
- Sneaker resellers compare the Korean market with StockX and GOAT per size, using lowest ask, highest bid and the delivery-type split.
- Price trackers record the lowest ask, last trade and premium over release price for a watch list, with KREAM's own price chart per size.
- Market analysts find what is moving with the popular, most wished and highest bid sorts across sneakers, streetwear, trading cards and collectibles.
- Cross-border sellers check which sizes trade above the release price in Korea before listing stock there.
Questions developers ask before integrating
What is the difference between lowest ask, highest bid and last sale?
lowest_ask is the immediate-buy price (즉시 구매가): the cheapest pair a seller is offering now. highest_bid is the immediate-sell price (즉시 판매가): the most a buyer is offering now. last_sale_price is what the most recent trade actually cleared at. On the New Balance 920 on 2026-09-15 they were 340,000, 300,000 and 300,000 KRW, with a release price of 299,000 KRW.
Why is the highest bid higher than the lowest ask?
Because the overall pair comes from different sizes. On the Nike Air Force 1 '07 the lowest ask of 93,000 KRW was for size 285 and the highest bid of 137,000 KRW was for size 240. For a real spread, read one size in sizes[], which carries its own lowest_ask and highest_bid.
What are fast delivery and 95-point fast delivery?
Fast delivery is stock already held in KREAM's warehouse, so it ships the next day. 95-point fast delivery is warehouse stock with a minor note on the box or condition. Normal delivery means the seller ships it to KREAM for inspection first. The same size can have a different lowest ask for each, and every size returns all three apart: lowest_ask_fast_delivery, lowest_ask_fast_delivery_95 and lowest_ask_normal_delivery.
Does the API return the full order book and every past trade?
No. KREAM shows the full ask and bid lists and the complete trade history only to signed-in members. Without an account, the public record has the 5 most recent trades, the 5 best asks, the 5 best bids, the best ask and bid for every size and delivery type, total trades, and KREAM's price chart, which product/price_history returns for 1 month, 3 months, 6 months, 1 year or all time.
Why do search prices change when I filter by size?
Because KREAM then shows that size's price. The Air Force 1 '07 was 93,000 KRW unfiltered and 103,000 KRW with shoe size 270 on 2026-09-15. A price range filter works the other way round: KREAM keeps a product when any of its sizes is priced inside the range, so a row's overall lowest ask can sit below it. With 150,000 to 250,000 KRW on nike, 46 of 50 rows showed a lower price, and every one checked had a size priced inside the range.
What are KREAM DRAW rows and brand-store listings?
KREAM DRAW entries appear among products with a 100 KRW price, which is the draw entry fee, not a market price. They are removed by default and counted in draws_dropped; include_draws=true keeps them flagged listing_type draw. Brand-store listings are new items sold by a brand at a fixed price, such as a New Balance ML610 at 79,000 KRW against a 189,000 KRW list price. They have no asks or bids and are marked listing_type brand_store, with the price, list price and discount instead.
Is a misspelled search answered for what I typed?
Not always. KREAM corrects some queries on its own: jordna was searched as jordan. query_used shows the query KREAM actually ran and corrected is true when it changed. A query with no match at all returns an empty result: 10 of 10 nonsense queries came back with 0 products and no filler.
What does KREAM NOT publish?
No star rating: KREAM counts reviews but has no rating scale, so rating and rating_scale are null. No full order book or trade ledger without an account. No coupon price in the product record: brand-store search rows show the price after a KREAM coupon with the pre-coupon price next to it (37,500 and 41,600 KRW on one AirPods case), while product/detail returns the pre-coupon price. Prices exclude KREAM's buyer fee. Release dates are missing on many basics: on 37 sampled products, release_date was filled on 22 and release_price on 30.
What is the KREAM API?
KREAM API is a ReefAPI endpoint group for korea's sneaker and streetwear resale market: asks, bids, trades and prices per size in won. It returns live JSON through POST requests under /kream/v1.
Is the KREAM API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. KREAM calls use the same shared credit balance as every other ReefAPI engine.
Do I need a KREAM login or account?
No login to KREAM is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the KREAM data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the KREAM API use?
KREAM actions currently cost 1-2 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call KREAM from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call kream actions with the same key, credit pool and JSON envelope used by normal REST requests.