Todos os produtos
Search
Central de documentação

Qoder CN Series:Criar uma Skill

Última atualização: Jul 15, 2026

Envia um arquivo .zip como multipart/form-data para criar um novo resource do tipo Skill.

Cabeçalhos da requisição

Cabeçalho

Obrigatório

Descrição

Authorization

Sim

Bearer PAT — consulte Authorization: Bearer $QODER_PAT.

Content-Type

Não

O comando curl -F define este valor automaticamente como multipart/form-data; não é necessário especificá-lo manualmente.

Corpo da requisição (multipart/form-data)

Campo

Tipo

Obrigatório

Descrição

file

file

Sim

Conteúdo da Skill empacotado em um arquivo .zip. O arquivo deve ser um zip válido.

name

string

Não

Nome da Skill. Se omitido, o valor será lido do frontmatter do arquivo SKILL.md dentro do zip.

type

string

Não

Tipo da Skill. Pode ser custom ou prebuilt. O padrão é custom.

description

string

Não

Descrição da Skill.

Estrutura do arquivo zip

O arquivo compactado deve conter um arquivo SKILL.md no seguinte formato:

---
name: my-skill
description: Skill description
version: 1.0.0
---

# Skill title

## Steps
1. Step one
2. Step two

Exemplo de requisição

# Prepare the Skill content directory
mkdir my-skill && cat > my-skill/SKILL.md << 'EOF'
---
name: my-custom-skill
description: Custom Skill example
version: 1.0.0
---

# My Custom Skill

## Steps
1. Do action A
2. Do action B

## Verification
Confirm the actions complete successfully.
EOF

# Package the directory as a zip
cd my-skill && zip ../my-skill.zip SKILL.md && cd ..

# Upload and create the Skill
curl -X POST "https://api.qoder.com.cn/api/v1/cloud/skills" \
  -H "Authorization: Bearer $QODER_PAT" \
  -F "name=my-custom-skill" \
  -F "type=custom" \
  -F "description=Custom Skill example" \
  -F "file=@my-skill.zip"

Exemplo de resposta

HTTP 201 Created

{
  "id": "skill_019e3bba474b73cfaf19eae9b5f5e66d",
  "type": "skill",
  "name": "my-custom-skill",
  "description": "Custom Skill example",
  "skill_type": "custom",
  "status": "active",
  "version": 1,
  "content_size": 309,
  "content_sha256": "f253cb7d35790025f85917c0c239422cff1de067d00278db8897c585a3f28d94",
  "metadata": {},
  "created_at": "2026-05-18T15:35:24.248164Z",
  "updated_at": "2026-05-18T15:35:24.248164Z"
}

Campos da resposta

Campo

Tipo

Descrição

id

string

Identificador único da Skill, com o prefixo skill_.

type

string

Tipo do resource. Sempre "skill".

name

string

Nome da Skill.

description

string

Descrição da Skill.

skill_type

string

Tipo da Skill: custom ou prebuilt.

status

string

Status da Skill. Atualmente sempre active.

version

integer

Número da versão atual, começando em 1.

content_size

integer

Tamanho do conteúdo zip em bytes.

content_sha256

string

Hash SHA-256 do conteúdo zip.

metadata

object

Metadados definidos pelo usuário.

created_at

string

Timestamp de criação (ISO 8601).

updated_at

string

Timestamp da última atualização (ISO 8601).

Erros

HTTP

Tipo

Causa

400

invalid_request_error

A requisição não é multipart ou o corpo é muito grande: Invalid multipart form or request too large.

400

invalid_request_error

O campo file está ausente: Field 'file' is required.

400

invalid_request_error

O arquivo enviado não é um zip: Only .zip files are accepted.

401

authentication_error

Token de autenticação ausente ou inválido.

Observações

  • Os nomes das Skills não precisam ser exclusivos — é possível criar várias Skills com o mesmo nome.

  • Caso o campo name não seja enviado no formulário, o sistema lerá o valor do frontmatter do SKILL.md dentro do arquivo compactado.

  • Se o campo description não for enviado no formulário, o valor será obtido do frontmatter do SKILL.md no arquivo compactado.

  • Quando name ou description estiverem presentes tanto no formulário quanto no frontmatter do SKILL.md, o valor do frontmatter prevalece.

  • A versão inicial é 1.

  • O Content-Type JSON não é aceito — use obrigatoriamente multipart/form-data.

Para consultar o envelope completo de erros, veja Erros.