Skip to main content
POST
TypeScript SDK
Imports a skill directory into an existing page in a Skills database. Pass the page ID in the path, and send a gzipped tar archive of the directory under the file key of a multipart/form-data body. The archive can be up to 20 MiB.
Like Send a file upload, this endpoint takes multipart form data instead of JSON. Include a boundary in the Content-Type header.
The archive must contain SKILL.md with name and description frontmatter, either at the root or in one directory named after the skill. Uploading replaces the page’s title, Description, content, and Files. Each file and folder next to SKILL.md becomes a file or folder in Files. The response includes the updated page ID and version_id. It matches the version_id from Get a skill until the skill changes again, so you can tell whether a later download returns what you uploaded. To import a new skill, create a page in a Skills database first.

Errors

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Headers

Notion-Version
enum<string>
required

The API version to use for this request. The latest version is 2026-03-11.

Available options:
2026-03-11

Path Parameters

id
string
required

Target page in a Skills database. Create a new page first to import a new skill.

Body

multipart/form-data
file
object
required

The skill directory as a gzip-compressed tar archive (maximum 20 MiB).

Response

status
string
required

Import committed.

Allowed value: "completed"
page_id
string<uuid>
required

Updated skill page.

version_id
string
required

Content version of the uploaded skill. Matches version_id from GET /v1/ai/skills/{id} until the skill changes.