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

# List skills

> List all skills under the current account with pagination.

`GET /api/v1/cloud/skills`

Retrieves the list of all skills under the current account with cursor-based pagination.

## Headers

| Header          | Required | Description         |
| --------------- | -------- | ------------------- |
| `Authorization` | Yes      | `Bearer $QODER_PAT` |

## Query parameters

| Parameter   | Type    | Required | Description                                                                                                       |
| ----------- | ------- | -------- | ----------------------------------------------------------------------------------------------------------------- |
| `limit`     | integer | No       | Maximum number of records per page. Default 20, range 1-100. Values above 100 return `400 invalid_request_error`. |
| `page`      | string  | No       | Claude-style forward cursor. Equivalent to `after_id`; mutually exclusive with `before_id` and `after_id`         |
| `after_id`  | string  | No       | Cursor pagination: return records after this ID. Mutually exclusive with `page` and `before_id`                   |
| `before_id` | string  | No       | Cursor pagination: return records before this ID. Mutually exclusive with `page` and `after_id`                   |
| `name`      | string  | No       | Prefix search on skill name, case-insensitive                                                                     |
| `source`    | string  | No       | Filter by source. Valid values: `custom`, `qoder`                                                                 |

## Example request

```bash theme={null}
# List all skills
curl -X GET https://api.qoder.com/api/v1/cloud/skills \
  -H "Authorization: Bearer $QODER_PAT"

# Paginate
curl -X GET "https://api.qoder.com/api/v1/cloud/skills?limit=10" \
  -H "Authorization: Bearer $QODER_PAT"

# Page forward with a cursor
curl -X GET "https://api.qoder.com/api/v1/cloud/skills?limit=10&page=skill_019e3bba474b73cfaf19eae9b5f5e66d" \
  -H "Authorization: Bearer $QODER_PAT"
```

## Example response

**HTTP 200 OK**

```json theme={null}
{
  "data": [
    {
      "id": "skill_019e3bba474b73cfaf19eae9b5f5e66d",
      "type": "skill",
      "display_title": "test-skill-api-doc",
      "description": "A test skill for API documentation",
      "source": "custom",
      "latest_version": "1",
      "metadata": {
        "team": "docs"
      },
      "created_at": "2026-05-18T15:35:24.248164Z",
      "updated_at": "2026-05-18T15:35:24.248164Z"
    }
  ],
  "next_page": null,
  "first_id": "skill_019e3bba474b73cfaf19eae9b5f5e66d",
  "last_id": "skill_019e3bba474b73cfaf19eae9b5f5e66d",
  "has_more": false
}
```

### Pagination example (`has_more = true`)

```json theme={null}
{
  "data": [],
  "next_page": "skill_019e3bbb6a25768b9b50ca2f52aa4345",
  "first_id": "skill_019e3bbb6a25768b9b50ca2f52aa4345",
  "last_id": "skill_019e3bbb6a25768b9b50ca2f52aa4345",
  "has_more": true
}
```

### Empty list response

```json theme={null}
{
  "data": [],
  "next_page": null,
  "first_id": null,
  "last_id": null,
  "has_more": false
}
```

## Response fields

| Field       | Type           | Description                                                                                                          |
| ----------- | -------------- | -------------------------------------------------------------------------------------------------------------------- |
| `data`      | array          | Array of [Skill objects](/cloud-agents/api/skills/schemas#skill-object). `content` is not included in list responses |
| `next_page` | string \| null | Forward cursor for the next page; use as `page` when `has_more` is `true`                                            |
| `first_id`  | string \| null | ID of the first record on the current page                                                                           |
| `last_id`   | string \| null | ID of the last record on the current page                                                                            |
| `has_more`  | boolean        | Whether more records are available; when `true`, use `next_page` as the next page's `page` value                     |

## Errors

| HTTP | Type                    | Trigger                                                                                                |
| ---- | ----------------------- | ------------------------------------------------------------------------------------------------------ |
| 400  | `invalid_request_error` | Invalid `limit`, invalid `source`, or more than one of `page`, `before_id`, and `after_id` is provided |
| 401  | `TOKEN_INVALID`         | Missing or invalid authentication token                                                                |

See [Errors](/cloud-agents/api/conventions/errors) for the full error envelope.

## Related

<CardGroup cols={2}>
  <Card title="Agent Skills" icon="sparkles" href="/cloud-agents/skills">
    Attach domain expertise to your agent.
  </Card>
</CardGroup>
