---
title: "Update a skill"
method: PATCH
path: "/skills/{slug}"
tags: ["Skills"]
---

# Update a skill

`PATCH /skills/{slug}`

## Request

- Base URL: `https://api.parley.so/v1`
- URL: `https://api.parley.so/v1/skills/{slug}`
- Auth: HTTP bearer

Replace a skill's SKILL.md (content) or everything it holds (uploadId), change when it's used, or turn it on or off. Omitted fields are left unchanged. A skill's slug and scope can't change. Returns 400 INVALID_REFERENCE when uploadId isn't an upload or nothing was uploaded to it, and 400 INVALID_SKILL when the SKILL.md or archive can't be read.

## Path parameters

- `slug` string, required: The skill's slug.

## Request body

- object
  - `content` string: The skill's SKILL.md, which replaces the current one and keeps the bundled documents: YAML frontmatter with a name (up to 120 characters) and a description (up to 2,000), then the instructions in markdown, 100,000 characters in all. For an auto skill, the description is what the assistant matches tasks against, so say when to use it. Refer to a bundled document by its path, such as references/engagement-letter.docx.
  - `uploadId` string: The id of an upload, once its bytes have been PUT to its url, holding the whole skill, which replaces everything it holds: a .skill or .zip archive with SKILL.md at its root or inside one top-level folder, plus any documents under references/ (pdf, doc, docx, md, txt, json, csv, html, pptx, xls, xlsx; up to 100 files and 25 MB), or a single .md file used as SKILL.md. A manifest.yaml in the archive is ignored.
  - `activation` 'auto' | 'on-demand': When the skill is used. auto: Parley's assistant uses it whenever its description fits the task. on-demand: only when someone runs it, from a project's Run Skill list or by typing /<slug> in a message.
  - `enabled` boolean: Turn the skill on or off.

## Response `200`

OK

- Skill
  - `id` string, required: The skill ID.
  - `slug` string, required: The skill's folder name, chosen when the skill is created. It is how the skill is addressed, and the name the assistant loads it by.
  - `name` string, required: The skill name, from its SKILL.md.
  - `description` string, required: What the skill is for, from its SKILL.md.
  - `scope` 'organization' | 'personal', required: Who can use the skill. organization: everyone in the organization. personal: only the person who created it.
  - `activation` 'auto' | 'on-demand', required: When the skill is used. auto: Parley's assistant uses it whenever its description fits the task. on-demand: only when someone runs it, from a project's Run Skill list or by typing /<slug> in a message.
  - `enabled` boolean, required: Whether the skill is on. Parley never uses a skill that is off.
  - `createdAt` string, date-time, required: When the skill was created.
  - `updatedAt` string, date-time, required: When the skill was last changed.

## Other responses

- `400`: The request was invalid. VALIDATION_FAILED, INVALID_REFERENCE, INVALID_SKILL.
- `401`: Missing or invalid credentials. UNAUTHORIZED.
- `403`: You don't have permission. FORBIDDEN.
- `404`: Not found. NOT_FOUND.
- `429`: Too many requests, or a usage limit was reached. TOO_MANY_REQUESTS.

---

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