World of Books API & Scraper
The World of Books API returns wob.com / worldofbooks.com — World of Books Group of Coventry, England, the UK's largest second-hand bookseller — as clean JSON in four actions: search, detail, isbn and categories.
🤖 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.
World of Books is not a marketplace. It buys, grades and resells every book itself, so there is one seller, one grading scale and one price per copy, and no buy-box to reverse-engineer. The unit it actually sells is a physical COPY: one book, one warehouse, one cosmetic condition, one price. That is why search and detail answer two different questions. search works on editions, one row per barcode, and gives the keys a book buyer actually holds — ISBN-13 AND ISBN-10 as separate indexed fields, so a barcode scan is a first-class query — together with the author, publisher, publication year, binding, language, the full three-level category path, the cheapest live price in that storefront's currency, the publisher's list price, which of the five conditions are currently in stock, a real unit count rather than an in-stock flag, and World of Books' own sales rank. detail then opens one edition and returns every copy on the shelf as its own row, with that copy's grade, its price, whether it is buyable and the country holding it, and a cheapest-price-per-grade summary on top. Measured on 2026-10-08 across ten editions, an edition resolved to between six and ten copies with three to five of them available at once. The condition ladder is World of Books' own five grades, carried verbatim and never remapped: New, Like New, Very Good, Good, Well Read. isbn is the action a bookseller or a librarian will use most — up to twenty ISBNs in ONE request, ISBN-13, ISBN-10 and 13-digit barcodes mixed freely, with every ISBN-10 converted arithmetically and every check digit verified before the call, so a typo comes back as a rejected input rather than as a missing book, and the answer separates found, not carried by this storefront, and not a valid ISBN. categories returns the catalogue's own shape: the three-level category tree with a count on every node plus the top authors, publishers, bindings, languages and price bands, which is how you learn that the filter wants 'Penguin Books Ltd' rather than 'Penguin' without guessing. Four honest limits worth knowing before you build. There are exactly two storefronts, UK and US, and they are two separate catalogues: for one Harry Potter ISBN the UK store published GBP 3.70 over 1,855 units while the US store published USD 3.48 over 875, and a plain keyword search returned the UK Philosopher's Stone on one and the US Sorcerer's Stone on the other. A copy held in the other country is re-priced rather than converted — the same four UK copies read GBP 3.70 at home and USD 10.00 on the US store, a ratio of 2.70 against a published exchange rate of 1.32 — so the API returns the storefront you asked for and names the warehouse on every copy. Search stops at a thousand records per query, which the API tells you rather than looping past, and the catalogue total it reports is the source's own estimate: it answered 7,175,501, 7,173,373 and 7,191,099 for the same query minutes apart, so it is published as an estimate and flagged as one. And on a disc or a game there is no ISBN at all — the catalogue puts an EAN or a UPC in the ISBN-13 slot and an Amazon ASIN in the ISBN-10 slot, so those are returned under their own names and the ISBN fields stay null rather than passing a UPC off as an ISBN. One ReefAPI key, no World of Books account, and the standard { ok, data, meta, error } envelope.
World of Books' five conditions, and the three identifiers that are not interchangeable
The grade tokens and their order are World of Books' own, read from its own catalogue; nothing is remapped onto a scale of ours. The counts are one measured run on the UK storefront, out of 6,900,135 editions in the same call — they move with the shelf, and they count EDITIONS that have at least one copy in that grade, not copies. Condition filters editions; detail tells you which copy in which grade carries which price.
| grade | what the source calls it | UK editions with a copy in this grade | share of the run |
|---|---|---|---|
| NEW | New | 5,720,509 | 82.9% |
| LIKE_NEW | Like New | 354,420 (facet count) | — |
| VERY_GOOD | Very Good | 7,992,943 (facet count) | — |
| GOOD | Good | 1,621,381 (facet count) | — |
| WELL_READ | Well Read | 1,701,174 | 24.7% |
Two numbers appear above on purpose, because the source publishes two and they do not agree: the figures with a share are search totals measured in one run, and the ones marked 'facet count' come from the catalogue's own facet counter, which counts the whole index while a search runs behind the storefront's own rule that drops unpriced records. The API publishes both and says which is which; a facet count is an upper bound on what a search will return. On identifiers: ISBN-13 and ISBN-10 both key a book and the API returns both, deriving the ISBN-10 from a 978-prefixed ISBN-13 when the catalogue leaves it blank and flagging that it did. A 979 ISBN has no ISBN-10 and gets null. On a DVD, CD or game there is no ISBN at all — the EAN or UPC goes out as barcode_ean and the Amazon ASIN as asin.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/worldofbooks/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"market": "uk",
"query": "dune",
"per_page": 20,
"sort": "price_asc"
}
}{
"ok": true,
"meta": {
"api": "worldofbooks",
"endpoint": "search",
"mode": "live",
"latency_ms": 446.1,
"record_count": 20,
"bytes": 28438,
"cache_hit": false,
"market": "uk",
"country": "United Kingdom",
"country_code": "GB",
"currency": "GBP",
"total_estimate": 94338,
"total_is_estimate": true,
"returned": 20,
"page": 1,
"per_page": 20,
"pages_available": 50,
"result_window": 1000,
"max_page": 50,
"has_more": true,
"sort": "price_asc",
"price_range": {
"min": 3.49,
"max": 3.5
},
"row_unit": "one edition (one barcode); use `detail` for the individual copies",
"warnings": [
"`total_estimate` is the source's own approximation, not a count: it answered 7,175,501 / 7,173,373 / 7,191,099 for the same query minutes apart. The rows themselves are exact."
],
"upstream_requests": 1,
"charged_credits": 1,
"version": "1.0.0",
"request_id": "f29e6082fa3a4f94",
"queue_ms": 1.5,
"fetched_at": "2026-10-08T11:33:19.625Z"
},
"data": {
"books": [
{
"isbn13": "9780718187088",
"isbn10": "0718187083",
"isbn10_derived": null,
"barcode_ean": null,
"asin": null,
"title": "The The Canterbury Puzzles",
"full_title": "The Canterbury Puzzles",
"catalogue_title": "The Canterbury Puzzles",
"author": "Henry Dudeney",
"publisher": "Penguin Books Ltd",
"year_published": 2017,
"year_published_raw": null,
"date_published": "2017-05-18",
"date_published_raw": "18/05/2017",
"format": "Paperback",
"pages": null,
"languages": [
"English"
],
"product_type": "Book",
"series": null,
"genre_code": "WD",
"reading_age": null,
"categories": [
"Non-Fiction Books",
"Non-Fiction Books > Lifestyle, Cooking and Leisure",
"Non-Fiction Books > Lifestyle, Cooking and Leisure > Hobbies, quizzes & games"
],
"category_path": "Non-Fiction Books > Lifestyle, Cooking and Leisure > Hobbies, quizzes & games",
"category_lvl0": "Non-Fiction Books",
"from_price": 3.49,
"best_condition_price": 3.7,
"list_price": 14.99,
"currency": "GBP",
"currency_symbol": "£",
"price_bands": [
"3.00-5.99"
],
"available_conditions": [
"VERY_GOOD",
"GOOD"
],
"condition_count": 2,
"in_stock": true,
"stock_quantity": 3,
"stock_level": "low",
"has_used_copies": true,
"has_new_copies": false,
"stocked_in_uk": true,
"stocked_in_us": false,
"sales_rank": 859683,
"review_rating": null,
"review_count": null,
"image_url": "https://image-server.worldofbooks.com/images/9780718187088.jpg",
"handle": "the-canterbury-puzzles-book-henry-dudeney-9780718187088",
"url": "https://www.worldofbooks.com/en-gb/products/the-canterbury-puzzles-book-henry-dudeney-9780718187088",
"product_id": 9817117065489,
"edition_family": "books-the-the-canterbury-puzzles-by-henry-dudeney",
"market": "uk",
"detail_params": {
"market": "uk",
"handle": "the-canterbury-puzzles-book-henry-dudeney-9780718187088"
}
},
{
"isbn13": "9780349429212",
"isbn10": "0349429219",
"isbn10_derived": null,
"barcode_ean": null,
"asin": null,
"title": "Bridgerton: The Duke and I (Bridgertons Book 1)",
"full_title": "Bridgerton: The Duke and I (Bridgertons Book 1): The Sunday Times bestselling inspiration for the Netflix Original Series Bridgerton",
"catalogue_title": null,
"author": "Julia Quinn",
"publisher": "Little, Brown Book Group",
"year_published": 2020,
"year_published_raw": null,
"date_published": "2020-12-01",
"date_published_raw": "01/12/2020",
"format": "Paperback",
"pages": null,
"languages": [
"English"
],
"product_type": "Book",
"series": "Bridgerton",
"genre_code": null,
"reading_age": null,
"categories": [
"Fiction Books",
"Fiction Books > Romance"
],
"category_path": "Fiction Books > Romance",
"category_lvl0": "Fiction Books",
"from_price": 3.5,
"best_condition_price": 3.7,
"list_price": 9.99,
"currency": "GBP",
"currency_symbol": "£",
"price_bands": [
"3.00-5.99",
"9.00-11.99"
],
"available_conditions": [
"NEW",
"VERY_GOOD",
"GOOD"
],
"condition_count": 4,
"in_stock": true,
"stock_quantity": 376,
"stock_level": "normal",
"has_used_copies": true,
"has_new_copies": true,
"stocked_in_uk": true,
"stocked_in_us": false,
"sales_rank": 10911,
"review_rating": null,
"review_count": null,
"image_url": "https://image-server.worldofbooks.com/images/9780349429212.jpg",
"handle": "bridgerton-the-duke-and-i-bridgertons-book-1-book-julia-quinn-9780349429212",
"url": "https://www.worldofbooks.com/en-gb/products/bridgerton-the-duke-and-i-bridgertons-book-1-book-julia-quinn-9780349429212",
"product_id": 9847505551633,
"edition_family": "books-bridgerton-the-duke-and-i-bridgertons-book-1-by-julia-quinn",
"market": "uk",
"detail_params": {
"market": "uk",
"handle": "bridgerton-the-duke-and-i-bridgertons-book-1-book-julia-quinn-9780349429212"
}
},
{
"isbn13": "9781405921510",
"isbn10": "140592151X",
"isbn10_derived": null,
"barcode_ean": null,
"asin": null,
"title": "Dunstan",
"full_title": "Dunstan: One Man. Seven Kings. England's Bloody Throne.",
"catalogue_title": "Dunstan: One Man. Seven Kings. England's Bloody Throne.",
"author": "Conn Iggulden",
"publisher": "Penguin Books Ltd",
"year_published": 2018,
"year_published_raw": null,
"date_published": "2018-03-08",
"date_published_raw": "08/03/2018",
"format": "Paperback",
"pages": null,
"languages": [
"English"
],
"product_type": "Book",
"series": null,
"genre_code": "FV",
"reading_age": null,
"categories": [
"Fiction Books",
"Fiction Books > Historical Fiction"
],
"category_path": "Fiction Books > Historical Fiction",
"category_lvl0": "Fiction Books",
"from_price": 3.5,
"best_condition_price": 3.6,
"list_price": 10.99,
"currency": "GBP",
"currency_symbol": "£",
"price_bands": [
"3.00-5.99",
"9.00-11.99"
],
"available_conditions": [
"NEW",
"VERY_GOOD",
"GOOD"
],
"condition_count": 4,
"in_stock": true,
"stock_quantity": 59,
"stock_level": "high",
"has_used_copies": true,
"has_new_copies": true,
"stocked_in_uk": true,
"stocked_in_us": false,
"sales_rank": 30115,
"review_rating": null,
"review_count": null,
"image_url": "https://image-server.worldofbooks.com/images/9781405921510.jpg",
"handle": "dunstan-book-conn-iggulden-9781405921510",
"url": "https://www.worldofbooks.com/en-gb/products/dunstan-book-conn-iggulden-9781405921510",
"product_id": 9783782736145,
"edition_family": "books-dunstan-by-conn-iggulden",
"market": "uk",
"detail_params": {
"market": "uk",
"handle": "dunstan-book-conn-iggulden-9781405921510"
}
}
],
"seller": {
"name": "World of Books",
"kind": "first_party_retailer",
"legal_name": "World of Books Group",
"city": "Coventry",
"country": "GB",
"url": "https://www.worldofbooks.com/",
"note": "World of Books buys, grades and resells every copy itself; there is exactly one seller on this catalogue and it is a company."
}
}
}What the World of Books API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search the World of Books catalogue of one storefront. Free text over title, author, publisher and both ISBNs, plus filters on author, publisher, the store's own three-level category tree, cosmetic condition, binding, language, product type, publication year, price and stock depth, and four sort orders. One row per EDITION (one barcode) carrying the identifiers a book buyer actually keys on — ISBN-13 AND ISBN-10 as separate fields — plus the author, publisher, publication year, binding, language, the full category path, the cheapest live price in that storefront's currency, the list price, which of the five conditions are in stock, a real unit count and the store's own sales rank. Every filter offered here was measured against an unfiltered call in the same run and really changes the result; filters the source accepts and then ignores are not exposed, and the engine re-checks the returned rows against the filter you asked for and reports any disagreement in meta.warnings instead of letting it pass. The result window is 1,000 records per query and the engine says so rather than looping past it. | Pricing teams call search to search the World of Books catalogue of one storefront. | market, query, author, publisher, category, ... |
| detail | Everything World of Books publishes about one edition on one storefront, read from the product page itself and from the catalogue record behind it. The bibliography is complete: ISBN-13, ISBN-10, title, author, publisher and the publishing group, binding, PAGE COUNT, publication date, language, the full category breadcrumb, the series, the publisher's list price and the description the store prints. Then the part no catalogue page gives you in one object: every physical COPY on the shelf as its own row — World of Books' grade (New, Like New, Very Good, Good, Well Read), that copy's own price, whether it can be bought, which country's warehouse holds it and which supply route it came in on — with a cheapest-price-per-grade summary on top. Each copy's price is cross-checked against the page's own published offer for the same SKU and the agreement is published, and a copy with no price is returned as null rather than as 0.00. Takes the `handle` every search row hands you, or an ISBN-10/ISBN-13. | Marketplace operators call detail to get everything World of Books publishes about one edition on one storefront, read from the produc…. | market, handle, isbn |
| isbn | Look up to 20 ISBNs up in ONE request — the fastest way to price a shelf, a reading list or a whole wishlist against the UK's biggest second-hand bookseller. ISBN-13, ISBN-10 and 13-digit barcodes may be mixed; every ISBN-10 is converted arithmetically to the ISBN-13 the catalogue is keyed on, and every check digit is verified before the call so a typo comes back as a rejected input rather than as a missing book. The answer keeps your order and separates the three outcomes you care about: found, not carried by this storefront, and not a valid ISBN. Each found row is the full catalogue record — title, author, publisher, year, binding, language, categories, the cheapest live price, the list price, which of the five conditions are in stock and how many physical copies there are. | Catalog enrichment teams call isbn to look up to 20 ISBNs up in ONE request. | market, isbns |
| categories | The shape of the catalogue in one request: World of Books' own three-level category tree with a record count on every node, plus the top authors, publishers, bindings, languages, product types, cosmetic conditions and price bands, and the live minimum, mean and maximum price. This is the resolver for `search` — it gives you the exact spellings the filters take ('Jk Rowling', 'Penguin Books Ltd', 'Non-Fiction Books > Lifestyle, Cooking and Leisure') so you never have to guess one. Narrow it with `query` or `category` to get the breakdown of a single search or a single branch. One honest caveat, measured and repeated in the response: these counts are index-wide while `search` runs behind the storefront's own hygiene rule, so a facet count is an upper bound on what a search will return (measured the same minute: in-stock facet 8,224,496, search total 7,173,373). | Retail analysts call categories to get the shape of the catalogue in one request. | market, query, category, top |
Call search from your stack
curl -X POST https://api.reefapi.com/worldofbooks/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"market":"uk","query":"dune","per_page":20,"sort":"price_asc"}'import requests
r = requests.post(
"https://api.reefapi.com/worldofbooks/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"market": "uk",
"query": "dune",
"per_page": 20,
"sort": "price_asc"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/worldofbooks/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"market": "uk",
"query": "dune",
"per_page": 20,
"sort": "price_asc"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.worldofbooks.search with {"market":"uk","query":"dune","per_page":20,"sort":"price_asc"}.Who uses this API and why
- Price a shelf, a reading list or a whole wishlist in one request: twenty ISBNs go out together and come back with the cheapest live price, the conditions in stock and the unit count for each.
- Resolve a barcode scan to a real book record — ISBN-10 and ISBN-13 are both indexed, and an ISBN-10 is converted arithmetically rather than searched for.
- Source second-hand stock at the condition you actually want: filter editions down to the ones with a Like New or Very Good copy, then read that copy's own price instead of a from-price.
- Compare the UK and US second-hand markets for the same title on the same day, in each market's own currency, with the warehouse named on every copy.
- Build a catalogue-coverage check for a publisher or an author: measured in one run, 'Penguin Books Ltd' covered 244,883 UK records and 'Stephen King' 569.
- Watch real availability rather than a yes/no flag: every edition carries a unit count, and 667,365 UK editions had at least a hundred copies on hand when measured.
Questions developers ask before integrating
Is World of Books a marketplace, and whose price am I reading?
It is a first-party store. World of Books Group buys, grades and resells every book itself, so there is one seller, one grading scale and one price per copy. Nothing in a response is another trader's offer, there is no buy-box, and there is no personal data on the source — the only seller is a company.
Can I look a book up by ISBN, and does ISBN-10 work?
Yes to both, and ISBN is a first-class key rather than a text search. Both ISBN-10 and ISBN-13 are indexed and both are returned on every book row. An ISBN-10 you pass in is converted arithmetically to the ISBN-13 the catalogue is keyed on, so 1408855658 and 9781408855652 resolve to the same record, and dashes and spaces are fine. Every check digit is verified before the call goes out, which means a typo comes back as a rejected input instead of as a book that does not exist. The isbn action takes up to twenty at once in a single request.
Which countries can I read, and does the country change the price or only the language?
Two storefronts: the United Kingdom in GBP and the United States in USD. These are the only two the site publishes, and the country changes the catalogue, the edition, the price, the stock and the currency — not the wording. Measured on 2026-10-08 for one Harry Potter ISBN, the UK store published GBP 3.70 over 1,855 units and the US store USD 3.48 over 875, and a keyword search for the title returned the UK Philosopher's Stone on one storefront and the US Sorcerer's Stone, a different ISBN, on the other. The 66 countries World of Books ships to are all served from one of those two catalogues.
How many copies does one book actually have, and is the stock number real?
Far more than a listing suggests, because the unit is the copy. Measured across ten editions on 2026-10-08, each resolved to between six and ten separate copies with three to five available at once, each copy carrying its own grade, its own price and the warehouse holding it. The stock figure on an edition is a real unit count rather than an in-stock flag: 816, 875 and 1,855 were all returned in the same run, and filtering for a hundred copies or more left 667,365 UK editions.
Why is the same copy a different price on the two storefronts?
Because a copy held in the other country is re-priced for that market, not converted. The same four UK-held used copies of one ISBN read GBP 3.70, 3.70, 3.70 and 3.78 on the UK storefront and a flat USD 10.00 on the US one — a ratio of 2.70 against the site's own published exchange rate of 1.32. So there is no arithmetic that gets you from one to the other, and guessing one from the other would be wrong. The API returns the storefront you asked for, names the warehouse country on every copy, and tells you whether that copy is buyable in that market. Where a copy has no price at all in the market you asked for, the price comes back null — never as 0.00, which is the literal value the source carries there.
Which filters actually work?
Only the ones measured to change the result against an unfiltered call in the same run, on both storefronts and against three different control queries. Working: keyword, author, publisher, the three-level category tree, cosmetic condition, binding, language, product type, a publication-year window, a price range, a minimum stock depth and four sort orders. Measured on the UK storefront against 6,900,135 editions in one run: Hardback left 1,664,480, French 37,091, a 50 floor 65,298, a 3 ceiling 533, a hundred-copy floor 667,365, Stephen King 569. An in-stock filter is deliberately NOT offered: the storefront already drops unpriced records from every search, so the filter moved the total by exactly zero. And the site's own theme advertises thirteen sort orders while only four have a live index behind them, so the other nine are not offered rather than failing at call time.
How deep can I page, and is the result total exact?
The result window is a thousand records per query and the API says so with the exact maximum page for your page size, because the source answers an out-of-window page with a success status and an empty body that looks like the end of the results. To reach deeper stock, narrow with a filter or sort by price. The total the source reports alongside your rows is its own estimate, not a count: it answered 7,175,501, 7,173,373 and 7,191,099 for the same query minutes apart, so it is published as total_estimate with a total_is_estimate flag. A narrow query is exact and the flag says so. The rows themselves are always exact.
What bibliography do I get — page count, publisher, edition?
Search rows carry the author, publisher, publication year and date, binding, language, the three-level category path, the series where the source has one, and both ISBNs. Detail adds the page count, the description the store prints, the full breadcrumb, the publisher's list price and the complete copy table. One thing to know: the catalogue and the product page use different vocabularies for two of these facts — the page says Hardcover where the catalogue facet says Hardback, and the page often names the publishing group where the catalogue names the imprint, Simon & Schuster against Scribner. Neither is wrong, so detail returns both under separate names rather than silently picking one, and the catalogue value is the one a search filter round-trips on.
Is the picture a photo of the copy I would receive?
No, and the store says so itself — the image is the edition's cover, and the page carries the note that the actual binding, cover or edition may vary. There is no per-copy photograph and no per-copy defect note on the source, so none is invented here; the grade is the condition information that exists.
Does the catalogue price always match the page?
Almost always, and where it does not the API tells you. Across twenty-four editions checked against the product page's own published offers, the catalogue's cheapest price matched the cheapest available copy twenty-three times. In the exception the catalogue quoted USD 2.50 while the page's cheapest available copy was 14.38 — the search index lagging one reprice. Detail returns both numbers and sets a flag with a named warning when they disagree, so the gap is visible rather than quietly averaged away.
Does World of Books sell anything other than books?
A little, and it matters for the identifiers. Measured on 2026-10-08 the catalogue held 8,222,289 books, 1,351 music releases, 785 DVDs and 168 games. On those non-book rows the catalogue puts an EAN or UPC in the ISBN-13 field and an Amazon ASIN in the ISBN-10 field, so the API publishes them as barcode_ean and asin and leaves the ISBN fields null, and it returns the director or artist where a book would have an author. Filter with product_type if you want books only.
What is the World of Books API?
World of Books API is a ReefAPI endpoint group for the uk's biggest second-hand bookseller as json: ~8 million used and new books searchable by isbn-10, isbn-13, author, publisher, category, binding, language, year, price and condition — then every physical copy on the shelf with its own grade, its own price and the warehouse holding it. It returns live JSON through POST requests under /worldofbooks/v1.
Is the World of Books API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. World of Books calls use the same shared credit balance as every other ReefAPI engine.
Do I need a World of Books login or account?
No login to World of Books 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.