eBay API

Read eBay listings and item detail with one API call

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

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a eBay endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
E
/ebay/v1

7 active endpoints, on 1, 2 and 3 credit tiers.

  • POST/ebay/v1/search
  • POST/ebay/v1/item_detail
  • POST/ebay/v1/items_batch
  • POST/ebay/v1/seller_items
  • POST/ebay/v1/seller_profile
  • POST/ebay/v1/deals
  • POST/ebay/v1/categories

What eBay endpoints does ReefAPI ship?

7 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

7 endpoints

search

1 cr

active-listing search by query -> results[]{item_id,title,price{value,currency},condition,buy…

required
query
optional
domain, page, max_results, sort, condition, category, buy_it_now, auction, price_min, price_max, free_shipping, returns_accepted, best_offer, location

item_detail

2 cr

Full eBay item detail by item_id or listing URL.

required
optional
item_id, url, domain, include_description

items_batch

2 cr

Look up MANY eBay listings in ONE call by item number.

required
item_ids
optional
domain

seller_items

2 cr

All active listings in a seller's storefront by seller username (eBay _ssn) -> results[]{item…

required
seller
optional
domain, page, max_results, sort, condition, category, price_min, price_max, free_shipping, returns_accepted, best_offer, location, buy_it_now, auction

seller_profile

3 cr

Seller reputation by seller username -> seller_profile{store_name, feedback_score, feedback_p…

required
seller
optional
domain

deals

1 cr

eBay Daily Deals grid (/deals) -> results[]{item_id,title,price{value,currency},was_price{val…

required
optional
domain, max_results

categories

1 cr

eBay category tree / ID lookup (/n/all-categories) -> categories[]{category_id,name,slug} + g…

required
optional
query, domain, max_results

Every parameter, every allowed value →

eBay API

3 of 7 endpoints, ready to run

View docs ↗

The results page as rows: item_id, title, a parsed price, buying format, shipping line, seller location and the listing URL.

1 credit1 required · 3 optional
POST/ebay/v1/search
ok3164 ms · 20 records · sample
{
  "ok": true,
  "meta": {
    "api": "ebay",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 3164.2,
    "record_count": 20,
    "cache_hit": false
  },
  "data": {
    "query": "nintendo switch",
    "results": [
      {
        "item_id": "336739118995",
        "title": "Nintendo Switch Handheld Console (V1 Unpatched) - Gray - DEAD",
        "price": {
          "raw": "$74.99",
          "value": 74.99,
          "currency": "USD"
        },
        "condition": "Parts Only",
        "buying_format": "Buy It Now",
        "shipping": "Shipping not specified",
        "location": "United States",
        "image": "https://i.ebayimg.com/images/g/LP4AAeSwbspqfL4r/s-l500.webp",
        "url": "https://www.ebay.com/itm/336739118995"
      },
      {
        "item_id": "227309266026",
        "title": "Nintendo Switch V1 - Handheld Console System - Excellent - Unpatched Original",
        "price": {
          "raw": "$289.99",
          "value": 289.99,
          "currency": "USD"
        },
        "condition": "Pre-Owned",
        "buying_format": "Buy It Now",
        "shipping": "Shipping not specified",
        "location": "United States",
        "image": "https://i.ebayimg.com/images/g/RhoAAeSweFVp3n~o/s-l500.webp",
        "url": "https://www.ebay.com/itm/227309266026"
      },
      {
        "item_id": "336550345122",
        "title": "Nintendo Switch OLED Model HEG-001 Handheld Console w/ Accessories - Great",
        "price": {
          "raw": "$269.99",
          "value": 269.99,
          "currency": "USD"
        },
        "condition": "Pre-Owned",
        "buying_format": "Buy It Now",
        "shipping": "Shipping not specified",
        "location": "United States",
        "image": "https://i.ebayimg.com/images/g/XXUAAeSwrqNpvBXC/s-l500.webp",
        "url": "https://www.ebay.com/itm/336550345122",
        "catalog_rating": {
          "average": 5,
          "review_count": 0
        }
      }
    ]
  }
}
Real response, fetched from the live endpoint with the parameters on the left — trimmed to the first few rows, with seller names left out. Press Try it for the untrimmed response.

How the eBay API works

eBay is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 184 engines.

02
Call
POST /ebay/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 or 2 or 3 credits per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

Price a used item across a national site in two calls

Search gives you the going asking prices in one shot; item_detail is what tells you whether a row is an auction with bids on it or a fixed price a seller has been sitting on.

01search
POST/ebay/v1/search
{"query": "nintendo switch", "domain": "ebay.de", "max_results": 50}

Fifty rows, one flat credit. price.value is already a number; price.raw keeps the string eBay printed.

02item_detail
POST/ebay/v1/item_detail
{"item_id": "...", "domain": "ebay.de"}

Two credits. Adds bids, current_bid, end_time, quantity_sold, watchers, return policy and the seller name.

A fifty-row price distribution for one credit, and the handful of listings worth understanding properly for two credits each.

request
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"}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "ebay",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

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.

What price.value is parsed from, and which rows are thin

Measured on 2026-08-27 across consoles, laptops and watches on ebay.com, ebay.de and ebay.fr, paging to 200 rows. Three of these lines go against us.

European prices were 100x wrong. They are not any more.

Our defect, and the reason this line exists: a European price is written 1.234,56 — comma decimal, dot thousands — and reading it with the dot as the decimal point put the number out by a hundredfold. Re-measured here across four printed formats in one run: "EUR 12.740,00" parsed to 12740.0, "EUR 1.678,95" to 1678.95, the French suffix form "220,00 EUR" to 220.0, and "$8,995.00" to 8995.0. Every row keeps price.raw so you can check the arithmetic yourself.

item_id identifies a LISTING, not a product

There is no product id here. One console model was twenty different item_ids from twenty different sellers at twenty different prices in a single result page. If you want a market price you aggregate the rows; if you want to track one thing over time you track its item_id, and it dies when the listing ends.

condition is the seller's own string, and a third of rows have none

Against us. Across three categories, condition was filled on 176 of 200 console rows, 12 of 20 laptop rows and 13 of 20 filtered rows — and where present it is whatever the seller typed. In one run a row read "2-DAY Shipping, 1-Year Warranty, Top Quality" and another read a bare part number. The condition FILTER works properly; the returned condition string is untrusted seller text.

condition, location and shipping arrive together or not at all

The same rows that lack a condition also lack location and shipping, in exactly matching counts across all three samples. eBay renders some cards in a reduced layout and there is nothing to read on them. Treat those three fields as one optional block rather than three independent ones.

The seller endpoints are the weakest part of this engine

Against us on two counts. item_detail returns the seller's username but seller.feedback_pct and seller.feedback_count were null on both listings we opened. And when a seller account is gone, seller_profile answers NOT_FOUND with a clear explanation while seller_items answers ok:true with zero rows for the same username — two endpoints disagreeing about the same fact.

sold_search is switched off

Against us, and worth saying plainly because people arrive looking for it: the sold-listing endpoint is present in the schema but returns DISABLED. Sold-price history is not something this engine serves today.

categories needs a category name, not a product

categories answered NOT_FOUND for "laptop" and for "nintendo switch" — those are products, not categories. Called with no query at all it returned 208 categories, and called with "Video Games" it returned the matching one. Browse the full list first, then filter.

Paging and what it costs

200 rows came back in a single search call, all 200 unique, in about three seconds; page 5 asked directly returned another 50. search, deals and categories are flat at 1 credit, item_detail and seller_items at 2, seller_profile at 3, and items_batch at 2 credits per item with a floor of 2. Two hundred rows for one credit is the cheapest wide read in this batch.

deals is the surface that carries the discount

Search rows have no before-price. The deals feed returns both — price and was_price as parsed objects — so if the question is how much something has been marked down, that is the endpoint, not search.

What people build with eBay

The jobs this data is most often used for.

7

endpoints

1/2/3

credits per call

01

Resale-pricing tools call sold_search to find an item's true market value from completed sales.

02

Marketplace analysts use search and deals to track active-listing prices and promotions.

03

Seller-intelligence products use seller_items and seller_profile to audit a competitor's full inventory.

What eBay data costs

The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 184 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
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"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/ebay/v1/search",
    headers={"x-api-key": REEF_KEY},
    json={
  "query": "iphone 13 pro"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up eBay.

Get a free key →
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, and 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.

35 E-commerce & Marketplaces APIs on the same key

One key, one credit pool, one response envelope. If you are pulling eBay, you are one call away from the rest of the category — no second contract, no second integration.

Need something this API does not do?

Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.

0/4000

No account needed · we reply from [email protected]

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 183 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-08-27.