eBay Item Details API (Sold Listings Included)
Get the condition, seller notes, item specifics and full description of any eBay listing by item ID, sold listings included, with GET /v1/items/details. One request per lookup, never charged when eBay no longer has the listing.
Search results tell you what sold and for how much. They do not tell you what the seller wrote about the
item: the scratches, the missing charger, the box that was never opened. GET /v1/items/details reads one
eBay listing by its item ID and returns its condition, the seller's condition notes, every item specific
and the full description, for sold listings too, as long as eBay still keeps the listing page. That is
typically months after the sale.
Use it after a sold search (/v1/scrape or /v1/research/sold)
to explain why one sale went higher or lower than the rest, to grade comps by condition, or to train a
pricing model on what sellers actually disclosed.
- One request per successful lookup, on every plan, including free.
- Never charged when eBay no longer has the listing (
404 item_unavailable) or when a lookup fails. - Sold auctions are reported as
soldat the winning bid. - Every eBay site: pass any eBay item ID; the listing is read from its own page.
Make a request
curl --fail-with-body \
-H "Authorization: Bearer cs_live_REPLACEWITHYOURKEY" \
"https://api.compsniper.com/v1/items/details?itemId=327446760056"import requests
API = "https://api.compsniper.com"
HEADERS = {"Authorization": "Bearer cs_live_REPLACEWITHYOURKEY"}
# 1. Find recent sales, 2. read what each seller wrote about the item.
sales = requests.get(f"{API}/v1/scrape", headers=HEADERS,
params={"keyword": "sony wh-1000xm5", "count": 10}, timeout=120).json()["items"]
for sale in sales[:3]:
details = requests.get(f"{API}/v1/items/details", headers=HEADERS,
params={"itemId": sale["itemId"]}, timeout=60)
if details.status_code == 404:
continue # eBay no longer has this listing; you were not charged
details.raise_for_status()
d = details.json()
print(d["status"], d["price"], d["condition"], d["sellerNotes"], d["itemSpecifics"].get("Color"))const API = "https://api.compsniper.com";
const headers = { Authorization: "Bearer cs_live_REPLACEWITHYOURKEY" };
const res = await fetch(`${API}/v1/items/details?itemId=327446760056`, { headers });
if (res.status === 404) {
console.log("eBay no longer has this listing (not charged)");
} else {
const item = await res.json();
console.log(item.status, item.price, item.condition, item.itemSpecifics);
}Parameters
| Parameter | Required | Description |
|---|---|---|
itemId | yes | eBay item ID, 9 to 15 digits. Use the itemId field from /v1/scrape or /v1/research/sold. |
Example response
A sold listing from the US site, read on November 9, 2026 (trimmed: the full response has all 18 item specifics, the
whole description and every image). categoryPath is empty when the listing page shows no category breadcrumb.
{
"itemId": "327446760056",
"url": "https://www.ebay.com/itm/327446760056",
"title": "SONY WH-1000XM5 wireless noise-canceling over-ear headphones BLACK NIB XMAS HOHO",
"status": "sold",
"soldDate": "2026-11-09T03:59:27.000Z",
"endDate": "2026-11-09T03:59:27.000Z",
"startDate": "2026-11-08T22:05:20.000Z",
"price": "180.00",
"currency": "USD",
"condition": "New",
"conditionDescription": "A brand-new, unused, unopened, undamaged item in its original packaging (where packaging is applicable). ...",
"sellerNotes": null,
"itemSpecifics": {
"Brand": "Sony",
"MPN": "WH-1000XM5",
"Color": "Black",
"Form Factor": "Headband",
"Number of Earpieces": "Double"
},
"description": "You are bidding on a SONY WH-1000XM5 wireless noise-canceling over-ear headphones, BLACK BRAND NEW. The item pictured is the\nactual item you will receive...",
"seller": "losbebes66",
"categoryPath": [],
"images": ["https://i.ebayimg.com/images/g/DeUAAeSwxeZq8PEb/s-l1600.webp"],
"fetchedAt": "2026-11-09T05:15:58Z",
"requestId": "..."
}Response fields
| Field | Description |
|---|---|
status | sold, ended (ended without a sale) or active. A won auction is sold. A multi-quantity listing that is still selling is active. |
price, currency | The sold price (the winning bid for auctions) for sold listings, the current price for active ones. Decimal string. |
soldDate, endDate, startDate | ISO 8601 dates. soldDate is set only when status is sold. |
condition | eBay's condition label, for example New, Used, Certified - Refurbished, For parts or not working. |
conditionDescription | eBay's definition of that condition. |
sellerNotes | What the seller wrote about the condition: wear, defects, missing parts. null when they wrote nothing. |
itemSpecifics | Every item specific on the listing as label to value: brand, model, color, size, card number, grade, grader and so on. |
description | The seller's description as plain text with line breaks. Empty when the listing has none. |
seller | The seller's eBay username. |
categoryPath | The eBay category breadcrumb. |
images | Full-size image URLs. |
Billing, limits and errors
| Situation | Status | Charged |
|---|---|---|
| Listing found | 200 | 1 request |
| eBay no longer has the listing | 404 item_unavailable | no |
| eBay did not answer in time | 503 item_details_unavailable, retry after a few seconds | no |
itemId is not 9 to 15 digits | 400 invalid_params | no |
| More than 60 lookups in a minute | 429 item_details_rate_limited | no |
Item details lookups share your plan's monthly requests and per-minute limit, with an extra cap of 60
lookups per minute per account. Send X-Credit-Source: credits to spend purchased credits first, the same
as every other endpoint. See errors and rate limits.
Common uses
- Condition-adjusted comps: price a used item against sales in the same condition, and drop sales whose notes mention defects.
- Explain outliers: see why one sale went far below the median (missing parts, cracked screen) before you price your own listing.
- Training data: pair each sold price with the seller's own words and item specifics.
- Trading cards: read the card number, grader and grade from item specifics instead of parsing titles.
Accepted Best Offer Prices API
Get the price the buyer actually paid on eBay Best Offer sales with bestOfferPrice=true on /v1/scrape, at no extra cost, on every CompSniper plan.
eBay Image Search API (Sold Prices From a Photo)
Send a photo and get eBay sold listings for that item. POST /v1/scrape/image identifies the product, shows the keyword it used, and runs the full sold search. 2 requests per success, nothing when the photo cannot be identified.