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

Selency

Selency

base /selency/v17 endpoints
post/selency/v1/detail2 credits

One listing in full, from selency's own keyless product API: the seller's description in BOTH languages (one call returns both), every photo, the material / colour / style / designer records with their own slugs and labels, width, height and depth in centimetres and weight in kilogrammes, the full price block (list, current, pro-buyer, the seller's pre-agreed reserve where it exists, the marketplace fee and the seller payout), the category with its ancestors, the seller's shop record including whether it is a registered business or a private individual, and — kept strictly separate from the price — the delivery grid the seller published, with each offer stamped with the destination it is priced for.

ParameterAllowed / rangeDescription
idrequired—The listing's SKU as the URL shows it (H5H72TBH), its internal id, or the full product URL. A delisted or unknown listing answers a clean NOT_FOUND.
language = enoptionalen · frWhich of selency's two published locales to read. Both carry the SAME listings at the SAME price in EUR — verified field by field on 8 listings read from both indices in the same minute — so this only changes the language of titles, descriptions, category names and material/style labels, plus the language of the delivery labels. The French index is the complete one: it carried 335,938 listings against the English index's 335,860 (a 78-row, 0.02% lag).
include_delivery = trueoptional—Also return the per-listing delivery grid. The prices in it are the seller's own per-destination figures and do NOT depend on where this call is made from (verified byte-identical from six exit countries). selency's own carrier option publishes no price and comes back as null, not 0.
include_breadcrumb = trueoptional—Also return the listing's full category path.
include_story = falseoptional—Also return selency's editorial 'story' record (history, tips, fact). Usually empty: it exists for curated pieces only.
include_seller_stats = trueoptional—Also return the seller's rating, review count, live and sold counts and days open.
include_pii = falseoptional—Kept for contract compatibility. It changes nothing here: selency publishes a marketplace display name that it has already reduced to a first name and a surname initial, plus a shop country and rating aggregates, and no personal contact detail at all — so there is nothing to hold back.
Try in playground →
post/selency/v1/similar2 credits

The listings selency itself considers closest to a given one, with its own similarity distance on each. This is the practical substitute for comparable sold prices on a source where every piece is unique and nothing is kept after it sells: it answers 'what else like this is on the market, and at what price'. The source caps the set at 20 and reports `total: 20` whatever the real number is, so that cap is declared rather than passed off as a count.

ParameterAllowed / rangeDescription
idrequired—The listing's SKU, internal id, or product URL.
language = enoptionalen · frWhich of selency's two published locales to read. Both carry the SAME listings at the SAME price in EUR — verified field by field on 8 listings read from both indices in the same minute — so this only changes the language of titles, descriptions, category names and material/style labels, plus the language of the delivery labels. The French index is the complete one: it carried 335,938 listings against the English index's 335,860 (a 78-row, 0.02% lag).
include_pii = falseoptional—Kept for contract compatibility. It changes nothing here: selency publishes a marketplace display name that it has already reduced to a first name and a surname initial, plus a shop country and rating aggregates, and no personal contact detail at all — so there is nothing to hold back.
Try in playground →
post/selency/v1/categories1 credit

selency's own category tree — 9 roots, 65 second-level and 126 third-level nodes — with each node's French and English name AND slug side by side, its parent, its examples text and its image. This is where the `category` parameter's values come from, and why that parameter never has to be guessed: the source answers an unknown category value with HTTP 200 and zero rows rather than an error.

ParameterAllowed / rangeDescription
language = enoptionalen · frWhich of selency's two published locales to read. Both carry the SAME listings at the SAME price in EUR — verified field by field on 8 listings read from both indices in the same minute — so this only changes the language of titles, descriptions, category names and material/style labels, plus the language of the delivery labels. The French index is the complete one: it carried 335,938 listings against the English index's 335,860 (a 78-row, 0.02% lag).
categoryoptional—Return only this branch (a slug in either language, or a category id). Omit for the whole tree.
depth = 3optional1–3How many levels to return. The source's tree is exactly 3 deep.
include_pii = falseoptional—Kept for contract compatibility. It changes nothing here: selency publishes a marketplace display name that it has already reduced to a first name and a surname initial, plus a shop country and rating aggregates, and no personal contact detail at all — so there is nothing to hold back.
Try in playground →
post/selency/v1/facets1 credit

The source's own filter values with its own counts, for any scope you can search — the whole catalogue, a category, a free-text query, or any combination of the search filters. Use it to discover the 200+ filterable designer names, the 94 French departments, the 51 materials or the price range inside a category before you search. ⚠️ The counts are selency's own counters and they are exact only while the set is small: measured against the number of rows the same filter actually returns, they agreed to the row on 19 of 26 country filters (up to 7,248 rows) and then drifted by up to 13.5% above roughly 10,000 — so treat a large count as an estimate.

ParameterAllowed / rangeDescription
facetoptionalbatch_quantity · category_level1 · category_level2 · category_level3 · collection · color · country · department · designer · material · price · quality_mark · region · seller · seller_rating · style · widthWhich filter dimensions to describe. Default: category_level1, style, material, color, country, designer, quality_mark and price. `price` and `width` come back as min/max/avg statistics rather than a value list.
queryoptional—Scope the counts to a free-text search.
language = enoptionalen · frWhich of selency's two published locales to read. Both carry the SAME listings at the SAME price in EUR — verified field by field on 8 listings read from both indices in the same minute — so this only changes the language of titles, descriptions, category names and material/style labels, plus the language of the delivery labels. The French index is the complete one: it carried 335,938 listings against the English index's 335,860 (a 78-row, 0.02% lag).
categoryoptional—Category, as a slug from the categories action — a root (furniture, seating, lighting, decor, tableware, art, linens-soft-furnishings, garden-accessories, kids / meubles, chaises, eclairer, decorer, art-de-la-table, art, linge-de-maison, mobilier-de-jardin-terrasse, kids-enfant-vintage), or any of the 65 second-level or 126 third-level slugs (coffee-table, bedside-lamp-and-table-lamp, plaster-bust ...). Either language's slug is accepted and a numeric category id works too. Repeatable: several categories are OR-ed. Resolved against selency's own tree before the search is sent, because the source answers an unknown value with HTTP 200 and ZERO rows rather than an error.
styleoptionalvintage · classic · world-s-craft · scandinavian · art-deco · design · contemporary · mid-century · industrial · modernist-bauhaus · bohemia · brutalist · space-age · art-nouveau · seventies · memphisScope the counts to these styles.
materialoptionalwood · ceramics-porcelain-and-earthenware · glass-and-crystal · wool-cotton · metal · linen · brass · paper · oak · teak · fabric · chrome · canvas · leather · rattan-and-wicker · iron · plastic · walnut · silver-plated-metal · aluminium · opaline · bronze · mahogany · bamboo · terracotta · marble · stone-and-plaster · stainless-steel · rosewood · velvet · plexiglass · resin · silver-material · leatherette · copper · fiberglass · melting · travertine · granite · bakelite · enamelled-sheet · formica · jute · rope · concrete · skin · slate · elm-burl · zinc · feather · terrazoScope the counts to these materials.
coloroptionalmulticolour · wooden · brown · white · transparent · black · golden · beige · blue · silver · green · red · grey · orange · pink · yellow · printed · ecru · burgundy · purple · turquoise · midnight-blue · terracottaScope the counts to these colours.
designeroptional—Scope the counts to these designers.
countryoptionalFR · NL · BE · PL · IT · DE · TR · CZ · MA · ES · GB · DK · HU · SI · SE · AT · SK · PT · CH · MC · LU · LV · RO · US · TN · GE · LT · IE · NO · FI · EE · IN · GR · BGScope the counts to these seller countries.
departmentoptional—Scope the counts to these French departments.
regionoptionalIle-de-FranceScope the counts to the source's single region value.
collectionoptionalProduits a 200 ballesScope the counts to a curated collection (language=fr).
quality_markoptionalexcellent · good · basicScope the counts to these listing-quality grades.
min_priceoptional0–Scope the counts to this price floor in EUR.
max_priceoptional0–Scope the counts to this price ceiling in EUR.
negotiableoptional—Scope the counts to negotiable listings.
discountedoptional—Scope the counts to discounted listings.
pro_selleroptional—Scope the counts to professional sellers.
max_values = 100optional1–1000How many values per facet. The source's own cap is 1,000; the designer facet needs more than 200 to be complete.
include_pii = falseoptional—Kept for contract compatibility. It changes nothing here: selency publishes a marketplace display name that it has already reduced to a first name and a surname initial, plus a shop country and rating aggregates, and no personal contact detail at all — so there is nothing to hold back.
Try in playground →
post/selency/v1/seller2 credits

A seller's public shop record: whether it is a registered business (with its company registration number) or a private individual, the country it ships from, its ambassador and trade-programme status, how long it has been open, its rating, review count and live and sold listing counts — and optionally its current listings and the reviews buyers left. Selency publishes a display name it has already reduced to a first name and a surname initial, and no address, phone or e-mail anywhere on this surface.

ParameterAllowed / rangeDescription
idrequired—Shop id — either the id a listing's `seller.shop_id` carries, the UUID the detail action returns, or the id in a /shops/... URL. All three forms are accepted.
language = enoptionalen · frWhich of selency's two published locales to read. Both carry the SAME listings at the SAME price in EUR — verified field by field on 8 listings read from both indices in the same minute — so this only changes the language of titles, descriptions, category names and material/style labels, plus the language of the delivery labels. The French index is the complete one: it carried 335,938 listings against the English index's 335,860 (a 78-row, 0.02% lag).
include_listings = trueoptional—Also return the shop's current listings.
include_reviews = falseoptional—Also return the reviews buyers left, with rating, comment, date and the listing they refer to. The buyer's surname is in the source's payload and is not forwarded — buyer identity is out of scope for this API.
page = 1optional1–100001-based page. The reachable window is 10,000 rows per ordering: past it the source returns an EMPTY page rather than repeating its last one (measured: with 100 rows per page, page 99 is full and pages 100, 101 and 120 are all empty), and meta.stop_reason says window_reached. To go deeper, narrow the filters or change `sort`.
page_size = 20optional1–100Rows per page, 1-100. The source honours up to 1,000 (3.44 MB raw) and clamps there; this engine caps at 100 (347 KB raw, 0.6 s) to stay inside the gateway's request budget.
include_pii = falseoptional—Kept for contract compatibility. It changes nothing here: selency publishes a marketplace display name that it has already reduced to a first name and a surname initial, plus a shop country and rating aggregates, and no personal contact detail at all — so there is nothing to hold back.
Try in playground →
post/selency/v1/suggest1 credit

selency's own query suggestions — 29,301 of them — each with the popularity the source assigns it and the catalogue page it points at. This is the source's real demand signal: what people actually type, in its own words, per language.

ParameterAllowed / rangeDescription
queryoptional—Prefix or term to complete. Omit for the most popular suggestions overall.
language = enoptionalen · frWhich of selency's two published locales to read. Both carry the SAME listings at the SAME price in EUR — verified field by field on 8 listings read from both indices in the same minute — so this only changes the language of titles, descriptions, category names and material/style labels, plus the language of the delivery labels. The French index is the complete one: it carried 335,938 listings against the English index's 335,860 (a 78-row, 0.02% lag).
page_size = 20optional1–50How many suggestions to return, 1-50.
include_pii = falseoptional—Kept for contract compatibility. It changes nothing here: selency publishes a marketplace display name that it has already reduced to a first name and a surname initial, plus a shop country and rating aggregates, and no personal contact detail at all — so there is nothing to hold back.
Try in playground →
Built for volume
5M+ requests a day

Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.

Missing a source?
We build it

Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.

Support
2 minute median reply

Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.

One key, one balance
Every API included

No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.

Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.