130point API & Scraper
The 130point API returns sold-price comps for trading cards and collectibles as clean JSON.
🤖 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.
search takes the words you would type on 130point - player or character, year, set, card number, grader and grade - and returns up to 200 sales from eBay (every eBay country site), Fanatics Collect (formerly PWCC), Goldin, Heritage Auctions, Pristine Auction, MySlabs and Card Hobby. Each sale has the title, the sold price and its currency, how it sold (auction, fixed price or accepted Best Offer), the number of bids, the sale date and time, the image and a clean link to the listing, and the grading company and grade read from the title. For eBay Best Offer sales it returns the amount the seller actually accepted - the number eBay hides behind a struck-through asking price - together with that asking price and the discount. Filter by sale date, price, sale type, marketplace and item location, keep only graded or only raw cards, sort by the most recent sales or by price, and convert every price to one currency with 130point's own daily rates. live_search returns the live auctions for the same words across eBay, Fanatics, Goldin, Heritage, Pristine and MySlabs with current price, bids and end time. No account - one ReefAPI key and the standard { ok, data, meta, error } envelope.
What an accepted Best Offer really sold for
eBay shows an accepted Best Offer as a struck-through asking price. 130point publishes the amount that was accepted. On 200 eBay Best Offer sales of 'charizard base set psa 9' read on 2026-11-07, the accepted price was a median 13.2 % (mean 16.0 %) below the asking price; on 'pikachu illustrator' the median was 25 %. Pricing a card from asking prices overstates it by that much.
| Field | Example (Charizard base set PSA 9, eBay, 2026-11-04) |
|---|---|
| sale_type | best_offer_accepted |
| sold_price / currency | 1200 / USD — the accepted offer |
| list_price | 1449.99 — the asking price eBay still shows |
| best_offer_discount_pct | 17.2 |
| sold_at | 2026-11-04T01:56:17Z |
| grading | { company: PSA, grade: 9, source: title } |
Checked against eBay itself: for this listing eBay's own page shows the 1449.99 asking price and the same end time to the second, and not the accepted amount. Goldin and Fanatics Collect prices are the price the buyer paid including the buyer's premium (Goldin 4,636 = 3,800 hammer + 22 %; Fanatics 3,360 = 2,800 + 20 %, bids match).
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/130point/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "charizard base set psa 9",
"limit": 10
}
}{
"ok": true,
"meta": {
"api": "130point",
"endpoint": "search",
"mode": "live",
"latency_ms": 3506.9,
"record_count": 10,
"bytes": 139781,
"cache_hit": false,
"pagination": {
"page": 1,
"has_more": true,
"page_size": 10,
"total": 200
},
"upstream_calls": 3,
"exits_tried": 2,
"clearance_age_s": 1148,
"recovered": "challenge,challenge",
"charged_credits": 5,
"version": "0.1.0",
"request_id": "c320e89f1b3f4111",
"queue_ms": 1.2,
"fetched_at": "2026-11-08T13:04:19.791Z"
},
"data": {
"query": "charizard base set psa 9",
"filters": {
"query": "charizard base set psa 9",
"marketplace": "all",
"sort": "recent"
},
"results": [
{
"id": "EBAY-v1|117493072102|0",
"item_id": "117493072102",
"marketplace": "ebay",
"marketplace_label": "eBay",
"source_label": null,
"title": "1999 POKEMON BASE SET UNLIMITED #4 CHARIZARD-HOLO PSA 9",
"sold_price": 3225,
"currency": "USD",
"sale_type": "auction",
"best_offer_accepted": false,
"list_price": null,
"list_price_currency": null,
"best_offer_discount_pct": null,
"bids": 9,
"sold_at": "2026-11-07T02:41:00Z",
"url": "https://www.ebay.com/itm/117493072102",
"ebay_site": "www.ebay.com",
"bid_history_url": "https://www.ebay.com/bfl/viewbids/117493072102",
"image": "https://i.ebayimg.com/images/g/MfAAAeSwfjFq44GK/s-l500.jpg",
"grading": {
"company": "PSA",
"grade": 9,
"source": "title"
}
},
{
"id": "EBAY-v1|900052219447|0",
"item_id": "900052219447",
"marketplace": "ebay",
"marketplace_label": "eBay",
"source_label": null,
"title": "1999 POKEMON BASE SET UNLIMITED #4 CHARIZARD-HOLO PSA 9",
"sold_price": 5199.99,
"currency": "CAD",
"sale_type": "fixed_price",
"best_offer_accepted": false,
"list_price": null,
"list_price_currency": null,
"best_offer_discount_pct": null,
"bids": null,
"sold_at": "2026-11-06T17:04:09Z",
"url": "https://www.ebay.ca/itm/900052219447",
"ebay_site": "www.ebay.ca",
"bid_history_url": null,
"image": "https://i.ebayimg.com/images/g/ZLAAAeSwjtlq5PzP/s-l500.jpg",
"grading": {
"company": "PSA",
"grade": 9,
"source": "title"
}
},
{
"id": "EBAY-v1|237153578204|0",
"item_id": "237153578204",
"marketplace": "ebay",
"marketplace_label": "eBay",
"source_label": null,
"title": "Charizard Lot of 2 - PSA 9 151 SIR & PSA 2 1999 Base Set",
"sold_price": 525,
"currency": "USD",
"sale_type": "fixed_price",
"best_offer_accepted": false,
"list_price": null,
"list_price_currency": null,
"best_offer_discount_pct": null,
"bids": null,
"sold_at": "2026-11-06T03:29:58Z",
"url": "https://www.ebay.com/itm/237153578204",
"ebay_site": "www.ebay.com",
"bid_history_url": null,
"image": "https://i.ebayimg.com/images/g/IQ8AAeSwDHNq5Uen/s-l500.jpg",
"grading": {
"company": "PSA",
"grade": 9,
"source": "title"
}
}
],
"count": 10,
"total_results": 200,
"page": 1,
"limit": 10,
"has_more": true,
"stats": {
"USD": {
"count": 147,
"min": 135.83,
"max": 207400,
"median": 3252,
"mean": 5650.03
},
"GBP": {
"count": 33,
"min": 12.4,
"max": 14413.3,
"median": 2347,
"mean": 2747.36
},
"EUR": {
"count": 9,
"min": 170,
"max": 9500,
"median": 2550,
"mean": 3095.71
},
"AUD": {
"count": 6,
"min": 2585.87,
"max": 8500,
"median": 5277.5,
"mean": 5281.64
},
"CAD": {
"count": 5,
"min": 255,
"max": 5199.99,
"median": 2995.95,
"mean": 3015.19
}
},
"marketplaces": {
"ebay": 163,
"fanatics": 27,
"goldin": 5,
"heritage": 4,
"pristine": 1
},
"upstream_cap_reached": true
}
}What the 130point API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Sold listings matching a keyword across eBay (every eBay site, with the accepted price of Best Offer sales and the asking price it was accepted against), Fanatics Collect (formerly PWCC), Goldin, Heritage Auctions, Pristine Auction, MySlabs and Card Hobby: title, sold price and currency, sale type, bids, sale date, image and item link, with the grading company and grade read from the title. Filter by sold date range, price range, sale type (auction, fixed price, accepted best offer), marketplace and item location; graded or raw; sort by most recent or by price; optional conversion to one currency; per-currency min/median/max of the returned sales. | Pricing teams call search to get sold listings matching a keyword across eBay (every eBay site, with the accepted price of Bes…. | query, marketplace, sale_type, sold_date_from, sold_date_to, ... |
| live_search | Live auctions matching a keyword on eBay, Fanatics Collect, Goldin, Heritage Auctions, Pristine Auction and MySlabs: title, current price and currency, bids, end time, image and item link, grading read from the title. Sort by ending soonest or highest price; filter by marketplace and item location; optional conversion to one currency. | Marketplace operators call live_search to get live auctions matching a keyword on eBay, Fanatics Collect, Goldin, Heritage Auctions, Pristi…. | query, marketplace, item_location, sort, grader, ... |
Call search from your stack
curl -X POST https://api.reefapi.com/130point/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"charizard base set psa 9","limit":10}'import os
import requests
REEF_KEY = os.environ["REEF_KEY"]
r = requests.post(
"https://api.reefapi.com/130point/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "charizard base set psa 9",
"limit": 10
},
timeout=90,
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/130point/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "charizard base set psa 9",
"limit": 10
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.130point.search with {"query":"charizard base set psa 9","limit":10}.Who uses this API and why
- Card pricing and buylist tools: median of the last 200 sales of the exact card and grade
- Best Offer research: what sellers actually accept below their asking price
- Arbitrage between eBay and the auction houses (Goldin, Fanatics, Heritage) for the same card
- Grading decisions: raw versus PSA 9 versus PSA 10 sold prices from one search
- Live auction watching: what is ending soon across six marketplaces
Questions developers ask before integrating
Can I get the real price of an eBay Best Offer sale?
Yes. Rows with sale_type best_offer_accepted carry sold_price = the accepted offer, list_price = the asking price it was accepted against, and best_offer_discount_pct. Pass sale_type best_offer to get only those sales - a search for 'pikachu vmax psa 10' returned 199 of them on 2026-11-07.
How far back do sold prices go?
Each search returns at most 200 sales. With the default sort they are the newest 200 (for a popular card that is a few weeks to two months); sort price_desc reaches back years (to 2020 for a Charizard PSA 9) and price_asc returns the cheapest. Use sold_date_from and sold_date_to to pull the 200 sales of a particular window, for example one month.
Which marketplaces are included?
eBay on every country site (prices stay in the listing's own currency: USD, GBP, EUR, AUD, CAD …), Fanatics Collect including its PWCC history, Goldin, Heritage Auctions, Pristine Auction, MySlabs and Card Hobby. marketplace narrows the search to one or several of them; MySlabs and Card Hobby return at most 100 sales per search.
How do I get comps for one grade only?
Put the grade in the words (e.g. 'charizard base set psa 9') or use grader and grade, which add it the way 130point's own card filters do. Every row also carries grading{company, grade} read from the title, and graded=raw keeps only titles that name no grading company.
Can I look up one eBay item number?
Not here - 130point searches by words, and an item number returns nothing. For a single sold eBay listing (sold or not, final price, end time, bids) use the eBay Sold Listings API's sold_item action; 130point adds the accepted Best Offer amount for listings found by keyword.
Are prices converted to one currency?
Prices are returned in the currency the item sold in. Add currency=USD (or GBP, EUR …) and each row also gets price_converted using 130point's own daily exchange rates; stats gives the count, min, median, max and mean of the returned sales per currency.
What is the 130point API?
130point API is a ReefAPI endpoint group for sold prices for trading cards: ebay with the real accepted best offer, plus fanatics, goldin, heritage, pristine, myslabs and card hobby. It returns live JSON through POST requests under /130point/v1.
Is the 130point API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. 130point calls use the same shared credit balance as every other ReefAPI engine.
Do I need a 130point login or account?
No login to 130point 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 130point 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 130point API use?
130point actions currently cost 2-5 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call 130point from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call 130point actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the 130point API a 130point scraper?
It is the managed alternative to a DIY 130point scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same sold prices for trading cards: ebay with the real accepted best offer, plus fanatics, goldin, heritage, pristine, myslabs and card hobby back as clean JSON.
Why does my 130point scraper keep getting blocked?
Most 130point scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked calls are free.