Skip to main content
Perplexity

Search documentation

Type to search this documentation.

Add a skill revision

PUT/v1/skills/{skill_id}Add a skill revision

Uploads a new zip bundle as a new revision of an existing skill. Pass the revision you expect to replace as the required expected_revision; the request fails with 409 if the skill has already moved past it, so the update cannot race a concurrent write. Name and description are re-read from the new bundle.

Parameters

skill_idstringpathrequired

Skill identifier returned by create or `GET /v1/skills`

expected_revisionstringqueryrequired

Opaque revision token the skill must currently be at. The write applies only if it matches, so it cannot race a concurrent update.

Request body

required

The skill bundle as a zip archive

multipart/form-data
object
filestring · binaryrequired

The skill bundle, a zip archive containing `SKILL.md`

Example request
{
  "file": "binary"
}

Responses

200The updated skillapplication/json
objectManagedSkill
created_atstring · date-time
descriptionstring

Skill description, read from the bundle's `SKILL.md`

latest_revisionstring

Opaque token of the skill's current latest revision; pass as expected_revision to update or delete

namestring

Skill name, read from the bundle's `SKILL.md`

revisionstring

Opaque token of the revision returned in this response; the latest revision, or the specific one requested via `revision`

skill_idstringrequired

Skill identifier

updated_atstring · date-time
Example response
{
  "created_at": "2026-06-09T00:00:00Z",
  "description": "string",
  "latest_revision": "string",
  "name": "string",
  "revision": "string",
  "skill_id": "string",
  "updated_at": "2026-06-09T00:00:00Z"
}
400Invalid request or bundleapplication/json
objectApiError
errorobject
Show child attributes
codeintegerrequired

HTTP status code

messagestringrequired

Human-readable error message

paramnull | string

Parameter that caused the error

typestringrequired

Error type identifier

Example response
{
  "error": {
    "code": 0,
    "message": "string",
    "param": "string",
    "type": "string"
  }
}
404Skill not foundapplication/json
objectApiError
errorobject
Show child attributes
codeintegerrequired

HTTP status code

messagestringrequired

Human-readable error message

paramnull | string

Parameter that caused the error

typestringrequired

Error type identifier

Example response
{
  "error": {
    "code": 0,
    "message": "string",
    "param": "string",
    "type": "string"
  }
}
409Revision conflict; the skill moved past expected_revisionapplication/json
objectApiError
errorobject
Show child attributes
codeintegerrequired

HTTP status code

messagestringrequired

Human-readable error message

paramnull | string

Parameter that caused the error

typestringrequired

Error type identifier

Example response
{
  "error": {
    "code": 0,
    "message": "string",
    "param": "string",
    "type": "string"
  }
}
413Bundle exceeds the size limitapplication/json
objectApiError
errorobject
Show child attributes
codeintegerrequired

HTTP status code

messagestringrequired

Human-readable error message

paramnull | string

Parameter that caused the error

typestringrequired

Error type identifier

Example response
{
  "error": {
    "code": 0,
    "message": "string",
    "param": "string",
    "type": "string"
  }
}
429Rate limit or upload concurrency limit exceededapplication/json
objectApiError
errorobject
Show child attributes
codeintegerrequired

HTTP status code

messagestringrequired

Human-readable error message

paramnull | string

Parameter that caused the error

typestringrequired

Error type identifier

Example response
{
  "error": {
    "code": 0,
    "message": "string",
    "param": "string",
    "type": "string"
  }
}
502Skill service unavailableapplication/json
objectApiError
errorobject
Show child attributes
codeintegerrequired

HTTP status code

messagestringrequired

Human-readable error message

paramnull | string

Parameter that caused the error

typestringrequired

Error type identifier

Example response
{
  "error": {
    "code": 0,
    "message": "string",
    "param": "string",
    "type": "string"
  }
}
Documentation menu