# List installed plugins

> The plugins a workspace installed, switched off ones included: each with its ref (name@marketplace), name, marketplace, display_name, description, version, the commit it was read at (sha), how it is fetched (fetch), what it brought (components: skills, agents, commands, mcp_servers, and whether it carries hooks, lsp, bin or output_styles, which only Claude Code on a runner uses), problems met when installing, enabled, who installed it and when, and update when the marketplace lists a newer version.

<div class="g1t-endpoint"><span class="g1t-method" data-method="get">GET</span><code>/workspaces/{workspace}/customize/plugins</code></div>

Members only.

`sha` is the commit the plugin was read at, which it stays pinned to; `update` is set when the marketplace now lists a newer version. `components` is what installing extracted: `skills` and `commands` joined the library as `plugin:name`, `agents` are templates to hire from, `mcp_servers` with `remote` true became connectors (stdio ones are for Claude Code only), and `hooks`, `lsp`, `bin` and `output_styles` say what only Claude Code on a runner uses.

- **Authentication:** Required. Send an [access token](/reference/api/#authentication) as `Authorization: Bearer`.
- **MCP tool:** [`customize`](/reference/mcp/#customize) with `action` `list_plugins`, and the same inputs
- **Scope:** An access token needs [`workspace:read`](/guides/authentication/#scopes).

## Path parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `workspace` | string | Yes | The workspace's slug. |

## Example request

```sh
curl https://api.g1t.sh/workspaces/flagon-io/customize/plugins \
  -H "Authorization: Bearer $G1T_TOKEN"
```

## Example response

A successful request answers `200` with:

```json
[
  {
    "id": "plg_01kq9f2h4k6m8p0r2t4v6x8z0b",
    "ref": "commit-commands@claude-plugins-official",
    "name": "commit-commands",
    "marketplace": "claude-plugins-official",
    "display_name": "Commit commands",
    "description": "Commands for committing, pushing and opening pull requests.",
    "version": "1.0.0",
    "sha": "9c1f4a6e8b0d2c4f6a8e1b3d5f7a9c1e3b5d7f90",
    "fetch": {
      "kind": "github",
      "repo": "anthropics/claude-plugins-official",
      "ref": null,
      "sha": "9c1f4a6e8b0d2c4f6a8e1b3d5f7a9c1e3b5d7f90",
      "path": "plugins/commit-commands"
    },
    "components": {
      "skills": [],
      "agents": [],
      "commands": [
        {
          "name": "commit",
          "path": "commands/commit.md"
        },
        {
          "name": "commit-push-pr",
          "path": "commands/commit-push-pr.md"
        }
      ],
      "mcp_servers": [],
      "hooks": false,
      "lsp": false,
      "bin": false,
      "output_styles": false
    },
    "problems": [],
    "enabled": true,
    "installed_by": "syntaqx",
    "installed_at": "2026-10-10T09:14:52.207Z",
    "update": {
      "version": "1.1.0",
      "sha": "e3b5d7f90a1c3e5b7d9f1a3c5e7b9d1f3a5c7e9b"
    }
  }
]
```

## Errors

A failed request answers with one of these statuses and a body like `{"error": {"code": "not_found", "message": "Repository not found."}}`. See [errors](/reference/api/#errors).

| Status | Code | When |
| --- | --- | --- |
| 401 | `unauthenticated` | A token is required, or the one sent is not valid. |
| 403 | `forbidden` | The token is valid but not allowed to do this, such as a member-only change or an agent token outside its repository. |
| 404 | `not_found` | It does not exist, or you cannot see it. |
| 422 | `invalid` | The input is not valid. `message` says which field and why. |
