> ## Documentation Index
> Fetch the complete documentation index at: https://developers.sults.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Criar plano de ação

> Cria um plano de ação, no formato 5W2H, a partir de uma resposta de avaliação. Informe quem fará em `whoUserId` (usuário da plataforma) ou `whoName` (texto livre); um dos dois é obrigatório. Datas em yyyy-MM-dd. A resposta traz o id do plano criado, usado na edição, na remoção, nas etiquetas e na timeline.



## OpenAPI

````yaml /api-reference/openapi-v2.json post /api/v2/checklist/action-plan/add
openapi: 3.1.0
info:
  title: API do SULTS v2
  version: '2.0'
  description: >-
    A nova geração da API do SULTS, em migração módulo a módulo (Compras
    primeiro). Autenticação por token v2 no cabeçalho `Authorization`; tokens v1
    não funcionam aqui. Nas requisições com corpo, envie `Content-Type:
    application/json;charset=UTF-8`.
  contact:
    name: Suporte SULTS
    url: https://ajuda.sults.com.br
servers:
  - url: https://api.sults.com.br
security:
  - apiKeyAuth: []
tags:
  - name: Produtos
    description: >-
      Cadastro, preço, estoque, variações e variantes de produto no módulo de
      Compras da v2. A API do SULTS é REST sobre HTTPS e responde em JSON. Cada
      requisição leva o token no cabeçalho `Authorization`, enviado puro, sem o
      prefixo `Bearer`. O token é gerado por um administrador na plataforma, em
      Segurança > API > Gestão de Tokens v2. O limite é de 2 requisições por
      segundo, por IP.
  - name: Mix de produtos
    description: >-
      Sortimento de produtos por empresa. Disponível apenas quando o recurso de
      mix está habilitado na plataforma, em Comercial > Configuração > Mix de
      produto. A API do SULTS é REST sobre HTTPS e responde em JSON. Cada
      requisição leva o token no cabeçalho `Authorization`, enviado puro, sem o
      prefixo `Bearer`. O token é gerado por um administrador na plataforma, em
      Segurança > API > Gestão de Tokens v2. O limite é de 2 requisições por
      segundo, por IP.
  - name: Pedidos e etapas
    description: >-
      Pedidos de compra da v2 e o fluxo de etapas, que é configurável por
      operação. A API do SULTS é REST sobre HTTPS e responde em JSON. Cada
      requisição leva o token no cabeçalho `Authorization`, enviado puro, sem o
      prefixo `Bearer`. O token é gerado por um administrador na plataforma, em
      Segurança > API > Gestão de Tokens v2. O limite é de 2 requisições por
      segundo, por IP.
  - name: Comunicados
    description: >-
      Comunicados publicados na plataforma, com o público de cada um, a
      confirmação de leitura e o conteúdo publicado. A API do SULTS é REST sobre
      HTTPS e responde em JSON. Cada requisição leva o token no cabeçalho
      `Authorization`, enviado puro, sem o prefixo `Bearer`. O token é gerado
      por um administrador na plataforma, em Segurança > API > Gestão de Tokens
      v2. O limite é de 2 requisições por segundo, por IP.
  - name: Chamados
    description: >-
      Chamados da plataforma: abertura, timeline, interações, apoios, etiquetas,
      prazo e conclusão. A API do SULTS é REST sobre HTTPS e responde em JSON.
      Cada requisição leva o token no cabeçalho `Authorization`, enviado puro,
      sem o prefixo `Bearer`. O token é gerado por um administrador na
      plataforma, em Segurança > API > Gestão de Tokens v2. O limite é de 2
      requisições por segundo, por IP.
  - name: Checklist
    description: >-
      Avaliações de checklist com respostas, check-in e check-out, os
      questionários com seções e questões, e os planos de ação com a timeline. A
      API do SULTS é REST sobre HTTPS e responde em JSON. Cada requisição leva o
      token no cabeçalho `Authorization`, enviado puro, sem o prefixo `Bearer`.
      O token é gerado por um administrador na plataforma, em Segurança > API >
      Gestão de Tokens v2. O limite é de 2 requisições por segundo, por IP.
  - name: Arquivos
    description: >-
      Upload de arquivos para anexar nos endpoints de escrita da v2, em duas
      etapas: o upload devolve o id do arquivo, e o id vai no campo de anexos da
      escrita. O arquivo fica disponível até ser usado ou expirar, com até 100
      disponíveis; a listagem mostra os disponíveis, com a data de expiração, e
      eles podem ser removidos. A API do SULTS é REST sobre HTTPS e responde em
      JSON. Cada requisição leva o token no cabeçalho `Authorization`, enviado
      puro, sem o prefixo `Bearer`. O token é gerado por um administrador na
      plataforma, em Segurança > API > Gestão de Tokens v2. O limite é de 2
      requisições por segundo, por IP.
