REST API

Embed live recommerce prices into your platform

The RecommerceIQ API gives you programmatic access to real-time resale and buyback prices across 1M+ daily price points — covering smartphones, tablets, laptops, and smartwatches across Europe and the United States.

1 day
Time to go live
1M+
Daily price points
Daily
Data refresh rate
120/s
Rate limit

Go live in 1 business day

01

Request access

Contact us via the demo form. API credentials are provisioned within one business day.

02

Authenticate

Pass your API token in the Authorization header. Catalog API V1 uses "Bearer <token>"; Prices API V1 uses the token directly with no prefix. The auth format is shown in each API group below.

03

Query prices

Use the Catalog V1 or Prices V1 endpoints for new integrations. Legacy endpoints remain available.

04

Go live

Most clients complete integration and go live within 1 business day.

What the API covers

Device categories

  • Smartphones
  • Tablets
  • Laptops & PCs
  • Smartwatches

Condition grades

Aesthetic

GradeLegendDefinition
RBrand NewNever been opened. In the original box.
NExcellentScreen, frame and back look as good as new with no clear signs of use.
AVery GoodMay have minor traces of use like slight scratches or tiny dents, but never cracks.
BGoodClear signs of use like scratches you can feel or small dents on the edges, but never cracks.
CAcceptableHeavy signs of use like deep scratches or more evident dents on the edges, but never cracks.

Battery

GradeLegendDefinition
newNew100% battery capacity. No charging cycles.
stdStandard / usedFollowing the source website definition. Usually >80% recharge, fewer than 1000 charging cycles.

Markets

  • United States
  • Germany, France, Italy
  • Netherlands, Spain
  • UK, Austria, and more

Catalog API

V1

Use this API if you have shared your product catalog with us. We pre-map your internal SKUs to our database during onboarding, so you can query prices using your own IDs directly — no device-level attribute matching needed on your side.

GET/api/v1/catalog/:externalID/prices
Hosthttps://dashboard.recommerceiq.com
Path paramsexternalIDrequiredYour catalogue item internal ID
AuthAuthorization: Bearer YOUR_API_KEY

Retrieve resale and trade-in prices for a catalogue item by your internal ID. Returns aggregate prices by country and competitor, plus individual active listings (add-on).

If your catalog uses one ID per model (not per grade), append a grade suffix: e.g. YOUR_ID-n for Excellent, YOUR_ID-a for Very Good.

Request

curl --request GET \
  --url https://dashboard.recommerceiq.com/api/v1/catalog/YOUR_ITEM_ID/prices \
  --header 'Authorization: Bearer YOUR_API_KEY'

Response

200 OK

Response fields

