Bunjang API

Korea's resale market as JSON, with every filter proved against a control

Bunjang API returns live Bunjang data as clean JSON for bunjang The primary endpoint, search, returns matching records including listing id, title, price, condition and null when the seller did not state it.

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a Bunjang endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
B
/bunjang/v1

3 active endpoints. Every call is 1 credit.

  • POST/bunjang/v1/search
  • POST/bunjang/v1/detail
  • POST/bunjang/v1/categories

What Bunjang endpoints does ReefAPI ship?

3 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

3 endpoints

search

1 cr

Search Bunjang listings by keyword and/or category, up to 200 per page.

required
—
optional
query, category_id, sort, price_min, price_max, condition, page, per_page

detail

1 cr

One Bunjang listing by id or URL.

required
listing_id
optional
—

categories

1 cr

Bunjang's own category tree.

required
—
optional
query, parent_id, max_depth

Every parameter, every allowed value →

Bunjang API

3 of 3 endpoints, ready to run

View docs ↗

Search Bunjang listings by keyword and/or category, up to 200 per page: listing id, title, URL, price in won, whether the seller marked it new or used, whether it is still selling, reserved or sold, free shipping, the public neighbourhood label, the seller's shop id and pro-shop status, favourites, comments, hashtags and photos. Filter by price range, condition and category; sort by relevance, newest or price. Promoted rows are returned in the source's own order and marked `is_promoted` — they are real listings that match the query.

1 credit0 required · 8 optional
POST/bunjang/v1/search
ok0 ms · 100 records · sample
{
  "ok": true,
  "data": {
    "results": [
      {
        "listing_id": "423853877",
        "title": "[정품]나이키 에어포스 1 07 로우 남녀공용 5컬러",
        "url": "https://m.bunjang.co.kr/products/423853877",
        "price": 74000,
        "currency": "KRW",
        "condition": "new",
        "status": "selling",
        "status_code": "0",
        "is_promoted": true,
        "free_shipping": false,
        "location": null,
        "neighborhood_only": false,
        "is_adult": false,
        "category_id": "405100",
        "seller_id": "76391540",
        "is_pro_shop": true,
        "is_business_seller": false,
        "inspection_status": "OPT_OUT",
        "badge": "검수가능",
        "favorite_count": 186,
        "comment_count": 0,
        "tags": [
          "에어포스",
          "나이키신발",
          "나이키에어포스1"
        ],
        "updated_at": "2026-09-29T09:22:39Z",
        "image": "https://media.bunjang.co.kr/product/423853877_1_1789651935_w856.jpg",
        "images": [
          "https://media.bunjang.co.kr/product/423853877_1_1789651935_w856.jpg"
        ]
      },
      {
        "listing_id": "375680594",
        "title": "[6개2만원] 200종아미 HDEX 스투시 스포츠 양말",
        "url": "https://m.bunjang.co.kr/products/375680594",
        "price": 20000,
        "currency": "KRW",
        "condition": "new",
        "status": "selling",
        "status_code": "0",
        "is_promoted": true,
        "free_shipping": false,
        "location": null,
        "neighborhood_only": false,
        "is_adult": false,
        "category_id": "700130100",
        "seller_id": "85902099",
        "is_pro_shop": false,
        "is_business_seller": false,
        "inspection_status": "NON_TARGET",
        "badge": null,
        "favorite_count": 450,
        "comment_count": 0,
        "tags": [
          "알로",
          "아이앱",
          "나이키"
        ],
        "updated_at": "2026-09-30T04:54:16Z",
        "image": "https://media.bunjang.co.kr/product/375680594_1_1784904502_w856.jpg",
        "images": [
          "https://media.bunjang.co.kr/product/375680594_1_1784904502_w856.jpg"
        ]
      },
      {
        "listing_id": "435274354",
        "title": "나이키 바람막이 자켓 베이지",
        "url": "https://m.bunjang.co.kr/products/435274354",
        "price": 32900,
        "currency": "KRW",
        "condition": "used",
        "status": "selling",
        "status_code": "0",
        "is_promoted": false,
        "free_shipping": false,
        "location": null,
        "neighborhood_only": false,
        "is_adult": false,
        "category_id": "320500200",
        "seller_id": "76494311",
        "is_pro_shop": false,
        "is_business_seller": false,
        "inspection_status": "NON_TARGET",
        "badge": null,
        "favorite_count": 0,
        "comment_count": 0,
        "tags": [
          "나이키바람막이",
          "나이키",
          "나이키후드집업"
        ],
        "updated_at": "2026-09-30T17:59:35Z",
        "image": "https://media.bunjang.co.kr/product/435274354_1_1790573874_w{res}.jpg",
        "images": [
          "https://media.bunjang.co.kr/product/435274354_1_1790573874_w{res}.jpg"
        ]
      }
    ],
    "count": 100,
    "total_results": 319639,
    "page": 0,
    "per_page": 100,
    "has_more": true,
    "next_page": 1,
    "promoted_count": 11,
    "duplicate_listing_ids": 6,
    "unparsable_rows_dropped": 0,
    "no_result": false,
    "sort_applied": "best_match",
    "filters_applied": {
      "query": "나이키",
      "sort": "best_match"
    },
    "currency": "KRW"
  },
  "meta": {
    "api": "bunjang",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 0,
    "record_count": 100,
    "cache_hit": false
  }
}
Real response, fetched from the live endpoint with the parameters on the left — trimmed to the first few rows, with seller names left out. Press Try it for the untrimmed response.

How the Bunjang API works

Bunjang is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 321 engines.

02
Call
POST /bunjang/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 credit per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

Prove the filter against a control, because this source echoes back filters it does not implement

