Thousands of auction houses, one feed — and every lot still names its house
The HiBid API returns North America's largest auction aggregator as clean JSON in six actions: search, detail, bids, auctions, houses and categories.
6 active endpoints. Every call is 1 credit.
- POST/hibid/v1/search
- POST/hibid/v1/detail
- POST/hibid/v1/bids
- POST/hibid/v1/auctions
- POST/hibid/v1/houses
- POST/hibid/v1/categories
What HiBid endpoints does ReefAPI ship?
6 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
HiBid API
6 of 6 endpoints, ready to run
Auction lots for your filters, live catalogue or closed archive: title, description, lot number, quantity, pictures, current bid, bid count, next bid required, reserve status, realised price where the house uploaded one, the lot's own closing second in UTC — and on every row the auction house selling it and the sale it sits in.
// Press "Try it" and this pane shows exactly what the // live site returned this second — including an empty // result, if that is the truth. No key, no account.
How the HiBid API works
HiBid is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.
No OAuth app, no request signing, no per-site account. One key covers all 438 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.
Find a lot, then reach the house selling it
Three calls: categories, then search, then detail.
Pick the category or the sale. categories returns 18 roots and 1,135 nodes with the ids search takes, and auctions returns the sales with their house and their lot counts. Both are reference-shaped, so cache them.
{ "query": "rolex", "status": "open", "state": "TX", "max_results": 25 }Search lots with filters that were measured to bite. Ten filters, each checked against the unfiltered total in the same run. Keep the default sort when you page: an unsorted HiBid result is a random sample, not page one.
{ "auction_id": 774332, "status": "all", "max_results": 100 }Read the house and the closing second on each row. auction_house carries the id, name, town, state, country, phone, e-mail and website; closes_at is the lot's own closing instant in UTC, not the sale's.
{ "lot": "320966322", "include_bids": true }Open the lot, with its terms and its bid ladder. detail adds every picture, the category path, the sale's full terms and the bid ladder. A closed lot answers normally; a hidden one answers NOT_FOUND and is not retried.
Lots from thousands of independent auction houses in one feed, each with the house that is actually selling it, its live bid and the exact second it closes — no per-house scraping and no guesswork about who to contact.
curl -X POST https://api.reefapi.com/hibid/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"rolex","max_results":10}'{
"ok": true,
"data": { … },
"meta": {
"api": "hibid",
"endpoint": "search",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}One lot, and the auction house actually selling it
A HiBid row is a lot inside somebody else's sale. Without the house, a lot id is a dead end: you cannot verify the item, ask about condition, arrange collection or check the terms. So every row carries the house and the sale beside the bidding state, and the lot's own HiBid URL resolves with or without a slug.
| Lot | Current bid / next bid | Closes (UTC) | Auction house | Sale |
|---|---|---|---|---|
| Rolex wallet — lot 93, 2 bids (320966322) | USD 50 / next 75 | 2026-10-16T18:59:36Z | Clear Lake, TX — phone and e-mail on the row | Sugarland Estate, YACHT, Jewelry Collection ONLINE AUCTION (774332), 143 lots, premium 15 |
| Rolex Oyster Perpetual 16613 Submariner — closed | no bid published | closed; sale closed 2026-10-16 local | same house block on the row | archive sale, 6 pictures still served |
| Rolex 18k Gold Oyster 6917 Lady President — SOLD | USD 2,400 realised | closed | house block on the row | price_realized set because the house uploaded it |
Captured live on 2026-10-01. Auction lots close within days or weeks, so these ids are dated — take fresh ones from search. The second row is the honest case the archive is full of: HiBid returns priceRealized 0 with its own sentence 'Price Realized Not Uploaded', so this API returns price_realized: null, price_realized_note with that sentence and is_sold: null rather than claiming the lot sold for nothing.
What was measured, and what HiBid leaves out
Two consecutive live runs on 2026-10-01 with the same code: a fixed set of working calls and error cases in each, six search ids resolved to the same lot in detail six times out of six, and every filter measured against the same-run unfiltered total. Six of the lines below go against us.
Every lot row carries the auction house — id, trading name, street, town, state, postcode, country, phone and e-mail on 100 % of 240 measured rows in each of two runs, its own website on 82.9 % — plus the sale's id, name, lot count, currency, location, buyer's premium and HiBid links. One 100-lot page touched 39 different houses, and the house directory returned 281 matches for the fragment 'estate'.
current_bid, bid_count, next_bid_amount, reserve status, HiBid's own status word, and closes_at as a UTC instant computed from the seconds HiBid publishes. The lot's close is not the sale's close: one measured lot closed at 13:46 while its sale closed at 14:00, and both are returned.
HiBid publishes no structured-data copy of its prices, so the top of its separate bid-history ladder was compared with the lot's current bid: 8 of 8 matched in a probe with the same currency on all eight, and 6 of 6 matched again inside each of the two acceptance runs.
All ten exposed filters moved the unfiltered total of a 24-lot query: open 23, closed 1, webcast 3, TX 4, OH 1, United States 21, Canada 1, shipping 23. A date-from, a date-to and a sort direction are accepted by HiBid and then ignored, so they are not offered. An unknown category id or sale id is also ignored upstream and would return the whole catalogue, so both are verified. And the country filter wants the spelling its own rows use: United States returns 21 where USA returns 2, so the short forms are mapped rather than forwarded.
Median 982 ms and 1,065 ms across two runs of fourteen live calls, slowest 2,484 ms. 25 lots in about 1.0-1.1 s, 100 lots in 1.8 s, one lot in full with its bid ladder in 1.4-2.3 s, the house directory in 0.7-1.0 s.
Isolated archive pages measured 3.0 s to 11.3 s each, against about a second on the live catalogue, and the archive answers at most 1,000 lots per query instead of 10,000. Plan for seconds if you mine closed lots.
HiBid's own total saturates at 10,000 on the live catalogue and 1,000 on the archive — 'watch' reports 10,000 and so does a filter for Canada. total_is_capped marks it, and page 1000 returns nothing. Narrow the query to reach deeper lots.
Inside one call there are no repeats: 0.00 % over 500 probe rows and over the 240 pooled rows of each acceptance run. Across three consecutive live pages, seven measurements of 300 rows gave 0.00 % to 0.67 %. Across three archive pages the rate is genuinely unstable: nine measurements gave 0.00 %, 0.00 %, 0.00 %, 2.33 %, 4.67 %, 4.67 %, 7.00 %, 9.00 % and 10.33 %, so it is published as a range, not a figure. No lot was ever found under two ids.
HiBid returns a hammer price only if the house uploaded one. On one archive page 1 lot of 100 had a figure and 99 carried HiBid's own sentence 'Price Realized Not Uploaded'; on another, 32 of 50 had one; across 240 mixed rows, 7.9 %. price_realized stays null in that case, the sentence is returned, and is_sold is null rather than false.
The estimate is free text the auction house types and it is present on 23.3 % of rows, so it cannot carry a valuation. The lot description is blank on about one lot in ten. Three fields HiBid returns are not passed on, because each is always empty or always meaningless here: rv, which matches nothing it documents; a buy-now price, 0 on 1,005 measured rows while HiBid's own flag said the feature was set; and a maximum-bid figure that only has a value for a signed-in bidder.
No auction-house filter on the lot search (the field does not exist — go via a sale id), no bid-range filter, no working date-window filter, no buyer's premium in money, no buy-now price, and no bidder identity: HiBid masks the usernames it prints and this API does not unmask them.
What people build with HiBid
The jobs this data is most often used for.
endpoints
credit per call
Collectibles and machinery dealers watch thousands of small regional sales at once and contact the house directly, because the house's name, phone and e-mail are on the lot row.
Price-history and comparable-sales tools mine the closed archive for realised prices, and get told which lots have a real figure and which ones the house never uploaded.
Sniping and bid-monitoring tools poll current_bid, bid_count, next_bid_amount and the lot's exact UTC closing second, with soft-close extension flags included.
Market researchers measure what a category is worth per region using the state, postcode-radius and sale filters, with every total labelled when it is HiBid's ceiling rather than a count.
What HiBid 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 →- 1,000 free credits on signup, no card
- One key, all 438 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 -X POST https://api.reefapi.com/hibid/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"rolex","max_results":10}'import requests
r = requests.post(
"https://api.reefapi.com/hibid/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "rolex",
"max_results": 10
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up HiBid.
Get a free key →What does an auction aggregator give me that one auction house's site does not?▾
Breadth plus attribution in one row. HiBid is the shop window for thousands of independent North-American auction houses, and this API keeps the link to the house intact: every lot carries auction_house with the house's id, trading name, street, town, state, postcode, country, phone, e-mail and its own website, and auction with the sale's id, name, lot count, currency, location, buyer's premium and links to the sale and its catalogue on HiBid. Measured over 240 rows in each of two runs on 2026-10-01: house id, name, street, town, state, postcode, country, phone and e-mail were present on 100 % of rows; the house's own website on 82.9 %. One filter HiBid does not offer is a house filter on lots — the field simply does not exist in its lot search — so to work house by house you take an auction_id from the auctions action into search, which was verified to bite: 82 lots total and 25 of 25 returned rows in that one sale.
Does the same lot ever come back twice?▾
Inside one call, no: 500 rows across five queries returned 500 distinct lot ids, and the 240 pooled rows of each acceptance run did the same — 0.00 % repeat every time, and duplicate_ids_in_page reports the count on every response. Across consecutive pages it does happen, because a live auction catalogue changes while you page. Seven measurements of three consecutive live pages of 100 gave repeat rates of 0.00 %, 0.00 %, 0.00 %, 0.33 %, 0.67 %, 0.67 % and 0.67 % — small and bounded. The closed archive is worse and genuinely unstable: nine measurements of the same shape gave 0.00 %, 0.00 %, 0.00 %, 2.33 %, 4.67 %, 4.67 %, 7.00 %, 9.00 % and 10.33 %, so we publish that as a range rather than pretending it is one number. De-duplicate by lot_id when you page. What is NOT happening is the same lot being numbered twice: rows fingerprinted on title, house, sale, lot number and current bid produced zero groups with more than one id in every run.
Why does the API refuse to give me an unsorted result?▾
Because an unsorted HiBid result is a random sample, not page one — and that is measured, not assumed. Two back-to-back identical requests with no sort order returned 50 lots each with zero lots in common. Every real sort order returned the same 50 of 50. So this API always applies an order, lot_number by default, and the two no-order values HiBid accepts are deliberately not in the published list. That is why paging here is coherent at all; it is also why HiBid's own web grid appears to reshuffle under you.
Do the filters actually narrow the results?▾
All ten were measured against the unfiltered total in the same run, on a query whose total is 24 so that HiBid's 10,000 ceiling could not hide a swallow. From 24 lots: open 23, closed 1, webcast sales 3, catalogue-listing-only 0, Texas 4, Ohio 1, United States 21, Canada 1, within 50 miles of one postcode 0, shipping offered 23, one category 0. Three inputs that HiBid's schema accepts and then ignores — a date-from, a date-to and a sort direction — are not offered at all, because an offer that does nothing is worse than no offer. An unknown category id and an unknown auction id are also ignored upstream and would return the whole catalogue, so both are checked: the category against HiBid's own tree before the call, the auction against the rows that come back. A bad enum value is rejected with the allowed list rather than passed through.
How exact are the closing times?▾
Exact to the second, in UTC, and derived from the number HiBid publishes rather than from the sentence it prints. Two reasons. First, the lot closes before its sale does on staggered and soft closes — one measured lot closed at 13:46 while its auction closed at 14:00 — so the sale's close is not the lot's close, and both are returned separately. Second, HiBid's own timezone label is unreliable: 100 of 107 rows said EST and 7 said PST on 2026-10-01, when both of those zones were on daylight time. So closes_at is computed from the seconds-remaining figure, and the site's own sentence ships beside it as closes_at_source for anyone who wants to see it. soft_close_seconds and bidding_extended come too, because a soft close moves the moment. On archived lots the seconds are zero, so closes_at is null there and the only published moment is the sale's own local close — stated rather than invented.
Can I get hammer prices out of the archive?▾
Sometimes, and the API is explicit about when. HiBid returns a realised price only if the auction house uploaded one, and when it did not it says so in its own words. Measured: on one archive page 1 lot of 100 had a realised price and the other 99 carried HiBid's sentence 'Price Realized Not Uploaded'; on another, 32 of 50 had one. Across the 240 mixed rows of an acceptance run, 7.9 % carried a realised price. So price_realized is null unless there is a real figure, price_realized_note carries HiBid's sentence, and is_sold is three-valued: true when HiBid says SOLD or publishes a result, false only when HiBid says PASSED, and null when the lot is closed and HiBid published neither. Returning false there would have mislabelled 99 % of that page. Where a figure does exist it agreed with the lot's high bid.
How do I check a bid is real?▾
Ask the bid ladder, which is a separate HiBid surface. The bids action returns each distinct amount, how many bids landed on it, the bidder name HiBid itself masks, and the timestamp HiBid prints. We compared the top of that ladder against the lot's current_bid on eight lots and it matched on all eight, with the same currency on all eight. Note that the two counts measure different things on purpose: a lot's bid_count counts bids, the ladder counts amounts — one measured lot had bid_count 16 and three ladder rows — and the response says so.
How complete are the fields?▾
Counted over 240 rows in each of two acceptance runs, not assumed, and the two runs agreed to within one row. 100 %: lot id, lot url, title, lot number, quantity, currency, bid count, reserve flag, state, HiBid's status word, closed flag, seconds remaining, picture count, lead image, shipping flag, the sale's id, urls, name, lot count, currency, close time and location, and the house's id, name, street, town, state, postcode, country, phone and e-mail. Lower, and worth planning around: the sale's buyer's premium 96.2 %; HiBid's own closing sentence 89.6 %; the lot description 89.6 %, blank on about one lot in ten; the computed closing instant 83.8 %, because archived lots publish no seconds remaining; the house's own website 82.9 %; the next bid required 79.6 %, absent on closed lots; the current bid 65.8 %, because a lot nobody has bid on returns null rather than 0; and the estimate just 23.3 % — it is free text the house types, so do not build a valuation on it. Three fields HiBid returns are deliberately not passed on: rv, which matches nothing it documents; a buy-now price, which was 0 on 1,005 measured rows while HiBid's own flag claimed the feature was set; and a maximum-bid figure that only means anything to a signed-in bidder. A handle that never works is worse than no handle.
How deep can I page, and how many results are there really?▾
100 lots a page is HiBid's own ceiling — asking for 200 or 300 returns 100 — and the reachable window is 10,000 lots per query on the live catalogue and 1,000 on the archive. Page 400 of 25 answered; page 1000 returned nothing. The total HiBid reports saturates at those same numbers, so this API returns total_is_capped and a note saying the figure is a ceiling rather than a count: a query for 'watch' reports 10,000 and so does a filter for Canada. Narrow with a category, a sale, a state or a postcode to reach deeper lots, and a page past the window is refused with the last reachable page in the message rather than returning an empty success.
How fast is it?▾
The live catalogue is quick and the closed archive is not, and both are measured. Across two acceptance runs of fourteen live calls each, the median call took 982 ms and 1,065 ms and the slowest took 2,484 ms. By action: 25 lots in about 1.0-1.1 s, 100 lots in 1.8 s, one lot in full with its bid ladder in 1.4-2.3 s, the sales search in 0.8-1.1 s, the house directory in 0.7-1.0 s, and the category tree in 14 ms once it is cached for six hours. The archive is the slow surface — isolated pages measured 3.0 s to 11.3 s — so if you are mining closed lots, expect seconds, not milliseconds. The engine sizes its work to the request budget and, if it ever has to drop the optional bid ladder inside a single-lot call, says so in meta rather than returning quietly without it.
What does HiBid not publish here?▾
Five things it would be reasonable to want and that genuinely are not on this surface. There is no auction-house filter on the lot search — the field does not exist, which is why you go via a sale id. There is no bid-range filter and no working date-window filter. There is no buyer's premium in money, only the house's own text and rate, so a total-if-won cannot be computed from this data alone. There is no buy-now price: HiBid's buy-now figure was 0 on 1,005 measured rows even though its own flag said the feature was set, so that key is not published at all rather than always null. There is no bidder identity: HiBid masks the usernames it prints and this API does not unmask them. And HiBid's lot pages carry no structured-data copy of the price, so values here are checked against HiBid's own separate bid-history surface rather than against a second copy on the page.
Is a closed or deleted lot an error?▾
A closed lot is a normal, successful answer with its full record — closed is information, and three archive lots that ended months ago still returned six pictures each. A lot the auction house has hidden, or that does not exist, is a NOT_FOUND that is marked non-retryable, because no number of retries turns it into a lot. One specific case is worth knowing: if you pass the auction house's own item number instead of the HiBid lot id, HiBid answers 'hidden' — so the API says exactly that and tells you to pass the HiBid id, instead of looking like an outage.
What is the HiBid API?▾
HiBid API is a ReefAPI endpoint group for thousands of us and canadian auction houses as one json feed — every lot named with the house selling it, its live bid and its exact closing second. It returns live JSON through POST requests under /hibid/v1.
Is the HiBid API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. HiBid calls use the same shared credit balance as every other ReefAPI engine.
99 Classifieds & Second-hand APIs on the same key
One key, one credit pool, one response envelope. If you are pulling HiBid, 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.
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 437 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-10-01.