Skip to main content
Skills

Update a skill

(Deprecated) Update a skill's metadata or content.

PUT /api/v1/cloud/skills/{skill_id}
⚠️ This endpoint is deprecated and will be removed in a future release.
  • For content updates, use Create a skill version: POST /api/v1/cloud/skills/{skill_id}/versions. When content is updated through this endpoint, a new version is created internally rather than overwriting in place.
  • name cannot be changed: the skill name must stay consistent across all versions; sending a name different from the current one returns 400.
  • Patch updates to description / metadata still work, but are also scheduled for removal.
Updates the metadata or content of the specified skill. Only JSON request bodies are supported.

Path parameters

ParameterTypeRequiredDescription
skill_idstringYesSkill unique identifier

Headers

HeaderRequiredDescription
AuthorizationYesBearer <PAT or SAT>
Content-TypeYesapplication/json

Request body

FieldTypeRequiredDescription
namestringNo⚠️ Deprecated: renaming is no longer supported — a value different from the current name returns 400; the current value is a no-op (no replacement: name is immutable across versions)
descriptionstringNo⚠️ Deprecated: updates the skill shell description; scheduled for removal (the description is maintained per version via SKILL.md frontmatter instead)
contentstringNo⚠️ Deprecated: base64-encoded zip; internally converted into a new version. Plain-text content is no longer accepted and returns 400 (use POST /skills/{skill_id}/versions instead)
content_encodingstringNo⚠️ Deprecated: must be "base64" when content is a base64-encoded zip (same replacement as above)
metadataobjectNo⚠️ Deprecated: replaces the stored metadata object; scheduled for removal (no replacement yet)

Example request

curl -X PUT https://api.qoder.com.cn/api/v1/cloud/skills/skill_019e3bba474b73cfaf19eae9b5f5e66d \
  -H "Authorization: Bearer $QODER_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "description": "Updated skill description",
    "metadata": {"team":"docs","stage":"updated"}
  }'

Example response

HTTP 200 OK
{
  "id": "skill_019e3bba474b73cfaf19eae9b5f5e66d",
  "type": "skill",
  "display_title": "test-skill-api-doc",
  "description": "Updated skill description",
  "source": "custom",
  "latest_version": "1759178010641129",
  "metadata": {
    "team": "docs",
    "stage": "updated"
  },
  "created_at": "2026-05-18T15:35:24.248164Z",
  "updated_at": "2026-05-18T15:36:01.767469Z"
}

Response notes

  • updated_at is refreshed to the operation time.
  • Updating content creates a new version; latest_version points to it.
  • Metadata-only updates do not create a new version.
  • Fields not included in the request body retain their previous values.

Errors

HTTPTypeTrigger
400invalid_request_errorUsed multipart instead of a JSON request body
400invalid_request_errorname differs from the current name (renaming is not allowed), or the SKILL.md name inside the base64 zip does not match the skill's existing name
400invalid_request_errorPlain-text content without content_encoding (no longer accepted; use a base64 zip or the versions endpoint)
401TOKEN_INVALIDMissing or invalid authentication token
404not_found_errorSkill does not exist or is no longer accessible
409conflict_errorOptimistic concurrency conflict
See Errors for the full error envelope.