prices_by_country
Aggregate pricing data for each market (e.g. DE, FR, UK).
prices_by_competitor
Aggregate pricing data for each competitor and market (e.g. website A in DE, website B in DE).
active_listings
Individual item pricing data per competitor listing (e.g. iPhone 15 Pro 256 GB grade A from website A in DE). Available as an add-on — contact us to enable.
suggested_price
Price suggested after factoring in your pricing strategies set in the RecommerceIQ Dashboard. Can be resale or trade-in depending on your catalog setup.
median_market_price
Aggregate median pricing across all applicable markets, before any pricing strategies. Can be resale or trade-in depending on your catalog setup.
{
  "category": "Smartphone",
  "name": "iPhone XS Max",
  "suggested_price": 300.49,
  "median_market_price": 300.49,
  "currency": "EUR",
  "last_update": "2025-10-08 04:03:48",
  "resell": {
    "prices_by_country": [
      { "currency": "EUR", "country": "de", "min_price": 213.99, "max_price": 329, "average_price": 289, "median_price": 291 }
    ],
    "prices_by_competitor": [
      { "competitor": "Refurbed", "country": "de", "average_price": 269.99, "median_price": 269.99, "min_price": 213.99, "max_price": 307.99, "currency": "EUR" },
      { "competitor": "Back Market", "country": "de", "average_price": 274, "median_price": 274, "min_price": 274, "max_price": 274, "currency": "EUR" }
    ],
    "active_listings": [
      { "competitor": "Refurbed", "country": "de", "name": "Apple iPhone Xs MAX", "price": 256, "currency": "EUR", "url": "https://www.refurbed.de/p/apple-iphone-xs-max/..." }
    ]
  },
  "trade-in": {
    "prices_by_country": [
      { "currency": "EUR", "country": "de", "min_price": 58, "max_price": 75, "average_price": 69.33, "median_price": 75 }
    ],
    "prices_by_competitor": [
      { "vendor_name": "Rebuy", "country": "de", "average_price": 69.33, "median_price": 75, "min_price": 58, "max_price": 75, "currency": "EUR" }
    ],
    "active_listings": [
      { "competitor": "Rebuy", "country": "de", "name": "Apple iPhone Xs MAX", "price": 60, "currency": "EUR" }
    ]
  }
}
Error responses (401)
401 Unauthorized
{ "message": "Unauthenticated." }
GET/api/v1/catalog/:externalID/buybox/:vendorName/:vendorCountry
Hosthttps://dashboard.recommerceiq.com
Path paramsexternalIDrequiredYour catalogue item internal ID
vendorNamerequiredVendor name e.g. ebay
vendorCountryrequiredMarket country code e.g. de
AuthAuthorization: Bearer YOUR_API_KEY

Retrieve the current Buy Box price for a specific vendor and market for a given catalogue item.

Request

curl --request GET \
  --url https://dashboard.recommerceiq.com/api/v1/catalog/YOUR_ITEM_ID/buybox/ebay/de \
  --header 'Authorization: Bearer YOUR_API_KEY'

Response

200 OK

Response fields

price
Current Buy Box price for this vendor and market.
suggested_price
Price suggested after applying your pricing strategies set in the RecommerceIQ Dashboard.
is_mine
Whether you currently hold the Buy Box for this vendor and market.
{
  "suggested_price": 123.35,
  "price": 123.45,
  "is_mine": false,
  "seller_name": "Test",
  "url": "https://www.ebay.de/itm/405180570735",
  "created_at": "2025-10-08 17:11:38",
  "currency": "EUR",
  "currency_symbol": "€"
}
Error responses (401)
401 Unauthorized
{ "message": "Unauthenticated." }

Prices API

V1

Use this API if you have not shared a catalog with us. You query prices by passing device attributes directly (brand, model, grade, storage, etc.) and we return matching market prices in real time — no prior SKU mapping required.

GET/api/v1/prices/dictionary/:category
Hosthttps://dashboard.recommerceiq.com
Path paramscategoryrequiredsmartphone | pc | tablet | smartwatch
AuthAuthorization: YOUR_API_KEY

Retrieve available brands, models, grades, and specifications for a device category. Use this to build your query parameters for the search endpoints.

Request

curl --request GET \
  --url https://dashboard.recommerceiq.com/api/v1/prices/dictionary/pc \
  --header 'Authorization: YOUR_API_KEY'

Response

200 OK

Returns all valid parameter keys for that category. Use these key values (not labels) in your search requests.

{
  "grades": [
    { "label": "Excellent", "key": "N" },
    { "label": "Very Good", "key": "A" },
    { "label": "Good", "key": "B" },
    { "label": "Acceptable", "key": "C" },
    { "label": "New", "key": "R" }
  ],
  "battery": [
    { "key": "new", "label": "New" },
    { "key": "std", "label": "Used" }
  ],
  "brands": [
    {
      "name": "Apple",
      "model": [
        { "label": "MacBook Pro", "key": "MP" },
        { "label": "MacBook Air", "key": "MA" }
      ],
      "display": [
        { "label": "14 inch", "key": "14" },
        { "label": "16 inch", "key": "16" }
      ],
      "processor": [
        { "label": "M3 Max 16-Core", "key": "am3m3x16c" },
        { "label": "M3 Max 14-Core", "key": "am3m3x14c" }
      ],
      "ram": [
        { "label": "36 GB", "key": "36" },
        { "label": "48 GB", "key": "48" }
      ],
      "storage": [
        { "label": "1 TB SSD", "key": "1000SSD" },
        { "label": "2 TB SSD", "key": "2000SSD" }
      ],
      "variant": [
        { "label": "2023", "key": "23" },
        { "label": "2021", "key": "21" }
      ]
    }
  ]
}
Error responses (401)
401 Unauthorized
{ "message": "Unauthenticated." }