paths:
  /api/v2/checklist/action-plan/add:
    post:
      tags:
        - Checklist
      summary: Criar plano de ação
      description: >-
        Cria um plano de ação, no formato 5W2H, a partir de uma resposta de
        avaliação. Informe quem fará em `whoUserId` (usuário da plataforma) ou
        `whoName` (texto livre); um dos dois é obrigatório. Datas em yyyy-MM-dd.
        A resposta traz o id do plano criado, usado na edição, na remoção, nas
        etiquetas e na timeline.
      operationId: criarPlanoAcao
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlanoAcaoV2Criacao'
            example:
              assessmentAnswerId: 1212
              createdByUserId: 108
              what: Trocar a vedação da câmara fria
              justification: Temperatura acima do limite na inspeção
              why: Evitar perda de produtos refrigerados
              whenStartDate: '2026-11-05'
              whenDueDate: '2026-11-20'
              how: Acionar a assistência técnica do fornecedor
              howMuch: 450.9
              whoUserId: 55
              whoName: Assistência técnica Frio Sul
              note: Agendar fora do horário de pico
      responses:
        '200':
          description: Plano de ação criado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IdRespostaV2'
              example:
                id: 131
        '400':
          description: >-
            Valor inválido ou faltando. A API aponta um campo por vez, com a
            mensagem em inglês: corrija o campo citado e reenvie, até receber
            200. `Invalid value, please verify.` indica um valor em formato
            inesperado. Quando o serviço do Checklist recusa o pedido, a
            mensagem é a dele.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErroChecklistV2'
              example:
                error: >-
                  At least one of the following fields must be provided:
                  'whoName' or 'whoUserId'.
                dateTime: '2026-11-03T14:20:00Z'
        '401':
          $ref: '#/components/responses/TokenInvalido'
        '403':
          $ref: '#/components/responses/SemPermissaoChecklist'
        '404':
          description: >-
            A resposta de avaliação ou um dos usuários não foi encontrado pelo
            serviço do Checklist. A mensagem vem desse serviço e não tem texto
            fixo; confira os ids enviados antes de repetir.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErroChecklistV2'
        '429':
          $ref: '#/components/responses/LimiteDeRequisicoes'
        5XX:
          description: >-
            Falha inesperada no servidor ao criar o plano de ação. Acontece
            quando o serviço do Checklist responde com erro, não responde em 30
            segundos ou não está configurado para a rede. Repita com espera
            crescente, a partir de 1 segundo; persistindo, acione o suporte com
            o `dateTime` da resposta, o endpoint e os dados enviados. Se a falha
            acontecer na validação do token, o corpo é `{"error": "Internal
            Server Error."}`, sem `dateTime`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErroChecklistV2'
              example:
                error: Internal Server Error
                dateTime: '2026-11-03T14:20:00Z'
      x-codeSamples:
        - lang: bash
          label: cURL
          source: |-
            curl --request POST \
              --url https://api.sults.com.br/api/v2/checklist/action-plan/add \
              --header 'Authorization: <api-key>' \
              --header 'Content-Type: application/json' \
              --data '{
              "assessmentAnswerId": 1212,
              "createdByUserId": 108,
              "what": "Trocar a vedação da câmara fria",
              "justification": "Temperatura acima do limite na inspeção",
              "why": "Evitar perda de produtos refrigerados",
              "whenStartDate": "2026-11-05",
              "whenDueDate": "2026-11-20",
              "how": "Acionar a assistência técnica do fornecedor",
              "howMuch": 450.9,
              "whoUserId": 55,
              "whoName": "Assistência técnica Frio Sul",
              "note": "Agendar fora do horário de pico"
            }'
        - lang: python
          label: Python
          source: |-
            import requests

            url = "https://api.sults.com.br/api/v2/checklist/action-plan/add"

            payload = {
                "assessmentAnswerId": 1212,
                "createdByUserId": 108,
                "what": "Trocar a vedação da câmara fria",
                "justification": "Temperatura acima do limite na inspeção",
                "why": "Evitar perda de produtos refrigerados",
                "whenStartDate": "2026-11-05",
                "whenDueDate": "2026-11-20",
                "how": "Acionar a assistência técnica do fornecedor",
                "howMuch": 450.9,
                "whoUserId": 55,
                "whoName": "Assistência técnica Frio Sul",
                "note": "Agendar fora do horário de pico"
            }
            headers = {
                "Authorization": "<api-key>",
                "Content-Type": "application/json",
            }

            resposta = requests.post(url, json=payload, headers=headers)

            print(resposta.status_code)
            print(resposta.text)
        - lang: javascript
          label: JavaScript
          source: >-
            const resposta = await
            fetch("https://api.sults.com.br/api/v2/checklist/action-plan/add", {
              method: "POST",
              headers: {
                Authorization: "<api-key>",
                "Content-Type": "application/json",
              },
              body: JSON.stringify({
                "assessmentAnswerId": 1212,
                "createdByUserId": 108,
                "what": "Trocar a vedação da câmara fria",
                "justification": "Temperatura acima do limite na inspeção",
                "why": "Evitar perda de produtos refrigerados",
                "whenStartDate": "2026-11-05",
                "whenDueDate": "2026-11-20",
                "how": "Acionar a assistência técnica do fornecedor",
                "howMuch": 450.9,
                "whoUserId": 55,
                "whoName": "Assistência técnica Frio Sul",
                "note": "Agendar fora do horário de pico"
              }),
            });


            console.log(resposta.status, await resposta.text());
        - lang: php
          label: PHP
          source: >-
            <?php

            $corpo = <<<'JSON'

            {
              "assessmentAnswerId": 1212,
              "createdByUserId": 108,
              "what": "Trocar a vedação da câmara fria",
              "justification": "Temperatura acima do limite na inspeção",
              "why": "Evitar perda de produtos refrigerados",
              "whenStartDate": "2026-11-05",
              "whenDueDate": "2026-11-20",
              "how": "Acionar a assistência técnica do fornecedor",
              "howMuch": 450.9,
              "whoUserId": 55,
              "whoName": "Assistência técnica Frio Sul",
              "note": "Agendar fora do horário de pico"
            }

            JSON;


            $ch =
            curl_init("https://api.sults.com.br/api/v2/checklist/action-plan/add");

            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");

            curl_setopt($ch, CURLOPT_HTTPHEADER, [
                "Authorization: <api-key>",
                "Content-Type: application/json",
            ]);

            curl_setopt($ch, CURLOPT_POSTFIELDS, $corpo);

            $resposta = curl_exec($ch);

            $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);

            curl_close($ch);


            echo $status . PHP_EOL . $resposta . PHP_EOL;
        - lang: csharp
          label: C#
          source: |-
            using System.Net.Http;
            using System.Text;

            var http = new HttpClient();
            http.DefaultRequestHeaders.Add("Authorization", "<api-key>");

            var corpo = """
                {
                  "assessmentAnswerId": 1212,
                  "createdByUserId": 108,
                  "what": "Trocar a vedação da câmara fria",
                  "justification": "Temperatura acima do limite na inspeção",
                  "why": "Evitar perda de produtos refrigerados",
                  "whenStartDate": "2026-11-05",
                  "whenDueDate": "2026-11-20",
                  "how": "Acionar a assistência técnica do fornecedor",
                  "howMuch": 450.9,
                  "whoUserId": 55,
                  "whoName": "Assistência técnica Frio Sul",
                  "note": "Agendar fora do horário de pico"
                }
                """;

            var resposta = await http.PostAsync(
                "https://api.sults.com.br/api/v2/checklist/action-plan/add",
                new StringContent(corpo, Encoding.UTF8, "application/json"));

            Console.WriteLine((int)resposta.StatusCode);
            Console.WriteLine(await resposta.Content.ReadAsStringAsync());
