---
title: "Atualizar vários registros de uma vez"
method: POST
path: "/api/management/system/bulk-update/{model_name}"
tags: ["system", "bulk-update"]
---

# Atualizar vários registros de uma vez

`POST /api/management/system/bulk-update/{model_name}`

Aplica a mesma alteração a vários registros de uma vez. O `model_name` aceita `project` (os campos do corpo são os mesmos do endpoint de edição de projeto) e `answer_pool` (respostas de formulário dinâmico) — os demais modelos ainda não são suportados.

Falhas em registros individuais não interrompem o lote: o que deu certo é gravado e a resposta traz os contadores e o motivo de cada falha. Enquanto um lote do mesmo usuário está em andamento, uma nova chamada com mais de um ID responde 409.

## Request body

- object — Lista de registros a alterar e os campos a aplicar em todos eles.
  - `ids` string[], required — IDs dos registros que receberão a alteração. Obrigatório, sem valores repetidos e sem limite máximo de itens.
  - `name` string — `model_name=project`: novo nome do projeto. Até 191 caracteres.
  - `description` string — `model_name=project`: nova descrição do projeto.
  - `impact` integer — `model_name=project`: grau de impacto do projeto, de 1 a 10.
  - `status` 1 | 2 | 3 | 4 — `model_name=project`: situação do projeto — 1 em andamento, 2 concluído, 3 arquivado, 4 parado.
  - `budget` number — `model_name=project`: orçamento do projeto. Use `null` para limpar.
  - `is_template` boolean — `model_name=project`: marca ou desmarca os projetos como modelo.
  - `contact_id` string, uuid, nullable — `model_name=project`: contato vinculado ao projeto. `null` remove o vínculo.
  - `customer_id` string, uuid, nullable — `model_name=project`: cliente vinculado ao projeto. `null` remove o vínculo.
  - `parent_id` string, uuid, nullable — `model_name=project`: projeto pai. `null` desvincula da hierarquia.
  - `funnels` object — `model_name=project`: vínculo com funis. O que não for citado permanece como está.
    - `to_add` integer[], required — IDs dos funis a vincular.
    - `to_rem` integer[], required — IDs dos funis a desvincular.
  - `groups` object — `model_name=project`: vínculo com grupos de projetos.
    - `to_add` string[], required — IDs dos grupos a vincular.
    - `to_rem` string[], required — IDs dos grupos a desvincular.
  - `tags` object — `model_name=project`: etiquetas do projeto.
    - `to_add` integer[], required — IDs das etiquetas a aplicar.
    - `to_rem` integer[], required — IDs das etiquetas a remover.
  - `childrens` object — `model_name=project`: projetos filhos na hierarquia.
    - `to_add` string[], required — IDs dos projetos que passam a ser filhos.
    - `to_rem` string[], required — IDs dos projetos que deixam de ser filhos.
  - `users` object[] — `model_name=project`: responsáveis do projeto. Adicionar um responsável dispara notificação para ele.
    - `user_id` string, uuid, required — ID (UUID) do usuário. Precisa ter vínculo ativo na empresa.
    - `role` 'creator' | 'assignee' | 'follower', required — Papel do usuário no projeto.
    - `action` 'add' | 'remove', required — `add` vincula o usuário, `remove` desvincula.
  - `forecast_dates` object[] — `model_name=project`: data prevista de conclusão por funil.
    - `date` string, nullable, required — Data prevista (AAAA-MM-DD). `null` limpa a previsão.
    - `project_funnel_id` integer, required — ID do funil ao qual a previsão pertence.
  - `funnel_status` object — `model_name=project`: situação do projeto dentro de um funil.
    - `project_funnel_id` integer, required — ID do funil em que a situação será aplicada.
    - `funnel_status_id` integer, nullable — ID da situação do funil. `null` remove a situação.
  - `form_answers` object[] — Respostas de formulário dinâmico. Com `model_name=project` responde o formulário do próprio projeto; com `model_name=answer_pool` é a lista de respostas aplicada a todos os IDs.
    - `id` string, required — ID do campo (edge) do formulário dinâmico.
    - `answer` unknown, required
  - `target` object — `model_name=answer_pool`: identifica o formulário e a entidade dona das respostas. `father_id` é preenchido automaticamente com cada item de `ids`.
    - `pivot_class` string, required — Model que guarda as respostas, por exemplo `App\\Models\\Project`.
    - `form_id` string, uuid, required — ID (UUID) do formulário dinâmico.
    - `father_class` string, required — Model dono das respostas, por exemplo `App\\Models\\Project`.

## Response `200`

Sucesso

- object — Resultado do lote. Falhas individuais não alteram o status HTTP.
  - `response` boolean, required — Sempre `true` quando a requisição foi processada.
  - `result` object, required — Resumo do processamento do lote.
    - `successCount` integer, required — Quantidade de registros atualizados com sucesso.
    - `failedCount` integer, required — Quantidade de registros que falharam.
    - `fails` object[], required — Um item por registro que falhou. Vazio quando todos foram atualizados.
      - `id` string, required — ID do registro que falhou.
      - `error` string, required — Motivo da falha.
      - `permission` string — Permissão exigida. Presente apenas quando a falha foi por falta de permissão.

## Other responses

- `409` — Outro lote em andamento
- `422` — Erro de validação

## Changes

- **2026-09-22** `d71b18b1685d` — 31 breaking, 5 warning, 32 info
  - added the new required request property `forecast_dates/items/project_funnel_id`
  - added the new required request property `form_answers/items/id`
  - added the new required request property `funnel_status/project_funnel_id`
  - added the new required request property `users/items/user_id`
  - …64 more
- **2026-09-22** `b43a04f35145` — 8 warning, 1 info
  - removed the request property `contact_id`
  - removed the request property `customer_id`
  - removed the request property `forecast_dates/items/project_funnel_id`
  - removed the request property `form_answers/items/id`
  - …5 more
- **2026-09-18** `626cc36dd5e6` — 2 info
  - added the non-success response with the status `409`
  - added the non-success response with the status `422`
- **2026-09-18** `4a8f726dba52` — 2 info
  - added optional request body
  - added the media type `application/json` for the response with the status `200`

[Change history](https://skmtc.dev/olie-ai/apis/olie-api/changes/api/management/system/bulk-update/:model_name/post.md)

---

[API](https://skmtc.dev/olie-ai/apis/olie-api.md) · [All operations](https://skmtc.dev/olie-ai/apis/olie-api/llms.txt) · [OpenAPI document](https://skmtc.dev/olie-ai/apis/olie-api/revisions/d7bda7d32f67?raw)