Need full request & response schemas?

The complete documentation includes parameter definitions, example payloads, and error codes for every endpoint.

Full documentation →

Legacy APIs

Legacy

These endpoints remain available and are not being deprecated, but new integrations should use the V1 APIs above.

Buyback API

Legacy
GET/api/buyback/configuration
Hosthttps://dashboard.recommerceiq.com
AuthAuthorization: Bearer YOUR_API_KEY

Fetch global account configuration including available device categories.

Request

curl --request GET \
  --url https://dashboard.recommerceiq.com/api/buyback/configuration \
  --header 'Authorization: Bearer YOUR_API_KEY'

Response

200 OK
{
  "email": "recommerceiq@demo.com",
  "api_url": "https://dashboard.recommerceiq.com",
  "categories": [
    { "name": "Smartphone", "slug": "smartphone" },
    { "name": "PC", "slug": "pc" },
    { "name": "Smartwatch", "slug": "smartwatch" },
    { "name": "Tablet", "slug": "tablet" }
  ]
}
Error responses (401)
401 Unauthorized
{ "message": "Unauthenticated." }
GET/api/buyback/configuration/:slug
Hosthttps://dashboard.recommerceiq.com
Path paramsslugrequiredpc | smartphone | tablet | smartwatch
AuthAuthorization: Bearer YOUR_API_KEY

Fetch category-level configuration including brands, models, storage options, and grade definitions for a specific device category.

Request

curl --request GET \
  --url https://dashboard.recommerceiq.com/api/buyback/configuration/smartphone \
  --header 'Authorization: Bearer YOUR_API_KEY'

Response

200 OK

Use the returned model/storage/grade value fields (not key fields) as parameter values in the price request.

{
  "name": "Smartphone",
  "slug": "smartphone",
  "brands": [
    {
      "name": "Apple",
      "code": "appl",
      "additional_fields": ["maximum_battery_capacity", "charger_included", "original_box_included"],
      "model": [
        {
          "key": "iPhone 15 Pro Max",
          "value": "I15Pro_Max",
          "storage": [
            { "key": "256 GB", "value": "256" },
            { "key": "512 GB", "value": "512" }
          ]
        }
      ],
      "grade": [
        { "key": "Excellent", "value": "N" },
        { "key": "Very Good", "value": "A" },
        { "key": "Good", "value": "B" },
        { "key": "Acceptable", "value": "C" }
      ]
    }
  ]
}
Error responses (401, 404)
401 Unauthorized
{ "message": "Unauthenticated." }
404 Not Found
{ "error": "Category not found" }
POST/api/buyback/price
Hosthttps://dashboard.recommerceiq.com
AuthAuthorization: Bearer YOUR_API_KEY

Request a buyback price for a specific device. Supports smartphones, tablets, smartwatches, and PCs. Returns a single price value.

brandcategorymodelstoragegrademaximum_battery_capacitycharger_includedoriginal_box_included

Aesthetic grade

RBrand NewNExcellentAVery GoodBGoodCAcceptable

Request

curl --request POST \
  --url https://dashboard.recommerceiq.com/api/buyback/price \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "brand": "appl",
    "category": "smartphone",
    "model": "is0",
    "storage": 256,
    "grade": "C",
    "maximum_battery_capacity": false,
    "charger_included": false
  }'

Response

