Swappa API
Swappa API returns live Swappa data as clean JSON for swappa The primary endpoint, search, returns product details including slug, name, brand, image and description.
🤖 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.
Developers reach for it when they need to validate, enrich, classify and normalize operational data without maintaining one-off scraping code or separate API contracts. If you were about to build or fix a Swappa scraper, this API is the maintained alternative — it returns the same data as clean JSON, with the proxies, rotation and anti-bot handling already solved. This page covers the live example, request shape, response shape and available actions: search, price, product_detail. Every request uses the same ReefAPI envelope, one API key and one shared credit pool, so it fits alongside the rest of your data stack.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/swappa/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"model": "apple-iphone-15",
"max_results": 25
}
}{
"ok": true,
"meta": {
"api": "swappa",
"endpoint": "search",
"mode": "live",
"latency_ms": 1662.7,
"record_count": 25,
"bytes": 473047,
"cache_hit": false,
"completeness_pct": 100,
"stop_reason": "limit_reached",
"method": "ssr_html",
"pagination": {
"page": 1,
"per_page": 50,
"total_results": 329,
"returned": 25,
"has_more": true,
"next_page": 2
}
},
"data": {
"product": {
"slug": "apple-iphone-15",
"name": "[redacted-name]",
"brand": "Apple",
"image": "https://static.swappa.com/media/product/apple-iphone-15/apple-iphone-15-01.png",
"description": "Apple iPhone 15 - Used and Refurbished",
"url": "https://swappa.com/listings/apple-iphone-15",
"guide_url": "https://swappa.com/guide/apple-iphone-15",
"rating": {
"average": 4.7,
"review_count": 17
},
"price_range": {
"low": 299,
"high": 791,
"currency": "USD"
},
"offer_count": 329,
"availability": "InStock"
},
"listings": [
{
"listing_id": "LAGY58046",
"url": "https://swappa.com/listing/view/LAGY58046",
"title": "Fair Apple iPhone 15 - T-Mobile, 128 GB, Black, A2846",
"headline": "T-MOBILE ONLY: Will not unlock or work for any other carrier including Metro - Original - Fair used",
"price": 335,
"currency": "USD",
"price_valid_until": "[redacted-phone]",
"availability": "InStock",
"gtin": "[redacted-phone]",
"product_slug": "apple-iphone-15",
"brand": "Apple",
"image": "https://static.swappa.com/images/cache/d4/90/d49003af8a3ee54d512a81ed64b021c9.jpg",
"image_count": 6,
"quantity": 1,
"featured": true,
"phonecheck_certified": false,
"payment_methods": [
"PayPal"
],
"seller": {
"name": "[redacted-name]",
"type": "person",
"profile_id": "JWA450",
"profile_url": "https://swappa.com/user/JWA450/profile",
"rating": 5,
"ratings_count": 1325,
"location": "Grand Junction, CO",
"badges": null
},
"attributes": [
{
"label": "[trimmed-depth]",
"value": "[trimmed-depth]"
},
{
"label": "[trimmed-depth]",
"value": "[trimmed-depth]"
},
{
"label": "[trimmed-depth]",
"value": "[trimmed-depth]"
}
],
"condition": "Fair",
"battery_health_pct": 79,
"storage": "128GB",
"memory": null,
"color": "Black",
"carrier": "T-Mobile",
"model_number": "A2846",
"processor": null,
"edition": null,
"business_seller": false,
"international_shipping": false
},
{
"listing_id": "LAIG86715",
"url": "https://swappa.com/listing/view/LAIG86715",
"title": "Fair Apple iPhone 15 - AT&T, 128 GB, Black, A2846",
"headline": null,
"price": 340,
"currency": "USD",
"price_valid_until": "[redacted-phone]",
"availability": "InStock",
"gtin": "[redacted-phone]",
"product_slug": "apple-iphone-15",
"brand": "Apple",
"image": "https://static.swappa.com/images/cache/00/d9/00d91c07d25ac022c2691dc4c620582f.jpg",
"image_count": 7,
"quantity": 1,
"featured": true,
"phonecheck_certified": true,
"payment_methods": [
"PayPal",
"Stripe"
],
"seller": {
"name": "[redacted-name]",
"type": "business",
"profile_id": "wireless-guys",
"profile_url": "https://swappa.com/bp/wireless-guys",
"rating": 5,
"ratings_count": 65,
"location": "Michigan Dearborn",
"badges": [
"[trimmed-depth]",
"[trimmed-depth]"
]
},
"attributes": [
{
"label": "[trimmed-depth]",
"value": "[trimmed-depth]"
},
{
"label": "[trimmed-depth]",
"value": "[trimmed-depth]"
},
{
"label": "[trimmed-depth]",
"value": "[trimmed-depth]"
}
],
"condition": "Fair",
"battery_health_pct": 100,
"storage": "128GB",
"memory": null,
"color": "Black",
"carrier": "AT&T",
"model_number": "A2846",
"processor": null,
"edition": null,
"business_seller": true,
"international_shipping": false
},
{
"listing_id": "LAGY73828",
"url": "https://swappa.com/listing/view/LAGY73828",
"title": "Fair Apple iPhone 15 - T-Mobile, 128 GB, Black, A2846",
"headline": "T-MOBILE ONLY: Will not unlock or work for any other carrier including Metro - Original - Fair used",
"price": 340,
"currency": "USD",
"price_valid_until": "[redacted-phone]",
"availability": "InStock",
"gtin": "[redacted-phone]",
"product_slug": "apple-iphone-15",
"brand": "Apple",
"image": "https://static.swappa.com/images/cache/d8/6f/d86ff9d8006277fd5c0c2cbb94dec4da.jpg",
"image_count": 6,
"quantity": 1,
"featured": true,
"phonecheck_certified": false,
"payment_methods": [
"PayPal"
],
"seller": {
"name": "[redacted-name]",
"type": "person",
"profile_id": "JWA450",
"profile_url": "https://swappa.com/user/JWA450/profile",
"rating": 5,
"ratings_count": 1307,
"location": "Grand Junction, CO",
"badges": null
},
"attributes": [
{
"label": "[trimmed-depth]",
"value": "[trimmed-depth]"
},
{
"label": "[trimmed-depth]",
"value": "[trimmed-depth]"
},
{
"label": "[trimmed-depth]",
"value": "[trimmed-depth]"
}
],
"condition": "Fair",
"battery_health_pct": 78,
"storage": "128GB",
"memory": null,
"color": "Black",
"carrier": "T-Mobile",
"model_number": "A2846",
"processor": null,
"edition": null,
"business_seller": false,
"international_shipping": false
}
],
"filters_available": {
"condition": [
{
"value": "new",
"label": "New"
},
{
"value": "mint",
"label": "Mint"
},
{
"value": "good",
"label": "Good"
}
],
"carrier": [
{
"value": "att",
"label": "AT&T"
},
{
"value": "mint",
"label": "Mint Mobile"
},
{
"value": "t-mobile",
"label": "T-Mobile"
}
],
"color": [
{
"value": "black",
"label": "Black"
},
{
"value": "blue",
"label": "Blue"
},
{
"value": "green",
"label": "Green"
}
],
"storage": [
{
"value": "128gb",
"label": "128 GB"
},
{
"value": "256gb",
"label": "256 GB"
},
{
"value": "512gb",
"label": "512 GB"
}
],
"modeln": [
{
"value": "QTI4NDY",
"label": "A2846"
},
{
"value": "QTMwODk",
"label": "A3089"
},
{
"value": "QTMwOTA",
"label": "A3090"
}
],
"sort": [
{
"value": "price_low",
"label": "Price (Low)"
},
{
"value": "price_high",
"label": "Price (High)"
},
{
"value": "listing_created_newest",
"label": "Listing Created (Newest)"
}
],
"flags": [
{
"value": "with_warranty",
"label": "With Warranty"
},
{
"value": "accepts_stripe",
"label": "Accepts Stripe"
},
{
"value": "exclude_businesses",
"label": "Exclude Businesses"
}
]
},
"models": []
}
}What the Swappa API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search Swappa for live listings. Give a free-text `query` ('iphone 15 pro', 'macbook pro 14', 'playstation 5') or an exact `model` slug, and get back that model's listings for sale right now — each with Swappa's own listing code, price, condition grade, battery health, storage / memory / colour / carrier / model number, photo count, seller name, seller star-rating and ship-from city. Narrow with condition, carrier, colour, storage, memory, processor, model_number, edition, and the warranty / card-payment / individual-seller / Phonecheck / international-shipping switches; sort by price or newest. Paginated 50 per page. Every filter value a model actually supports is returned in `filters_available`, so you never have to guess. | Ops teams call search to search Swappa for live listings. | query, model, max_results, page, sort, ... |
| price | Re-check ONE listing's price, availability and condition, cheaply. Give it the Swappa listing code you already hold and it returns what the seller is asking right now, whether the listing is still buyable, and the condition grade — and nothing else: no photos, description, specs, seller block or reviews. Built for refreshing a catalogue you already have rather than discovering listings. It reads the small slide-over card Swappa's own grid fetches on hover instead of the whole listing page, so it costs a fraction of `product_detail` — measured live on nine listings across nine product lines: 6.8-11.5 KB against 122.3-171.0 KB for a full `product_detail` (10.7x-19.7x), or 73.5-82.6 KB with its reviews switched off (6.4x-10.9x). Remember what a Swappa listing IS: one specific used device from one seller, not a catalogue entry — when it sells, Swappa takes it down, and this action then returns NOT_FOUND. That is the answer, not a failure: it means the unit you were tracking is gone. | Developer tools call price to get re-check ONE listing's price, availability and condition, cheaply. | listing_id, url |
| product_detail | Get one Swappa listing in full, by its listing code or its swappa.com URL — the asking price and currency, quantity available, condition grade with Swappa's own condition criteria, the seller's damage description, battery health, storage / memory / colour / carrier / model number / processor, GTIN and GTIN-13, the COMPLETE photo gallery at full resolution, carrier compatibility, shipping (free-shipping flag, rate, ship-from city, handling time, international), payment methods, returns policy, listing created / updated / expiry dates, and the seller (display name, individual-vs-business, profile, star rating, number of ratings, location). Also returns the product the listing belongs to: brand, catalog slug, star rating and review count, top buyer reviews, and — for models with a Swappa product guide — the device spec tables including width, height, depth and weight in grams and ounces, for shipping-cost calculation. | Validation workflows call product_detail to get one Swappa listing in full, by its listing code or its swappa.com URL. | listing_id, url, include_reviews, max_reviews |
Call search from your stack
curl -X POST https://api.reefapi.com/swappa/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"model":"apple-iphone-15","max_results":25}'import requests
r = requests.post(
"https://api.reefapi.com/swappa/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"model": "apple-iphone-15",
"max_results": 25
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/swappa/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"model": "apple-iphone-15",
"max_results": 25
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.swappa.search with {"model":"apple-iphone-15","max_results":25}.Who uses this API and why
- Ops teams use Swappa to search Swappa for live listings.
- Developer tools use Swappa to get re-check ONE listing's price, availability and condition, cheaply.
- Validation workflows use Swappa to get one Swappa listing in full, by its listing code or its swappa.com URL.
Questions developers ask before integrating
What is the Swappa API?
Swappa API is a ReefAPI endpoint group for swappa It returns live JSON through POST requests under /swappa/v1.
Is the Swappa API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Swappa calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Swappa login or account?
No login to Swappa 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 Swappa 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 Swappa API use?
Swappa actions currently cost 1-2 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call Swappa from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call swappa actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the Swappa API a Swappa scraper?
It is the managed alternative to a DIY Swappa 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 swappa back as clean JSON.
Why does my Swappa scraper keep getting blocked?
Most Swappa 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 or failed calls are free.