Beta

The Partner Trading API v1 is in beta — endpoints and response shapes may still change.

Developers
Cru World Wine
API v1 · REST & MCP
Market data

List offers on one wine

Every offer on one wine, by LWIN18, cheapest first, as a single market: the offer book’s shape and filters, without paging.

GET/market/wines/{lwin18}/offersLIVE
Required scopemarket:readAuthentication requiredTry it

Path parameter

REQUIRED
lwin18string · 18 digitsThe wine’s LWIN18. Find one by name with GET /wines.

Query parameters

ALL OPTIONAL
PARAMETERDESCRIPTION
min_priceinteger · ≥ 0 Lowest price to include, inclusive, in whole units of the market’s currency — 1200 is 1,200.00. Compared with the gross offer price.
max_priceinteger · ≥ 0 Highest price to include, inclusive, in whole units of the market’s currency — 1200 is 1,200.00. Compared with the gross offer price.
depthinteger · ≥ 1 How many offers to return per wine, cheapest first. Omit it for every offer. Default: every level
include_market_priceboolean Add market_price — Cru’s market price for the wine, as a number — to each wine. Default: false
include_last_tradeboolean Add last_trade — the last traded price and when — to each wine. Default: false
No offers is an empty list, not a 404

When the wine has no offers — or your filters remove them all — the answer is 200 with offers: [], and the wine is still described. Only a wine Cru does not know is NOT_FOUND / 404.

Refreshed by Cru’s market index

Offers, with their status and eta, come from the same index as the offer book, so they can trail the live market. Re-read an offer before acting on it.

Response fields

200 OK

data.market is one market, exactly as an item of the offer book.

lwin18string

The 18-digit LWIN: wine, vintage and pack together. Match on all 18 digits.

wine_namestring | null

Cru’s name for the wine.

vintageinteger | null

The vintage year. 1000 means non-vintage.

pack_sizestring | null

Pack format, for example 6x75cl.

product_urlstring | null

The wine’s page on the Cru storefront for the market you called.

currencystring

ISO 4217 currency of every price in this market: the currency of the market you called.

market_pricenumber | null · optional

Only with include_market_price=true: Cru’s market price, in currency. Null when Cru has no price for the wine.

last_tradeobject | null · optional

Only with include_last_trade=true: price, and traded_at. Null when there is none.

Each item in offers[]

codestring

Opaque offer code: OFFER- and 43 more characters. Do not parse it.

pricenumber

Gross price per unit — what a buyer pays — in the market’s currency.

quantityinteger

Units on offer at this price.

min_quantityinteger

The fewest units that can be bought from this offer — almost always 1. A smaller purchase is refused.

statusstring

in_stock, in_transit or due_in, as the Cru product page shows it. Offers from other sellers and venues are always due_in, except a customer’s own stock already in Cru storage, which is in_stock.

etadate | null

YYYY-MM-DD: when the wine is expected in warehouse_code, the warehouse it is sold from and where a purchase is kept. Today for in_stock. Null until Cru’s market index has dated the offer.

duty_paidboolean

Whether duty has been paid on the wine.

condition_statusstring | null

verified (Verified), client_reserves (Client Reserve) or apd (As per description), strongest first. API conventions explains each.

condition_textstring | null

The written condition of As per description and Client Reserve stock, or null. Liv-ex and supplier offers never have one.

photo_urlsarray<string>

Photos of the wine, [] when there are none. Cru’s own stock links to Cru’s media; other photos are served by GET /photos/{id}.

warehouse_codestring | null

The Cru warehouse the wine is in — UK_DRAK, HK_KERRY, SG_TOLL, FR_DARTESS, US_NAPA — or for wine held elsewhere the one in its country. Null where Cru has none there.

Errors

A wine Cru does not know returns NOT_FOUND / 404, and an LWIN18 that is not 18 digits VALIDATION_INVALID_VALUE / 422. The bid book’s filters, landed_stock_only and deliverable_warehouse, return VALIDATION_UNKNOWN_PARAMETER / 400 here. A depth, min_price or max_price that is not a whole number in range returns VALIDATION_INVALID_VALUE / 422, and a include_market_price or include_last_trade other than true or false VALIDATION_UNSUPPORTED_VALUE / 422. Missing or invalid credentials return AUTH_INVALID_CREDENTIALS / 401. A credential without market:read gets AUTH_INSUFFICIENT_SCOPE / 403. View all error codes →

UP NEXT Retrieve a photo

API credentials

Enter the client key and secret issued by Cru. They are kept for this browser tab’s session — a reload keeps them, closing the tab or clearing them ends them.

Credentials are never included in copied examples, and are redacted from anything the console prints back.

Request API access

Tell us who you are and what you want to build. Cru issues a client key and secret for your organisation, scoped to what you need.

Markets you trade in (choose one or more)

We use what you send here to reply about API access, and for nothing else. Cloudflare Turnstile checks the form for bots (privacy policy).