Brazil's second-hand market as JSON — including what things actually sold for
The Enjoei API returns Brazil's largest second-hand marketplace as clean JSON in eight actions: search, product/detail, product/similar, seller/listings, seller/sold, seller/profile, filters and suggest.
8 active endpoints, on 0, 1 and 2 credit tiers.
- POST/enjoei/v1/search
- POST/enjoei/v1/product/detail
- POST/enjoei/v1/product/similar
- POST/enjoei/v1/seller/listings
- POST/enjoei/v1/seller/sold
- POST/enjoei/v1/seller/profile
- POST/enjoei/v1/filters
- +1 more
What Enjoei endpoints does ReefAPI ship?
8 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
Enjoei API
2 of 8 endpoints, ready to run
Enjoei listings by Portuguese keyword, brand, department or sub-category: listing id and URL, title, asking price in BRL, the struck price when reduced, condition, size, brand and the seller's shop — filtered by price, condition, size, discount and recency.
// 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 Enjoei API works
Enjoei is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.
No OAuth app, no request signing, no per-site account. One key covers all 280 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.
Price a second-hand item for the Brazilian market in three calls
Asking prices tell you what sellers hope for; sold prices tell you what buyers paid. Enjoei publishes both, and this is the order to read them in.
{"query": "tenis nike shox", "condition": "used", "sort": "price_asc", "per_page": 30}The live asking market, cheapest first. Each row carries the asking price and, when the seller has reduced it, the struck price and the discount.
{"listing": "<listing_id from step 1>"}The number to actually quote: detail reads Enjoei's live price rather than the search index copy, and adds the description, weight, photos and the offer band the seller will consider.
{"seller": "<seller.username from step 1>"}What that shop's comparable items really sold for — price is the asking price, sold_price is what was paid.
The live asking range, a price you can stand behind, and real completed sales to anchor it — three calls, no Enjoei account.
curl -X POST https://api.reefapi.com/enjoei/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"nike","per_page":30}'{
"ok": true,
"data": { … },
"meta": {
"api": "enjoei",
"endpoint": "search",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}What a live call returns — 400 rows across eight categories, counted not assumed
Fifty search rows were taken from each of eight categories on 2026-09-23 (sportswear, electronics, womenswear, bags, toys, books, footwear, watches) and every field counted. Two of these lines go against us; they are the ones worth reading.
| Field | Filled (of 400) | Why it is not always filled |
|---|---|---|
| listing id, URL, title, price, currency, discount percentage | 400 | — |
| condition (used or new), brand, department, category | 400 | — |
| photo, free shipping, shipping type | 400 | — |
| seller handle, display name, shop URL, avatar | 400 | — |
| sub-category | 347 | shallow on books (7 of 50); department and category are still complete there |
| struck-through price and promotion tag | 215 | only on a reduced listing — 54% of rows, steady across all eight categories |
| size and size variants | 155 | a clothing field: ~100% on womenswear and footwear, 47 of 50 on sportswear, and 0-4% on bags, watches, electronics and toys, which have no size on Enjoei |
| like count, view count, listing date, sold date, colour, seller rating | 0 | Enjoei does not publish any of them on a listing — see the coverage table |
Speed and size, 2026-09-23, 86 consecutive live calls, all returning data: search 40 calls, median 877 ms, about 36 KB for 30 rows; product/detail 10 calls, median 1.9 s, about 4 KB; seller/profile 27 calls, median 1.7 s, about 1 KB; seller/listings 2 calls, median 2.2 s; seller/sold 3 calls, median 1.5 s, 40 rows; product/similar median 1.7 s; filters 2 calls, median 779 ms; suggest median 943 ms.
What Enjoei publishes, what it does not, and where the ceilings are
Measured on 2026-09-23 across 86 live calls, 400 search rows in eight categories, 14 listings compared with their own pages and 25 shop pages. Five of these lines go against us.
All of enjoei.com.br: fashion, footwear, bags, beauty, electronics, home, toys, books and collectables, second-hand and unused, priced in BRL.
price is the asking price. original_price is the seller's struck-through price and is returned only when it is genuinely higher — 215 of 400 rows. product/detail reads Enjoei's live price: it matched the item's own page on 14 of 14 listings, while the search-index copy differed on 5 of those 14, once by a third.
Per shop only, 40 rows a page, with both the asking price and the real sale price. There is no marketplace-wide sold search, and Enjoei publishes no sale date.
No listing date, no sold date, no like count, no view count, no colour and no per-listing seller rating — Enjoei does not show any of them to a logged-out visitor, so none are returned or estimated. Use the published_within filter for recency.
Fifty rows per page, by cursor; a larger page size is ignored by Enjoei, so it is capped rather than promised. total_results stops at 10,000 and total_results_capped flags it. A 4-page walk returned 200 listings with no repeats.
Price, condition, size, brand, department, sub-category, discount and recency all filter server-side and were each measured cutting the result count — for example 6,655 matches to 1,536 for size M, and to 302 for the last 24 hours. Filters Enjoei accepts but ignores are not offered.
A clothing field. Near-complete on womenswear, footwear and sportswear; effectively absent on bags, watches, electronics and toys, which carry no size on Enjoei.
A shop's display line is a city and state on 17 of 25 shops measured; the other 8 show a merchandising badge instead. The two are returned separately, so a badge is never passed off as a location.
No Enjoei account is involved. Shop counters are the public ones on the shop page. Sellers are private individuals running a shop page, so only the storefront — handle, display name, shop URL, avatar, joining date and public counters — is returned.
What people build with Enjoei
The jobs this data is most often used for.
endpoints
credits per call
Price a second-hand item for the Brazilian market: search comparable listings, then read what a shop's equivalents actually sold for with seller/sold.
Track resale value of a brand or model over time by polling search with a fixed brand and sub-category and recording the price distribution.
Find under-priced stock for resale: sort by biggest discount, or filter discount_min with a price ceiling, and check the offer range on each candidate.
Build a Brazilian second-hand feed for a fashion or sneaker app, filtered by department, size and condition.
What Enjoei data costs
The cheapest call here is 0 credits, 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 →- 1,000 free credits on signup, no card
- One key, all 280 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 -X POST https://api.reefapi.com/enjoei/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"nike","per_page":30}'import requests
r = requests.post(
"https://api.reefapi.com/enjoei/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "nike",
"per_page": 30
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up Enjoei.
Get a free key →What did the item actually sell for?▾
seller/sold answers that, and it is the reason to use this API for second-hand pricing in Brazil. Each row of a shop's completed sales carries both numbers: price, what the seller was asking, and sold_price, what a buyer actually paid. A measured example: a Nike t-shirt listed at R$65 sold for R$41. Enjoei publishes this per shop, 40 rows a page, newest first. There is no marketplace-wide sold search, and no sale date.
Is original_price a real discount?▾
Yes, and it is only there when it is real. Enjoei sends the reference price and the current price on every row, and on an undiscounted listing the two are the same number. Returning that as a struck-through price would invent a discount on every item, so original_price is returned only when it is genuinely higher than the price you pay. It was filled on 215 of 400 rows measured; on the other 185 it is null and discount_percent is 0.
Why can the price on a search row differ from the price on product/detail?▾
Because Enjoei's search index keeps its own copy of the price and it can lag behind a re-pricing. On 14 listings checked against their own product pages, product/detail matched the page 14 times out of 14, while the search-index copy differed on 5 of them, by as much as a third — one item indexed at R$160 was really R$238. Use search rows to find and rank items, and product/detail for the number you are going to quote or transact on.
What is the offer range on a listing?▾
Enjoei is a haggling marketplace: buyers make offers and sellers publish the band they will consider. product/detail returns it as offer, with accepted, min_price and max_price — for example a R$150 listing accepting offers between R$90 and R$149. It is a negotiating band, not a price anything sold at; for real sale prices use seller/sold.
Does the API tell me when a listing was posted or sold?▾
No, and no approximation is invented. Enjoei does not publish a listing date, a sold date, a like count, a view count, a colour or a per-listing seller rating anywhere a logged-out visitor can see, so none of them are returned. What you can do is filter by recency: published_within accepts 24h, 7d, 14d or 30d and Enjoei applies it server-side — on one measured query it cut 10,000+ matches to 302.
How many results can I page through?▾
Fifty rows per page, by cursor. Enjoei clamps the page size at 50 and silently ignores anything larger, so the API caps it too rather than promising a page it will not deliver. A 4-page walk returned 200 listings with no repeats. total_results is Enjoei's own count and stops at 10,000; when it does, total_results_capped comes back true, so you never mistake a ceiling for a total.
Can I sort by newest?▾
No. Enjoei's own ordering choices are relevance, cheapest, dearest and biggest discount, and those four are what the API offers. Other sort words are accepted by the source and then quietly ignored, which would look like a working filter and be a lie, so they are rejected with INVALID_PARAM instead. For recency use the published_within filter.
Whose data is in the seller block?▾
The public storefront only: the shop's @handle, its display name, shop URL, avatar and cover image, the date it joined, and its public counters — items for sale, items sold, likes received, followers and following. Sellers on Enjoei are private individuals running a shop page, so nothing beyond the shop page itself is read or returned.
What is the Enjoei API?▾
Enjoei API is a ReefAPI endpoint group for brazil's biggest second-hand marketplace: asking price, struck price and what items actually sold for. It returns live JSON through POST requests under /enjoei/v1.
Is the Enjoei API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. Enjoei calls use the same shared credit balance as every other ReefAPI engine.
Do I need an Enjoei login or account?▾
No login to Enjoei 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 Enjoei 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 Enjoei API use?▾
Enjoei actions currently cost 1-2 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Enjoei from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call enjoei actions with the same key, credit pool and JSON envelope used by normal REST requests.
116 E-commerce & Marketplaces APIs on the same key
One key, one credit pool, one response envelope. If you are pulling Enjoei, 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.
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 279 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-23.