Search live software, compare listings, and prepare owned drafts. Publishing stays on the website.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Compare a shortlist of public software from marketplace search. Returns current public descriptions, USD license prices, types and tech stacks. Unavailable software is omitted without disclosing its status. This tool cannot purchase software or access private source.
Listing identifiers to compare, in the order the Buyer wants them presented. Copy each slug from z2h_search_marketplace.
Compare a shortlist of public software from marketplace search. Returns current public descriptions, USD license prices, types and tech stacks. Unavailable software is omitted without disclosing its status. This tool cannot purchase software or access private source.
| Argument | Type | Description |
|---|---|---|
| slugs* | array | Listing identifiers to compare, in the order the Buyer wants them presented. Copy each slug from z2h_search_marketplace. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slugs"
],
"properties": {
"slugs": {
"type": "array",
"items": {
"type": "string",
"maxLength": 256,
"minLength": 1,
"description": "Public listing slug returned by z2h_search_marketplace."
},
"maxItems": 4,
"minItems": 2,
"description": "Listing identifiers to compare, in the order the Buyer wants them presented. Copy each slug from z2h_search_marketplace."
}
},
"additionalProperties": false
}After the signed PUT succeeds, verify and attach the archive to the owned draft. Confirm that the Builder accepted "I own or have the rights to sell the codebase I am about to upload."; pass ownershipAccepted=true and ownershipVersion=2026-09-27. The server records the accepted wording with the source change. Final review and publishing stay in the web wizard.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Owned listing slug from z2h_list_my_listings or z2h_create_draft_listing. |
| objectKey* | string | Storage key returned by z2h_request_source_upload. Pass it unchanged. |
| sizeBytes* | integer | Exact archive size in bytes. Must match the uploaded file. |
| contentType* | string | Archive MIME type, used unchanged for PUT and confirmation. |
| ownershipVersion* | string | Version of the ownership statement explicitly accepted by the Builder. |
| ownershipAccepted* | boolean | True only after the Builder explicitly accepts the statement in this tool description. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug",
"objectKey",
"contentType",
"sizeBytes",
"ownershipAccepted",
"ownershipVersion"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 256,
"minLength": 1,
"description": "Owned listing slug from z2h_list_my_listings or z2h_create_draft_listing."
},
"objectKey": {
"type": "string",
"maxLength": 512,
"minLength": 1,
"description": "Storage key returned by z2h_request_source_upload. Pass it unchanged."
},
"sizeBytes": {
"type": "integer",
"maximum": 104857600,
"description": "Exact archive size in bytes. Must match the uploaded file.",
"exclusiveMinimum": 0
},
"contentType": {
"enum": [
"application/zip",
"application/x-zip-compressed",
"application/gzip",
"application/x-gzip",
"application/x-tar"
],
"type": "string",
"description": "Archive MIME type, used unchanged for PUT and confirmation."
},
"ownershipVersion": {
"type": "string",
"const": "2026-09-27",
"description": "Version of the ownership statement explicitly accepted by the Builder."
},
"ownershipAccepted": {
"type": "boolean",
"const": true,
"description": "True only after the Builder explicitly accepts the statement in this tool description."
}
}
}Create an invisible draft and return editUrl and publishUrl. Price and source inclusion are Builder decisions. Set sourceCodeIncluded only after confirmation; omitted values default to false. Requires listings:write. Returns the draft identity and web edit/review links. Supply a stable idempotencyKey and reuse it on every retry. The same key returns the original draft without editing it. Without a key, check z2h_list_my_listings before retrying. Source delivery, review and publishing continue in the web wizard.
| Argument | Type | Description |
|---|---|---|
| faqs | array | Supplying FAQs disables the automatic FAQ draft. |
| type* | string | Software category that best matches its main use. |
| title* | string | Name Buyers will see on the software listing. |
| demoUrl | string | Public HTTP or HTTPS demo URL. Omit when no demo is available. |
| domains | array | Industry tags for the software. Choose keys from the Zero to Hundred taxonomy: ai, analytics, art-design, auth-identity, cms, conference, developer-tools, devops, e-commerce-marketplace, education, entertainment, environmental, fashion, finance, food, gaming, graphic-design, health, interior-design, marketing, membership, messaging, non-profit, political, productivity, real-estate, religious, services, social, technology, travel, ux-ui, wedding, other. Omission creates a draft without industry tags. |
Read one owned listing before editing it. Requires listings:read. Use a slug from z2h_list_my_listings. Returns descriptions, pricing, software attributes, source attachment state and web edit links. Missing listings and listings owned by someone else both return not found. This does not download source code.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Identifies one of the authenticated Builder's listings. Copy slug from z2h_list_my_listings or z2h_create_draft_listing. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 256,
"minLength": 1,
"description": "Identifies one of the authenticated Builder's listings. Copy slug from z2h_list_my_listings or z2h_create_draft_listing."
}
}
}Find the authenticated Builder's drafts and live listings before creating another draft. Requires listings:read. Returns items with slugs, publication state, USD prices, edit links, and nextCursor. Pass nextCursor to continue paging; null ends the list. An invalid or expired token requires sign-in again.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Number of owned listings to return per page. Omission uses 25, with newest listings first. |
| cursor | string | Continue after the last listing in the preceding result. Use that response's nextCursor; omission starts at the newest listing. |
| setupCode | string | Temporary code from the Zero to Hundred connection check. Omit for ordinary listing reads. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Number of owned listings to return per page. Omission uses 25, with newest listings first."
},
"cursor": {
"type": "string",
"maxLength": 512,
"description": "Continue after the last listing in the preceding result. Use that response's nextCursor; omission starts at the newest listing."
},
"setupCode": {
"type": "string",
"pattern": "^[a-f0-9]{32}$",
"description": "Temporary code from the Zero to Hundred connection check. Omit for ordinary listing reads."
}
}
}For an owned draft, get a short-lived signed archive URL. Ask the Builder to explicitly accept this exact statement: "I own or have the rights to sell the codebase I am about to upload." Pass ownershipAccepted=true and ownershipVersion=2026-09-27 only after they accept. Returns signedUrl for the archive PUT, objectKey for confirmation, and contentType for the upload header. Keep signedUrl private. PUT up to 100 MB to signedUrl, then call z2h_confirm_source_upload. This does not publish.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Owned listing slug from z2h_list_my_listings or z2h_create_draft_listing. |
| sizeBytes* | integer | Exact archive size in bytes. Must match the uploaded file. |
| contentType* | string | Archive MIME type, used unchanged for PUT and confirmation. |
| ownershipVersion* | string | Version of the ownership statement explicitly accepted by the Builder. |
| ownershipAccepted* | boolean | True only after the Builder explicitly accepts the statement in this tool description. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug",
"contentType",
"sizeBytes",
"ownershipAccepted",
"ownershipVersion"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 256,
"minLength": 1,
"description": "Owned listing slug from z2h_list_my_listings or z2h_create_draft_listing."
},
"sizeBytes": {
"type": "integer",
"maximum": 104857600,
"description": "Exact archive size in bytes. Must match the uploaded file.",
"exclusiveMinimum": 0
},
"contentType": {
"enum": [
"application/zip",
"application/x-zip-compressed",
"application/gzip",
"application/x-gzip",
"application/x-tar"
],
"type": "string",
"description": "Archive MIME type, used unchanged for PUT and confirmation."
},
"ownershipVersion": {
"type": "string",
"const": "2026-09-27",
"description": "Version of the ownership statement explicitly accepted by the Builder."
},
"ownershipAccepted": {
"type": "boolean",
"const": true,
"description": "True only after the Builder explicitly accepts the statement in this tool description."
}
}
}Find live software by keyword before building from scratch. Public, no sign-in needed. Returns descriptions, USD license prices, tech stacks and listing links. Example: {"search": "invoice", "limit": 5}. Empty search browses recent software. When hasMore is true without nextCursor, narrow the search. Matching is lexical. Errors set isError; retry a rate limit later. Use z2h_compare_marketplace_listings for a shortlist or z2h_show_marketplace for cards. A result does not guarantee suitability or purchase availability.
| Argument | Type | Description |
|---|---|---|
| mode | array | Filter by the listing's sale model. Omission leaves the sale model unfiltered. |
| sort | string | Result order. Defaults to relevance for a search, otherwise newest. |
| type | array | Categories matching the kind of software the Buyer wants. Omission searches across categories. |
| limit | integer | Number of listings to return in this page. Omission uses 20. |
| cursor | string | Opaque nextCursor from the previous page. Keep the same filters and sort. |
| search | string | Keywords describing the software the Buyer needs. |
| domains | array | Industry tags for the software. Choose keys from the Zero to Hundred taxonomy: ai, analytics, art-design, auth-identity, cms, conference, developer-tools, devops, e-commerce-marketplace, education, entertainment, environmental, fashion, finance, food, gaming, graphic-design, health, interior-design, marketing, membership, messaging, non-profit, political, productivity, real-estate, religious, services, social, technology, travel, ux-ui, wedding, other. Omission searches across industries. |
Show public software cards and an interactive comparison panel. First search with z2h_search_marketplace, then pass the public slugs to display, and the search text you used as `search` so the panel shows what the cards are for. Without slugs, shows the newest live software. Prices and availability are refreshed on the server. Listing links open the Zero to Hundred website.
| Argument | Type | Description |
|---|---|---|
| slugs | array | Search-result slugs to show. Omit to display the newest live software. |
| search | string | Text to prefill the panel's search box. Use the query that produced the supplied slugs. Cards are selected by slugs; this text does not filter them. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"slugs": {
"type": "array",
"items": {
"type": "string",
"maxLength": 256,
"minLength": 1,
"description": "Public listing slug returned by z2h_search_marketplace."
},
"maxItems": 20,
"minItems": 1,
"description": "Search-result slugs to show. Omit to display the newest live software."
},
"search": {
"type": "string",
"maxLength": 200,
"description": "Text to prefill the panel's search box. Use the query that produced the supplied slugs. Cards are selected by slugs; this text does not filter them."
}
},
"additionalProperties": false
}Update an owned draft. Omitted fields stay unchanged; nullable fields accept null to clear them. Live listings cannot be edited through this tool. Requires listings:write. Returns the draft identity and web edit/review links. On conflict, read the listing again before retrying.
| Argument | Type | Description |
|---|---|---|
| faqs | array | Supplying FAQs disables the automatic FAQ draft. |
| mode | string | Non-exclusive license listing mode. Omit to keep it unchanged. |
| slug* | string | Listing slug returned by z2h_list_my_listings or z2h_create_draft_listing. |
| type | string | Software category that best matches its main use. |
| title | string | Replacement name Buyers will see on the software listing. Omission keeps the current name. |
| demoUrl | any | Public HTTP or HTTPS demo URL. Null clears it; omission keeps it. |
| domains | array | Industry tags for the software. Choose keys from the Zero to Hundred taxonomy: ai, analytics, art-design, auth-identity, cms, conference, developer-tools, devops, e-commerce-marketplace, education, entertainment, environmental, fashion, finance, food, gaming, graphic-design, health, interior-design, marketing, membership, messaging, non-profit, political, productivity, real-estate, religious, services, social, technology, travel, ux-ui, wedding, other. Omission keeps the current tags. |
| imageUrls | array | HTTP or HTTPS screenshot URLs. The first image becomes the thumbnail. |
| techStack | array | Frameworks and languages used by the software. |
| askingPrice | number | USD license price confirmed by the Builder. Omit if undecided. |
| thumbnailUrl | string | HTTP or HTTPS image URL for the marketplace thumbnail. |
| sourceRepoUrl | string | GitHub repository URL. Connecting and verifying source continues in the web wizard. |
| idempotencyKey | string | Choose one random key for this new listing and reuse it on every retry. Replays return the original draft without applying changes. Use update for edits. A new key means a deliberately new listing. |
| videoUploadUrl | string | A YouTube or Loom demo URL. |
| longDescription* | string | What the software does, who it helps, and what the Buyer receives. |
| operatingStatus* | string | State of the software itself, independent of the listing publication status. |
| maintenanceLevel | string | Maintenance commitment the Builder offers. |
| shortDescription* | string | Buyer-facing summary shown on marketplace cards. |
| documentationLevel | string | Documentation supplied with the software. |
| sourceCodeIncluded | boolean | Whether the sale includes source code. Omission records false. Set true only after the Builder confirms that source code is included. |
| associatedListingIds | array | IDs of related listings owned by this Builder, obtained from z2h_list_my_listings. |
| externalDependencies | array | Third-party services a Buyer must provision. Common values: Supabase, PostgreSQL, MySQL, MongoDB, Redis, Upstash, Firebase, PlanetScale, Neon, Clerk, Auth0, Stripe, PayPal, Plaid, Resend, SendGrid, Postmark, Twilio, OpenAI, Anthropic. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"title",
"shortDescription",
"longDescription",
"type",
"operatingStatus"
],
"properties": {
"faqs": {
"type": "array",
"items": {
"type": "object",
"required": [
"question",
"answer"
],
"properties": {
"answer": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "Builder-provided answer."
},
"question": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Buyer question addressed by the paired answer."
}
}
},
"maxItems": 30,
"description": "Supplying FAQs disables the automatic FAQ draft."
},
"type": {
"enum": [
"full_product",
"micro_saas",
"tool",
"template",
"ai_agent",
"component",
"bot",
"extension",
"automation",
"design_system"
],
"type": "string",
"description": "Software category that best matches its main use."
},
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Name Buyers will see on the software listing."
},
"demoUrl": {
"type": "string",
"description": "Public HTTP or HTTPS demo URL. Omit when no demo is available."
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Industry tags for the software. Choose keys from the Zero to Hundred taxonomy: ai, analytics, art-design, auth-identity, cms, conference, developer-tools, devops, e-commerce-marketplace, education, entertainment, environmental, fashion, finance, food, gaming, graphic-design, health, interior-design, marketing, membership, messaging, non-profit, political, productivity, real-estate, religious, services, social, technology, travel, ux-ui, wedding, other. Omission creates a draft without industry tags."
},
"imageUrls": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 5,
"description": "HTTP or HTTPS screenshot URLs. The first image becomes the thumbnail."
},
"techStack": {
"type": "array",
"items": {
"type": "string"
},
"description": "Frameworks and languages used by the software."
},
"askingPrice": {
"type": "number",
"minimum": 0,
"description": "USD license price confirmed by the Builder. Omit if undecided."
},
"thumbnailUrl": {
"type": "string",
"description": "HTTP or HTTPS image URL for the marketplace thumbnail."
},
"sourceRepoUrl": {
"type": "string",
"description": "GitHub repository URL. Connecting and verifying source continues in the web wizard."
},
"idempotencyKey": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+$",
"maxLength": 128,
"minLength": 8,
"description": "Choose one random key for this new listing and reuse it on every retry. Replays return the original draft without applying changes. Use update for edits. A new key means a deliberately new listing."
},
"videoUploadUrl": {
"type": "string",
"description": "A YouTube or Loom demo URL."
},
"longDescription": {
"type": "string",
"minLength": 20,
"description": "What the software does, who it helps, and what the Buyer receives."
},
"operatingStatus": {
"enum": [
"ready_to_launch",
"live",
"live_with_revenue"
],
"type": "string",
"description": "State of the software itself, independent of the listing publication status."
},
"maintenanceLevel": {
"enum": [
"none",
"low",
"active"
],
"type": "string",
"description": "Maintenance commitment the Builder offers."
},
"shortDescription": {
"type": "string",
"maxLength": 160,
"description": "Buyer-facing summary shown on marketplace cards."
},
"documentationLevel": {
"enum": [
"none",
"basic",
"full"
],
"type": "string",
"description": "Documentation supplied with the software."
},
"sourceCodeIncluded": {
"type": "boolean",
"description": "Whether the sale includes source code. Omission records false. Set true only after the Builder confirms that source code is included."
},
"associatedListingIds": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"maxItems": 8,
"description": "IDs of related listings owned by this Builder, obtained from z2h_list_my_listings."
},
"externalDependencies": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Service name, such as Stripe."
},
{
"type": "object",
"required": [
"name"
],
"properties": {
"cost": {
"type": "string",
"maxLength": 40,
"description": "Expected service cost, such as USD 20/month."
},
"name": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Name of a service the Buyer needs to operate the software, such as Stripe."
},
"note": {
"type": "string",
"maxLength": 200,
"description": "What the software needs this service for."
}
}
}
]
},
"maxItems": 50,
"description": "Third-party services a Buyer must provision. Common values: Supabase, PostgreSQL, MySQL, MongoDB, Redis, Upstash, Firebase, PlanetScale, Neon, Clerk, Auth0, Stripe, PayPal, Plaid, Resend, SendGrid, Postmark, Twilio, OpenAI, Anthropic."
}
}
}| operatingStatus | array | Filter by software readiness or existing commercial operation, rather than listing publication state. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"mode": {
"type": "array",
"items": {
"type": "string",
"const": "license"
},
"maxItems": 20,
"description": "Filter by the listing's sale model. Omission leaves the sale model unfiltered."
},
"sort": {
"enum": [
"relevance",
"newest",
"price_low",
"price_high",
"most_viewed",
"most_saved"
],
"type": "string",
"description": "Result order. Defaults to relevance for a search, otherwise newest."
},
"type": {
"type": "array",
"items": {
"enum": [
"full_product",
"micro_saas",
"tool",
"template",
"ai_agent",
"component",
"bot",
"extension",
"automation",
"design_system"
],
"type": "string"
},
"maxItems": 20,
"description": "Categories matching the kind of software the Buyer wants. Omission searches across categories."
},
"limit": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "Number of listings to return in this page. Omission uses 20."
},
"cursor": {
"type": "string",
"maxLength": 512,
"description": "Opaque nextCursor from the previous page. Keep the same filters and sort."
},
"search": {
"type": "string",
"maxLength": 200,
"description": "Keywords describing the software the Buyer needs."
},
"domains": {
"type": "array",
"items": {
"type": "string",
"maxLength": 64
},
"maxItems": 20,
"description": "Industry tags for the software. Choose keys from the Zero to Hundred taxonomy: ai, analytics, art-design, auth-identity, cms, conference, developer-tools, devops, e-commerce-marketplace, education, entertainment, environmental, fashion, finance, food, gaming, graphic-design, health, interior-design, marketing, membership, messaging, non-profit, political, productivity, real-estate, religious, services, social, technology, travel, ux-ui, wedding, other. Omission searches across industries."
},
"operatingStatus": {
"type": "array",
"items": {
"enum": [
"ready_to_launch",
"live",
"live_with_revenue"
],
"type": "string"
},
"maxItems": 20,
"description": "Filter by software readiness or existing commercial operation, rather than listing publication state."
}
}
}| imageUrls | array | HTTP or HTTPS screenshot URLs. The first image becomes the thumbnail. |
| techStack | array | Frameworks and languages used by the software. |
| askingPrice | any | Builder-confirmed USD license price. Null clears it; omission keeps it. |
| thumbnailUrl | any | HTTP or HTTPS thumbnail URL. Null clears it; omission keeps it. |
| sourceRepoUrl | any | GitHub repository URL. Null clears it; omission keeps it. |
| videoUploadUrl | any | YouTube or Loom demo URL. Null clears it; omission keeps it. |
| longDescription | string | What the software does, who it helps, and what the Buyer receives. |
| operatingStatus | string | Software readiness or commercial operating state, independent of listing publication. Omission keeps the current state. |
| maintenanceLevel | string | Maintenance commitment the Builder offers. |
| shortDescription | string | Replacement summary for marketplace cards. Omission keeps the current summary. |
| documentationLevel | string | Documentation supplied with the software. |
| sourceCodeIncluded | boolean | Whether the sale includes source code, as confirmed by the Builder. Omission keeps the current choice. |
| associatedListingIds | array | IDs of related listings owned by this Builder, obtained from z2h_list_my_listings. |
| externalDependencies | array | Third-party services a Buyer must provision. Common values: Supabase, PostgreSQL, MySQL, MongoDB, Redis, Upstash, Firebase, PlanetScale, Neon, Clerk, Auth0, Stripe, PayPal, Plaid, Resend, SendGrid, Postmark, Twilio, OpenAI, Anthropic. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"faqs": {
"type": "array",
"items": {
"type": "object",
"required": [
"question",
"answer"
],
"properties": {
"answer": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "Builder-provided answer."
},
"question": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Buyer question addressed by the paired answer."
}
}
},
"maxItems": 30,
"description": "Supplying FAQs disables the automatic FAQ draft."
},
"mode": {
"type": "string",
"const": "license",
"description": "Non-exclusive license listing mode. Omit to keep it unchanged."
},
"slug": {
"type": "string",
"minLength": 1,
"description": "Listing slug returned by z2h_list_my_listings or z2h_create_draft_listing."
},
"type": {
"enum": [
"full_product",
"micro_saas",
"tool",
"template",
"ai_agent",
"component",
"bot",
"extension",
"automation",
"design_system"
],
"type": "string",
"description": "Software category that best matches its main use."
},
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Replacement name Buyers will see on the software listing. Omission keeps the current name."
},
"demoUrl": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Public HTTP or HTTPS demo URL. Null clears it; omission keeps it."
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Industry tags for the software. Choose keys from the Zero to Hundred taxonomy: ai, analytics, art-design, auth-identity, cms, conference, developer-tools, devops, e-commerce-marketplace, education, entertainment, environmental, fashion, finance, food, gaming, graphic-design, health, interior-design, marketing, membership, messaging, non-profit, political, productivity, real-estate, religious, services, social, technology, travel, ux-ui, wedding, other. Omission keeps the current tags."
},
"imageUrls": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 5,
"description": "HTTP or HTTPS screenshot URLs. The first image becomes the thumbnail."
},
"techStack": {
"type": "array",
"items": {
"type": "string"
},
"description": "Frameworks and languages used by the software."
},
"askingPrice": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Builder-confirmed USD license price. Null clears it; omission keeps it."
},
"thumbnailUrl": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "HTTP or HTTPS thumbnail URL. Null clears it; omission keeps it."
},
"sourceRepoUrl": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "GitHub repository URL. Null clears it; omission keeps it."
},
"videoUploadUrl": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "YouTube or Loom demo URL. Null clears it; omission keeps it."
},
"longDescription": {
"type": "string",
"minLength": 20,
"description": "What the software does, who it helps, and what the Buyer receives."
},
"operatingStatus": {
"enum": [
"ready_to_launch",
"live",
"live_with_revenue"
],
"type": "string",
"description": "Software readiness or commercial operating state, independent of listing publication. Omission keeps the current state."
},
"maintenanceLevel": {
"enum": [
"none",
"low",
"active"
],
"type": "string",
"description": "Maintenance commitment the Builder offers."
},
"shortDescription": {
"type": "string",
"maxLength": 160,
"description": "Replacement summary for marketplace cards. Omission keeps the current summary."
},
"documentationLevel": {
"enum": [
"none",
"basic",
"full"
],
"type": "string",
"description": "Documentation supplied with the software."
},
"sourceCodeIncluded": {
"type": "boolean",
"description": "Whether the sale includes source code, as confirmed by the Builder. Omission keeps the current choice."
},
"associatedListingIds": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"maxItems": 8,
"description": "IDs of related listings owned by this Builder, obtained from z2h_list_my_listings."
},
"externalDependencies": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Service name, such as Stripe."
},
{
"type": "object",
"required": [
"name"
],
"properties": {
"cost": {
"type": "string",
"maxLength": 40,
"description": "Expected service cost, such as USD 20/month."
},
"name": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Name of a service the Buyer needs to operate the software, such as Stripe."
},
"note": {
"type": "string",
"maxLength": 200,
"description": "What the software needs this service for."
}
}
}
]
},
"maxItems": 50,
"description": "Third-party services a Buyer must provision. Common values: Supabase, PostgreSQL, MySQL, MongoDB, Redis, Upstash, Firebase, PlanetScale, Neon, Clerk, Auth0, Stripe, PayPal, Plaid, Resend, SendGrid, Postmark, Twilio, OpenAI, Anthropic."
}
}
}