eBay API — Getting Started — FetchLayer Docs

Getting Started

Find the listings you care about, re-check their prices on a schedule, and read the seller and product reputation behind them.

1. Get your API key

Create an account and generate a FetchLayer API key from your dashboard. There is no eBay developer program application, no keyset and no OAuth flow involved.

Create free account →

2. Search listings

Search by keyword, category or seller. Each listing carries its itemId — the identifier price-check and listing-details take.

bash
curl -X POST https://api.fetchlayer.dev/ebay/search-listings \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"query":"anker usb c charger","condition":["new"],"sort":"price_lowest","limit":60}'

Tip

Already have an eBay link? Send it to /resolve-url first — it returns the item number, username, product id or search filters the URL encodes, and it does not consume a credit.

3. Monitor prices in bulk

/price-check takes up to 100 item numbers and returns each one's current price, shipping cost and status. In the default fast mode listings are answered up to 50 at a time, so re-checking a watchlist costs little more than checking one listing.

bash
curl -X POST https://api.fetchlayer.dev/ebay/price-check \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"listings":["334140575100","326634081605","335571739480"]}'

Nothing goes silently missing

Every listing you ask for comes back. One that has ended is reported as ended with its final price, one that has been removed as not_found. Use "mode":"exact" when you also need the seller's own currency and the exact quantity available.

Current prices only

Sold and completed prices are shown by eBay to signed-in members only, so they are not available. Prices are in US dollars and shipping is quoted to the United States.

4. Check the seller

/seller-feedback returns the feedback score, 1-, 6- and 12-month rating counts, detailed seller ratings and the individual comments. Set includeAutomated to false to skip eBay's automatic on-time-delivery entries and read only what buyers wrote.

bash
curl -X POST https://api.fetchlayer.dev/ebay/seller-feedback \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"seller":"vipoutlet","rating":"negative","includeAutomated":false,"limit":50}'

5. Read product reviews

Reviews belong to eBay's catalogue product, not to a single listing. A listing's item specifics carry the id as eBay Product ID (ePID).

bash
curl -X POST https://api.fetchlayer.dev/ebay/product-reviews \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"product":"27061041202","limit":50}'

Error responses

Every error, on every route, is JSON in one shape: error (what went wrong, in words), status, code, retryable and requestId, which also comes as the X-Request-Id header. Branch on code and retryable rather than on the text; on a 5xx the text is generic. Quote requestId when reporting a problem.

json
{
  "error": "Missing required parameter: url",
  "status": 400,
  "missing": ["url"],
  "code": "invalid_input",
  "retryable": false,
  "requestId": "922874e3-c0d0-40d8-8866-d198af132420"
}
codeStatusRetryableMeaning
invalid_input400noThe request needs fixing; error names the field. A missing required parameter also lists it in missing.
unauthorized401noThe API key is missing or not valid.
insufficient_credits402noNothing left to spend: no credits, a used-up free trial, or a monthly allowance and credit balance both spent. error says which. Waiting does not help; topping up does.
forbidden403noThis key or account is not allowed this request.
not_found404noWhat the request names does not exist or is not public.
expired410noWhat the request refers to is no longer available; ask for it afresh.
quota_exceeded429noA request-rate limit was reached; error says which. Slow down before sending more.
cancelled499noThe caller closed or cancelled the request before it finished. The work was stopped and nothing was charged.
time_limit503yesYour timeoutMs ran out before there was anything to return; ask again, or allow more time.
temporarily_unavailable503yesNot available right now; ask again shortly.
posts_unavailable403noTikTok user videos: TikTok is not showing this account’s posts publicly right now. Asking again at once returns the same answer; nothing is charged.
store_unreachable503yesStore routes (Shopify, WooCommerce): the store itself can’t be reached right now — it may be offline. Ask again later. Where a store route doesn’t say so yet, an offline store is temporarily_unavailable.
upstream_error502yesThe source answered in a way that could not be used; ask again later.
internal_error500yesSomething failed on our side; ask again later, and quote requestId if it persists.
tool_error—noMCP only: a tool call failed in a way no other code describes; error says what.

More codes may be added; treat one you do not recognise by its retryable flag. Over MCP, a tool error carries the same fields in structuredContent, and as a JSON text block beside the message.

Next steps

Product overvieweBay API: what it returns, pricing and use cases