marketplace
PATCH /v1/marketplace/listings/{listing_id}
Edit a Zinn®, or publish it.
Authentication
Send an API key as a bearer token. This endpoint does not state a specific permission in the specification, so give your key the least it needs and check the response rather than assuming.
This endpoint takes no organisation id. Your key already identifies the organisation it belongs to, and the response is scoped to it.
Try it
Replace anything in angle brackets with your own values, and the key placeholder with a key from your dashboard.
curl -X PATCH https://api.zinndigital.com/v1/marketplace/listings/{listing_id} \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-d '{ }'Signed in? The API console in your dashboard fills in your real organisation id and your own key, and runs the request against the live API so you can see the actual response. Open this endpoint in the API console
Details
`publish: true` validates every value against the stamped schema version, requires at least one package, recomputes the price cache and takes the listing live — in one transaction, because a listing that went live with a stale price sorts wrongly on every storefront page and quotes a price nobody agreed to, and nothing raises. ⛔ A live Zinn®'s `slug` is permanent: it is the public URL, and changing it breaks every link to it and loses the ranking that link earned. ⛔ A `domain` value is stored in the reveal table, never in `field_values` — the storefront's read path cannot leak what it cannot see (docs/83 §3).
Parameters
| Name | Type | Required | What it is |
|---|---|---|---|
listing_id (path) | string | Yes | — |
Request body
| Name | Type | Required | What it is |
|---|---|---|---|
inclusion_items | object[] | No | The handover checklist a buyer confirms receipt of, for an asset-transfer listing (a website, a domain, a Shopify store). The seller composes it; the listing type's `handover_te… |
title | string | No | — |
summary | string | No | — |
slug | string | No | — |
field_values | object | No | Plain `{key: value}` — the envelope is added by the engine. |
publish | boolean | No | Validate against the stamped schema, require a package, recompute the price cache and go live — in one transaction. |
state | string<live, paused, archived> | No | Take a Zinn® off sale, put it back, or retire it. Applied AFTER any value edit in the same request, so the storefront projection is rebuilt once from the state the listing actua… |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
id | string | Yes | — |
vendor_id | string | Yes | — |
marketplace_id | string | Yes | — |
marketplace_key | string | Yes | — |
category_id | string | No | — |
listing_type_id | string | Yes | — |
listing_type_key | string | Yes | — |
schema_version | integer | Yes | The version this listing's values were authored against. Stamped once, never moved — a later schema must not reinterpret an older listing. |
title | string | Yes | — |
slug | string | Yes | Permanent once live. It is the public URL. |
summary | string | Yes | — |
field_values | object | Yes | "`{key: {v, ver}}`" — uniform two keys, `ver: null` for a seller-declared value, so no consumer branches on key presence. ⛔ A `domain` value is NOT here — it is in the reveal ta… |
field_schema | MarketplaceFieldDefinition[] | No | Present on the detail read; the schema THIS listing is authored against. |
state | MarketplaceListingState | Yes | ⛔ `archived`, never deleted. A listing that sold has public URLs, backlinks and an order behind it, and a 404 costs rankings that do not come back. |
price_minor | integer | Yes | — |
price_max_minor | integer | Yes | — |
currency | string | Yes | — |
published_at | string | No | — |
packages | MarketplacePackage[] | Yes | — |
Errors this endpoint can return
401 · 404 · 422