Remove an offer
Prepares taking one listed line of the customer's portfolio off sale (portfolio_id from list_my_listings, get_my_portfolio or the offer list_for_sale or update_listing answered with), which takes that line's units only, or a whole listing by its code. Wine stored with Cru stays in the portfolio; wine held outside Cru (stock_type "external") is removed from it. Supplier offers (stock_type "supplier") are switched off on the Cru website instead, and BPO stock (stock_type "bpo") cannot be removed. The result has offer, the wine as get_my_portfolio gives it now, with only the lines the units taken off sale are on (no longer listed, so under another portfolio_id; null for wine held outside Cru, which is gone), how many units were removed (removed) and whether they left the portfolio (deleted). 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.
offer.remove, 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.
A partner key is offered this tool opening “Takes” instead of “Prepares taking”. 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
ALL OPTIONAL| ARGUMENT | DESCRIPTION |
|---|---|
| portfolio_idstring | A listed line's portfolio_id, from list_my_listings, get_my_portfolio or an earlier offer result, to take only that line's units off sale. Give this or code. |
| codestring | A listing's code, to take the whole listing off sale. Give this or portfolio_id. |
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
STRUCTUREDCONTENTOnce confirmed: offer, the wine as get_my_portfolio gives it now, with only the lines the units taken off sale are on (null for wine held outside Cru); removed; deleted.
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 →