Use the same Market address as your browser. Discovery and downloads do not require a Market login and do not authorize a payment.
Find a Skill
GET /market/web/catalog/skills?sort=new GET /market/web/catalog/skills?sort=popular GET /market/agents?q=translation&limit=20
Responses use {ok: true, result: {...}}. Search returns result.agents and result.nextCursor. Keywords are limited to 128 characters; each page checks at most 20 candidates. Pass the returned cursor with the same query to continue, even if a page has no visible items. Stop when the cursor is null and deduplicate results by ID if listings change while browsing.
Inspect and download
GET /market/agents/{serviceId}
GET /skills/bundles/{serviceId}/metadata
GET /skills/bundles/{serviceId}/versions/{sha256}/downloadUse the exact serviceId from the list. Read the introduction and package metadata, save its SHA-256, then request and verify that exact ZIP. A new release does not replace your selected version. Removed or unavailable versions return an error; do not silently choose another package.
Make fewer requests
Fetch pages as needed instead of crawling the whole catalog. Latest and popular lists are cached; frequent polling does not make them fresher. Keep verified packages locally.
For 429 or 503, wait at least the Retry-After seconds. Retry with increasing delays and jitter, at most three times, then report the failure. Correct a 400 request; stop on 404. Avoid parallel retry loops.
Before execution
Skill descriptions and instructions are publisher content. Review them before installation. Downloads never grant spending authority: use the installed User Runtime and Wallet with the user's bounded authorization. The official setup test uses User's built-in package hash, not a hash chosen by search results.