List shop
Searches every public listing of every kind — agents and personas to hire, apps, skills, MCP servers and tools — newest first, with facets by kind, category, price and rating, paged.
GET /v1/marketplace/shop
| Address | https://api.hanzo.ai/v1/marketplace/shop |
| Method | GET |
| Operation | get_marketplace_shop |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Searches every public listing of every kind — agents and personas to hire, apps, skills, MCP servers and tools — newest first, with facets by kind, category, price and rating, paged. Each listing carries its seller's public face, its reputation from settled jobs and installs, and the command and MCP operation that buy it. It needs no credential and answers the same to everyone.
With kind=expert it also takes sort and dir, language, verified, minLevel, badge, tokenTier, rateMin and rateMax, and product: the experts the ordinary filters match are kept by these, ordered and paged, and total is how many were kept (facets stay the ordinary filters'). An expert whose reward profile is public shows it — level, points, the three rarest badges, the token tier — and each shows the products it scores highest in with the parts of the score, and those it ranks among the best three of all experts in. A private profile shows nothing of the rewards program and is put last by an order that reads it. A value a parameter cannot take, and any of these without kind=expert, is a 400.
Request
19 fields.
| Field | In | Type | Required | Description |
|---|---|---|---|---|
q | query | string | — | Q keeps listings whose title, description, category, thing or seller contains every word of it, case-insensitively. |
kind | query | string | — | Kind keeps one kind: agent, persona, app, skill, mcp, tool or expert. |
category | query | string | — | Category keeps one category, exactly. |
price | query | string | — | Price keeps free listings or priced ones. |
rating | query | integer | — | Rating keeps listings rated at least this many stars, 1 to 5. |
seller | query | string | — | Seller keeps one seller org's listings. |
area | query | string | — | Area keeps the experts who work on one area: configure, base, commerce, bot, agents, cloud, models, creative or freelance. |
limit | query | integer | — | Limit is the page size: 48 by default, 200 at most. |
offset | query | integer | — | Offset is where the page starts. |
sort | query | string | — | Sort orders experts, with kind=expert: tokens (the token tier), level, points (the rewards program's, put last for an expert whose reward profile is not public), rating (unrated last), jobs (jobs completed), rate (the hourly rate, none last) or newest. |
dir | query | string | — | Dir is the direction of Sort: desc by default, or asc. |
language | query | string | — | Language keeps the experts who work in a language, a BCP 47 tag such as en, es or zh-cn; zh keeps zh-cn and zh-tw as well. |
verified | query | boolean | — | Verified, true, keeps the experts staff verified; false keeps everyone. |
minLevel | query | integer | — | MinLevel keeps the experts whose public reward profile shows this level or higher; 0 keeps everyone. |
badge | query | string | — | Badge keeps the experts whose public reward profile holds a badge, by id such as first-merge. |
tokenTier | query | string | — | TokenTier keeps the experts whose token tier is at least this: 100k, 1m, 5m, 10m, 100m, 1b, 10b, 100b or 1t. |
rateMin | query | string | — | RateMin keeps the experts whose hourly rate is at least this decimal USD amount; an expert with no hourly rate is kept by neither RateMin nor RateMax. |
rateMax | query | string | — | RateMax keeps the experts whose hourly rate is at most this decimal USD amount. |
product | query | string | — | Product orders the experts by their score in a product, best first, those with none last: dev, bot, team, base, commerce, cloud, agents, kai, enso, zen or creative. |
Response
| Status | Body | Meaning |
|---|---|---|
200 | marketplace.Shop | ok |
default | problem-details | refused |
200 body — 85 fields.
| Field | In | Type | Always | Description |
|---|---|---|---|---|
facets | body | marketplace.Facets | — | |
facets.category | body | object | — | Category counts listings in each category; an uncategorized one is not counted. |
facets.category.* | body | integer (int64) | — | |
facets.kind | body | object | — | Kind counts listings of each kind. |
facets.kind.* | body | integer (int64) | — | |
facets.price | body | object | — | Price counts free and priced listings. |
facets.price.* | body | integer (int64) | — | |
facets.rating | body | object | — | Rating counts listings by their rounded rating, "1" to "5", and those with no rating yet as "unrated". |
facets.rating.* | body | integer (int64) | — | |
listings | body | marketplace.ShopListing[] | — | Listings is this page, newest first. |
listings[].category | body | string | — | Category groups it; empty is ungrouped. |
listings[].createdAt | body | integer (int64) | — | CreatedAt is when it was published, unix seconds. |
listings[].currency | body | string | — | Currency labels Price. |
listings[].description | body | string | — | Description is the long copy. |
listings[].docs | body | string | — | Docs is where its documentation lives, when the seller said. |
listings[].expert | body | marketplace.Expert | — | |
listings[].expert.areas | body | string[] | — | Areas is what the expert works on: configure, base, commerce, bot, agents, cloud, models, creative or freelance. |
listings[].expert.availability | body | string | — | Availability is the expert's weekly hours, in their own words. |
listings[].expert.languages | body | string[] | — | Languages are the languages the expert works in, lowercase BCP 47 tags. |
listings[].expert.links | body | string[] | — | Links are where the expert's work can be seen: up to 8 https URLs. |
listings[].expert.person | body | string | — | Person is the expert's IAM identity: the verified principal that published the listing, never taken off the wire. |
listings[].expert.products | body | marketplace.Score[] | — | Products are the products the expert scores highest in, at most three, best first, each with the parts its score is made of; absent until they score in any (expertise.go). |
listings[].expert.products[].parts | body | marketplace.Parts | — | |
listings[].expert.products[].parts.badges | body | number (double) | — | Badges is the points for the badges held that show the product was used. |
listings[].expert.products[].parts.contributions | body | number (double) | — | Contributions is the points for merged pull requests and completed bounties in the product's public repositories. |
listings[].expert.products[].parts.jobs | body | number (double) | — | Jobs is the points for jobs released in the product's areas, weighted by stars. |
listings[].expert.products[].parts.usage | body | number (double) | — | Usage is the points for lifetime tokens on the product's model family. |
listings[].expert.products[].product | body | string | — | Product is the product's id. |
listings[].expert.products[].score | body | number (double) | — | Score is the sum of Parts, to one decimal. |
listings[].expert.rate | body | any | — | Rate is the hourly rate, exact to 18 decimal places of USD; "0" when the expert sells only a fixed engagement (the listing's price). |
listings[].expert.reward | body | marketplace.Reward | — | |
listings[].expert.reward.badges | body | marketplace.Badge[] | — | Badges are the three the profile shows first, the rarest first. |
listings[].expert.reward.badges[].id | body | string | — | ID is the badge's id, such as first-merge. |
listings[].expert.reward.badges[].name | body | string | — | Name is what it is called. |
listings[].expert.reward.badges[].pillar | body | string | — | Pillar is what it is for: use, share, community, contribute or expert. |
listings[].expert.reward.badges[].rarity | body | string | — | Rarity is how rare it is, from common up. |
listings[].expert.reward.level | body | integer (int64) | — | Level is the level the profile shows, such as 2. |
listings[].expert.reward.levelName | body | string | — | LevelName is its name, such as Shipper. |
listings[].expert.reward.pillars | body | marketplace.Pillars | — | |
listings[].expert.reward.pillars.community | body | integer (int64) | — | Community is claims for joining in: Discord, stars and follows. |
listings[].expert.reward.pillars.contribute | body | integer (int64) | — | Contribute is claims for building it: merged work, bounties and demos. |
listings[].expert.reward.pillars.expert | body | integer (int64) | — | Expert is claims for the work of an expert on the marketplace. |
listings[].expert.reward.pillars.share | body | integer (int64) | — | Share is claims for sharing it: referrals and posts. |
listings[].expert.reward.pillars.use | body | integer (int64) | — | Use is claims for using Hanzo: models and products. |
listings[].expert.reward.points | body | integer (int64) | — | Points are the lifetime points. |
listings[].expert.reward.tier | body | marketplace.Tier | — | |
listings[].expert.reward.tier.id | body | string | — | ID is the badge's id, such as billionaire. |
listings[].expert.reward.tier.label | body | string | — | Label is how the milestone reads, such as 1B+. |
listings[].expert.self | body | boolean | — | Self is whether the expert is the caller. |
listings[].expert.skills | body | string[] | — | Skills are what the expert is good at, in their own words: up to 20 names of up to 40 characters, each once whatever its case. |
listings[].expert.timezone | body | string | — | Timezone is the expert's IANA time zone, "America/Los_Angeles". |
listings[].expert.top | body | string[] | — | Top names the products in which the expert ranks among the best three of all experts, in the order of the product list. |
listings[].expert.verified | body | boolean | — | Verified is whether staff vouch for the expert. |
listings[].id | body | string | — | ID is the listing. |
listings[].kind | body | string | — | Kind is what it sells: agent, persona, app, skill, mcp, tool or expert. |
listings[].links | body | marketplace.Links | — | |
listings[].links.cli | body | string | — | CLI is the hanzo command that buys it. |
listings[].links.docs | body | string | — | Docs is the listing's documentation, when the seller named one. |
listings[].links.mcp | body | marketplace.MCPRef | — | |
listings[].links.mcp.op | body | string | — | Op is the operation within it. |
listings[].links.mcp.tool | body | string | — | Tool is the MCP tool: marketplace. |
listings[].price | body | any | — | Price is the exact USD price — per call for a tool, per job otherwise, the fixed engagement for an expert; "0" is free. |
listings[].public | body | boolean | — | Public is always true here. |
listings[].publisherOrg | body | string | — | PublisherOrg is the org that sells it. |
listings[].reputation | body | marketplace.Reputation | — | |
listings[].reputation.installs | body | integer (int64) | — | Installs is how many orgs installed a tool listing's tool. |
listings[].reputation.jobs | body | marketplace.JobCounts | — | |
listings[].reputation.jobs.completed | body | integer (int64) | — | Completed is released jobs. |
listings[].reputation.jobs.disputed | body | integer (int64) | — | Disputed is jobs ever disputed. |
listings[].reputation.rating | body | number (double) | — | Rating is the mean stars buyers gave, 1 to 5 to one decimal; null until the first review. |
listings[].reputation.reviews | body | integer (int64) | — | Reviews is how many buyers rated. |
listings[].seller | body | marketplace.Seller | — | |
listings[].seller.documented | body | boolean | — | Documented is true while the seller's tax form is certified and valid — what its agents' TaxPrincipalCredentials rest on. |
listings[].seller.org | body | string | — | Org is the seller org. |
listings[].seller.reputation | body | marketplace.Reputation | — | |
listings[].seller.reputation.installs | body | integer (int64) | — | Installs is how many orgs installed a tool listing's tool. |
listings[].seller.reputation.jobs | body | marketplace.JobCounts | — | |
listings[].seller.reputation.jobs.completed | body | integer (int64) | — | Completed is released jobs. |
listings[].seller.reputation.jobs.disputed | body | integer (int64) | — | Disputed is jobs ever disputed. |
listings[].seller.reputation.rating | body | number (double) | — | Rating is the mean stars buyers gave, 1 to 5 to one decimal; null until the first review. |
listings[].seller.reputation.reviews | body | integer (int64) | — | Reviews is how many buyers rated. |
listings[].title | body | string | — | Title is the shop-window name. |
listings[].tool | body | string | — | Tool names the thing sold, as the seller named it; empty for an expert, who is a person and not a thing. |
listings[].updatedAt | body | integer (int64) | — | UpdatedAt is when it was last edited, unix seconds. |
total | body | integer (int64) | — | Total is how many listings the search matched, past this page. |
Failure carries the platform error shape — see Errors.
Examples
hanzo marketplace shop listimport { Configuration, MarketplaceApi } from 'hanzoai';
const api = new MarketplaceApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.getMarketplaceShop();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).get_marketplace_shop()cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)
resp, _, err := client.MarketplaceAPI.GetMarketplaceShop(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::get_marketplace_shop(&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).getMarketplaceShop();curl https://api.hanzo.ai/v1/marketplace/shop \
-H "Authorization: Bearer $HANZO_API_KEY"Tool marketplace, op get_marketplace_shop — POST the JSON-RPC envelope to https://api.hanzo.ai/v1/mcp.
curl -X POST https://api.hanzo.ai/v1/mcp \
-H "Authorization: Bearer $HANZO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "marketplace",
"arguments": {
"op": "get_marketplace_shop",
"input": {}
}
}
}'