Bunjang returns any filter you hand it inside its own response, including ones it has no implementation for. The echo therefore proves nothing at all, and a filtered search that changed nothing looks identical to one that worked.

01categories
POST/bunjang/v1/categories
{}

Bunjang's own category tree with the ids the search surface takes.

02search
POST/bunjang/v1/search
{"query": "나이키"}

A hundred items a page. Price is a plain won integer on this surface, never scaled and never inferred from a display string.

03search
POST/bunjang/v1/search
{"query": "나이키", "condition": "new", "price_min": 10000, "price_max": 50000}

Only filters whose effect was seen against a same-run unfiltered control are offered. Condition takes the set from 319,629 to 55,922, and every returned row conforms.

04detail
POST/bunjang/v1/detail
{"listing_id": "<from any row>"}

The full item: description, every image, the brand, the original price where there is one, and the safe-payment flag that the search rows do not carry honestly.

A filtered set you can trust because a control proved it, and a price that is the source's own integer rather than a parsed display string.

request
curl -X POST https://api.reefapi.com/bunjang/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"나이키","per_page":20}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "bunjang",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

Korea only, in won, open without a browser, and an echo that cannot be trusted

Measured 2026-09-30 against the live gateway across three Korean searches and three hundred rows. Three of these lines go against us.

Korea, in won, one marketplace

A single national C2C market, priced in KRW. The site's own API answers a plain datacentre exit directly - no browser, no residential vantage point, no cookie and no token - which is why this engine is among the cheapest in the catalogue to run.

Against us: the filter echo is worthless, so controls were used instead

Hand Bunjang a filter key it does not implement and it returns that key inside its own filter block with the result count unchanged. So the echo, which is the normal way to prove a filter on other sources, proves nothing here. Every published filter was instead measured against a same-run unfiltered control: condition new took 319,629 to 55,922 and used to 4,768, a price band to 25,014, and a category to 67,578, with the returned rows conforming in each case. Free shipping, neighbourhood, checkout and new-arrival filters were all measured, all left the count byte-identical, and none are published.

The price is an integer, and there is no ten-thousand unit on these routes

Korean display prices often carry a ten-thousand unit, which is exactly the kind of thing that publishes a figure a hundred times wrong. It does not appear on these routes: the search surface prints won as a digit string and the detail route as an integer. Parsing is strict and anything else becomes null rather than a scaled guess. Across three hundred live rows prices ran from 500 to 13,000,000 won, and search and detail agreed on the figure on every listing checked.

Against us: a dead handle was found and not published

Every row carries a checkout flag that reads false on all five hundred rows measured, while the detail record for the very first of them says safe payment is enabled. It is therefore a dead field on the search surface and is not returned; the flag comes from the detail record, where it is real. A field that is uniformly false is not a fact, it is a field nobody filled.

Not stated is not the same as used

Twenty-five of five hundred rows carry a condition code that means the seller did not say. Those come back null rather than being guessed from the title, even when the title contains the Korean word for new.

Against us: location and tags are sparse, and that is the source

Location was on about a third of rows and tags on about half, because Bunjang publishes an empty string for them on the rest. They come back null rather than as empty strings that would look like data.

An unknown sort is refused rather than swallowed

Bunjang accepts an unrecognised sort and serves its date-ordered list, so only the four orders whose effect was measured are offered and anything else is rejected. The cheapest-first order was confirmed by the prices it served.

A dead item answers two different ways, and both mean the same thing

A removed listing returns either a not-found error or a bad-request on a perfectly well-formed id, so both are reported as not found. A non-numeric id is refused before any request is made, and a keyword with no matches returns zero rows with a successful status.

Sold status on the search surface is not claimed

The sold state was never seen on a search response during measurement, so while the mapping is proven from the detail route, search-side coverage of it is unproven and is not presented as complete.

Price

Search returns up to a hundred items for one call, which makes this an unusually cheap way to watch a resale market. The category tree is the lookup; the detail record is where the safe-payment flag and the original price live.

What people build with Bunjang

The jobs this data is most often used for.

3

endpoints

1

credit per call

01

Pricing and assortment teams use Bunjang to search Bunjang listings by keyword and/or category, up to 200 per page.

02

Brand-protection teams use Bunjang to get one Bunjang listing by id or URL.

03

Retail analysts use Bunjang to get bunjang's own category tree.

What Bunjang data costs

The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 321 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/bunjang/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"나이키","per_page":20}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/bunjang/v1/search",
    headers={"x-api-key": REEF_KEY},
    json={
  "query": "나이키",
  "per_page": 20
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Bunjang.

Get a free key →
What is the Bunjang API?▾

Bunjang API is a ReefAPI endpoint group for bunjang It returns live JSON through POST requests under /bunjang/v1.

Is the Bunjang API free to try?▾

Yes. ReefAPI starts with 1,000 free credits, no card required. Bunjang calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Bunjang login or account?▾

No login to Bunjang 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 Bunjang 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 Bunjang API use?▾

Bunjang actions currently cost 1 credit per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

Can I call Bunjang from an AI assistant or MCP client?▾

Yes. Connect ReefAPI once through MCP and your assistant can call bunjang actions with the same key, credit pool and JSON envelope used by normal REST requests.

Is the Bunjang API a Bunjang scraper?▾

It is the managed alternative to a DIY Bunjang scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same bunjang back as clean JSON.

Why does my Bunjang scraper keep getting blocked?▾

Most Bunjang scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked calls are free.

26 More APIs APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Bunjang, you are one call away from the rest of the category — no second contract, no second integration.

Need something this API does not do?

Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.

0/4000

No account needed · we reply from [email protected]

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 320 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-09-30.