---
title: "List a toolbox's skill versions"
method: GET
path: "/toolbox/{id}/skill-version"
tags: ["Toolboxes"]
---

# List a toolbox's skill versions

`GET /toolbox/{id}/skill-version`

## Request

- Base URL: `https://api.elaichi.ai`
- URL: `https://api.elaichi.ai/toolbox/{id}/skill-version`
- Auth: HTTP bearer

Every write of the toolbox's `skill`, newest first, cursor-paginated — the 50 newest are kept per toolbox, older ones are pruned on the next write. Restoring a version is an ordinary `PATCH /toolbox/{id} { skill }` with its text, which records a new version. Requires `edit` access or ownership: `404` when the caller cannot see the toolbox, `403` when they can see it below `edit`. Rejects a dynamic id with `400`.

## Path parameters

- `id` string, required

## Query parameters

- `limit` integer
- `cursor` string

## Headers

- `X-Organization-Id` string

## Response `200`

OK

- object
  - `result` object[], required
    - `id` string: Version id (`skv_…`).
    - `kind` 'written' | 'reaffirmed' | 'cleared' | 'copied': `written`: new text. `reaffirmed`: the same text saved again ("still accurate"). `cleared`: the skill was removed. `copied`: a toolbox stamped from a template started with its skill.
    - `excerpt` string, nullable: The opening of the text as one plain line, at most 200 code points. Null for `cleared`.
    - `char_count` integer: Length in Unicode code points; 0 for `cleared`.
    - `author` string, nullable: Who made this write (`usr_…`).
    - `author_label` string, nullable: Their name, else email. Null beside a non-null `author`: no longer a member.
    - `origin_template_id` string, nullable: `copied` rows: the template it came from.
    - `origin_template_name` string, nullable: Its current name; null once deleted.
    - `created_at` string, date-time
    - `is_current` boolean: True on the newest version — the text the resource holds now.
    - `matches_current` boolean: True when this version's text equals the resource's current skill (restoring it would change nothing). Not the same as `is_current`: a later "still accurate" save repeats an older version's text, and both match.
  - `next_cursor` string, nullable, required
  - `prev_cursor` string, nullable, required

## Other responses

- `400`: Bad request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found
- `429`: Rate limited

---

[API](https://skmtc.dev/elaichi/apis/elaichi-api.md) · [All operations](https://skmtc.dev/elaichi/apis/elaichi-api/llms.txt) · [OpenAPI document](https://skmtc.dev/elaichi/apis/elaichi-api/revisions/b22cfb7b6d15?raw)
