Karrot (당근) API

Korea's neighbourhood second-hand market, one dong at a time

The Karrot API returns 당근 (daangn.com), Korea's neighbourhood second-hand marketplace, as clean JSON in four actions.

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a Karrot (당근) endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
K
/karrot/v1

4 active endpoints, on 1 and 3 credit tiers.

  • POST/karrot/v1/search
  • POST/karrot/v1/detail
  • POST/karrot/v1/regions
  • POST/karrot/v1/categories

What Karrot (당근) endpoints does ReefAPI ship?

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

4 endpoints

search

3 cr

Search the second-hand listings of one Korean neighbourhood.

required
region_id
optional
query, category_id, price_min, price_max, on_sale_only

detail

1 cr

One Karrot listing by id or URL.

required
listing_id
optional
—

regions

1 cr

Resolve Korean neighbourhood ids for search.

required
—
optional
region_id, query

categories

1 cr

Karrot's own second-hand category list.

required
—
optional
—

Every parameter, every allowed value →

Karrot (당근) API

4 of 4 endpoints, ready to run

View docs ↗

Every current listing in one Korean neighbourhood, with prices in won

3 credits1 required · 5 optional
POST/karrot/v1/search
idle
// Press "Try it" and this pane shows exactly what the
// live site returned this second — including an empty
// result, if that is the truth. No key, no account.

How the Karrot (당근) API works

Karrot (당근) 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 438 engines.

02
Call
POST /karrot/v1/…

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

03
Pay
1 or 3 credits 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.

From a Korean neighbourhood name to a full listing record

Karrot is a neighbourhood market, so every search starts from a dong. Three calls take you from a place name to one listing's complete record.

01regions
POST/karrot/v1/regions
{ "query": "역삼" }

Karrot's own neighbourhood list, filtered by the Korean name. Seeded with region_id 6035 it returned that dong plus 30 adjacent ones (31 rows) in 0.8 s.

02search
POST/karrot/v1/search
{ "region_id": "6035", "price_max": 20000, "on_sale_only": true }

105 listings under ₩20,000 out of 276 in the neighbourhood, none above the cap and none reserved or sold. Every answer carries match_scope so you know how the keyword was matched.

03detail
POST/karrot/v1/detail
{ "listing_id": "<listing_id from step 2>" }

The full record: category, dong down to province, view / favourite / chat / comment counts, every photo, the seller's declared spec rows and the 매너온도 manner score. 10 of 10 ids taken out of search resolved, each returning the same id.

A dong, a filtered shortlist and a complete listing record — in three calls, in Korean won, with no Karrot account and no browser.

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

What one Karrot neighbourhood actually returns

Karrot is not a national catalogue - it is one dong at a time, ranked by distance from it. These are the counts from a single run on 2026-10-06, so you can see the shape of an answer before you spend a credit.

Calllistingswhat it tells you
역삼동 (region_id 6035), no filter276The whole neighbourhood feed. Prices ran from ₩0 (a 나눔 giveaway) to ₩41,000,000; status was 268 on sale, 5 reserved, 3 sold
역삼동, price_max 20,0001050 of 105 rows were above the cap
역삼동, price_min 200,000530 of 53 rows were below the floor
역삼동, category_id 1 (디지털기기)19Category narrows hard: 도서 (id 9) returned 2 in the same minute
역삼동, on_sale_only2680 of 268 rows were reserved or sold
신정3동 (region_id 1197), no filter270A different neighbourhood, a different feed: category_id 1 → 17, price_max 10,000 → 93

Measured 2026-10-06 on the live site. A Karrot feed is distance-ranked, so the rows in a 역삼동 search include neighbouring dong - 11 distinct dong names appeared in those 276 rows, and each row says which one it is in. Classified listings come and go, so the counts above are dated, not a promise.

Measured on the live site, 2026-10-06

Karrot is narrow on purpose: one neighbourhood per call, no nationwide search, no sort, no paging. These are the numbers from the acceptance run, including the ones that go against us.

Market and language

South Korea only. Korean text, prices in Korean won (KRW). ₩0 is a real price — a 나눔 giveaway.

Scope

The 중고거래 second-hand section. Karrot's separate cars and property properties are not covered.

Listings per call

258–286, variable by neighbourhood (5 neighbourhoods measured: 258, 270, 276, 278, 284). One page per call — the source publishes no sort and no paging.

Row fill (276 listings, 역삼동)

id, title, URL, description, price, status, instant-buy, dong, posted and bumped: 276/276. Photo 275/276. Seller's pinned meeting point 58/276 (optional on Karrot).

Listing fill (15 listings)

id, title, URL, description, price, status, category, region, view / favourite / chat counts, times, photos, seller, recommended listings: 15/15. Seller's declared spec rows 5/15. Manner score 15/15.

Price truth

Search row vs the listing's own record: price identical 15/15, title identical 15/15.

Filters verified row by row

price_max 20,000 → 105/276, 0 over the cap · price_min 200,000 → 53, 0 under the floor · category 1 → 19, category 9 → 2 · on_sale_only → 268, 0 reserved or sold. Re-checked in a second neighbourhood.

Repeat reliability

6/6 on each of search, keyword search, detail, regions and categories. 7/7 keyword searches answered from Karrot's own index.

Response time (p50)

search 1.7 s · keyword search 2.4 s · detail 1.4 s · regions 1.1 s · categories 1.0 s.

