---
title: "Get a skill"
method: GET
path: "/skills/{id}"
tags: ["Skills"]
---

# Get a skill

`GET /skills/{id}`

## Request

- Base URL: `https://app.gc.ai/api/external/v1`
- URL: `https://app.gc.ai/api/external/v1/skills/{id}`
- Auth: API key in header `Authorization`
- TypeScript: <https://skmtc.dev/gc-ai/apis/gc-ai-external-api/docs/skills/:id/get.ts> (a function with typed inputs; its response is checked against the schema)

Fetch a single skill by ID, including its instructions and attached files.

Returns `404` if the skill does not exist or is not accessible to the caller. User-scoped keys require Skills access, including for official skills. User skills follow the same visibility rules as `GET /skills`.

## Path parameters

- `id` string, uuid, required: Skill ID from `GET /skills`.

## Response `200`

The skill

- Skill
  - `id` string, uuid, required: Unique skill identifier
  - `name` string, required: Skill name
  - `description` string, nullable, required: Short description of what the skill does, or null if unset
  - `content` string, required: The skill instructions: the prompt text the model receives when the skill runs
  - `visibility` 'private' | 'organization', required: `private` (only the creator and users it has been explicitly shared with) or `organization` (visible to everyone in the org). Official skills report `organization`.
  - `is_official` boolean, required: Whether this is an official GC AI skill. Official skills are read-only and cannot be edited or deleted via the API.
  - `files` SkillFile[], required: Files attached to the skill as reference context
    - `id` string, uuid, required: Attached file identifier
    - `name` string, required: Attached file name
  - `legal_category` 'commercial_contracts' | 'privacy_compliance' | 'employment' | 'procurement' | 'governance' | 'product_and_ip_counsel' | 'legal_operations' | 'real_estate_and_insurance' | 'litigation_and_disputes' | 'regulatory_and_compliance' | 'other' | 'null', nullable, required: The area of law the skill is grouped under, or null when it is uncategorized
  - `created_at` string, nullable, required: ISO 8601 creation timestamp
  - `updated_at` string, nullable, required: ISO 8601 last-updated timestamp

## Other responses

- `400`: Invalid skill ID format
- `401`: Missing or malformed API key
- `403`: Invalid API key
- `404`: Skill not found or not accessible to the caller
- `429`: Rate limit exceeded. See [Rate Limits](https://docs.gc.ai/api-reference/concepts/rate-limits) for the tiers, limits, and how to back off.
- `500`: Internal server error
- `503`: Service temporarily unavailable

---

[API](https://skmtc.dev/gc-ai/apis/gc-ai-external-api.md) - [All operations](https://skmtc.dev/gc-ai/apis/gc-ai-external-api/llms.txt) - [OpenAPI document](https://skmtc.dev/gc-ai/apis/gc-ai-external-api/revisions/2bbdfddf7107?raw)
