De-listing
Pause, cancel, or report sold-elsewhere — and what happens when a deal is already in progress.
TL;DRAI summary
This chapter explains how to take a vehicle off the market. You can pause a listing temporarily, cancel it permanently because you're done selling it, or mark it as sold elsewhere. Each action has different effects and rules, especially if there are open offers.
Taking a vehicle off market means one of three different things. Say which — each has its own endpoint, its own semantics, and its own events.
The three intents
| Intent | Call | Result |
|---|---|---|
| Pause — coming back | PATCH /listings/{id} {"status":"PAUSED"} | Off market; its open offers are withdrawn and their buyers told, as a pause in the app does. Resume with {"status":"ACTIVE"}. Events: LISTINGS.PAUSED / RESUMED |
| Cancel — done selling here | DELETE /listings/{id} | As a seller's delist in the app. No open offer and no sale in progress: the vehicle is archived at once and the listing closes (204; LISTINGS.CANCELLED and VEHICLES.DISPOSITION.RESOLVED with automatic: true). An open offer or a sale in progress: staged for Cypress's review (202), the listing paused while it waits; the approval archives the vehicle (open offers withdrawn) and closes the listing (VEHICLES.DISPOSITION.STAGED now; LISTINGS.CANCELLED and RESOLVED with the decision). A listing whose vehicle is not on the market closes at once (204) |
| Sold elsewhere | POST /vehicles/{id}/disposition | The same rule: archived at once without an open offer or a sale in progress (200, archived: true; RESOLVED, automatic); otherwise staged for Cypress review (202), a live listing paused while it waits (STAGED → RESOLVED) |
Changed in 1.5.0: the API's pause and cancel are the app's
A pause used to change only the statuses; it now withdraws the open offers
and tells their buyers. A cancel used to archive a vehicle on the market at
once; it is now reviewed by Cypress, like every seller's archive. While a
cancel waits for that review, the listing is PAUSED and resuming it
answers 409: the review resumes it (rejected, LISTINGS.RESUMED) or
closes it (approved, LISTINGS.CANCELLED).
Changed in 1.8.0: Cypress reviews only when a buyer is involved
From 1.5.0 to 1.7.0 every seller archive waited for Cypress. Since 1.8.0, by
any door (the app, an import, the API): a vehicle with no open offer and no
sale in progress is archived at once, and so is planning stock; one with an
open offer or a sale in progress still waits for a Cypress Manager, its
listing paused meanwhile. A staged answer says why in reviewReason
(OPEN_OFFERS or SALE_IN_PROGRESS). An archive applied at once is told as
VEHICLES.DISPOSITION.RESOLVED with automatic: true, with no STAGED
before it.
New in 1.8.0: let the next push say what left
When your system knows only that a unit is gone, not why, push your whole
inventory with removeMissing=true: every active vehicle the push leaves out
is taken off by the same rule, at once or after Cypress's review. See
Keeping the whole inventory in step.
(Manheim dialect: offerings/…/actions/pause|resume, DELETE offerings/id/{id},
units/…/actions/sold_elsewhere — same semantics.)
Pausing, resuming and cancelling take ?dryRun=true (what would happen,
nothing written) and an Idempotency-Key. A cancel also takes a Connect
Cypress token (since 1.5.0): an app acting for a person may cancel, but an
agent may not take a car off market (403 PEOPLE_ONLY, with vehicleId):
it pauses the listing and asks a person.
On Cypress Operate, pause_vehicle, resume_vehicle and delist_vehicle are
the app's own buttons, run as you (see The app's actions):
a pause also withdraws the car's open offers and tells the buyers, and a
seller's delist follows the app's rule (at once, or Cypress's review when a
buyer is involved). An agent may
pause; resuming and delisting are a person's (PEOPLE_ONLY, with the vehicle's
link). The same actions are on REST under /api/v1/vehicles/{id}/pause,
/resume and /delist.
A day in a fleet system's life
Nightly sync finds 3 units gone from the source inventory: one sold at a
local auction (→ disposition), one heading back on rent next month
(→ pause), one scrapped (→ cancel). The two without offers are archived at
once; one with an open offer would wait for Cypress. Three different facts,
three different calls — and none of them yanks a car out from under a
buyer.
Mid-deal conflicts
A removal against a vehicle that is UNDER_OFFER or deeper in a deal is a
conflict, not a command:
This is the same review process Cypress applies to its own bulk-import
changes — an active negotiation is never yanked out from under a buyer by an
API call. A vehicle with an open offer goes the same way: staged (202), a
live listing paused while it waits. Without one, a cancel archives it at once
(204), and a listing whose vehicle is not on the market simply closes
(204).
Already SOLD on Cypress? Removal answers 409 — completed sales are
permanent record.
A vehicle the fleet keeps in Operation or Planning isn't on the API at all:
pause, resume, repricing and sold-elsewhere on it answer 409 with
"code": "PLANNING_STOCK". The one exception is cancel — a listing left open
on a vehicle that was moved back to Planning can still be cancelled, so you
can clean it up. Taking such a vehicle out of the fleet happens in Cypress,
not through these calls — see Errors.