200 OK
{ "price": 760 }
Error responses (401, 404, 422)
401 Unauthorized
{ "message": "Unauthenticated." }
404 Not Found
{ "message": "Price not found." }
422 Unprocessable Entity
{
  "message": "The selected category is invalid.",
  "errors": { "category": ["The selected category is invalid."] }
}

Resell API

Legacy
POST/api/resell/price
Hosthttps://dashboard.recommerceiq.com
AuthAuthorization: Bearer YOUR_API_KEY

Request a resale price for a specific smartphone. Returns a single price value. Tablets, smartwatches, and PCs are not yet supported on this endpoint.

brandcategory — smartphone onlynamegrade

Aesthetic grade

RBrand NewNExcellentAVery GoodBGoodCAcceptable

Request

curl --request POST \
  --url https://dashboard.recommerceiq.com/api/resell/price \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "brand": "appl",
    "category": "smartphone",
    "name": "IPhone XS Max 512GB Space Grey",
    "grade": "C"
  }'

Response

200 OK
{ "price": 760 }
Error responses (401, 404, 422)
401 Unauthorized
{ "message": "Unauthenticated." }
404 Not Found
{ "message": "Price not found." }
422 Unprocessable Entity
{
  "message": "The selected category is invalid.",
  "errors": { "category": ["The selected category is invalid."] }
}
POST/api/resell/price/history
Hosthttps://dashboard.recommerceiq.com
AuthAuthorization: Bearer YOUR_API_KEY

Request historical resale prices for a smartphone by vendor, with daily min, max, average, and median prices. Tablets, smartwatches, and PCs are not yet supported.

brandcategory — smartphone onlygradenamebattery (optional, default std)

Aesthetic grade

RBrand NewNExcellentAVery GoodBGoodCAcceptable

Battery

newNew batterystdStandard / used

Request

curl --request POST \
  --url https://dashboard.recommerceiq.com/api/resell/price/history \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "brand": "appl",
    "category": "smartphone",
    "grade": "B",
    "name": "IPhone 12 256GB Space Grey",
    "battery": "new"
  }'

Response

200 OK
[
  {
    "vendor": "Swappie",
    "prices": [
      { "date": "2024-04-06", "min_price": 169, "max_price": 169, "average_price": 169, "median_price": 169 },
      { "date": "2024-04-07", "min_price": 169, "max_price": 169, "average_price": 169, "median_price": 169 },
      { "date": "2024-04-08", "min_price": 169, "max_price": 169, "average_price": 169, "median_price": 169 }
    ]
  }
]
Error responses (401, 404, 422)
401 Unauthorized
{ "message": "Unauthenticated." }
404 Not Found
{ "message": "Price not found." }
422 Unprocessable Entity
{
  "message": "The selected category is invalid.",
  "errors": { "category": ["The selected category is invalid."] }
}

Catalog API

Legacy
GET/api/catalog/:externalId/prices/buyback
Hosthttps://dashboard.recommerceiq.com
Path paramsexternalIdrequiredYour catalogue item ID as listed in the feed
AuthAuthorization: Bearer YOUR_API_KEY

Fetch trade-in prices for a catalogue item by your feed ID, returned by country and grade.

Request

curl --request GET \
  --url https://dashboard.recommerceiq.com/api/catalog/YOUR_ITEM_ID/prices/buyback \
  --header 'Authorization: Bearer YOUR_API_KEY'

Response

200 OK
[
  {
    "country": "de",
    "prices": [
      { "grade": "A", "price": 449, "currency": "EUR" },
      { "grade": "B", "price": 419, "currency": "EUR" }
    ]
  },
  {
    "country": "fr",
    "prices": [
      { "grade": "A", "price": 409, "currency": "EUR" },
      { "grade": "B", "price": 409, "currency": "EUR" }
    ]
  }
]
Error responses (401, 404)
401 Unauthorized
{ "message": "Unauthenticated." }
404 Not Found
{ "message": "Catalog item not found." }

Ready to integrate?

Request API access and we will have your credentials ready within one business day.