Beta

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

Developers
Cru World Wine
API v1 · REST & MCP
Your offers

List wine for sale

Prepares a new offer, of the stock_type given. "cru" is wine stored with Cru: a line of the customer's portfolio that is not listed yet (portfolio_id, from get_my_portfolio), of which quantity units go on sale at an asking price per unit they choose; they receive it less Cru's commission, and removing it only takes it off sale. "external" is wine the customer holds outside Cru (their own storage), at an asking price per unit they choose, sold through one of Cru's warehouses (warehouse_code); it stays on sale until a buyer takes it or it is removed, and removing it also takes it out of the customer's Cru portfolio. Only customers Cru has set up to sell wine held outside Cru can list it. "supplier" is a supplier's own stock, for a supplier whose offer feed Cru imports: price is what the supplier receives per unit (buyers pay Cru's price), it is sold from the supplier's warehouse, and the supplier's next offer feed import to Cru replaces it, as it replaces all their offers. The result's offer is the wine as list_my_listings gives it, with only the lines of what was just listed; their portfolio_id is what update_listing and remove_offers take. This only prepares the instruction: it returns a summary and a confirmation_code and changes nothing until confirm_instruction is called with that code, after the customer agrees. Prices are normal amounts in the market currency - 12345.5 is 12,345.50 - and every market states its currency.

STAGElist_for_saleLIVE
Needsoffers:writeRESTPOST /offersTry it
Prepares offer.list, and changes nothing

With a connected app’s token, Cru checks the request against live data and either refuses it with a reason or returns a summary and a confirmation code. Nothing happens until confirm_instruction is called with that code — once, within 15 minutes, after the customer says yes.

With partner keys, carried out straight away

A partner key is offered this tool opening “Makes a new offer” instead of “Prepares a new offer”. It is carried out at once, with no confirmation step, and takes a required reference as its last argument, so sending the same one again returns the first result. It returns the action’s result as the REST response’s data gives it, with replayed, and is marked destructiveHint. Partner keys over MCP →

Arguments

3 REQUIRED
ARGUMENTDESCRIPTION
stock_typestring · one of cru, external, supplier · required What is listed: "cru" (wine stored with Cru), "external" (wine the customer holds outside Cru) or "supplier" (a supplier's own stock).
portfolio_idstring Cru only, and needed for it: the portfolio line to list, from get_my_portfolio, one that is not listed yet.
lwin18string · 18 digits External and supplier only, and needed for them: the wine, from search_wines.
quantityinteger · 1–1000 · required How many units to list.
pricenumber · > 0 · required Price per unit in the market currency, e.g. 30780 or 30780.50: for cru and external, the asking price the buyer pays; for supplier, what the supplier receives.
warehouse_codestring · one of UK_DRAK, HK_KERRY, SG_TOLL, FR_DARTESS, US_NAPA External only, and needed for it: the Cru warehouse the wine is sold through, one list_warehouses marks sells_your_inbond_wine.
condition_statusstring · one of apd, client_reserves, verified The wine's condition. For external, omit for the level Cru has set for the customer, which is also the most it can be. For supplier, omit for verified, or apd when duty_paid.
condition_textstring · ≤ 200 chars Supplier only: what buyers are told about the condition, needed for apd (duty-paid stock says "Duty Paid in the UK" unless given); not for verified.
duty_paidboolean Supplier only: true when the duty has been paid, which makes it apd. Omit for in bond.
costnumber · > 0 External only, optional: what the customer paid per unit, in the market currency.
inbond_address_idinteger · ≥ 1 External only, optional: the inbond warehouse the wine is in now, from list_inbond_warehouses. Omit if the customer is not sure. Left out, Cru records it as not sure, as the website’s “Not Sure” option does.

Any other argument is refused with a tool error that lists what the tool accepts. Numbers may also be sent as strings, and booleans as "true" or 1.

Returns

STRUCTUREDCONTENT

Once confirmed: offer, the wine as list_my_listings gives it, with only the lines just listed: a cru line under a new portfolio_id, not the one sent.

The same object also comes as JSON text in content, for hosts that read only that. What a staging tool returns →

Errors

A refusal — a wine that is not on Cru, a price out of range — comes back as a result with isError: true and a message worded for the assistant to act on. A connection without offers:write is not offered this tool, and calling it anyway returns 403 with a JSON-RPC error naming the scope. Missing or invalid credentials return 401. Conventions every tool shares →

UP NEXT Change a listing

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).