Products

Mark Unsold

Undo sold status (owner only).

post/v1/products/{product_id}/unsold

Request

  • Base URL: http://localhost:8000
  • URL: http://localhost:8000/v1/products/{product_id}/unsold
  • Auth: HTTP bearer

Path parameters

product_idinteger required

Headers

X-API-Keystring nullable

Response

Successful Response

store_idinteger nullable

Store ID to list under (omit for personal listing)

namestring required

Product name/title

skustring nullable

Stock Keeping Unit - unique per store

specstring nullable
pricestring nullable

Price in whole currency units (e.g. 15.99 means €15.99). NOT cents.

currencystring nullable

Currency symbol (e.g. €, $, CHF)

urlstring uri nullable

Link to the product page

latnumber nullable
lonnumber nullable
descriptionstring nullable

Product description

expires_atstring date-time nullable

When the listing expires (for second-hand items)

verifiedboolean

Whether the responsible human has confirmed this listing. Default true covers humans, scrapers (the source website's listing is the implicit confirmation), and AI agents acting as the seller themselves. Set false ONLY when an AI agent is proposing a listing on behalf of a human who has not explicitly confirmed it (tentative).

listing_type'in_stock' | 'tentative'

Whether a product row is real stock or a demand probe.

in_stock is a normal listing: someone has the thing and you can go buy it. That is Partle's whole promise, so it is the default and the only type the catalog returns unless a caller opts out.

tentative is a seller floating an item they do not stock yet, to see whether anyone wants it. Interest is recorded in product_demand. A tentative row is excluded from every catalog read by default (see apply_visible_products_filter) — a shopper searching for a drill must never be shown one that cannot be bought.

Named listing_type rather than inventory_type because inventory_items / InventoryStatus in this module already mean a user's personal holdings, which is a different thing entirely.

Buyers asking for something nobody sells are NOT modelled here — that is BuyRequest below, which predates this and has its own table, public feed at /v1/public/wanted, and MCP tools.

idinteger required
created_atstring date-time required
updated_atstring date-time required
updated_by_idinteger nullable
creator_idinteger nullable
sold_atstring date-time nullable
accurate_sharenumber nullable
report_countinteger nullable
last_verified_atstring date-time nullable
product_average_ratingnumber nullable
product_rating_countinteger
accuracy_average_ratingnumber nullable
accuracy_rating_countinteger
relevance_scorenumber nullable
demand_countinteger nullable
typestring
partle_urlstring required
_hintstring required

Changes

No recorded changes to this operation across all 2 revisions of this API.