Skip to main content
POST
Publish a skill from a bundle upload

Authorizations

Authorization
string
header
required

A Recursion API key, created in the console under API keys.

Headers

x-tenant-id
string

Optional tenant consistency check. When present, it must name the tenant bound to the API key, including when x-organization-id is default.

Minimum string length: 1
x-organization-id
string

Organization in which to act. Required for a tenant-scoped API key. Optional for an organization-scoped key, where it must name that same organization. The value may be an organization id or default.

Minimum string length: 1

Body

multipart/form-data

Request body for creating a skill by uploading a zipped skill directory in the bundle part. The document, name and description come from the archive's SKILL.md.

bundle
file
required

A zipped Agent Skills directory containing a root SKILL.md and optional executable helpers, references, and assets.

display_title
string

Human-readable title for listings. Defaults to the frontmatter name.

metadata
string

Caller-owned key/value data as a JSON object, since a form part cannot carry structure. Rejected rather than dropped when it does not parse.

skill_group_id
string

Catalog group to file this skill under. Omit the part to create the skill ungrouped.

Response

A reusable procedure an agent loads when it judges the procedure relevant. Its name and description are disclosed in every turn; the instructions enter the conversation only when the agent activates it. Updating a skill mints a new immutable SkillVersion.

A reusable procedure an agent loads when it judges the procedure relevant. Its name and description are disclosed in every turn; the instructions enter the conversation only when the agent activates it. Updating a skill mints a new immutable SkillVersion.

created_at
string<date-time>
required

Server-assigned RFC 3339 timestamp of when the skill was created.

description
string
required

When to use this skill. Disclosed to the model in every turn, so it is the whole routing signal: write it as the condition under which the skill applies.

name
string
required

The skill's addressable name, lowercase with single hyphens, e.g. cut-release. This is what an agent passes to the activation tool.

organization_id
string
required

Organization that owns the skill. Server-assigned from the caller's credentials; a value sent in a request body is ignored.

skill_id
string
required

Server-assigned id of the skill, used in the skill and skill-version routes.

source
string
required

Where the skill came from: platform, organization, or repository. Decides which skill wins a name collision, most specific first.

updated_at
string<date-time>
required

Server-assigned RFC 3339 timestamp of the most recent update to the skill.

display_title
string

Human-readable title shown wherever skills are listed. Defaults to the name.

latest_instruction_chars
integer<int64>

Length in characters of the newest version's instructions, the body disclosed to the model when it activates the skill. Zero for a skill with no version yet. Instructions are truncated at 64000 characters when a session assembles them.

Required range: -9007199254740991 <= x <= 9007199254740991
latest_skill_version_id
string

Server-maintained id of the newest version of this skill; agents that attach it without pinning a version use this one.

latest_version_number
integer<int64>

How many versions this skill has, which is also the number of the newest one, since versions are numbered from 1 in creation order. Zero for a skill with no version yet.

Required range: -9007199254740991 <= x <= 9007199254740991
metadata
object

Caller-owned key/value data stored with the skill and returned unchanged.

skill_group_id
string

Catalog group this skill is filed under, if any. Grouping is for browsing and for attaching a set of skills to an agent in one entry; it is never disclosed to the model and does not scope the skill's name.