Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Reverb API page →
docs / reverb

Reverb

Musical instrument marketplace: guitars, synths, pedals and amps with prices in USD, condition grades and per-model price floors.

base /reverb/v110 endpoints
post/reverb/v1/listing1 credit

One listing in full: everything a search row carries plus the seller's city and country, the shipping rate to every region it ships to, how many people have viewed and watched it, the offer count, the return and shipping policy, whether it is sold as-is, and the model id that links it to Reverb's model page.

ParameterAllowed / rangeDescription
listing_idrequiredThe numeric Reverb listing id (98282577), the id-slug form (98282577-fender-stratocaster-…) or a reverb.com/item/… URL. Every search row carries the id and the URL.
Try in playground →
post/reverb/v1/shop1 credit

One seller's record by slug: name, city and country, whether Reverb marks them a Preferred Seller / quick shipper / quick responder, their feedback count and rating, their shipping and payment policy, and whether the shop is on vacation.

ParameterAllowed / rangeDescription
shoprequiredThe shop slug as it appears in reverb.com/shop/<slug>, or the full shop URL. Search rows carry it as `shop_slug`.
Try in playground →
post/reverb/v1/shop/listings3 credits

One seller's whole inventory, paged — the same rows as `search`, plus the shop record when you addressed it by slug. This is how a dealer's catalogue is mirrored: a shop with 603 listings is 13 calls at 50 rows a page.

ParameterAllowed / rangeDescription
shopoptionalThe shop slug. Costs one extra upstream call to resolve the slug to the numeric id the marketplace filter needs; pass `shop_id` instead to skip it.
shop_idoptionalThe numeric shop id, from a search row or from `shop`. One of `shop` / `shop_id` is required.
queryoptionalOptional keyword to search inside this seller's inventory.
conditionoptionalnew · b-stock · mint · excellent · very-good · good · fair · poor · non-functioning · usedCondition grade(s), same enum as search.
price_minoptional0–Lowest price in US dollars.
price_maxoptional0–Highest price in US dollars.
product_typeoptionalDepartment slug, same values as search.
sortoptionalprice_asc · price_desc · newestSame three orders as search.
page = 1optional1–1-based page number. The source prints `total_pages: 50` on every envelope no matter how large the result is — that cap is cosmetic and this API ignores it: pages 51, 60, 100 and 200 all return real, distinct rows. Read `total_pages` from this response, which is computed from `total`.
limit = 24optional1–50Rows per page, 1-50. 50 is the source's own ceiling; it clamps anything larger instead of refusing it, so this API clamps it too and tells you in `limit`.
Try in playground →
post/reverb/v1/models2 credits

Reverb's MODEL pages — one row per instrument model rather than per listing, each with the lowest live asking price for a NEW one, the lowest for a USED one, and how many of each are for sale. This is the closest thing Reverb publishes to a price guide, and it is a snapshot of asks, not of completed sales. 78 791 models are browsable with no keyword at all.

ParameterAllowed / rangeDescription
queryoptionalA model or family name. Omit it to walk the whole model catalogue.
makeoptionalBrand name(s). 'les paul' 1 387 models → 799 for Gibson.
product_typeoptionalDepartment slug, same values as search (935 of the 1 387).
category_uuidoptionalSub-category uuid from `categories` (919 of the 1 387).
year_minoptional1800–2100Earliest model year.
year_maxoptional1800–2100Latest model year.
page = 1optional1–1-based page number. The source prints `total_pages: 50` on every envelope no matter how large the result is — that cap is cosmetic and this API ignores it: pages 51, 60, 100 and 200 all return real, distinct rows. Read `total_pages` from this response, which is computed from `total`.
limit = 24optional1–50Rows per page, 1-50. 50 is the source's own ceiling; it clamps anything larger instead of refusing it, so this API clamps it too and tells you in `limit`.
Try in playground →
post/reverb/v1/model/detail1 credit

One model page by numeric id: the lowest new and used asking price, the live count of each, Reverb's own star rating and review count for the model, the description and the image.

ParameterAllowed / rangeDescription
model_idrequiredThe numeric model id, from a `models` row (`model_id`) or from a listing's `model_id`. 🔴 The model's slug does NOT work as an id — the source answers 404 for it. Use `models` to look one up by name.
Try in playground →
post/reverb/v1/model/listings3 credits

Every live listing OF one model, not merely matching its name — Reverb keeps a list of the exact product variants behind each model page and this action uses it, so a search for 'Fender American Professional II Stratocaster' that would return 76 000 loose matches returns the 574 that really are one. Two upstream calls: the model page, then its listings.

ParameterAllowed / rangeDescription
model_idrequiredThe numeric model id, from a `models` row (`model_id`) or from a listing's `model_id`. 🔴 The model's slug does NOT work as an id — the source answers 404 for it. Use `models` to look one up by name.
conditionoptionalnew · b-stock · mint · excellent · very-good · good · fair · poor · non-functioning · usedCondition grade(s) — this is how you read only the used market for one model.
price_minoptional0–Lowest price in US dollars.
price_maxoptional0–Highest price in US dollars.
sortoptionalprice_asc · price_desc · newestSame three orders as search.
page = 1optional1–1-based page number. The source prints `total_pages: 50` on every envelope no matter how large the result is — that cap is cosmetic and this API ignores it: pages 51, 60, 100 and 200 all return real, distinct rows. Read `total_pages` from this response, which is computed from `total`.
limit = 24optional1–50Rows per page, 1-50. 50 is the source's own ceiling; it clamps anything larger instead of refusing it, so this API clamps it too and tells you in `limit`.
Try in playground →
post/reverb/v1/categories1 credit

Reverb's whole category tree, flattened: 320 categories with the uuid that `search` and `models` take as `category_uuid`, the department slug that `product_type` takes, and the human name. One call, and it barely changes.

ParameterAllowed / rangeDescription
product_typeoptionalOnly the sub-categories of this department.
queryoptionalOnly categories whose name contains this text.
Try in playground →
post/reverb/v1/conditionsfree

The condition grades Reverb uses, with the slug each filter takes and Reverb's own definition of the grade. 🔴 Note that Brand New's slug is `new`, not `brand-new`.

Try in playground →
post/reverb/v1/brand1 credit

One brand record by slug: its Reverb id, its canonical name — which is the spelling the `make` filter wants — and its header images. There is no brand INDEX to walk: the source's `/brands` route answers with an empty list whatever you ask it.

ParameterAllowed / rangeDescription
brandrequiredThe brand slug as it appears in reverb.com/brand/<slug> — lowercase, hyphenated ('fender', 'gibson', 'electro-harmonix').
Try in playground →