Estante Virtual API

Every used copy on Estante Virtual — price, condition note, sebo and city

The Estante Virtual API returns estantevirtual.com.br — Brazil's largest marketplace for used and new books, where thousands of independent sebos and bookshops list their copies — as clean JSON in six actions: search, offers, book, offer, seller and shipping.

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a Estante Virtual endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
E
/estante-virtual/v1

6 active endpoints, on 2 and 3 credit tiers.

  • POST/estante-virtual/v1/search
  • POST/estante-virtual/v1/offers
  • POST/estante-virtual/v1/book
  • POST/estante-virtual/v1/offer
  • POST/estante-virtual/v1/seller
  • POST/estante-virtual/v1/shipping

What Estante Virtual endpoints does ReefAPI ship?

6 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

6 endpoints

search

2 cr

Search Estante Virtual's catalogue.

required
—
optional
query, isbn, condition, author, publisher, year, city, seller, category, language, min_price, max_price, sort, page, facets_top, include_pii

offers

2 cr

Every copy of one edition in one condition (used by default).

required
book_id
optional
book_id, condition, city, seller, year, min_price, max_price, sort, page, per_page, facets_top, include_pii

book

3 cr

One edition.

required
book_id
optional
book_id, facets_top

offer

3 cr

One copy as its page publishes it.

required
offer_id
optional
offer_id, include_seller

seller

3 cr

One sebo's public page.

required
seller
optional
seller, page

shipping

3 cr

Shipping quote for one copy to one Brazilian CEP, as the copy page computes it.

required
offer_id, cep
optional
offer_id, cep

Every parameter, every allowed value →

Estante Virtual API

4 of 6 endpoints, ready to run

View docs ↗

Editions by keyword, ISBN or filter — lowest price, used and new copy counts, author, publisher, year and synopsis, 44 per page, with the facet values every filter takes.

2 credits0 required · 7 optional
POST/estante-virtual/v1/search
idle
// 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 Estante Virtual API works

Estante Virtual is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 491 engines.

02
Call
POST /estante-virtual/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
2 or 3 credits per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

From an ISBN to the cheapest used copy you can ship to your city

Four calls take a bookseller or a buyer from a barcode to a priced, located, shippable copy.

01search · isbn=9788516096892
POSTsearch · isbn=9788516096892

One edition: book_id 57A-2294-000-BK, lowest price 19.00, 47 used and 10 new copies.

02offers · book_id=57A-2294-000-BK · condition=usado · sort=lowest-first
POSToffers · book_id=57A-2294-000-BK · condition=usado · sort=lowest-first

The used copies cheapest first, each with the seller's condition note, plus the sebos and cities holding them.

03offer · offer_id=TAP-0857-000
POSToffer · offer_id=TAP-0857-000

The cheapest copy's sebo: Armazém do Livro Usado, Brasília/DF, 2,343 reviews, 98 % recommend; 405 g, 23 × 18 × 5 cm.

04shipping · offer_id=TAP-0857-000 · cep=01310-100
POSTshipping · offer_id=TAP-0857-000 · cep=01310-100

17.20 BRL, 10 days to São Paulo.

The cheapest used copy of the edition, who sells it and from where, and what it costs delivered — read from the site at call time.

request
curl -X POST https://api.reefapi.com/estante-virtual/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"machado de assis","condition":"usado"}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "estante-virtual",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

Edition, copy, sebo — what each id opens

Estante Virtual groups copies under an edition. The API keeps the three levels apart. Example values are live readings from 2026-10-14 (Dom Casmurro, Moderna, ISBN 9788516096892).

idwhat it isexamplewhere it comes from
book_idan edition (one ISBN), ends with -BK57A-2294-000-BK: lowest price 19.00, 47 used + 10 new copiessearch rows; opens with book and offers
offer_idone copy offered by one seboTAP-0857-000: 19.00, used, 'páginas levemente amareladas, brochura; 247p.'offers rows, book's cheapest copy, seller inventory; opens with offer and shipping
seller (slug)one seboarmazem-do-livro-usado: Brasília/DF, 2,343 reviews, 98 % recommend, 72,069 copies listedoffer's seller.slug or offers facets; opens with seller

Prices are in BRL. The edition's lowest_price is the cheapest copy in any condition; book returns the cheapest copy for used and for new separately, with the sebo that sells it.

What Estante Virtual publishes — measured on 2026-10-14

Every row below came from live calls, including the ones that go against us.

Market

Brazil, prices in BRL. Thousands of independent sebos and bookshops; used and new copies.

Editions and copies

search returns editions (one per ISBN) with used and new copy counts; offers returns the copies. Dom Casmurro alone: 4,330 editions for the title search, 47 used + 10 new copies of one Moderna edition.

Prices

Lowest price per edition matched the cheapest copy on 6 of 6; cheapest per condition 11 of 11; copy price vs its page 7 of 7. The copy list trailed the page by one cent on 1 of 7.

Sebo per copy

Named on the copy's page (offer), not in the copy list; the list gives the edition's sebo and city breakdown with counts. Sebo name matched the page's structured data 7 of 7; city 6 of 6 against the site's own city filter.

Edition fields

Publisher, year and author on an edition row come from one featured copy as its seller typed them; placeholders such as 'sem cadastro' are returned as null.

Paging

Search: 44 editions per page, at most 10,000 rows per query (last page 228). Copies: 1-40 per page.

Shipping

Quoted per destination CEP: same copy 17.20 BRL in 10 days to São Paulo, 25 days to Manaus.

Speed

