# Marketplace

Source: https://webagent-docs-staging.lookover.ai/api-reference/marketplace

> Browse, publish and install skills.

## GET /v1/marketplace

List approved skills (public plus your own), most installed first; paged

Parameters:
- `limit` (query): integer
- `cursor` (query): string
- `q` (query): string
- `icp` (query): "tester" | "engineer" | "pentester" | "security"
- `tag` (query): string
- `category` (query): string
- `engine` (query): "chromium" | "firefox" | "webkit"
- `without` (query): string
- `visibility` (query): "private" | "unlisted" | "public"

Responses: 200 `MarketplaceCatalogResponse`, default `ErrorBody`

## GET /v1/marketplace/{name}

Get a skill by name with ratings, history and this tenant's install

Parameters:
- `name` (path, required): string

Responses: 200 `MarketplaceSkillDetail`, default `ErrorBody`

## GET /v1/marketplace/{name}/consent

What an admin reviews before installing a version, and whether it is consented

Parameters:
- `name` (path, required): string
- `version` (query): string

Responses: 200 `ConsentSummaryResponse`, default `ErrorBody`

## GET /v1/marketplace/{name}/diff

What version `to` asks of an installer beyond `from`

Parameters:
- `name` (path, required): string
- `from` (query, required): string
- `to` (query, required): string

Responses: 200 `SkillVersionDiffResponse`, default `ErrorBody`

## POST /v1/marketplace/{name}/install

Install a skill for this tenant (admins); another tenant's skill needs consent

Parameters:
- `name` (path, required): string

Request body (JSON): `InstallSkillRequest`

Responses: 200 `InstalledSkill`, default `ErrorBody`

## DELETE /v1/marketplace/{name}/install

Uninstall a skill (admins); its consent is revoked

Parameters:
- `name` (path, required): string

Responses: 200 `Deleted`, default `ErrorBody`

## POST /v1/marketplace/{name}/rating

Rate a skill (1 to 5 stars); rating again replaces it

Parameters:
- `name` (path, required): string

Request body (JSON): `RateSkillRequest`

Responses: 200 `RateSkillResponse`, default `ErrorBody`

## GET /v1/marketplace/{name}/versions/{version}/package

Download a version's package archive (gzip; digest in x-skill-digest)

Parameters:
- `name` (path, required): string
- `version` (path, required): string

Responses: 200, default `ErrorBody`

## GET /v1/marketplace/installed

List this tenant's installed skills with the version that resolves now

Responses: 200 `ListInstalledSkillsResponse`, default `ErrorBody`

## POST /v1/marketplace/packages

Upload a skill package (gzip archive)

Parameters:
- `visibility` (query): "private" | "unlisted" | "public"

Responses: 201 `MarketplaceSubmission`, default `ErrorBody`

## GET /v1/marketplace/submissions

List this tenant's submissions, newest first

Responses: 200 `ListSubmissionsResponse`, default `ErrorBody`

## POST /v1/marketplace/submissions

Submit a SKILL.md text

Parameters:
- `Idempotency-Key` (header): string. Retry safely: the same key and body replay the first answer.

Request body (JSON): `SubmitSkillRequest`

Responses: 201 `MarketplaceSubmission`, default `ErrorBody`

## DELETE /v1/marketplace/submissions/{name}/{version}

Withdraw a submission (admins)

Parameters:
- `name` (path, required): string
- `version` (path, required): string

Responses: 200 `MarketplaceSubmission`, default `ErrorBody`

## POST /v1/marketplace/submissions/{name}/{version}/deprecate

Deprecate one of your versions (admins)

Parameters:
- `name` (path, required): string
- `version` (path, required): string

Request body (JSON): `DeprecateSubmissionRequest`

Responses: 200 `MarketplaceSubmission`, default `ErrorBody`

## POST /v1/marketplace/submissions/{name}/{version}/yank

Yank one of your versions (admins)

Parameters:
- `name` (path, required): string
- `version` (path, required): string

Request body (JSON): `YankSubmissionRequest`

Responses: 200 `MarketplaceSubmission`, default `ErrorBody`
