Skip to main content
Perplexity

Search documentation

Type to search this documentation.

Create a skill

POST/v1/skillsCreate a skill

Creates a skill from a zip bundle. The bundle must contain a SKILL.md that provides the skill name and description; those fields are read from the bundle, not from the request.

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

201The created 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"
  }
}
409Skill limit reached for this Project; delete a skill to create anotherapplication/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