Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the eBay API page →
E-commerce & Marketplaces

eBay API & Scraper

The eBay API returns active listings, sold prices and seller data as clean JSON.

7 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 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.

The primary search endpoint returns items with id, title, price, condition, buying format, shipping, location and URL, and the sold_search endpoint exposes completed-sale prices — the real market data behind eBay. You can also pull an item_detail, a seller's items and profile, current deals and the category tree. It is built for price research, reselling tools and marketplace analytics that need eBay data without a scraper. One ReefAPI key, one shared credit pool, the standard envelope.

Reference

eBay marketplaces: the domain parameter, and the currency each one returns

This API does not use site codes like EBAY_US or numeric site ids. It takes a domain parameter whose value is the eBay hostname suffix, and that choice sets the currency and the local listing pool. Every row below was measured on 2026-08-27 by running the same search once per domain and reading the currency and the raw price string off the first result.

domainSiteCurrency returnedRaw price string measured
comebay.com, United StatesUSD$39.99
co.ukebay.co.uk, United KingdomGBP£4.95
deebay.de, GermanyEUREUR 29,00
frebay.fr, FranceEUR71,40 EUR
itebay.it, ItalyEUREUR 29,99
esebay.es, SpainEUR65,00 EUR
caebay.ca, CanadaCADC $11.26
com.auebay.com.au, AustraliaAUDAU $335.99
chebay.ch, SwitzerlandCHFCHF 207,37
plebay.pl, PolandPLN30,08 zl
com.sgebay.com.sg, SingaporeSGDS$ 135.95
com.hkebay.com.hk, Hong KongHKDHK$ 63.97

nl, at and ie also answered and all three returned EUR; they are left out only to keep the table short. com.sg and com.hk are not in the parameter's dropdown but were accepted and answered, so other eBay country hosts are worth trying. The raw string is formatted per site (EUR 29,00 on de but 71,40 EUR on fr), so read price.value, which is the parsed number. All 15 domains returned 12-digit item ids.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/ebay/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "iphone 13 pro"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "ebay",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 2338,
    "record_count": 60,
    "bytes": 2513278,
    "cache_hit": false,
    "version": "0.1",
    "domain": "com",
    "pagination": {
      "page": 1,
      "has_more": true
    },
    "charged_credits": 1
  },
  "data": {
    "query": "iphone 13 pro",
    "results": [
      {
        "item_id": "286910050302",
        "title": "Apple iPhone 13 128GB 256GB 512GB Verizon AT&T T-Mobile Unlocked (Very Good)",
        "price": {
          "raw": "$258.49",
          "value": 258.49,
          "currency": "USD"
        },
        "condition": "Very Good - Refurbished",
        "buying_format": "Buy It Now",
        "shipping": "Shipping not specified",
        "location": "United States",
        "image": "https://i.ebayimg.com/images/g/fcQAAeSw7QJpcweM/s-l500.webp",
        "url": "https://www.ebay.com/itm/286910050302",
        "in_stock": true,
        "catalog_rating": {
          "average": 5,
          "review_count": 0
        }
      },
      {
        "item_id": "286910053729",
        "title": "Apple iPhone 13 128GB 256GB 512GB Verizon AT&T T-Mobile Unlocked (Good)",
        "price": {
          "raw": "$248.59",
          "value": 248.59,
          "currency": "USD"
        },
        "condition": "Pre-Owned",
        "buying_format": "Buy It Now",
        "shipping": "Shipping not specified",
        "location": "United States",
        "image": "https://i.ebayimg.com/images/g/ic8AAeSwVeRpcwzG/s-l500.webp",
        "url": "https://www.ebay.com/itm/286910053729",
        "sold_count": "15+ sold",
        "in_stock": true,
        "catalog_rating": {
          "average": 5,
          "review_count": 0
        }
      },
      {
        "item_id": "287062398385",
        "title": "Apple iPhone 13 Pro A2483 Unlocked 256GB Graphite (Very Good)",
        "price": {
          "raw": "$428.99",
          "value": 428.99,
          "currency": "USD"
        },
        "condition": "Apple iPhone 13 Pro",
        "buying_format": "Buy It Now",
        "shipping": "Shipping not specified",
        "location": "United States",
        "image": "https://i.ebayimg.com/images/g/31IAAeSwLmtpYJUx/s-l500.webp",
        "url": "https://www.ebay.com/itm/287062398385",
        "in_stock": true,
        "catalog_rating": {
          "average": 4.5,
          "review_count": 0
        }
      }
    ]
  }
}
Actions

