Other

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.

3 actionsLive JSON1,000 free creditsMCP-ready
Get a free keyOpen in playground

🤖 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.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "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
  }
}
Captured response
{
  "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": []
  }
}
Actions

What the Swappa API does

ActionDescriptionConcrete use caseKey params
searchSearch 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, ...
priceRe-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_detailGet 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
Code samples

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}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.swappa.search with {"model":"apple-iphone-15","max_results":25}.
Use cases

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.
FAQ

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.

docs / swappa

Swappa

Swappa

base /swappa/v13 endpoints
post/swappa/v1/price2 credits

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.

ParameterAllowed / rangeDescription
listing_idoptionalREQUIRED. Swappa's own listing code — the value in a swappa.com/listing/view/<code> URL and the `listing_id` on every `search` row. An opaque uppercase alphanumeric string (e.g. LAGY58046); never numeric. It identifies ONE physical used device from ONE seller: two identical phones in the same condition are two codes at two prices. Provide `listing_id` OR `url`.
urloptionalFull swappa.com listing URL — an alternative to `listing_id`.
Try in playground →
post/swappa/v1/product_detail2 credits

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.

ParameterAllowed / rangeDescription
listing_idoptionalSwappa's own listing code — the value shown on the listing page and in the /listing/view/<code> URL, and the `listing_id` returned by search. An opaque uppercase string (e.g. LAGY58046); never numeric. Provide `listing_id` OR `url`.
urloptionalFull swappa.com listing URL — an alternative to `listing_id`.
include_reviews = trueoptionalInclude the product's top buyer reviews inline (`product.top_reviews`). These are reviews of the MODEL written by Swappa buyers — Swappa publishes no per-listing reviews. Costs one extra page fetch; set false for the fastest possible response.
max_reviews = 6optional1–20How many of the product's most recent reviews to include (1-20).
Try in playground →