API — Issues
Endpoints para criar, listar, atualizar e gerenciar issues.
Base path: /api/v1/workspaces/:workspace_slug/projects/:project_id
Todos os endpoints requerem Authorization: Bearer {token}.
POST /workspaces/:slug/projects/:project_id/issues
Cria uma nova issue.
Body
{
"title": "Corrigir bug no login com Google",
"description": "## Contexto\n\nUsuários com iOS 17 reportam falha no callback OAuth.\n\n## Passos para reproduzir\n\n1. Abrir app no iPhone\n2. Tentar login com Google\n3. Observar erro 401",
"type": "bug",
"priority": "alta",
"status_id": "01J8X...",
"assignee_id": "01J8X...",
"label_ids": ["01J8X...", "01J8X..."],
"parent_id": null,
"start_date": "2026-04-20",
"due_date": "2026-04-25",
"estimate": 3
}Somente title é obrigatório. Se status_id não for informado, usa o primeiro status da categoria todo.
Tipos válidos: task, bug, story, epic, subtask
Prioridades válidas: urgent, high, medium, low, none
Response 201
{
"id": "01J8X...",
"key": "FE-7",
"title": "Corrigir bug no login com Google",
"description": "...",
"type": "bug",
"priority": "high",
"status": {
"id": "01J8X...",
"name": "A fazer",
"color": "#3b82f6",
"category": "todo"
},
"assignee": {
"id": "01J8X...",
"name": "Gabriel Mowses",
"avatar_url": null
},
"labels": [
{ "id": "01J8X...", "name": "frontend", "color": "#3b82f6" }
],
"parent_id": null,
"children_count": 0,
"start_date": "2026-04-20",
"due_date": "2026-04-25",
"estimate": 3,
"created_by": { "id": "01J8X...", "name": "Gabriel Mowses" },
"created_at": "2026-04-18T12:00:00Z",
"updated_at": "2026-04-18T12:00:00Z"
}Exemplo
curl -X POST https://tasks.cloudface.tech/api/v1/workspaces/produto/projects/01J8X.../issues \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{"title": "Corrigir bug no login com Google", "type": "bug", "priority": "high"}'GET /workspaces/:slug/projects/:project_id/issues
Lista issues do projeto com suporte a filtros e paginação.
Query params
| Param | Tipo | Descrição |
|---|---|---|
status_id | string | Filtrar por status (pode repetir) |
priority | string | urgent, high, medium, low, none |
type | string | task, bug, story, epic, subtask |
assignee_id | string | UUID do responsável |
label_id | string | UUID da etiqueta (pode repetir) |
parent_id | string | Filtrar sub-issues de uma parent |
q | string | Busca por texto no título |
order_by | string | created_at, updated_at, priority, due_date |
order | string | asc, desc (padrão: desc) |
page | integer | Página (padrão: 1) |
per_page | integer | Itens por página (padrão: 50, máx: 100) |
Response 200
{
"issues": [ /* array de issues */ ],
"total": 42,
"page": 1,
"per_page": 50
}Exemplo com filtros
curl "https://tasks.cloudface.tech/api/v1/workspaces/produto/projects/01J8X.../issues?priority=urgent&priority=high&order_by=due_date&order=asc" \
-H "Authorization: Bearer {token}"GET /workspaces/:slug/projects/:project_id/issues/:key
Retorna uma issue pelo key (ex: FE-7).
Response 200 — issue completa com relações e sub-issues
{
"id": "01J8X...",
"key": "FE-7",
/* todos os campos */
"relations": [
{
"type": "blocks",
"issue": { "id": "01J8X...", "key": "FE-8", "title": "Implementar refresh token" }
}
],
"children": [
{ "id": "01J8X...", "key": "FE-9", "title": "Configurar OAuth app no Google Cloud" }
]
}PATCH /workspaces/:slug/projects/:project_id/issues/:key
Atualiza campos de uma issue.
Body — qualquer subconjunto dos campos editáveis
{
"title": "Corrigir OAuth callback no iOS 17+",
"status_id": "01J8X...",
"priority": "urgent",
"assignee_id": "01J8X...",
"due_date": "2026-04-22"
}Response 200 — issue atualizada
DELETE /workspaces/:slug/projects/:project_id/issues/:key
Deleta a issue e todas as sub-issues filhas.
Response 204 — sem body
POST /workspaces/:slug/projects/:project_id/issues/:key/relations
Cria uma relação entre duas issues.
Body
{
"type": "blocks",
"related_issue_id": "01J8X..."
}Tipos válidos: blocks, is_blocked_by, relates_to, duplicates
Response 201 — relação criada (a relação inversa é criada automaticamente)
DELETE /workspaces/:slug/projects/:project_id/issues/:key/relations/:relation_id
Remove uma relação.
Response 204 — sem body