Median per call over two acceptance runs: search 1.6-2.7 s, offers 1.3-2.0 s, seller 1.1-2.1 s, book 4.3-4.4 s, shipping 4.0-4.6 s, offer 5.5-7.1 s (offer reads two pages). Slowest single call 12.0 s.

What people build with Estante Virtual

The jobs this data is most often used for.

6

endpoints

2/3

credits per call

01

Price a used book in Brazil: search by ISBN, then list its used copies sorted by price with each seller's condition note.

02

Find a copy close to the buyer: filter offers or search by the sebo's city (Fortaleza, Belo Horizonte, São Paulo…) and quote shipping to the buyer's CEP.

03

Monitor a sebo: read its rating, review count and inventory total, and page through its listed copies forty at a time.

04

Build an out-of-print and rare-book tracker: search by author and year (machado de assis + 1899 returns 10 editions) and follow their copies and prices.

What Estante Virtual data costs

The cheapest call here is 2 credits, so $15/mo (Pro) buys 5,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 →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 491 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
curl -X POST https://api.reefapi.com/estante-virtual/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"machado de assis","condition":"usado"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/estante-virtual/v1/search",
    headers={"x-api-key": REEF_KEY},
    json={
  "query": "machado de assis",
  "condition": "usado"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Estante Virtual.

Get a free key →
Does every copy come with the name of the sebo selling it?▾

Not in the copy list — the site itself only names the sebo on each copy's own page. offers returns, for the edition, every sebo and city that has a copy with its count, and lets you filter the list by city or by sebo. offer opens one copy and returns its sebo with id, name, slug, city, state, rating and since-date. On 7 of 7 copies checked the sebo name matched the page's own structured data, and on 6 of 6 the sebo's city matched the site's city filter.

How do I search by ISBN?▾

Pass isbn with an ISBN-13 or ISBN-10, dashes allowed. The site indexes the 13-digit form: a 10-digit ISBN returns nothing there, and a hyphenated one is split into hundreds of thousands of loose hits (928,684 measured). The API converts and cleans it first, so 978-85-16-09689-2 and 8516096890 both return the one edition.

Which filters work, and how much do they narrow?▾

All of the ones offered, each measured against an unfiltered call in the same run. On 'machado de assis' (32,562): condition used 26,839 · author 19,792 · publisher Moderna 349 · year 2015 163 · city Fortaleza 363 · one sebo 141 · category Literatura Brasileira 19,194 · language English 79 · price 10-20 BRL 17,908. On one edition's 47 used copies: city 7, one sebo 3, price 10-25 BRL 12, year 2025 12. An unknown parameter name is rejected, not ignored.

Why does an edition row sometimes show a different publisher or year than I filtered for?▾

Because the site prints one featured copy's details on the edition row, and sellers type those details themselves — often 'sem cadastro', which the API returns as null. A publisher or year filter matches any copy of the edition. The API reports this in meta.filter_check: 1 of 44 rows on a publisher filter and 2 of 10 on a year filter showed a different featured copy. The copy-level fields in offers are each copy's own.

How far can I page?▾

Search pages hold 44 editions and the site serves at most 10,000 rows per query, so page 228 is the last one; the API returns last_page and has_more and rejects pages beyond it. Copy lists take 1 to 40 per page: larger pages are not offered because the site silently drops copies above 40 (a 47-copy edition came back with 42).

Is the shipping quote for my address?▾

Yes — shipping takes the destination CEP and returns the site's own quote: service, price, delivery days and dates. The same copy quoted 17.20 BRL in 10 days to São Paulo (01310-100) and 17.20 BRL in 25 days to Manaus (69005-000). The site gives no quote without a CEP, so the CEP is required.

Are the prices the ones on the site?▾

Yes, read from the site and converted from cents to BRL. The edition's lowest price equalled the cheapest copy on 6 of 6 editions; the cheapest used and new copy per edition matched on 11 of 11; a copy's price matched its page and its structured data on 7 of 7. The copy list price trailed the copy page by one cent on 1 of those 7 (19.89 vs 19.90) — offer reads the live page. Search copy counts matched the copy list on 5 of 6 editions and were one copy ahead on the sixth.

What does the seller call return?▾

What the sebo's public page carries: name, description, city, state and address, business phone and e-mail as published, pickup points, shipping methods, the date it joined, the seller's tax id as the page carries it — tax_id with tax_id_type cnpj for a company or cpf for an individual seller (format 00.000.000/0000-00 or 000.000.000-00) — rating average, review count, percent recommended, the latest reviews, the inventory total and one page of 40 listed copies.

What is the Estante Virtual API?▾

Estante Virtual API is a ReefAPI endpoint group for brazil's largest used-book marketplace as json: search editions by isbn, author, city or sebo, list every copy with its price and condition note, see which sebo sells it and where, and quote shipping to any cep. It returns live JSON through POST requests under /estante-virtual/v1.

Is the Estante Virtual API free to try?▾

Yes. ReefAPI starts with 1,000 free credits, no card required. Estante Virtual calls use the same shared credit balance as every other ReefAPI engine.

Do I need an Estante Virtual login or account?▾

No login to Estante Virtual 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 Estante Virtual 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 Estante Virtual API use?▾

Estante Virtual actions currently cost 2-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

Can I call Estante Virtual from an AI assistant or MCP client?▾

Yes. Connect ReefAPI once through MCP and your assistant can call estante-virtual actions with the same key, credit pool and JSON envelope used by normal REST requests.

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.

0/4000

No account needed · we reply from [email protected]

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 490 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-14.