What the eBay API does

ActionDescriptionConcrete use caseKey params
searchactive-listing search by `query` -> results[]{item_id,title,price{value,currency},condition,buying_format,shipping,location,image,url,in_stock,stock_hint?,sold_count?,catalog_rating?}. Filters: domain(com/co.uk/de/...), page, max_results(<=240/page), sort(best_match|newly_listed|ending_soonest|price_low|price_high), condition(new|used|refurbished|open_box|for_parts), category, buy_it_now, auction. seller is item-page-only.Pricing teams call search to get active-listing search by `query` -> results[]{item_id,title,price{value,currency},condition,b….query, domain, page, max_results, sort, ...
item_detailFull eBay item detail by item_id or listing URL: title, price, list price, currency, condition, availability, brand, model, MPN, images, category path, item specifics, seller (name, feedback score, review count), shipping terms, return policy, PLUS auction fields (bids, current_bid, time_left, end_time), watchers, quantity_available/quantity_sold, best_offer flag, and multi-variation SKUs (variations[]{dimension, values[]{value, out_of_stock}}). Set include_description=1 to inline the full seller description text.Marketplace operators call item_detail to get full eBay item detail by item_id or listing URL.item_id, url, domain, include_description
items_batchLook up MANY eBay listings in ONE call by item number — up to 40 per request → the same full record `item_detail` returns for each one (title, price, condition, brand/model/MPN, images, category path, item specifics, seller reputation, shipping terms, return policy, auction fields, quantities). Built for enriching a price list or a competitor's catalogue in one round trip instead of one item at a time. COST, stated plainly so you can budget it: eBay publishes no batched item endpoint — every listing is its own page — so this costs ONE UPSTREAM REQUEST PER ITEM ID, exactly as if you had called item_detail N times, and it is priced that way. What you save is wall-clock, not requests: the fetches run concurrently, measured at 25.6s sequential vs 4.1s for 8 ids (6.2x). `meta.upstream_calls` always reports the true number. Anything eBay does not resolve comes back in `not_found` rather than being silently dropped, so a batch of 40 can never hide which one went missing. If you only need card-level fields (item_id, title, price, condition, shipping, image, url) there is a genuinely cheaper route that costs ONE upstream call: `search` with query `(id1,id2,id3)` — eBay's own OR syntax — measured to resolve 6 ids per call (a 7th is dropped) and to return no item specifics, seller or return policy.Catalog enrichment teams call items_batch to look up MANY eBay listings in ONE call by item number.item_ids, domain
seller_itemsAll active listings in a seller's storefront by `seller` username (eBay _ssn) -> results[]{item_id,title,price{value,currency},condition,buying_format,shipping,location,image,url}. Same card shape + filters/pagination as `search`. Use to scan a competitor's full catalog. Page-native paging via meta.pagination.Retail analysts call seller_items to get all active listings in a seller's storefront by `seller` username (eBay _ssn) -> results[]{it….seller, domain, page, max_results, sort, ...
seller_profileSeller reputation by `seller` username -> seller_profile{store_name, feedback_score, feedback_positive_pct, positive_pct_12mo, items_sold_display, followers_display, member_since, location, business_seller, top_rated, feedback_ratings{positive/neutral/negative:{m1,m6,m12}}}. From the public storefront + feedback pages (logged-out, no account).Pricing teams call seller_profile to get seller reputation by `seller` username -> seller_profile{store_name, feedback_score, feedback….seller, domain
dealseBay Daily Deals grid (/deals) -> results[]{item_id,title,price{value,currency},was_price{value,currency},shipping,deal_badge,image,url}. Current promoted discounts site-wide for the marketplace. No query needed.Marketplace operators call deals to get eBay Daily Deals grid (/deals) -> results[]{item_id,title,price{value,currency},was_price{val….domain, max_results
categorieseBay category tree / ID lookup (/n/all-categories) -> categories[]{category_id,name,slug} + groups[] (top-level departments). Pass `query` to filter by name so you can resolve a category name (e.g. 'cell phones') to the numeric ID used by search's `category` param — no need to know '9355' in advance.Catalog enrichment teams call categories to get eBay category tree / ID lookup (/n/all-categories) -> categories[]{category_id,name,slug} + g….query, domain, max_results
Code samples

Call search from your stack

curl -X POST https://api.reefapi.com/ebay/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"iphone 13 pro"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.ebay.search with {"query":"iphone 13 pro"}.
Use cases

Who uses this API and why

  • Resale-pricing tools track an item's live market by pulling every active listing for it with search, then following the same seller's inventory with seller_items.
  • Marketplace analysts use search and deals to track active-listing prices and promotions.
  • Seller-intelligence products use seller_items and seller_profile to audit a competitor's full inventory.
FAQ

Questions developers ask before integrating

What marketplace code do I pass, EBAY_US or a numeric site id?

Neither. The parameter is domain and its value is the eBay hostname suffix: com, co.uk, de, fr, it, es, nl, at, ie, ca, com.au, ch, pl. All 13 were live-verified, and com.sg and com.hk were accepted too even though they are not in the dropdown. domain defaults to com, and an unrecognized value is ignored rather than rejected, so a typo silently gives you ebay.com results.

How long is an eBay item id?

Every id measured was 12 digits, on all 15 domains tried on 2026-08-27, for example 389734331119 on com, 336311417494 on co.uk and 820051316593 on nl. It is the number after /itm/ in the listing URL. item_detail takes either item_id or the full url, and items_batch takes a list of ids.

Why do I filter on condition=used but get back "Pre-Owned"?

The filter takes an enum (new, open_box, refurbished, used, for_parts) but the response carries eBay's display label. In search the same items came back as "Pre-Owned" and "Brand new"; in item_detail those same listings read "Used", "New" and "Refurbished". Neither set is a stable enum, so map on your side and do not string-compare responses against filter values.

Why is shipping a string in search but a number in item_detail?

search returns eBay's rendered label, for example "+$5.68 delivery", because that is what the results grid publishes. item_detail returns a structured block instead, {rate: 5.93, currency: "USD", country: "USA"}. On several listings item_detail's shipping came back null while search had a label for the same item, so if you need a shipping figure on every row, take it from search.

What does buying_format tell me, and can I trust the auction fields?

In search, buying_format is eBay's own grid label and it is reliable: measured values include "Buy It Now", "or Best Offer", "0 bids" and "20 bids". In item_detail the buying_format, bids and current_bid fields are currently not trustworthy. On 2026-08-27 four fixed-price listings that search labelled "Buy It Now" or "or Best Offer" came back from item_detail as buying_format "auction" with bids 1 and current_bid equal to the fixed price. Until that is corrected, take the format from search and use item_detail for end_time, watchers, quantity_sold and best_offer.

Which item_detail fields come back null?

seller.feedback_pct and seller.feedback_count were null on every item measured, and seller was null entirely on some listings. category_path was populated on co.uk items and null on ebay.com items in the same batch. return_policy is null unless the seller published one, list_price is null unless the listing shows a strikethrough price, and time_left is either null or the untranslated stub "Ends in". Use end_time, which is a clean ISO timestamp such as 2026-09-12T19:55:43.000Z.

Does items_batch cost less than calling item_detail repeatedly?

No. eBay has no batched item endpoint, so items_batch fans out into one request per id and says so in meta: requested 3, upstream_calls 3, concurrency 8, and billing_note "priced per item id, not per call". What you save is round trips and wall time, not credits. The response splits into items, not_found and unavailable, so one dead id does not kill the whole call.

Why does sold_search return an error?

It is switched off at the moment. Measured on 2026-08-27, sold_search returned ok:false with error.code DISABLED, retryable:false, and meta.scope ENDPOINT_DISABLED. It fails immediately rather than hanging, so a retry loop will not help. search, item_detail, items_batch, seller_items, seller_profile, deals and categories were all answering normally on the same day.

What is the eBay API?

eBay API is a ReefAPI endpoint group for active listings plus sold prices and market stats. It returns live JSON through POST requests under /ebay/v1.

Is the eBay API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. eBay calls use the same shared credit balance as every other ReefAPI engine.

Do I need an eBay login or account?

No login to eBay 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 eBay 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 eBay API use?

eBay 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 eBay from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call ebay actions with the same key, credit pool and JSON envelope used by normal REST requests.

docs / ebay

eBay

Active listings plus sold prices and market stats.

base /ebay/v17 endpoints
post/ebay/v1/item_detail2 credits

Full eBay item detail by item_id or listing URL: title, price, list price, currency, condition, availability, brand, model, MPN, images, category path, item specifics, seller (name, feedback score, review count), shipping terms, return policy, PLUS auction fields (bids, current_bid, time_left, end_time), watchers, quantity_available/quantity_sold, best_offer flag, and multi-variation SKUs (variations[]{dimension, values[]{value, out_of_stock}}). Set include_description=1 to inline the full seller description text.

ParameterAllowed / rangeDescription
item_idoptional—eBay item number — the digits in the listing URL after /itm/. Provide item_id OR url (one of the two is required).
urloptional—Full eBay listing URL — alternative to item_id.
include_description = falseoptional—Also fetch and inline the full seller description text (one extra request; off by default for speed).
domain = comoptionalcom · co.uk · de · com.au · ca · fr · it · es · nl · at · ch · ie · plWhich eBay site to query (sets currency and local listings). Dropdown = the 13 live-verified sites; other eBay country sites (e.g. com.sg, com.hk) are also accepted.
Try in playground →
post/ebay/v1/items_batch2 credits

Look up MANY eBay listings in ONE call by item number — up to 40 per request → the same full record `item_detail` returns for each one (title, price, condition, brand/model/MPN, images, category path, item specifics, seller reputation, shipping terms, return policy, auction fields, quantities). Built for enriching a price list or a competitor's catalogue in one round trip instead of one item at a time. COST, stated plainly so you can budget it: eBay publishes no batched item endpoint — every listing is its own page — so this costs ONE UPSTREAM REQUEST PER ITEM ID, exactly as if you had called item_detail N times, and it is priced that way. What you save is wall-clock, not requests: the fetches run concurrently, measured at 25.6s sequential vs 4.1s for 8 ids (6.2x). `meta.upstream_calls` always reports the true number. Anything eBay does not resolve comes back in `not_found` rather than being silently dropped, so a batch of 40 can never hide which one went missing. If you only need card-level fields (item_id, title, price, condition, shipping, image, url) there is a genuinely cheaper route that costs ONE upstream call: `search` with query `(id1,id2,id3)` — eBay's own OR syntax — measured to resolve 6 ids per call (a 7th is dropped) and to return no item specifics, seller or return policy.

ParameterAllowed / rangeDescription
item_idsrequired—eBay item numbers to look up — up to 15 per call. The digits in a listing URL after /itm/. Accepts a list or a comma-separated string. Each id costs one upstream request. Ids eBay does not resolve are returned in `not_found` rather than dropped.
domain = comoptionalcom · co.uk · de · com.au · ca · fr · it · es · nl · at · ch · ie · plWhich eBay site to query (sets currency and local listings). Dropdown = the 13 live-verified sites; other eBay country sites (e.g. com.sg, com.hk) are also accepted.
Try in playground →
post/ebay/v1/seller_items2 credits

All active listings in a seller's storefront by `seller` username (eBay _ssn) -> results[]{item_id,title,price{value,currency},condition,buying_format,shipping,location,image,url}. Same card shape + filters/pagination as `search`. Use to scan a competitor's full catalog. Page-native paging via meta.pagination.

ParameterAllowed / rangeDescription
sellerrequired—eBay seller username (store/usr name) — the handle in /usr/{seller} or the 'Sold by' link on a listing.
sort = best_matchoptionalbest_match · newly_listed · ending_soonest · price_low · price_highResult ordering.
conditionoptionalnew · open_box · refurbished · used · for_partsOnly items in this condition (empty = all conditions).
categoryoptional—eBay category ID to narrow results — the number in an eBay category URL (e.g. 9355 = Cell Phones & Smartphones). Use the `categories` action to look an ID up by name. Empty = all.
price_minoptional0–Minimum price (eBay _udlo), in the marketplace's currency.
price_maxoptional0–Maximum price (eBay _udhi), in the marketplace's currency.
free_shipping = falseoptional—Only listings with free shipping.
returns_accepted = falseoptional—Only listings that accept returns.
best_offer = falseoptional—Only listings that accept Best Offers.
locationoptionaldomestic · us · uk · worldwide · north_america · european_unionRestrict by where the item is located. The choices follow the site's own Item location filter, so they depend on `domain`: `domestic` keeps only items in the site's home country (US Only on ebay.com, UK Only on ebay.co.uk). `uk` is the same as domestic and needs domain co.uk. The regional choice is North America on ebay.com and European Union on ebay.co.uk.
pickup_postcodeoptional—Only listings available for collection in person near this UK postcode (eBay's 'Collection in person within' filter). Needs domain co.uk. Combine with pickup_distance.
pickup_distanceoptional1–500Collection radius in miles around pickup_postcode (default 25). eBay offers 10, 25, 50, 100, 200 and 500; other values act as the next option up (7 returned exactly the 10-mile results). Only used together with pickup_postcode.
domain = comoptionalcom · co.uk · de · com.au · ca · fr · it · es · nl · at · ch · ie · plWhich eBay site to query (sets currency and local listings). Dropdown = the 13 live-verified sites; other eBay country sites (e.g. com.sg, com.hk) are also accepted.
page = 1optional1–450Page number (easy paging: 1, 2, 3…). Measured ceiling (2026-08-07, `iphone 13 pro`): pages 1–450 each return a full page of distinct items — no page repeats an earlier one — and page 470 returns nothing. At 240 results per page that is roughly 108,000 results deep, far more than any single query needs. Page until `meta.pagination.has_more` is false rather than probing for the end.
max_results = 60optional1–240How many results to return per page (1–240). 240 is eBay's own hard ceiling, measured: 60/120/200/240 are all served exactly, and asking for 300 or 500 does NOT get you more — eBay serves about 250 and stops. Use `page` to go beyond 240; larger values are capped at 240.
Try in playground →
post/ebay/v1/seller_profile3 credits

Seller reputation by `seller` username -> seller_profile{store_name, feedback_score, feedback_positive_pct, positive_pct_12mo, items_sold_display, followers_display, member_since, location, business_seller, top_rated, feedback_ratings{positive/neutral/negative:{m1,m6,m12}}}. From the public storefront + feedback pages (logged-out, no account).

ParameterAllowed / rangeDescription
sellerrequired—eBay seller username (store/usr name) — the handle in /usr/{seller} or the 'Sold by' link on a listing.
domain = comoptionalcom · co.uk · de · com.au · ca · fr · it · es · nl · at · ch · ie · plWhich eBay site to query (sets currency and local listings). Dropdown = the 13 live-verified sites; other eBay country sites (e.g. com.sg, com.hk) are also accepted.
Try in playground →
post/ebay/v1/deals1 credit

eBay Daily Deals grid (/deals) -> results[]{item_id,title,price{value,currency},was_price{value,currency},shipping,deal_badge,image,url}. Current promoted discounts site-wide for the marketplace. No query needed.

ParameterAllowed / rangeDescription
domain = comoptionalcom · co.uk · de · com.au · ca · fr · it · es · nl · at · ch · ie · plWhich eBay site to query (sets currency and local listings). Dropdown = the 13 live-verified sites; other eBay country sites (e.g. com.sg, com.hk) are also accepted.
max_results = 60optional1–240How many results to return per page (1–240). 240 is eBay's own hard ceiling, measured: 60/120/200/240 are all served exactly, and asking for 300 or 500 does NOT get you more — eBay serves about 250 and stops. Use `page` to go beyond 240; larger values are capped at 240.
Try in playground →
post/ebay/v1/categories1 credit

eBay category tree / ID lookup (/n/all-categories) -> categories[]{category_id,name,slug} + groups[] (top-level departments). Pass `query` to filter by name so you can resolve a category name (e.g. 'cell phones') to the numeric ID used by search's `category` param — no need to know '9355' in advance.

ParameterAllowed / rangeDescription
queryoptional—Filter categories by name/slug substring (case-insensitive). Empty = the full top-level tree.
domain = comoptionalcom · co.uk · de · com.au · ca · fr · it · es · nl · at · ch · ie · plWhich eBay site to query (sets currency and local listings). Dropdown = the 13 live-verified sites; other eBay country sites (e.g. com.sg, com.hk) are also accepted.
max_results = 60optional1–240How many results to return per page (1–240). 240 is eBay's own hard ceiling, measured: 60/120/200/240 are all served exactly, and asking for 300 or 500 does NOT get you more — eBay serves about 250 and stops. Use `page` to go beyond 240; larger values are capped at 240.
Try in playground →
Built for volume
5M+ requests a day

Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.

Missing a source?
We build it

Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.

Support
2 minute median reply

Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.

One key, one balance
Every API included

No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.

Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.