---
title: "One plugin by id [read]"
method: GET
path: "/plugins/{name}"
---

# One plugin by id \[read\]

`GET /plugins/{name}`

## Request

- Base URL: `https://api.agentsky.dev/v1`
- URL: `https://api.agentsky.dev/v1/plugins/{name}`
- Auth: HTTP bearer

`name` is a Plugin id (app:gmail, tool:exa.web, chat:slack, bundle:review-kit, skill:skl_…, mcp:<sha8>, mac:meetings, browser:mine); a bare name is a plugin bundle's (the same as bundle:<name>). Read through the same sources as GET /plugins?view=…; an app nobody connected is looked up in the connector catalog. Any id of a merged product (chat:slack, app:slack, tool:code-review) answers the product under its first id (app:slack_v2, app:github). `unavailable` names this plugin's sources when they could not be read. Once the workspace has the plugin, `used_by` names the agents that use it: every saved agent that has not switched it off (`all` is true when none has; a Mac feature or browser login is used by every agent, one the workspace switched off by none). A bundle's `name` is its marketplace display name, or its name in title case. 404 not_found when no source knows the id.

## Path parameters

- `name` string, required

## Query parameters

- `agent_id` string
- `session_id` string

## Response `200`

OK

- object
  - `id` string, required: `<source>:<key>`: app:gmail, tool:dataforseo.serp, chat:slack, bundle:review-kit, skill:skl_…, mcp:<first 8 hex of the address's sha256>, mac:meetings, browser:mine.
  - `name` string, required
  - `description` string, required: One line
  - `provider` object, required
    - `id` string, required
    - `name` string, required
    - `domain` string, nullable, required
    - `logo` string, nullable, required: Absolute URL of the provider's mark; null: show its initial
  - `price` object, required
    - `display` string, required: One short phrase: "$0.002 / call", "Free", "Provider pricing"
    - `unit` 'call' | 'mtok' | 'month' | 'null', nullable, required
    - `amount` number, nullable, required: USD per unit, from the gateway's endpoint directory
    - `list_amount` number, nullable
    - `kind` 'free' | 'credits' | 'plan' | 'provider', required
  - `status` 'added' | 'needs_you' | 'available' | 'off', required
  - `scope` 'me' | 'workspace', required
  - `uses` string[], required
  - `gives` object[], required
    - `type` 'mcp' | 'api' | 'skill' | 'channel' | 'mac', required
    - `name` string, required
    - `ref` string, required
  - `parts` PluginPart[], required: Everything the plugin is made of, each with its own status: an app's connection (and a workspace service's tools as MCP parts), a tool's capabilities, a chat app's connections, a bundle's skills, MCP servers and the apps it uses, a Mac feature's connections by category and the macOS permissions it asks for
    - `type` 'connection' | 'tool' | 'mcp' | 'skill' | 'command' | 'chat' | 'routine' | 'rule' | 'mac' | 'agent', required
    - `name` string, required
    - `description` string: A skill part's latest saved description, when available; used in the composer's slash picker
    - `status` 'added' | 'needs_you' | 'paused' | 'available', required
    - `ref` string, required
    - `category` string
    - `plugin_id` string: In a merged product, the id this part came from (chat:slack), to add or remove that part alone
    - `owned` boolean: For app accounts, true only when the signed-in person owns and can manage this connection
    - `healthy` boolean: When known, the provider account health; false requires reconnecting
    - `dead` boolean: When known, whether the provider authorization has expired
  - `requires` object[], required
    - `plugin_id` string, required
    - `reason` string, required
  - `off_for` object, required
    - `agents` string[], required
    - `session` boolean
  - `next` object: What a person has to finish before it works
    - `url` string
    - `steps` string[]
  - `aliases` string[]: One product offered by several sources (Slack as a connected app and as a chat app; GitHub and its code review tool) is one plugin under its first id; these are its other ids, which still answer GET /plugins/{id} and still count in off lists
  - `unavailable` PluginGap[], required
    - `source` 'app' | 'tool' | 'chat' | 'bundle' | 'skill' | 'mcp' | 'mac' | 'browser', required
    - `message` string, required
  - `used_by` object: The agents that use it; absent for a plugin the workspace has not added.
    - `all` boolean, required: True when no agent switched it off
    - `agents` object[], required
      - `id` string, required
      - `name` string, required

## Other responses

- `default`: Error — { error: { code, message, request_id } }

## Changes

- **2026-11-03** `8280a065ef6a`: 3 info
  - added the optional property `allOf[#/components/schemas/Plugin]/parts/items/dead` to the response with the `200` status
  - added the optional property `allOf[#/components/schemas/Plugin]/parts/items/healthy` to the response with the `200` status
  - added the optional property `allOf[#/components/schemas/Plugin]/parts/items/owned` to the response with the `200` status
- **2026-11-02** `e5e8f0229a99`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/agentsky/apis/agentsky-developer-api/changes/plugins/:name/get.md)

---

[API](https://skmtc.dev/agentsky/apis/agentsky-developer-api.md) - [All operations](https://skmtc.dev/agentsky/apis/agentsky-developer-api/llms.txt) - [OpenAPI document](https://skmtc.dev/agentsky/apis/agentsky-developer-api/revisions/8280a065ef6a?raw)