components:
  schemas:
    PlanoAcaoV2Criacao:
      type: object
      description: >-
        Plano de ação a criar. Informe `whoUserId` ou `whoName` (pelo menos um).
        Campo opcional enviado como `null` é tratado como ausente.
      required:
        - assessmentAnswerId
        - what
        - whenDueDate
        - createdByUserId
      properties:
        assessmentAnswerId:
          type: integer
          description: >-
            Id da resposta de avaliação que gera o plano (o `id` de `GET
            /api/v2/checklist/assessment/answer/list`).
          example: 1212
        createdByUserId:
          type: integer
          description: Id do usuário que cria o plano.
          example: 108
        what:
          type: string
          description: O que será feito.
          example: Trocar a vedação da câmara fria
        justification:
          type: string
          description: Justificativa do plano de ação. Opcional.
          example: Temperatura acima do limite na inspeção
        why:
          type: string
          description: Por que será feito. Opcional.
          example: Evitar perda de produtos refrigerados
        whenStartDate:
          type: string
          format: date
          description: Data de início. Formato exato `yyyy-MM-dd`. Opcional.
          example: '2026-11-05'
        whenDueDate:
          type: string
          format: date
          description: Prazo. Formato exato `yyyy-MM-dd`.
          example: '2026-11-20'
        how:
          type: string
          description: Como será feito. Opcional.
          example: Acionar a assistência técnica do fornecedor
        howMuch:
          type: number
          description: Quanto custará. Opcional. Até 2 casas decimais.
          example: 450.9
        whoUserId:
          type: integer
          description: >-
            Id do usuário que fará o plano. Quando enviado, não pode ser `null`
            nem vazio.
          example: 55
        whoName:
          type: string
          description: Quem fará, como texto livre.
          example: Equipe de manutenção
        note:
          type: string
          description: Observação. Opcional.
          example: Agendar fora do horário de pico
    IdRespostaV2:
      type: object
      properties:
        id:
          type: integer
          description: Id do registro criado.
          example: 1
    ErroChecklistV2:
      type: object
      description: >-
        Corpo de erro do módulo de Checklist. Não existe código de erro interno:
        decida a sua lógica pelo status HTTP e use a mensagem apenas para logs e
        diagnóstico.
      required:
        - error
      properties:
        error:
          type: string
          description: >-
            Mensagem da falha, em inglês. O texto pode mudar: nunca o use como
            condição de código.
          example: '''assessmentId'' is required.'
        dateTime:
          type: string
          format: date-time
          description: >-
            Data e hora do erro, em UTC. Formato exato `yyyy-MM-ddTHH:mm:ssZ`.
            Informe esse valor ao suporte.
          example: '2026-11-03T14:20:00Z'
    Erro:
      type: object
      description: >-
        Corpo padrão de erro da API. Não existe código de erro interno: decida a
        sua lógica pelo status HTTP e use a mensagem apenas para logs e
        diagnóstico.
      required:
        - error
      properties:
        error:
          type: string
          description: >-
            Mensagem legível, em português, descrevendo a falha. O texto pode
            mudar: nunca o use como condição de código.
          example: Campo supplierId não pode ser vazio ou nulo.
  responses:
    TokenInvalido:
      description: >-
        Token ausente ou inválido. Confira: copiado por completo, cabeçalho
        `Authorization` com o nome exato, valor sem o prefixo `Bearer` e gerado
        na **Gestão de Tokens v2** (tokens v1 não funcionam aqui). Sem retry
        automático. O corpo real é `{"error": "Acesso não autorizado."}`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Erro'
          example:
            error: Acesso não autorizado.
    SemPermissaoChecklist:
      description: >-
        O módulo de Checklist recusou o acesso ao recurso pedido. Repetir a
        chamada sem mudança devolve o mesmo erro.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErroChecklistV2'
          example:
            error: Unauthorized
            dateTime: '2026-11-03T14:20:00Z'
    LimiteDeRequisicoes:
      description: >-
        Limite de requisições excedido: **2 requisições por segundo, por IP**. A
        resposta é a página HTML padrão do servidor, não JSON, e não há o header
        `Retry-After`: trate pelo status 429, sem fazer parse do corpo, com
        espera crescente a partir de 1 segundo.
      content:
        text/html:
          schema:
            type: string
            description: >-
              Página HTML padrão do servidor. Não faça parse; decida pelo
              status.
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        Token  gerado na Gestão de Tokens v2 do SULTS. Deve ser enviado no
        cabeçalho `Authorization` de todas as requisições.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.