Create listings

Offers one thing the caller's org owns on the marketplace — an agent, persona, app, skill or MCP server, or, for the platform, a tool sold per call — optionally monetized.

POST /v1/marketplace/listings

Addresshttps://api.hanzo.ai/v1/marketplace/listings
MethodPOST
Operationpost_marketplace_listings
AuthAuthorization: Bearer $HANZO_API_KEY

Offers one thing the caller's org owns on the marketplace — an agent, persona, app, skill or MCP server, or, for the platform, a tool sold per call — optionally monetized. The owning app is asked, as the org, whether the thing is the org's, so a listing never sells something that does not exist or belongs to someone else: a tool every org reaches is the platform's, and a server enabled off the public shelf is the shelf's. A monetized listing names a payout wallet of the org's own, which wallets confirms, so a price is never unpayable. The price is exact to 18 decimal places, so a per-call price below a cent is a real price and not a rounded-away zero. An org admin publishes, at most 1000 listings an org; it answers 201 with the created row.

Request

10 fields, body application/json (required).

FieldInTypeRequiredDescription
categorybodystring—Category groups the listing in the shop window.
currencybodystring—Currency denominates Price.
descriptionbodystring—Description is the long copy, at most 4096 characters.
docsbodystring—Docs is where the listing's documentation lives: an https URL or a path on docs.hanzo.ai.
kindbodystring—Kind is what is sold: agent, persona, app, skill, mcp or tool (the default).
pricebodystring—Price is the price as a decimal USD string, exact to 18 places — per call for a tool, what a job is offered at otherwise.
publicbodyboolean—Public makes the listing discoverable by other orgs.
recipientbodystring—Recipient is the seller's payout wallet id, in the publishing org — the wallet x402 pays.
titlebodystring—Title is the shop-window name, 1-200 characters.
toolbodystring—Tool names the thing sold, in the seller's own org: an agent's name or id, an app's project slug or id, a skill's name or id, an MCP server's name or id registered by hand, or a platform tool's registry name.

Response

StatusBodyMeaning
201marketplace.Listingcreated
defaultproblem-detailsrefused

201 body — 15 fields.

FieldInTypeAlwaysDescription
categorybodystring—Category groups the listing in the shop window.
createdAtbodyinteger (int64)—CreatedAt is when the listing was published, in Unix SECONDS, minted at insert.
currencybodystring—Currency is the ISO 4217 code Price is quoted in; Create defaults it to "USD" when the publisher names none.
descriptionbodystring—Description is the long copy.
docsbodystring—Docs is where the listing's documentation lives: an https URL, or a path on docs.hanzo.ai.
idbodystring—ID is the listing's id, minted here as "lst_" + 16 hex characters.
kindbodystring—Kind is what the listing sells: agent, persona, app, skill, mcp or tool.
pricebodyany—Price is the exact price, 18 decimal places of USD: per call for a tool, the price a job is offered at for an agent.
publicbodyboolean—Public is whether other orgs can discover the listing.
publisherOrgbodystring—PublisherOrg is the org that published the listing, taken from the validated principal and never off the wire.
recipientbodystring—Recipient is the seller's payout WALLET id in PublisherOrg: the wallet x402 pays for a call or a job bought through this listing.
refbodystring—Ref is the id the thing's owning app knows it by, resolved when the listing was published — the agent id for an agent named by its name.
titlebodystring—Title is the shop-window name, required and refused past 200 bytes.
toolbodystring—Tool names the thing sold, as the seller named it: the agent, app, skill or MCP server's name or id, or the tool's registry name.
updatedAtbodyinteger (int64)—UpdatedAt is when the listing was last edited, unix seconds; its creation when it never was.

Failure carries the platform error shape — see Errors.

Examples

hanzo marketplace listings create
import { Configuration, MarketplaceApi } from 'hanzoai';

const api = new MarketplaceApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postMarketplaceListings({ category: "<category>", currency: "<currency>" });
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import MarketplaceApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = MarketplaceApi(client).post_marketplace_listings(category="<category>", currency="<currency>")
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.MarketplaceAPI.PostMarketplaceListings(context.Background()).Execute()
if err != nil {
	return err
}
use hanzo_client::apis::{configuration::Configuration, marketplace_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = marketplace_api::post_marketplace_listings(&cfg, Default::default()).await?;
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.MarketplaceApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new MarketplaceApi(client).postMarketplaceListings();
curl -X POST https://api.hanzo.ai/v1/marketplace/listings \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "category": "<category>",
       "currency": "<currency>"
     }'

MCP reaches marketplace through the marketplace tool, which names its 23 operations with its own verbs — this one among them, under a name only MCP declares. describe explains any of them:

curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "describe",
         "arguments": {
           "op": "list_marketplaces"
         }
       }
     }'

Marketplace API · All Hanzo APIs · Interactive reference

Was this page useful?