---
agentTools:
  projectIndex: https://docs.wiboor.com.br/llms.txt
  projectSearch: https://docs.wiboor.com.br/agentSearch?query=term1%20term2
---

# Criar um projeto com tarefas

Crie as tarefas com POST /v1/tasks, agrupe-as num projeto com POST /v1/projects e vincule depois as que surgirem.

## Crie as tarefas primeiro

> Linhas destacadas: 6-19

O projeto recebe uma lista de IDs de tarefas que já existem, então crie as tarefas antes, no mesmo espaço do projeto. Só tarefas `TASK` entram em projeto: um `BUG` não pode fazer parte de um projeto.

## Crie o projeto

> Linhas destacadas: 21-38

A criação de projeto pede todos estes campos: `title`, `description`, `departmentId`, `userExecutorId` (o líder), `priority` (1 a 10), `endedAt` (prazo), `tasks`, `isReadyToClose` e `openReview`. Com `isReadyToClose: true`, o projeto fecha sozinho quando todas as tarefas forem finalizadas. Se `openReview` for `true`, o projeto gera uma avaliação ao terminar e `userReviewerId` (o avaliador) passa a ser obrigatório.

## Vincule tarefas depois

> Linhas destacadas: 40-42

Tarefas que aparecem no meio do caminho entram com [Vincular uma tarefa a um projeto](/reference/vincular-uma-tarefa-a-um-projeto-por-id). Outra opção é criar a tarefa já com o `projectId` no `POST /v1/tasks`.

## Código

```js Node.js
const BASE_URL = 'https://api.azzimuti.com.br/v1';
const headers = {
  Authorization: `Bearer ${process.env.WIBOOR_TOKEN}`,
  'Content-Type': 'application/json',
};
const departmentId = '0197a1c2-3d4e-7f50-8a61-b2c3d4e5f607';
const leaderId = '0197a1c2-9b8a-7c6d-8e5f-40312a1b2c3d';

// 1. Crie as tarefas primeiro
const titles = ['Briefing com o cliente', 'Criação das peças', 'Revisão e entrega'];
const taskIds = [];
for (const title of titles) {
  const res = await fetch(`${BASE_URL}/tasks`, {
    method: 'POST',
    headers,
    body: JSON.stringify({ title, type: 'TASK', departmentId, userExecutorId: leaderId }),
  });
  taskIds.push((await res.json()).id);
}

// 2. Crie o projeto com os IDs das tarefas
const projectRes = await fetch(`${BASE_URL}/projects`, {
  method: 'POST',
  headers,
  body: JSON.stringify({
    title: 'Campanha de Natal — ACME',
    description: 'Peças da campanha de fim de ano.',
    departmentId,
    userExecutorId: leaderId,
    priority: 5,
    endedAt: '2026-12-15T21:00:00.000Z',
    tasks: taskIds,
    isReadyToClose: true,
    openReview: false,
    userReviewerId: null,
  }),
});
const project = await projectRes.json();

// 3. Vincule uma tarefa que surgiu depois
const extraTaskId = '0197b4a1-2c3d-7e4f-9a5b-6c7d8e9f0a1b';
await fetch(`${BASE_URL}/projects/${project.id}/attach/tasks/${extraTaskId}`, { method: 'POST', headers });
```

## Resposta

```json
{
  "id": "0197b4a0-7d6c-7b5a-8f4e-3d2c1b0a9f8e",
  "projectNumber": 1612,
  "title": "Campanha de Natal — ACME",
  "status": "NOT_STARTED",
  "priority": 5,
  "endedAt": "2026-12-15T21:00:00.000Z",
  "isReadyToClose": true,
  "departmentId": "0197a1c2-3d4e-7f50-8a61-b2c3d4e5f607",
  "userExecutorId": "0197a1c2-9b8a-7c6d-8e5f-40312a1b2c3d",
  "tasks": [
    "0197b49f-0a1b-7c2d-8e3f-4a5b6c7d8e9f",
    "0197b49f-1b2c-7d3e-9f4a-5b6c7d8e9f0a",
    "0197b49f-2c3d-7e4f-8a5b-6c7d8e9f0a1b"
  ]
}
```
