Skip to main content
Skills give the agent domain expertise on demand. The model sees each skill by name and description, and loads the full instructions only when it decides they are needed — a progressive disclosure pattern described in Designing, Refining, and Maintaining Agent Skills.

Why use skills

  • Specialize. Add document generation and domain workflows on top of base prompting.
  • Pay context only on use. Until a skill is loaded, it costs only its name and description.
  • Compose. Mix built-in skills with inline instructions in one request.
  • Reuse. Upload a custom skill once and reference it by ID in any request.

How skills work

You pass a skills array on the request. Each entry is a built-in selection from the catalog, an inline skill you define for the request, or a custom skill you created and uploaded to Perplexity. You can combine up to 16 skills of any type in one request. The description is the routing trigger. Write it to tell the model when to load the skill. Loading a skill costs a step: the model spends one turn calling load_skill and reading the body, and only later turns acting on it. A direct-model request that omits max_steps runs a single step, so the model can load a skill but never act on it. Set max_steps high enough for the load plus the actual work.

Built-in skills

Select a built-in skill with one JSON object: { "type": "builtin", "name": "office/pdf" }.

Office

Generate PDF, Word, PowerPoint, and Excel documents from scratch, with structural validation and visual QA. Select a specific leaf, or select office to grant all four at once and let the model pick the format.
Office skills create documents from scratch. They do not edit files you upload.

Inline skills

Use inline skills for one-off or account-specific guidance the model should load on demand: style guides, playbooks, design systems, house rules.
Inline skills have no files, no dependencies, no sandbox mounts, no reusable library, and are never echoed back in the response.

Example: one-off inline skill

Combine office/pdf with an inline design-system skill to render a house-styled one-page AI-industry stock report. Use this form while the guidance is request-specific; when it stabilizes, upload it as a custom skill and reference it by ID.
Retrieve file bytes through the files endpoints in Working with files.

Custom skills

A custom skill is a skill you create and upload to Perplexity: a versioned bundle of instructions and supporting files, managed in the API Portal and referenced by ID from any request. Custom skills use the open Agent Skills format. Each custom skill is bound to a single Project and lives inside it. The Project owns the skill: any API key in that Project can reference it, and keys from other Projects cannot. They are built for running the Agent API inside your own harness: the skill carries the procedure and output contract your pipeline expects, versioned independently of your code. A bundle ships more than text. Alongside the instructions you can include .py and .sh scripts, and the model runs them in the Sandbox — so a skill can carry not just how to do the work, but the exact code that does it, plus any reference files the model reads on demand.

Parameters

The skill’s name and description come from the stored bundle.

Create a custom skill bundle

A skill bundle is a ZIP archive with exactly one top-level folder that contains exactly one SKILL.md:

Download the example bundle

fact-check.zip — this exact bundle, ready to upload in the API Portal.
SKILL.md starts with YAML frontmatter that defines how the model discovers the skill, followed by the skill body:
The description doubles as a guard: it also tells the model when not to load the skill, which protects the request’s step budget. Other frontmatter keys are ignored. Everything after the frontmatter is the skill body, returned to the model when it loads the skill. A bundle can include any file type: reference documents the model reads on demand, and .py or .sh scripts it runs in the Sandbox, which has network access and installs packages with pip. Supporting files cost no tokens until the model reads them. Reference them from the body with relative paths, as in the example above.

Manage custom skills

  1. Open Skills in the API Portal.
  2. Select Create skill and upload the bundle as a .zip — the name and description are read from SKILL.md. A bare SKILL.md file is not accepted.
  3. Copy the skill ID (skill_...) from the table.
Only an Admin can create, update, or delete skills. Any API key in the project can use them in requests. From each skill’s actions menu you can also Update skill (upload new files as a new version), Download files (any version), and Delete skill (permanent, removes all versions).

Use a custom skill

Custom skills are built for running the Agent API inside your own pipeline: the skill carries a procedure the model must follow and a self-check it must pass, versioned independently of your prompts. The following request asks a factual question and tells the model to verify its own answer with the fact-check skill from the bundle above. Replace YOUR_SKILL_ID with the ID you copied from the API Portal.
The model drafts the answer, verifies each claim with web search, corrects what fails, then writes fact_check.json and runs the bundled validator in the sandbox — passing that self-check before it answers. The response output array records the loaded skill as a skill_loaded item, followed by the sandbox steps the run took — reading the skill’s reference file, writing fact_check.json, and running the validator — and ends with the assistant message:
When streaming, each skill load also emits a response.skill.loaded event. The skills array you passed on the request is not echoed back on the response object.

Versioning

Every custom skill upload creates a new version. Each version is an immutable, complete snapshot of the bundle — not a delta. Omitting version (or passing "latest") selects the newest version, resolved once when the request is accepted — an upload made mid-run does not change what a running response loads. Pin production traffic to a specific version:
A pinned version always loads the same immutable bundle and never changes; only "latest" moves — a version uploaded by any Admin immediately changes what your "latest" requests run. View version history and download any version in the API Portal.

Error handling

Custom skill references are validated when you submit the request. A bad reference fails the whole request with HTTP 400 before the run starts: Failures after the run has started are handled in-band instead: if a skill cannot be loaded mid-run, the error is returned to the model, which continues without the skill, and the response still completes.
A skill_loaded output item records the load attempt and appears even when loading failed; the error text goes to the model, not into the response.

Limits

The bundle must stay within these limits, checked on upload:
  • 32 MiB total — enforced on both the uploaded ZIP and its decompressed contents.
  • 100 files maximum.
  • Exactly one top-level folder and one SKILL.md.
  • No file or folder name longer than 255 characters.
  • Up to 500 custom skills per project.

Next steps

Agent skills cookbook

Full walkthrough of the daily AI stock news PDF, including file download and the complete design book.

Working with files

Background mode

Agent API reference