Swappie API & Scraper
The Swappie API returns swappie.com, Europe's largest refurbished-Apple retailer, as clean JSON in four actions: search, detail, trade_in and popular.
🤖 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.
Swappie is not a marketplace — it buys, refurbishes and sells every device itself — so there is exactly one seller, one warranty and one price per SKU, and no buy-box to reverse-engineer. What that makes available is depth rather than breadth: the catalogue is 65 models (30 iPhone, 17 iPad, 16 MacBook, 2 AirPods when measured), but a single model resolves to as many as 128 separate sellable SKUs, because the unit Swappie actually sells is model x storage x colour x cosmetic grade x battery type x VAT scheme. detail returns that whole table in one call, and each row carries its own price, its own unit stock, the split of that stock across Swappie's warehouses, and the timestamp of its last reprice. search browses one device catalogue of one storefront with Swappie's own filters and all seven of its sort orders, and returns one row per model with the from-price, the colours and capacities it is stocked in, Swappie's own popularity score and its bestseller flag; the whole category arrives in a single response, so there is no paging to manage. Prices are per country and really differ: measured in one run, the same iPhone 15 128 GB in the cheapest grade read 425.00 EUR on the German and Dutch storefronts, 435.00 on the Italian one and 445.00 on the Finnish and international ones, while the Swedish site quoted it in SEK, the Danish in DKK, the Polish in PLN and the Czech in CZK. 42 of the 43 storefronts answered with live stock; the US storefront exists but published none, and the API says so with MARKET_UNAVAILABLE instead of an empty success. The cosmetic ladder is Swappie's own four grades, carried verbatim and never remapped: A Premium, B Excellent, C Good, D Acceptable. It is also a price ladder, and the grade filter moves the quoted price rather than only the row count — in one measured run the same iPhone 14 card read 319.00 EUR at the cheapest grade, 325.00, 335.00 and 389.00 as the grade went up. trade_in is the other half of the same business and almost no refurbished catalogue publishes it: what Swappie PAYS for a used iPhone or iPad in that market, 28 phone and 18 tablet models when measured, with the capacities it accepts. Put next to a from-price it gives the live spread between what the company buys at and what it sells at, in the same currency, on the same day. Two honest limits worth knowing before you build: swappie.com has no keyword search, so an exact model is reached by name rather than by free text; and the trade-in figure is an "up to" number for the top capacity in perfect condition, not a quote for your device. One ReefAPI key, no Swappie account, and the standard { ok, data, meta, error } envelope.
Swappie's four cosmetic grades, and what each one does to the price
The grade letters and English labels are Swappie's own, read from its own grade list; nothing is remapped onto a scale of ours. The price column is one measured run on the international storefront, the same iPhone 14 card re-quoted at each grade — it is there to show that the grade filter moves the PRICE, not only the row count, and the exact figures move with the market. The model count column is from the same run, out of 30 iPhone models in stock: a model appears when at least one of its variants exists in that grade.
| grade | Swappie's label | filter value on the site | iPhone 14 from-price in that grade | iPhone models offered in that grade |
|---|---|---|---|---|
| D | Acceptable | 1 | 319.00 EUR | 24 of 30 |
| C | Good | 2 | 325.00 EUR | 30 of 30 |
| B | Excellent | 3 | 335.00 EUR | 29 of 30 |
| A | Premium | 4 | 389.00 EUR | 29 of 30 |
Grade is only one of the axes. The same model, grade and colour can also exist in two battery types and under two VAT schemes — one of them Swappie's margin scheme, on which a business buyer cannot reclaim VAT — and those are separate SKUs with their own stock. detail returns every combination; summary.price_by_grade gives the cheapest price per grade so the ladder is readable at a glance.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/swappie/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"market": "de",
"category": "iphone",
"sort": "lowest"
}
}{
"ok": true,
"meta": {
"api": "swappie",
"endpoint": "search",
"mode": "live",
"latency_ms": 1542,
"record_count": 30,
"bytes": 1132910,
"cache_hit": false,
"market": "de",
"country": "DE",
"language": "de",
"currency": "EUR",
"category": "iphone",
"device_category": "phone",
"total_models": 30,
"filters_applied": {
"sorting": "lowest"
},
"source_price_bounds": {
"min": 140,
"max": 1740
},
"price_range": {
"min": 145,
"max": 1109
},
"paging": "none: swappie.com returns the whole category in one response",
"filter_semantics": "filters select VARIANTS; a model is returned when at least one of its variants matches, and its from-price is the cheapest MATCHING variant",
"source_filter_echo": "published",
"upstream_requests": 1,
"charged_credits": 3,
"version": "1.0.0",
"request_id": "770a288cc19a4cec",
"queue_ms": 1,
"fetched_at": "2026-10-08T11:33:20.542Z"
},
"data": {
"models": [
{
"model": "iPhone SE 2020",
"model_slug": "iphone-se-2020",
"device_category": "phone",
"sku": "SMAP251MD-PB",
"from_price": 145,
"from_price_minor": 14500,
"currency": "EUR",
"from_price_display": "145,00 €",
"reference_price": 145,
"reference_price_display": "145,00 €",
"is_discounted": false,
"discount_display": "0 €",
"from_price_storage_gb": 64,
"available_colors": [
"Black",
"Red"
],
"available_storages_gb": [
64,
256
],
"is_bestseller": false,
"popularity_score": 28,
"catalog_rank": 20,
"release_year": null,
"ram_gb": null,
"cpu_cores": null,
"gpu_cores": null,
"sim_type": "dual_SIM",
"connector_type": null,
"anc_type": null,
"wireless_charging_type": null,
"headphone_configs": [],
"image_url": "https://assets.swappie.com/swappie-iphone-se-2020-red.png",
"url": "https://swappie.com/de/modell/iphone-se-2020/",
"detail_params": {
"market": "de",
"model": "iPhone SE 2020"
},
"category_url": "https://swappie.com/de/iphone/iphone-se-2020/"
},
{
"model": "iPhone SE 2022",
"model_slug": "iphone-se-2022",
"device_category": "phone",
"sku": "SMAP393MD",
"from_price": 145,
"from_price_minor": 14500,
"currency": "EUR",
"from_price_display": "145,00 €",
"reference_price": 145,
"reference_price_display": "145,00 €",
"is_discounted": false,
"discount_display": "0 €",
"from_price_storage_gb": 64,
"available_colors": [
"Midnight",
"Red",
"Starlight"
],
"available_storages_gb": [
64,
128,
256
],
"is_bestseller": false,
"popularity_score": 37,
"catalog_rank": 28,
"release_year": null,
"ram_gb": null,
"cpu_cores": null,
"gpu_cores": null,
"sim_type": "dual_SIM",
"connector_type": null,
"anc_type": null,
"wireless_charging_type": null,
"headphone_configs": [],
"image_url": "https://assets.swappie.com/swappie-iphone-se-2022-starlight.png",
"url": "https://swappie.com/de/modell/iphone-se-2022/",
"detail_params": {
"market": "de",
"model": "iPhone SE 2022"
},
"category_url": "https://swappie.com/de/iphone/iphone-se-2022/"
},
{
"model": "iPhone 11",
"model_slug": "iphone-11",
"device_category": "phone",
"sku": "SMAP204MD",
"from_price": 159,
"from_price_minor": 15900,
"currency": "EUR",
"from_price_display": "159,00 €",
"reference_price": 159,
"reference_price_display": "159,00 €",
"is_discounted": false,
"discount_display": "0 €",
"from_price_storage_gb": 64,
"available_colors": [
"Black",
"Green",
"Purple"
],
"available_storages_gb": [
64,
256
],
"is_bestseller": false,
"popularity_score": 41,
"catalog_rank": 17,
"release_year": null,
"ram_gb": null,
"cpu_cores": null,
"gpu_cores": null,
"sim_type": "dual_SIM",
"connector_type": null,
"anc_type": null,
"wireless_charging_type": null,
"headphone_configs": [],
"image_url": "https://assets.swappie.com/swappie-iphone-11-white.png",
"url": "https://swappie.com/de/modell/iphone-11/",
"detail_params": {
"market": "de",
"model": "iPhone 11"
},
"category_url": "https://swappie.com/de/iphone/iphone-11/"
}
],
"seller": {
"name": "Swappie",
"kind": "first_party_retailer",
"legal_name": "Swappie Oy",
"url": "https://swappie.com/",
"note": "Swappie buys, refurbishes and sells every device itself; there is exactly one seller on this catalogue."
}
}
}What the Swappie API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Browse one device catalogue of one Swappie market with the storefront's own filters and sort: one row per MODEL with its from-price in the market's currency, the colours and capacities it is stocked in, its bestseller flag and Swappie's own popularity score. The whole category arrives in a single request (30 iPhone, 17 iPad, 16 MacBook, 2 AirPods models on 2026-10-07), so there is no paging to manage. Every filter offered here was measured against an unfiltered call in the SAME run and really changes the result; filters the source accepts and then ignores are not exposed, and any value the source drops is reported in `meta.warnings` instead of passing as a successful filtered call. `grade` is special: it also re-quotes each model's from-price AT that grade. There is no keyword search on swappie.com and none is faked here — use `models` for an exact model. | Pricing teams call search to get browse one device catalogue of one Swappie market with the storefront's own filters and sort. | market, category, models, colors, storages, ... |
| detail | The COMPLETE live offer table of one model in one market, straight from the storefront's own inventory call: one row per sellable SKU — storage x colour x cosmetic grade (A Premium / B Excellent / C Good / D Acceptable) x battery type x VAT scheme — each with its own price, its own unit stock count, the stock split across Swappie's warehouses (Finland, Germany, the Italian 3PL and the in-transit buckets) and the timestamp Swappie last repriced it. Measured on 2026-10-07: 106 SKUs for iPhone 15, 128 for MacBook Air M1 13, 18 for iPad Air 7 2025 13, 2 for AirPods 4. MacBook rows also carry RAM, CPU/GPU cores, chip variant, screen size and the keyboard language and layout of the actual unit. The summary gives the cheapest price per grade so you can see the condition ladder at a glance. An unknown model name is NOT_FOUND. | Marketplace operators call detail to get the COMPLETE live offer table of one model in one market, straight from the storefront's own…. | market, model, in_stock_only |
| trade_in | What Swappie PAYS for a used device in one market — the buy-back side of the same company, which almost no refurbished catalogue publishes. One row per model it currently buys (28 phone + 18 tablet models on 2026-10-07) with the top payout for that model in perfect condition and top capacity, the capacities it accepts and the full model name per capacity. Payouts are per market and really differ: iPhone 17 Pro Max read EUR 1,264 on `fi`, EUR 1,290 on `de` and SEK 14,270 on `se` in one run. Put next to the `search` sell-price for the same model it gives the live buy/sell spread. The list also runs ahead of the sell catalogue — Swappie was already quoting an iPhone 18 Pro on 2026-10-07. 10 of the 43 locales have no trade-in site and answer MARKET_UNAVAILABLE. | Catalog enrichment teams call trade_in to get what Swappie PAYS for a used device in one market. | market, category |
| popular | The 20 refurbished iPhones Swappie is pushing right now in one market, as its own home-page carousel builds them: real SKUs, not models — each with its grade, colour, capacity, battery type, live price, unit stock and a flag for whether a new battery can be added. 13.5 KB in one request, the cheapest way to sample live Swappie prices and to watch what moves day to day. | Retail analysts call popular to get the 20 refurbished iPhones Swappie is pushing right now in one market, as its own home-page c…. | market |
Call search from your stack
curl -X POST https://api.reefapi.com/swappie/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"market":"de","category":"iphone","sort":"lowest"}'import requests
r = requests.post(
"https://api.reefapi.com/swappie/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"market": "de",
"category": "iphone",
"sort": "lowest"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/swappie/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"market": "de",
"category": "iphone",
"sort": "lowest"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.swappie.search with {"market":"de","category":"iphone","sort":"lowest"}.Who uses this API and why
- Track refurbished Apple prices country by country and spot the arbitrage: the same iPhone 15 SKU read 425.00 EUR on one storefront and 445.00 on another in a single measured run.
- Price your own refurbished inventory against the market leader at the right condition, using Swappie's own four grades instead of a mapping you invented.
- Watch real availability, not a yes/no flag: every SKU returns a unit count and the warehouse it sits in, including units still in transit.
- Model the buy/sell spread of a refurbisher by reading both sides of the same company on the same day, in the same currency.
- Feed a trade-in or recommerce calculator with a published, per-market payout table for 28 iPhone and 18 iPad models.
Questions developers ask before integrating
Is Swappie a marketplace, and whose price am I reading?
It is a first-party store. Swappie buys, refurbishes and sells every device itself, so there is one seller (Swappie Oy, Helsinki), one warranty and one price per SKU. Nothing in a response is another trader's offer, and there is no buy-box.
Which countries can I read, and does the country change the price or only the language?
43 storefront locales across 23 countries, and the country changes the catalogue, the price and the currency. Measured in one run, the same iPhone 15 128 GB in the cheapest grade read 425.00 EUR on the German and Dutch sites, 435.00 on the Italian and 445.00 on the Finnish and international ones; Sweden quoted SEK, Denmark DKK, Poland PLN and Czechia CZK. 34 locales are EUR and two each are SEK, DKK, PLN and CZK. Countries with two languages have two slugs serving the same stock in different wording. One exception worth knowing: swappie.com serves a US storefront but it published no stock when measured, so the API answers MARKET_UNAVAILABLE for it rather than an empty success you might mistake for a sold-out catalogue, and any locale that is not on Swappie's own country list is rejected rather than quietly answered with the international EUR site.
How many products does one model actually have?
Far more than the catalogue suggests, because the sellable unit is the SKU. Measured on 2026-10-08: 105 SKUs for the iPhone 15, 128 for the MacBook Air M1 13, 61 for the iPhone 16 Pro, 18 for the iPad Air 7 2025 13 and 2 for the AirPods 4. Each is a distinct combination of storage, colour, cosmetic grade, battery type and VAT scheme, with its own price and its own stock.
Is the stock number real, or just in-stock / out-of-stock?
It is a unit count, and it is the count Swappie's own storefront does not show you. The number printed on the site is capped at 10, while the per-warehouse breakdown in the same record is not — one SKU showed 10 on the site and 262 units across its warehouses. The API returns the warehouse-derived total as stock, keeps the capped figure as stock_display_capped, flags the disagreement, and splits on-hand units from units still in transit.
Can I search by keyword?
No, and the API does not pretend otherwise: swappie.com has no keyword search. You browse one of the four device catalogues and filter it, or you name the exact model. Every search row returns the model name ready to pass straight to detail, so getting from a browse to a full price table is one hop.
Which filters actually work?
Only the ones measured to change the result against an unfiltered call in the same run, which is why the list is shorter than the one in the site's own markup. Working: model, colour, storage, cosmetic grade, camera count, body size, a price range and all seven sort orders. Measured on 30 iPhone models: storage 64 GB left 6, 512 GB left 25, yellow left 4, a 800 floor left 12, a 250 ceiling left 6, one named model left 1. Camera and size each partition the catalogue exactly (5 + 12 + 13, and 4 + 17 + 9). Filters select variants, so a model survives if any of its variants matches and is then quoted at the cheapest matching one. Anything the site accepts and then ignores is not offered here, and if the site drops a value anyway the response says so in meta.warnings.
What is the trade-in action, and is the number a quote?
It is what Swappie pays to buy a device back in that market: 28 iPhone and 18 iPad models when measured, each with the capacities it accepts. It is an "up to" figure for the top capacity in perfect condition, so it is not a quote for your specific device and it is not directly comparable with a from-price, which is the cheapest capacity in the cheapest grade. It is per market and really differs: the same model read 1,264 EUR on the Finnish site, 1,290 on the German one and 14,270 SEK on the Swedish one. Trade-in is live in 33 of the 43 locales; the other 10 have no sell site and answer MARKET_UNAVAILABLE.
Is there an IMEI, serial number or EAN?
No. Swappie publishes its own stock code as the SKU and nothing device-specific, so no IMEI, no serial and no GTIN/EAN. Each SKU is a stock position, not an individual handset.
What is the Swappie API?
Swappie API is a ReefAPI endpoint group for europe's biggest refurbished-apple store as json: every sku of an iphone, ipad, macbook or airpods with its own price, its unit stock and the warehouse it sits in, across 43 storefronts in 5 currencies — plus what swappie pays to buy the same model back. It returns live JSON through POST requests under /swappie/v1.
Is the Swappie API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Swappie calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Swappie login or account?
No login to Swappie 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 Swappie 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 Swappie API use?
Swappie 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 Swappie from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call swappie actions with the same key, credit pool and JSON envelope used by normal REST requests.