# Libraccio API — live data from libraccio.it, Italy's big new and second-hand bookseller. Search about 1.16 million books, school textbooks and stationery by keyword, ISBN, author, publisher, series, department, school type, school subject, age band, year and price, and get for every EAN Libraccio's NEW price, the cover price, the discount, whether a USED copy is in stock and its used price — side by side. Price up to 50 ISBNs in one call, or open one book for its live new and used buy boxes, dispatch times, stock units, school-book voucher and full bibliography. Prices in EUR. No login, no API key.

> Search Libraccio's catalogue. Free text plus exact filters on author, publisher, series, department, school type and subject, character, product family, age band, publication year, new price, used price and new/used stock. One row per EAN with the NEW selling price, the cover price, the new discount, the USED price and its discount against cover, both stock flags, both dispatch times, the shop's own 30/90/180-day sales counters and the full bibliographic record. Every filter was measured to change the total in the same run; the result window is 10,000 hits per query and the engine says so instead of looping past it. Order is the shop's own relevance (no other sort exists on the public search backend).
> ReefAPI engine `libraccio` · 4 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/libraccio/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed calls are free except verified SHEIN NOT_FOUND on product/detail and price (4 credits).
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http). Send the key as `Authorization: Bearer <key>`, or put it in the URL (`?key=<key>`) when the client has no header field, as ChatGPT does.

## Endpoints

### POST https://api.reefapi.com/libraccio/v1/search — 1 credit
Search Libraccio's catalogue. Free text plus exact filters on author, publisher, series, department, school type and subject, character, product family, age band, publication year, new price, used price and new/used stock. One row per EAN with the NEW selling price, the cover price, the new discount, the USED price and its discount against cover, both stock flags, both dispatch times, the shop's own 30/90/180-day sales counters and the full bibliographic record. Every filter was measured to change the total in the same run; the result window is 10,000 hits per query and the engine says so instead of looping past it. Order is the shop's own relevance (no other sort exists on the public search backend).

**Parameters:**
- `query` (string, optional) — Free text over title, author, publisher, series and the EAN/ISBN itself, matched the way the shop's own search box matches it (typo-tolerant). Optional when a filter is given.
- `author` (string, optional) — Exact author name as the catalogue spells it (see `facets`).
- `publisher` (string, optional) — Exact publisher name as the catalogue spells it, e.g. 'Mondadori', 'Zanichelli', 'Giuffrè' (see `facets`).
- `series` (string, optional) — Publisher series ('collana'), exact spelling, e.g. 'Oscar bestsellers', 'Piccola biblioteca Adelphi'.
- `department` (string, optional) — Libraccio's own department ('reparto'), e.g. 'Narrativa', 'Libri per ragazzi', 'Diritto', 'Fumetti & graphic novels'.
- `school_type` (string, optional) — School type a textbook is adopted in ('Scuola primaria', 'Scuole medie inferiori', 'Liceo classico', ...).
- `school_subject` (string, optional) — Textbook subject ('materia'), e.g. 'Matematica', 'Storia', 'Inglese. Grammatica'.
- `character` (string, optional) — Franchise / character tag, e.g. 'Harry Potter', 'One Piece'.
- `product_type` (enum, optional) — Product family. 'school_book' is the textbook catalogue where the used offer is deepest. [one of: book, school_book, stationery, hardware]
- `age_band` (enum, optional) — Children's age band as the shop labels it ('da 6 anni' = from 6). [one of: 0-2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, young_adult]
- `used_in_stock` (boolean, optional) — true = only titles Libraccio has a USED copy of right now; false = only titles with no used copy.
- `new_in_stock` (boolean, optional) — The index's new-stock flag. Note: a title with false can still be orderable new from a supplier (3 of 6 measured) — `detail` gives the page's own wording.
- `min_price` (number, optional) — Minimum NEW selling price in EUR.
- `max_price` (number, optional) — Maximum NEW selling price in EUR.
- `min_used_price` (number, optional) — Minimum USED price in EUR (implies used_in_stock).
- `max_used_price` (number, optional) — Maximum USED price in EUR (implies used_in_stock).
- `year_min` (integer, optional) — Earliest publication year.
- `year_max` (integer, optional) — Latest publication year.
- `page` (integer, optional, default 1) — 1-based page. The source answers at most 10,000 hits per query, so the last page is 10,000 / per_page.
- `per_page` (integer, optional, default 20) — Rows per page, 1-100.
- `include_pii` (boolean, optional, default false) — Accepted for gateway compatibility. There is no personal data on this source: Libraccio is the only seller and it is a company.

**Returns:** books[]{ean, isbn13, isbn10, title, authors[], author_sort, editors[], translators[], publisher, series, department, subject, school_type, school_subject, characters[], age_band, age_band_label, product_type, year_published, year_edition, year_published_raw, date_published, currency, new_price, new_discount_pct, cover_price, cover_price_derived, new_in_stock, new_dispatch_days, used_in_stock, used_price, used_discount_pct_vs_cover, used_dispatch_days, used_saving_vs_new, rating, sales_30d, sales_90d, sales_180d, image_url, url} + seller{} + meta{total, total_is_exhaustive, returned, page, per_page, max_page, has_more, filters_applied{}, filter_check{}}

**Example request body:**
```json
{
  "query": "rodari",
  "used_in_stock": true,
  "per_page": 20
}
```