Privacy

Public listing facts only. Seller nickname, profile page, photo and 매너온도 score; no phone, no chat handle, no address beyond the public dong, no comment text.

What people build with Karrot (당근)

The jobs this data is most often used for.

4

endpoints

1/3

credits per call

01

Resale and price-intelligence teams track second-hand prices for phones, laptops and designer bags dong by dong across Seoul.

02

Market-entry and demand researchers size Korea's local resale supply by category before committing to a city.

03

Reverse-logistics and recommerce buyers watch a neighbourhood feed for underpriced inventory and reserved-to-sold turnover.

04

Apps serving Korean users resolve a neighbourhood name to Karrot's own region id and mirror its 21-category taxonomy.

What Karrot (당근) 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 438 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/karrot/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"region_id":"6035"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/karrot/v1/search",
    headers={"x-api-key": REEF_KEY},
    json={
  "region_id": "6035"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Karrot (당근).

Get a free key →
What does the Karrot API cover?▾

The 중고거래 second-hand section of 당근 (daangn.com) in Korea. search returns one neighbourhood's current listings, detail returns one listing in full, regions turns a Korean neighbourhood name into the id search needs, and categories lists the 21 category ids. Cars (당근 중고차) and property are separate Karrot properties and are not covered. Text is Korean and prices are Korean won.

Why do I have to pass a region_id? Can I search all of Korea?▾

No, and that is Karrot itself rather than a limit of this API. 당근 is a neighbourhood market: its own search requires a neighbourhood and ranks by distance from it, so there is no nationwide query to make. Call regions first - give it a known id to get that dong's full name plus the 30 neighbourhoods Karrot lists as adjacent to it, or call it with no id for Karrot's own popular-region list - then pass the id to search. 6035 is 서울 강남구 역삼동.

Is there paging or a sort order?▾

No. Karrot serves one page per neighbourhood with its own ordering, and it publishes no sort and no page parameter, so this API does not invent either. The page size is not fixed: 258, 266, 270, 274, 276, 278, 284 and 286 listings were all measured on different neighbourhoods and runs. has_more is always false and next_page is always null, honestly.

How does the keyword search work, and what is match_scope?▾

Every answer names where the keyword was matched. match_scope "site_index" means Karrot's own search answered and you are getting its ranking untouched - that is what 7 of 7 keyword searches returned in the acceptance run (아이폰, 에어팟, 의자, 캠핑, 노트북, 컴퓨터, 책장 across five neighbourhoods, 268 to 286 listings each). match_scope "region_feed" means Karrot's keyword index was not answering at that moment, so the API read the live neighbourhood feed instead and matched your keyword against each listing's title and body; the rows are real live listings, there are simply fewer of them because a neighbourhood feed is a narrower pool than Karrot's own keyword search. You are never handed an empty list without a live check behind it: zero results only come back with filtered_empty_confirmed true and control_total_results showing how many listings that neighbourhood was serving at the time.

Are prices reliable, and why is a price sometimes 0 or null?▾

₩0 is a real Karrot price - a 나눔 giveaway - and it is returned as 0, not as missing. null means the source did not publish a plain number for that listing, and nothing is ever inferred from the title. Prices are plain won, never the 만 (ten-thousand) unit. On 15 listings spread across one feed, including the first four boosted rows, the price in the search row and the price on the listing's own record matched on 15 of 15, and so did the title.

What do I get about the seller?▾

The public shop-level facts Karrot's own listing page shows: nickname, profile page URL, profile photo and the 매너온도 manner score (36.5 is the neutral starting point; it was present on 15 of 15 listings measured). Nothing else. No phone number, no chat handle, no address beyond the public dong label, and no comment text or commenter identities - only how many comments a listing has.

Which fields are often empty, and why?▾

The seller's pinned meeting point was present on 58 of 276 listings (21%) - it is optional on Karrot. The seller's declared spec rows (properties, e.g. 사이즈 → L,66) were present on 5 of 15 listings (33%). A search row carries no category because Karrot's search surface publishes none; detail does, and it was filled on 15 of 15. Rather than ship a field that never works, a handle Karrot does not publish is left out of the response entirely.

Do the filters actually narrow the results, or are they ignored?▾

Each one was checked against the same neighbourhood's unfiltered count in the same run, and then row by row. In 역삼동 (276 unfiltered): price_max 20,000 → 105 rows with 0 above the cap; price_min 200,000 → 53 with 0 below the floor; category_id 1 → 19 and category_id 9 → 2; on_sale_only → 268 with 0 reserved or sold. The same two filters were re-checked in a second neighbourhood (신정3동, 270 unfiltered) so a filter that happens to match everything cannot pass as working.

What is the Karrot (당근) API?▾

Karrot (당근) API is a ReefAPI endpoint group for korea's neighbourhood second-hand market, one dong at a time: listings, prices in won and full listing records. It returns live JSON through POST requests under /karrot/v1.

Is the Karrot (당근) API free to try?▾

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

Do I need a Karrot (당근) login or account?▾

No login to Karrot (당근) 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 Karrot (당근) 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 Karrot (당근) API use?▾

Karrot (당근) actions currently cost 1-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

Can I call Karrot (당근) from an AI assistant or MCP client?▾

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

99 Classifieds & Second-hand APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Karrot (당근), 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 437 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-10-06.