Every seller's price for the same refurbished device, as JSON
Back Market is a marketplace, not a shop: one product page is a competition between sellers and condition grades, and the price you see depends on which grade and which seller won the box.
4 active endpoints, on 1 and 2 credit tiers.
- POST/backmarket/v1/search
- POST/backmarket/v1/detail
- POST/backmarket/v1/categories
- POST/backmarket/v1/markets
What Back Market endpoints does ReefAPI ship?
4 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
Back Market API
3 of 4 endpoints, ready to run
The grid one Back Market storefront shows, with that storefront's own exact match count: product id, title, URL, price and currency, the price string the site printed, Back Market's own condition grade and its local label, stock, warranty months, seller id and the new-retail reference price.
// 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 Back Market API works
Back Market 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 438 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.
Find the cheapest Premium iPhone 13 in Germany, then see who else is selling it
Search is the shortlist and detail is the competition. Two calls take you from a keyword to every seller's price for one device.
{ market: "de", query: "iphone 13", grade: "premium", sort: "price_asc", page_size: 24 }Returns the storefront's own total for exactly this scope — 30 Premium matches out of 310 for the bare keyword on the run we measured — with the cheapest first. Keep `product_id` from the row you want.
{ market: "de", product_id: "<product_id from step 1>" }Returns every live offer for that product, cheapest first, with each offer's grade, price, stock, warranty and seller id, plus grades_available, sellers_count and price_min/price_max.
{ market: "us", product_id: "<same product_id>" }The same id in another storefront, to compare the ladder in USD. A product that is not live there answers NOT_FOUND rather than an empty list.
One product id, the whole seller ladder behind it, and the same ladder in a second currency. On the run we measured, that iPhone 13 128 GB had 7 offers from 5 sellers across 4 grades, 258.00 to 365.00 EUR.
curl -X POST https://api.reefapi.com/backmarket/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"iphone 13","market":"de","page_size":24}'{
"ok": true,
"data": { … },
"meta": {
"api": "backmarket",
"endpoint": "search",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}What a row carries
Field fill measured on 60 rows pooled across three categories (phones, laptops, audio) on backmarket.de, 2026-10-08. The numeric price was checked against the price string the storefront itself printed on the same row: 60 of 60 agreed.
| Field | Fill | What it is |
|---|---|---|
| product_id | 60/60 | The product UUID. Pass it straight back to `detail`, or read it off the last path segment of any Back Market product URL. |
| price + currency | 60/60 | The live offer price and the ISO currency of that storefront. The currency is read off the row, not assumed from the country. |
| price_display | 60/60 | The price string the storefront itself rendered ("258,00 €", "$669.00", "£395.00"). A free second witness for the number beside it. |
| grade + grade_value | 60/60 | Back Market's condition grade. `grade_value` is the source's own number and is the same in every market; `grade` is the stable name for it. |
| grade_label | 60/60 | The same grade in that storefront's own words. Value 12 prints as "Gut" on backmarket.de, "Fair" on backmarket.com and "Buono" on backmarket.it — all three measured. |
| price_new_reference | 60/60 | The new-retail reference the site prints struck through. NOT a Back Market price: 729.00 EUR beside a 258.00 EUR refurbished iPhone 13. `discount_pct_vs_new` is computed from the pair. |
| stock | 60/60 | The seller's own quantity for that offer. 0 is returned as 0, never as empty. |
| warranty_months | 60/60 | The warranty the listing states, in months. |
| seller_id | 60/60 | The marketplace's numeric seller id, so you can group or follow one seller. Back Market publishes no seller NAME on this surface, so none is invented. |
| rating + rating_count | 60/60 | The product's rating and review count. Product level, not seller level: it is identical on all 7 offers of one product across 5 different sellers, and it matches the rating the product page itself publishes. |
| brand / model / colour / category | 60/60 | Manufacturer, exact model, colour in that market's language, and the category with its numeric id. |
| specs_summary | 60/60 | The one-line spec string the storefront prints under the title ("Mitternacht • 128 GB • Physische SIM + eSIM"). |
| scores | 28/60 | Back Market's own repairability, camera, performance, screen and longevity scores. Published for some categories only — 24 of 24 laptop rows, 4 of 24 phone rows, 0 of 12 audio rows. Empty where the source publishes none. |
Only about 1000 rows are retrievable per query however large the total is: the whole backmarket.de catalogue reports 18,141 matches but serves 42 pages of 24, 20 of 50 or 10 of 100. `pagination` says where the floor is on every response, and past the last page the source returns an empty page rather than repeating the last one.
Measured coverage
One live search per storefront plus a detail round trip, 2026-10-08. The lines that go against us are here too.
15 of 17 that answer — de, us, gb, it, nl, be, at, pt, fi, ie, gr, sk, se, jp, au (15 of 15 served on the verification run)
EUR, USD, GBP, JPY, AUD, SEK — each read off that storefront's own rows, not assumed from the country
backmarket.fr and backmarket.es answer MARKET_UNAVAILABLE; backmarket.lu and backmarket.dk are not storefronts
search, detail, categories, markets — 14 of 14 live calls succeeded on each of two consecutive runs
p50 2.3 s per call across the acceptance matrix of 28 live calls; slowest call 18.9 s
60 of 60 rows filled on every field except Back Market's own device scores, which the source publishes for some categories only (24/24 laptops, 4/24 phones, 0/12 audio)
60 of 60 rows: our numeric price matches the price string the storefront itself printed on the same row
4 — Premium, Excellent, Very good, Good. The numeric grade is the same in every market; the printed label is translated (value 12 = Gut / Fair / Buono)
up to 7 seller offers on one product in the sample, from 5 different sellers across 4 grades, a 107 EUR spread on the same phone
about 1000 rows retrievable per query whatever the total says — 18,141 matches, 42 pages of 24. Past the last page the source returns an empty page, it does not repeat the last one
no seller name (Back Market does not publish one here), no shipping cost, no checkout tax or payment surcharge
What people build with Back Market
The jobs this data is most often used for.
endpoints
credits per call
Repricing: pull every offer for your own product ids with `detail` and see exactly where you sit against the other sellers on each grade, including the stock behind each price.
Buy-side sourcing: scan a grade and price band across all 15 storefronts to find where a model is cheapest right now, with each market's own currency on the row.
Price-tracking and alerting: `search` with a tight filter plus the storefront's own total makes a stable daily series per model, grade and market.
Resale and trade-in valuation: the grade ladder and the new-retail reference price on the same row give you the depreciation curve a refurbished device actually trades at.
What Back Market 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 →- 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 -X POST https://api.reefapi.com/backmarket/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"iphone 13","market":"de","page_size":24}'import requests
r = requests.post(
"https://api.reefapi.com/backmarket/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "iphone 13",
"market": "de",
"page_size": 24
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up Back Market.
Get a free key →Which Back Market storefronts does this cover?▾
15, each verified with a live query: Germany, United States, United Kingdom, Italy, Netherlands, Belgium, Austria, Portugal, Finland, Ireland, Greece, Slovakia, Sweden, Japan and Australia — 5 currencies (EUR, USD, GBP, JPY, AUD, SEK). backmarket.fr and backmarket.es exist but we cannot read them, and they answer MARKET_UNAVAILABLE rather than pretending; backmarket.lu and backmarket.dk are not storefronts at all. The `markets` action returns that whole map, including the parts that go against us.
Why does the same phone have several prices?▾
Because Back Market is a marketplace and the condition grade is part of the product. One live iPhone 13 128 GB on backmarket.de had 7 offers from 5 sellers: Good 258.00 and 280.00, Excellent 289.00 and 314.00, Very good 289.99 and 309.00, Premium 365.00 EUR. `detail` returns all of them with their own stock and warranty, sorted cheapest first, so you can see the whole ladder instead of whichever offer happened to win the box.
Are the condition grades comparable across countries?▾
The number is, the wording is not. `grade_value` is Back Market's own code and is identical in every market, so filter and compare on it. The printed label is translated per storefront: value 12 is "Gut" in Germany, "Fair" in the United States and "Buono" in Italy. Both travel on every row, so you can compare on the number and show a human the local word.
Can I tell a filter that worked from one that was ignored?▾
Yes, and that is the point of returning the storefront's own total. On one run, keyword "iphone" on backmarket.de: 310 matches unfiltered, 69 with brand apple, 30 with grade premium, 41 with grade good, 37 with storage 256 GB, 289 under 300 EUR, 24 between 300 and 500 EUR, 38 deals only, 37 for the smartphone category. Every filter we publish was measured against the unfiltered total in the same run; a filter that did not change the total is not offered.
How deep can I page?▾
About 1000 rows per query, which is the source's own ceiling and not ours. The total is honest — backmarket.de reports 18,141 for an empty query — but only 42 pages of 24 are served. `pagination.last_page`, `pagination.retrievable_max` and `pagination.has_more` are on every response. Narrow with brand, model, category, grade or a price band to get under the ceiling rather than paging into it.
Does it return the seller's name?▾
No, because Back Market does not publish one on the surface we read. You get the numeric `seller_id`, which is enough to group offers by seller, count how many sellers compete on a product and follow one seller over time. We would rather return an id that is real than a name that is guessed.
What happens with a product that is sold out or does not exist in that market?▾
NOT_FOUND, with the storefront's own match count in the message, and it is not retried. A product that exists in Germany and not in Japan is a real answer, not an error on our side — try another `market`, or call `markets` to see the list. An empty success is never returned in its place.
Is the price the final price?▾
It is the offer price that storefront publishes for that grade and that seller, in that storefront's currency, at the moment of the call. Shipping, local tax handling and payment-method surcharges are set at checkout and are not part of this surface, so they are not returned.
What is the Back Market API?▾
Back Market API is a ReefAPI endpoint group for refurbished electronics marketplace across 15 country storefronts It returns live JSON through POST requests under /backmarket/v1.
Is the Back Market API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. Back Market calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Back Market login or account?▾
No login to Back Market 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 Back Market 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 Back Market API use?▾
Back Market 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 Back Market from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call backmarket actions with the same key, credit pool and JSON envelope used by normal REST requests.
191 E-commerce & Marketplaces APIs on the same key
One key, one credit pool, one response envelope. If you are pulling Back Market, 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 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-08.