> ## Documentation Index
> Fetch the complete documentation index at: https://docs.snorbe.deskrex.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# List Skills

> Retrieve the skills installed in the workspace tied to your API key

# List Skills

Returns the custom skills installed (and/or enabled) in the workspace associated with your API key. Use this to surface agent-capable skills in your UI, or to let downstream clients decide whether a skill is available before orchestrating a run.

<Note>
  API key authentication is required. Only skills in the API key's workspace are returned, and internal identifiers such as `storagePath` are never exposed.
</Note>

## Request

```
GET /api/v1/skill/list
```

### Headers

| Header          | Required | Description                 |
| --------------- | -------- | --------------------------- |
| `Authorization` | Yes      | `Bearer snorbe_...` API key |

<Note>
  The workspace is inferred from the API key. No query parameters or body required.
</Note>

## Response

```json theme={null}
[
  {
    "id": "cl123abc",
    "name": "Patent Search",
    "description": "Patent search workflow for semiconductor domain",
    "enabled": true,
    "isOfficial": false
  },
  {
    "id": "cl456def",
    "name": "Snorbe API",
    "description": "Invoke Snorbe REST API from inside an agent",
    "enabled": true,
    "isOfficial": true
  }
]
```

### Response fields

| Field         | Type      | Description                                                                                                    |
| ------------- | --------- | -------------------------------------------------------------------------------------------------------------- |
| `id`          | `string`  | Skill ID                                                                                                       |
| `name`        | `string`  | Skill display name                                                                                             |
| `description` | `string`  | Skill description                                                                                              |
| `enabled`     | `boolean` | Whether the skill is enabled in the workspace                                                                  |
| `isOfficial`  | `boolean` | Whether the skill came from the Snorbe official catalog (e.g. installed via `npx skills add deskrexai/snorbe`) |

<Tip>
  Internal identifiers such as `storagePath` and owner user IDs are intentionally omitted.
</Tip>

## Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://app.snorbe.deskrex.ai/api/v1/skill/list" \
    -H "Authorization: Bearer snorbe_your_api_key_here"
  ```

  ```python Python theme={null}
  import requests

  resp = requests.get(
      "https://app.snorbe.deskrex.ai/api/v1/skill/list",
      headers={"Authorization": "Bearer snorbe_your_api_key_here"},
  )
  skills = resp.json()
  for skill in skills:
      status = "enabled" if skill["enabled"] else "disabled"
      print(f"{skill['name']} ({status}, official={skill['isOfficial']})")
  ```

  ```typescript TypeScript theme={null}
  const resp = await fetch("https://app.snorbe.deskrex.ai/api/v1/skill/list", {
    headers: { Authorization: "Bearer snorbe_your_api_key_here" },
  });
  const skills = await resp.json();
  for (const skill of skills) {
    const status = skill.enabled ? "enabled" : "disabled";
    console.log(`${skill.name} (${status}, official=${skill.isOfficial})`);
  }
  ```
</CodeGroup>

## Error responses

| HTTP status | Code                | Description                          |
| ----------- | ------------------- | ------------------------------------ |
| 401         | `UNAUTHORIZED`      | API key missing, invalid, or expired |
| 429         | `TOO_MANY_REQUESTS` | Rate limit exceeded                  |

## Related

* [List Tools](/en/api-reference/list-tools)
* [List Agents](/en/api-reference/list-agents)
* [Execute Agent (SSE streaming)](/en/api-reference/stream-agent-run)