### POST https://api.reefapi.com/libraccio/v1/isbn — 1 credit
Price up to 50 ISBNs/EANs against Libraccio in ONE upstream request — new price, cover price, used price, both stock flags and dispatch days, plus the bibliographic record. ISBN-10s are converted to ISBN-13 and every check digit is verified first. The answer keeps your order and separates found, not carried by Libraccio, and invalid input.

**Parameters:**
- `isbns` (array, required) — Up to 50 ISBN-13 / ISBN-10 / EAN codes in ONE call, mixed freely. The answer keeps your order and separates found, not carried, and invalid.
- `include_pii` (boolean, optional, default false) — Accepted for gateway compatibility. There is no personal data on this source: Libraccio is the only seller and it is a company.

**Returns:** books[]{ean, isbn13, isbn10, title, authors[], author_sort, editors[], translators[], publisher, series, department, subject, school_type, school_subject, characters[], age_band, age_band_label, product_type, year_published, year_edition, year_published_raw, date_published, currency, new_price, new_discount_pct, cover_price, cover_price_derived, new_in_stock, new_dispatch_days, used_in_stock, used_price, used_discount_pct_vs_cover, used_dispatch_days, used_saving_vs_new, rating, sales_30d, sales_90d, sales_180d, image_url, url}, not_found[]{isbn, lookup_key}, invalid[]{isbn, reason} + meta{requested, found, not_found, invalid}

**Example request body:**
```json
{
  "isbns": [
    "9788807592867",
    "9788804772132",
    "9788828869269"
  ]
}
```

### POST https://api.reefapi.com/libraccio/v1/detail — 2 credits
Everything Libraccio's product page publishes for one EAN: title, authors, publisher, series, translator, school subject and type, edition and publication year, physical description and page count, category, full description. Then the two offers as the page shows them — the NEW buy box (price, crossed-out cover price, availability wording, whether it can be bought) and the USED buy box (price, reference cover price, availability) — with the cover price, the new discount, the saving of used against new and against cover, the school-book voucher Libraccio pays back, free-shipping flag, stock units for new and used and dispatch days, and the review count. Prices are cross-checked against the page's own product data and any disagreement is published.

**Parameters:**
- `ean` (string, required) — The `ean` every search row carries — or any ISBN-13 / ISBN-10 / 13-digit EAN, with or without dashes. ISBN-10 is converted to the 978 ISBN-13 the shop is keyed on; a wrong check digit is rejected before any request.
- `include_pii` (boolean, optional, default false) — Accepted for gateway compatibility. There is no personal data on this source: Libraccio is the only seller and it is a company.

**Returns:** ean, isbn13, isbn10, title, authors[], publisher, series, translator, editor, brand, supplier, school_subject, school_type, year_edition, year_published, physical_description, pages, category, description, image_url, url, currency, cover_price, new_price, new_discount_pct, new_offer{price, crossed_out_price, availability, button, buyable}, used_price, used_offer{...}, used_available, used_saving_vs_new, used_saving_vs_cover, school_voucher_eur, free_shipping_italy, preorder, hard_to_find, stock{new_units, used_units, new_status, used_status, new_sellable, used_sellable, new_dispatch_days, used_dispatch_days, preorder, raw}, rating_stars, review_count, ld_json_price, ld_json_availability, ld_json_offers[]{price, availability}, attributes{}, seller{}, price_disagreements[]

**Example request body:**
```json
{
  "ean": "9788807592867"
}
```

### POST https://api.reefapi.com/libraccio/v1/facets — 1 credit
The shape of the catalogue (or of one search) in one request: departments, publishers, authors, series, school types, school subjects, characters, product families, age bands, new/used stock split and years, each with a count, plus min/avg/max new and used price. Use it to get the exact spellings `search` filters take. Counts are index-wide and can exceed what `search` returns for the same filter (measured: stationery facet 16,430 vs search 6,756).

**Parameters:**
- `query` (string, optional) — Free text over title, author, publisher, series and the EAN/ISBN itself, matched the way the shop's own search box matches it (typo-tolerant). Optional when a filter is given.
- `department` (string, optional) — Libraccio's own department ('reparto'), e.g. 'Narrativa', 'Libri per ragazzi', 'Diritto', 'Fumetti & graphic novels'.
- `product_type` (enum, optional) — Product family. 'school_book' is the textbook catalogue where the used offer is deepest. [one of: book, school_book, stationery, hardware]
- `top` (integer, optional, default 20) — How many values to return per facet (by count).
- `include_pii` (boolean, optional, default false) — Accepted for gateway compatibility. There is no personal data on this source: Libraccio is the only seller and it is a company.

**Returns:** departments[], publishers[], authors[], series[], school_types[], school_subjects[], characters[], product_types[], age_bands[], new_in_stock{}, used_in_stock{}, years[], price_stats{new, used} + meta{total, counts_are_index_wide}

**Example request body:**
```json
{
  "top": 20
}
```

## At scale
- **Volume:** 5M+ requests a day, measured at 60 requests a second across the fleet with no
  central bottleneck. Per-key limits are raised for high-volume accounts; volume pricing on request.
- **Missing a source:** tell us a site we do not cover and it becomes an engine. A customer asked
  for bestprice.gr on 21 Sep 2026 and it was in the catalog on 22 Sep.
- **Support:** 2 minute median time from a question in the live chat to the first answer. Setup
  help included, no support tier to buy.
- **One key, one credit pool** across every API. No per-site plans, no separate subscriptions.

## More
- Try it live, no code: https://reefapi.com/playground?engine=libraccio
- Human docs page: https://reefapi.com/docs/libraccio
- Overview page: https://reefapi.com/libraccio-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
