Skip to main content
Versions

Create a skill version

Upload a new immutable version snapshot for an existing skill.

POST /api/v1/cloud/skills/{skill_id}/versions Appends a new version to an existing skill. Each version is a complete content snapshot (not a delta). Use multipart/form-data encoding with the files field; the format and validation rules are identical to Create a skill.

Headers

HeaderRequiredDescription
AuthorizationYesBearer <PAT or SAT>
Content-TypeNoSet automatically by curl -F to multipart/form-data; do not specify manually

Path parameters

ParameterTypeRequiredDescription
skill_idstringYesSkill unique identifier

Request body (multipart/form-data)

FieldTypeRequiredDescription
filesfile (repeatable)YesComplete content of the new version: a single .zip archive or a bare file tree. See Skill package for the package rules

Example request

# Repackage after editing content (keep the top-level directory name equal to the skill name)
zip -r my-custom-skill-v2.zip my-custom-skill/

curl -X POST "https://api.qoder.com/api/v1/cloud/skills/skill_019e3bba474b73cfaf19eae9b5f5e66d/versions" \
  -H "Authorization: Bearer $QODER_ACCESS_TOKEN" \
  -F "files=@my-custom-skill-v2.zip"

Example response

HTTP 201 Created
{
  "id": "skillver_019e3bbb6a25768b9b50ca2f52aa4345",
  "type": "skill_version",
  "skill_id": "skill_019e3bba474b73cfaf19eae9b5f5e66d",
  "version": "1759264410332875",
  "name": "my-custom-skill",
  "description": "Custom skill example (second revision)",
  "directory": "my-custom-skill",
  "created_at": "2026-05-19T10:12:07.332875Z"
}

Response fields

The response is a Skill version object.
FieldTypeDescription
idstringVersion unique identifier
typestringAlways "skill_version"
skill_idstringOwning Skill ID
versionstringVersion identifier
namestringname from this version's SKILL.md frontmatter
descriptionstringdescription from this version's SKILL.md frontmatter
directorystringSkill directory name
created_atstringVersion creation time

Errors

HTTPTypeTrigger
400invalid_request_errorInvalid package structure, missing SKILL.md or invalid frontmatter, uncompressed content over 50 MB
400invalid_request_errorNew version's name does not match the skill's existing name
401TOKEN_INVALIDMissing or invalid authentication token
404not_found_errorSkill does not exist or has been deleted
413request_too_large_errorArchive larger than 50 MB
429rate_limit_errorRate limit or quota exceeded

Notes

  • After the new version is created, the skill's latest_version points to it and updated_at is refreshed.
See Errors for the full error envelope.