marketplace
GET /v1/marketplace/{vertical}/{slug}
One live Zinn®, as anyone sees it.
Authentication
This endpoint takes no API key. Anything else it needs, such as a signed request, is described above.
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 GET https://api.zinndigital.com/v1/marketplace/{vertical}/{slug} \
-H "Authorization: Bearer zdk_live_…"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
Anonymous and SINGLE-VARIANT. No user-agent branch, no Vary: Cookie, no signed-in mode — docs/83 §3's rule is that Googlebot must see exactly what an anonymous visitor sees. A domain renders as site****.com; a url or file does not render at all. The full value is not in the tables this reads. ⛔ An unknown field kind is SKIPPED, never degraded to text: a page served by a newer engine than the deployed bundle must not print 12000 for a money field whose truth is $120.00, because a visitor has no way to tell a wrong number from a right one. ⛔ A listing whose stamped schema version has no history row is a 404, not a render against the type's current head. Quietly showing different facts is worse than showing nothing. A listing that MOVED vertical (s1014 J40: the V1 import moved V1's guest posts from Link building to Guest posts) is still answered at its OLD address, with its new marketplace_key; a caller that sees a key other than the vertical it asked for should treat the old URL as permanently moved (the public site 301s).
Parameters
| Name | Type | Required | What it is |
|---|---|---|---|
vertical (path) | string | Yes | — |
slug (path) | string | Yes | — |
locale (query) | string | No | Render every operator-authored string — field labels, help text, enum option labels — in this locale, falling back to the source language per string. ⛔ A query parameter rather… |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
source_locale | string | No | The language the seller wrote this listing in (#2606 slice E), or "" when nothing has been translated and the question does not arise. ⭐ The owner's ruling was… |
copy_locale | string | No | The language title and summary are actually IN — the requested locale when a translation was served, "" when they are the seller's own words. ⛔ Not the locale that was asked… |
id | string | Yes | — |
slug | string | Yes | — |
title | string | Yes | — |
summary | string | Yes | — |
marketplace_key | string | Yes | — |
images | MarketplaceImage[] | No | Cover first, so a client that renders only the first entry renders the right one without knowing the rule. Empty until the seller uploads one. |
storefront_layout | MarketplaceStorefrontLayout | No | How a vertical's results are laid out on the public storefront. Owner instruction 2026-08-08:… |
category_path | string | No | — |
listing_type_key | string | Yes | — |
schema_version | integer | Yes | — |
vendor_display_name | string | Yes | The Zinner®'s public name — never the legal name held for identity checks. |
price_minor | integer | Yes | — |
price_max_minor | integer | Yes | — |
currency | string | Yes | — |
sales_count | integer | Yes | — |
published_at | string | No | — |
fields | MarketplacePublicField[] | Yes | — |
packages | MarketplacePackage[] | Yes | — |
inclusion_items | MarketplaceInclusionItem[] | No | docs/83 §4.1 — what a buyer gets, shown BEFORE they pay, translated for the reader with source_locale on each translated row. |
inclusion_revision | integer | No | — |
description | string | No | s1006 — the long description, plain text, translated for the reader (falls back per string to the source). |
faqs | MarketplaceFaq[] | No | The FAQ, translated for the reader; the page's FAQPage is built from it. |
hosted_with_zinn | string<, site, domain> | No | site or domain when the asset is hosted with Zinn® — it moves to the buyer automatically, and measured fields marked measured_by: platform came from our own servers. Empty… |
verified_traffic | MarketplaceVerifiedTraffic | No | Q287 — "GA4 verified traffic": read from the seller's own GA4 property, which measures this listing's host. Empty ({}) when the listing has none, or when Google stopped… |
verified_revenue | MarketplaceVerifiedRevenue | No | s1014 L69 (Q6) — monthly recurring revenue of the business's ACTIVE Stripe subscriptions, read by Zinn® with the seller's read-only key and normalised to a month. mrr_minor is… |
verified_badge | MarketplaceVerifiedBadge | No | s1014 L69 (docs/1068 §9, owner Q8) — the listing-level Verified badge. Earned only by a reading Zinn® took itself from the source — Stripe payouts (revenue, read with the… |
multiple | MarketplaceListingMultiple | No | s1014 L69 (docs/1068 Q17) — the business multiple: the asking price divided by the annual profit (12 x the listing's monthly profit), in hundredths (250 = 2.50x). An ESTIMATE… |
Errors this endpoint can return
404 · 410