POST /v1/skills
Uploads and creates a new Skill resource. Skill content must be uploaded as a .zip archive using multipart/form-data encoding.
Headers
| Header | Required | Description |
|---|---|---|
Authorization | Yes | Bearer $QODER_PAT |
Content-Type | No | Set automatically by curl -F to multipart/form-data; do not specify manually |
Request body (multipart/form-data)
| Field | Type | Required | Description |
|---|---|---|---|
file | file | Yes | .zip archive of skill content, maximum 5 MB |
name | string | No | Accepted for compatibility, but the API uses the name from SKILL.md frontmatter |
type | string | No | Skill type. One of: custom, prebuilt (default custom) |
description | string | No | Accepted for compatibility, but the API uses the description from SKILL.md frontmatter |
metadata | JSON string | No | Custom metadata as a JSON object |
Zip file structure
The archive must containSKILL.md at the archive root or one directory below the root. SKILL.md must start with YAML frontmatter in this format:
/ or Windows-style \ separators; the service normalizes them when locating SKILL.md.
Example request
Example response
HTTP 201 CreatedResponse fields
| Field | Type | Description |
|---|---|---|
id | string | Skill unique identifier with the skill_ prefix |
type | string | Always "skill" |
name | string | Skill name |
description | string | Skill description |
skill_type | string | Skill type: custom or prebuilt |
status | string | Status: active |
version | integer | Current version number (starts at 1) |
content_size | integer | Size of the zip content in bytes |
content_sha256 | string | SHA-256 hash of the content |
metadata | object | Custom metadata |
created_at | string | Creation time (ISO 8601) |
updated_at | string | Last update time (ISO 8601) |
Errors
| HTTP | Type | Trigger |
|---|---|---|
| 400 | invalid_request_error | Non-multipart request: “Invalid multipart form or request too large.” |
| 400 | invalid_request_error | Missing file field: “Field ‘file’ is required.” |
| 400 | invalid_request_error | Not a zip file: “Only .zip files are accepted.” |
| 401 | TOKEN_INVALID | Missing or invalid authentication token |
Notes
- Duplicate skill names are allowed (uniqueness is not enforced).
nameanddescriptionare always read from theSKILL.mdfrontmatter. Form values do not override the archive content.- Skill names must be at most 64 characters and contain only lowercase letters, digits, hyphens (
-), or underscores (_), starting with a letter or digit. - Zip archives created on Windows are supported; backslash path separators are normalized.
- Initial version number is 1.
- JSON Content-Type is not supported;
multipart/form-datais required.
Related
Agent Skills
Attach domain expertise to your agent.