Skip to main content
Skills

创建 Skill

Forward Skills API 接口说明。

描述

上传 Skill 包并创建一个新的 Skill 记录。请求以 multipart/form-data 提交;创建成功后同时生成初始版本(latest_version 指向该版本)。

路径

POST /api/v1/forward/skills

请求头

头部必选说明
AuthorizationBearer <PAT 或 SAT>
Content-Typemultipart/form-data
Idempotency-Key建议提供。相同 key 且规范化后的 files 指纹一致时可安全重试。

Form 字段

字段类型必选说明
filesfile是*推荐上传字段,可重复出现多次。支持两种形态:
① 单个 .zip 包;
② 裸文件树——每个 part 独立上传一个文件,filename 携带相对路径(如 code-review/SKILL.mdcode-review/scripts/run.sh)。
压缩包本身与解压后总大小均不超过 50 MB。
metadataJSON string调用方元数据对象,最多 15 个键;created_by 为保留字段,不可传入(传入返回 400)。
icon_idstringForward Resource icon 公开 ID。
filefile是*⚠️ 已弃用:单个 .zip 包,宽松包规则。命中时响应头返回 Deprecation: true。请迁移到 files
namestring⚠️ 已弃用:最终名称始终从上传包内 SKILL.md frontmatter 的 name 解析。字段保留仅为兼容,传入将被忽略。
descriptionstring⚠️ 已弃用:最终描述始终从 SKILL.md 解析。
typestring⚠️ 已弃用:Skill 创建类型,可选 customprebuilt,默认 customprebuilt 会使响应 source 字段返回 qoder(其余为 custom)。
*filesfile 二选一,至少提供其一;同时提供时以 files 为准。
包结构规则详见 Skill package:包内必须有 SKILL.md,且有且仅有一个顶层目录、目录名与 SKILL.mdname 一致。

示例请求

单 zip 包:
curl -X POST "https://api.qoder.com/api/v1/forward/skills" \
  -H "Authorization: Bearer $QODER_ACCESS_TOKEN" \
  -H "Idempotency-Key: create-skill-001" \
  -F "files=@skill.zip;type=application/zip" \
  -F "type=custom" \
  -F 'metadata={"source":"console"}' \
  -F "icon_id=pic_skill_default"
裸文件树(files 字段重复):
curl -X POST "https://api.qoder.com/api/v1/forward/skills" \
  -H "Authorization: Bearer $QODER_ACCESS_TOKEN" \
  -H "Idempotency-Key: create-skill-002" \
  -F "files=@code-review/SKILL.md;filename=code-review/SKILL.md" \
  -F "files=@code-review/scripts/run.sh;filename=code-review/scripts/run.sh"

示例响应

HTTP 201 Created
{
  "id": "skill_xxx",
  "type": "skill",
  "display_title": "code-review",
  "description": "Code review skill",
  "source": "custom",
  "latest_version": "1759178010641129",
  "metadata": {
    "source": "console"
  },
  "created_at": "2026-07-23T10:00:00Z",
  "updated_at": "2026-07-23T10:00:00Z",
  "identity_id": null,
  "icon_url": null,
  "binding_info": {
    "agent_template_count": 0
  }
}

响应字段

响应为 Skill 对象。同时会创建一个初始 Skill 版本对象,可通过 列出 Skill 版本 查看;latest_version 指向该版本的 16 位 Unix 微秒时间戳。

错误码

HTTPtype触发条件
400invalid_request_errormultipart 解析失败、包结构不合法(缺 SKILL.md、多顶层目录、目录名与 name 不一致等)、type 非法、metadata 非法或包含保留键。
400invalid_request_error传入保留键 created_by 时,messagemetadata key "created_by" is reserved,可据此定位到具体字段。
400skill_content_too_large压缩包本身或解压后总大小超过 50 MB。
401authentication_error缺少或无效的认证令牌。
403permission_error当前调用方无权访问该资源。
409conflict_errorIdempotency-Key 对应不同请求指纹。
413invalid_request_error请求体整体超过服务允许的大小上限。
429rate_limit_error当前调用方超过接口限流。
500/502/503api_errorForward 或依赖服务失败。