---
title: "Download skill"
method: GET
path: "/skills/{skill_id}/download"
tags: ["Skills"]
---

# Download skill

`GET /skills/{skill_id}/download`

Generate a signed URL to download a skill's contents as a `.skill` archive (ZIP). When `version_id` is provided, returns that exact version; otherwise returns the current draft.

## Path parameters

- `skill_id` string, required

## Query parameters

- `version_id` string

## Response `200`

Signed download URL for the requested skill archive.

- object
  - `download_url` string — Short-lived signed URL pointing at the `.skill` archive in object storage.
  - `filename` string — Suggested filename for the archive (`<skill name>.skill`).
  - `media_type` 'application/zip' — Media type of the archive at `download_url`.
  - `size` integer, nullable — Size of the archive in bytes.
  - `id` string — ID of the skill the archive was generated for.
  - `version_id` string, nullable — Version that was archived, or `null` if the skill has no current version.
  - `major_version` integer, nullable — Major version number of the archived version, or `null` if unavailable.

## Other responses

- `401` — Unauthorized — missing or invalid API key.
- `403` — Forbidden — the caller cannot read this skill.
- `404` — Skill, version, or skill files not found.
- `502` — Failed to generate a signed download URL from object storage.

---

[API](https://skmtc.dev/gumloop/apis/public-api.md) · [All operations](https://skmtc.dev/gumloop/apis/public-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/gumloop/public-api/revisions/115f2d6ce387/schema)
