{
  "info": {
    "name": "API Wevichat",
    "description": "Coleção gerada da especificação OpenAPI. Preencha a variável api_key com uma chave criada em Conta > Desenvolvedores. Use uma chave wevi_test_ para experimentar sem enviar mensagem de verdade.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{api_key}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "base_url",
      "value": "https://api.wevi.chat/functions/v1"
    },
    {
      "key": "api_key",
      "value": "wevi_test_sua_chave_aqui"
    },
    {
      "key": "id",
      "value": ""
    },
    {
      "key": "document_id",
      "value": ""
    },
    {
      "key": "delivery_id",
      "value": ""
    }
  ],
  "item": [
    {
      "name": "Contatos",
      "item": [
        {
          "name": "Lista ou busca contatos",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/contacts",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "",
                  "disabled": true,
                  "description": "Busca o contato por identificador interno."
                },
                {
                  "key": "email",
                  "value": "",
                  "disabled": true,
                  "description": "Busca por email exato."
                },
                {
                  "key": "phone",
                  "value": "",
                  "disabled": true,
                  "description": "Busca por telefone. Aceita qualquer formato, inclusive os antigos sem o código do país."
                },
                {
                  "key": "cpf",
                  "value": "",
                  "disabled": true,
                  "description": "Busca pelo CPF gravado como identificador do contato."
                },
                {
                  "key": "wa_user_id",
                  "value": "",
                  "disabled": true,
                  "description": "Identificador do contato no WhatsApp"
                },
                {
                  "key": "q",
                  "value": "",
                  "disabled": true,
                  "description": "Busca por nome, email ou telefone"
                },
                {
                  "key": "tag",
                  "value": "",
                  "disabled": true,
                  "description": "Etiqueta por nome ou id"
                },
                {
                  "key": "pipeline",
                  "value": "",
                  "disabled": true,
                  "description": "Filtra por funil, pelo nome ou pelo id."
                },
                {
                  "key": "stage",
                  "value": "",
                  "disabled": true,
                  "description": "Filtra por etapa dentro do funil informado em `pipeline`."
                },
                {
                  "key": "lost",
                  "value": "",
                  "disabled": true,
                  "description": "`true` traz só quem foi marcado como perdido no funil."
                },
                {
                  "key": "assigned_to",
                  "value": "",
                  "disabled": true,
                  "description": "UUID do dono, ou `none`"
                },
                {
                  "key": "opted_out",
                  "value": "",
                  "disabled": true,
                  "description": "`true` traz só quem pediu para não receber mais."
                },
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Itens por página. Máximo 200."
                },
                {
                  "key": "cursor",
                  "value": "",
                  "disabled": true,
                  "description": "O `next_cursor` da página anterior."
                },
                {
                  "key": "updated_since",
                  "value": "",
                  "disabled": true,
                  "description": "Devolve só o que mudou depois desta data."
                }
              ]
            },
            "description": "Sem identificador na query, devolve a lista paginada da organização. Com\n`id`, `email`, `phone` ou `cpf`, devolve um contato só, ou `404` quando\nnão existe.\n\nPara sincronizar com o seu sistema, use `updated_since` com a data da\núltima sincronização em vez de varrer a base inteira toda vez.\n"
          }
        },
        {
          "name": "Cria ou atualiza um contato",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"phone\": \"+55 11 98765-4321\",\n  \"name\": \"Marina Alves\",\n  \"email\": \"marina.alves@exemplo.com.br\",\n  \"tags\": [\n    \"Lead quente\"\n  ],\n  \"fields\": {\n    \"plano\": \"Premium\"\n  },\n  \"assigned_user_email\": \"paula@clinicabemestar.com.br\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/contacts",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts"
              ],
              "query": []
            },
            "description": "Identifica o contato por email ou telefone. Existindo, atualiza os campos\nque vieram; senão, cria. Os campos que você não mandar ficam como estão.\n\nAs chaves de `fields` precisam existir em Campos personalizados. Consulte\n`GET /contacts-schema` antes se não souber quais são, em vez de chutar.\n"
          }
        },
        {
          "name": "Cria ou atualiza até 100 contatos",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"contacts\": [\n    {\n      \"phone\": \"+5511987654321\",\n      \"name\": \"Marina Alves\",\n      \"tags\": [\n        \"Lead quente\"\n      ]\n    },\n    {\n      \"email\": \"joao@exemplo.com.br\",\n      \"name\": \"João Prado\"\n    },\n    {\n      \"name\": \"Sem identificador\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/contacts/batch",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                "batch"
              ],
              "query": []
            },
            "description": "Até 100 contatos por chamada, com a mesma regra do `POST /contacts` item a\nitem. Um item ruim não derruba os outros: a resposta traz o resultado de\ncada um, na ordem em que vieram.\n\nServe para a carga inicial a partir do seu sistema. Para o dia a dia,\nprefira uma chamada por contato quando ele mudar.\n"
          }
        },
        {
          "name": "Um contato",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/contacts/{{id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                "{{id}}"
              ],
              "query": []
            },
            "description": "Um contato, com etiquetas, campos personalizados, posição nos funis, dono da carteira e as estatísticas do relacionamento."
          }
        },
        {
          "name": "Altera um contato",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Marina Alves Souza\",\n  \"fields\": {\n    \"plano\": \"Ultra\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/contacts/{{id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                "{{id}}"
              ],
              "query": []
            },
            "description": "Altera só os campos que vieram no corpo. Por padrão, `fields` é mesclado\ncom o que já existe; mande `replace_fields: true` para trocar o conjunto\ninteiro.\n"
          }
        },
        {
          "name": "Anonimiza ou apaga um contato",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/contacts/{{id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                "{{id}}"
              ],
              "query": [
                {
                  "key": "mode",
                  "value": "",
                  "disabled": true,
                  "description": "`anonymize` (padrão) preserva o histórico sem identificação. `erase` apaga tudo."
                }
              ]
            },
            "description": "Por padrão anonimiza: apaga nome, telefone, email e campos personalizados,\ne mantém as conversas sem identificação, para os números do período\ncontinuarem batendo. Com `?mode=erase`, apaga o contato e tudo que aponta\npara ele, sem volta.\n\nAnonimizar costuma ser o certo para um pedido de exclusão de dados: atende\no pedido sem falsear o histórico do atendimento.\n"
          }
        },
        {
          "name": "Conversas do contato",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/contacts/{{id}}/conversations",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                "{{id}}",
                "conversations"
              ],
              "query": []
            },
            "description": "As conversas deste contato, da mais recente para a mais antiga."
          }
        },
        {
          "name": "Etapas, trocas de dono e notas, em ordem",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/contacts/{{id}}/history",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                "{{id}}",
                "history"
              ],
              "query": []
            },
            "description": "Mudanças de etapa, trocas de dono e notas, em ordem cronológica. É o que\nresponde \"por que este contato está nesta etapa\" sem abrir o painel.\n"
          }
        },
        {
          "name": "Exporta os dados do contato",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/contacts/{{id}}/export",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                "{{id}}",
                "export"
              ],
              "query": []
            },
            "description": "Tudo que temos sobre a pessoa num JSON só: cadastro, identificadores,\netiquetas, posição nos funis, notas, conversas e mensagens. É o que\nentregar quando alguém exercer o direito de portabilidade.\n"
          }
        },
        {
          "name": "Notas do contato",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/contacts/{{id}}/notes",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                "{{id}}",
                "notes"
              ],
              "query": []
            },
            "description": "As notas internas do contato, da mais recente para a mais antiga. O cliente nunca vê isto."
          }
        },
        {
          "name": "Adiciona uma nota",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"body\": \"Cliente pediu orçamento de clareamento.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/contacts/{{id}}/notes",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                "{{id}}",
                "notes"
              ],
              "query": []
            },
            "description": "Adiciona uma nota ao contato, sem apagar as anteriores."
          }
        },
        {
          "name": "Funde outro contato neste",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"contact_id\": \"c0a80101-1112-4111-8111-111111111112\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/contacts/{{id}}/merge",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                "{{id}}",
                "merge"
              ],
              "query": []
            },
            "description": "Funde o contato informado em `contact_id` neste, que sobrevive. Conversas,\nmensagens, etiquetas, notas e identificadores passam para cá; o outro\ndeixa de existir.\n\nUse quando a mesma pessoa entrou duas vezes, por exemplo pelo site e\ndepois pelo WhatsApp com outro número.\n"
          }
        },
        {
          "name": "Marca que o contato não quer mais receber",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/contacts/{{id}}/opt-out",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                "{{id}}",
                "opt-out"
              ],
              "query": []
            },
            "description": "Marca que o contato não quer mais receber. A partir daí, campanha,\nautomação e disparo avulso não saem para ele. Resposta dentro da janela de\n24 horas continua funcionando, porque aí é conversa que ele mesmo começou.\n"
          }
        },
        {
          "name": "Volta a permitir envio para o contato",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/contacts/{{id}}/opt-in",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                "{{id}}",
                "opt-in"
              ],
              "query": []
            },
            "description": "Desfaz o opt-out. Use só quando a pessoa pedir de volta, e guarde no seu lado a prova de que pediu."
          }
        },
        {
          "name": "Aplica uma etiqueta",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"phone\": \"+5511987654321\",\n  \"tag\": \"Lead quente\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/contacts/tag",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                "tag"
              ],
              "query": []
            },
            "description": "Aplica uma etiqueta ao contato, criando a etiqueta se ela ainda não\nexistir. Identifique o contato por `id`, `email`, `phone` ou `cpf` no\ncorpo.\n"
          }
        },
        {
          "name": "Remove uma etiqueta",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"phone\": \"+5511987654321\",\n  \"tag\": \"Lead quente\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/contacts/tag",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                "tag"
              ],
              "query": []
            },
            "description": "Tira uma etiqueta do contato. A etiqueta continua existindo na organização."
          }
        },
        {
          "name": "Move o contato no funil",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"phone\": \"+5511987654321\",\n  \"pipeline\": \"Funil de vendas\",\n  \"stage\": \"Proposta enviada\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/contacts/stage",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                "stage"
              ],
              "query": []
            },
            "description": "Move o contato de etapa no funil, ou marca como perdido. Sem `pipeline`,\nusa o funil padrão da organização. Aceita nome ou id tanto para o funil\nquanto para a etapa.\n\nMarcar como perdido tira o contato do fluxo do funil sem apagar o\nhistórico: \"`lost: true` com um `reason` que ajude a entender depois.\"\n"
          }
        },
        {
          "name": "Define o dono da carteira",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"phone\": \"+5511987654321\",\n  \"assigned_user_email\": \"paula@clinicabemestar.com.br\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/contacts/assign",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                "assign"
              ],
              "query": []
            },
            "description": "Define o dono da carteira pelo email de um membro da organização. O email\nprecisa ser de alguém que já faz parte da equipe.\n"
          }
        },
        {
          "name": "Remove o dono da carteira",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"phone\": \"+5511987654321\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/contacts/assign",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                "assign"
              ],
              "query": []
            },
            "description": "Deixa o contato sem dono. Ele volta para a fila geral."
          }
        },
        {
          "name": "Grava as notas do cadastro do contato",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"phone\": \"+5511987654321\",\n  \"note\": \"Prefere ser chamada de manhã.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/contacts/note",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                "note"
              ],
              "query": []
            },
            "description": "Grava o campo de anotação do cadastro, substituindo o que estava lá.\nMande `null` ou string vazia para limpar.\n\nDiferente de `POST /contacts/{id}/notes`, que acrescenta uma nota nova ao\nhistórico sem apagar as anteriores.\n"
          }
        },
        {
          "name": "Grava um campo personalizado",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"phone\": \"+5511987654321\",\n  \"key\": \"plano\",\n  \"value\": \"Ultra\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/contacts/field",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                "field"
              ],
              "query": []
            },
            "description": "Grava um campo personalizado sozinho, sem mexer nos outros. A chave\nprecisa existir em Campos personalizados. Mande `value: null` para limpar.\n"
          }
        }
      ]
    },
    {
      "name": "Configuração",
      "item": [
        {
          "name": "Metadados da organização",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/contacts-schema",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts-schema"
              ],
              "query": []
            },
            "description": "Tudo que a organização tem cadastrado e que você precisa conhecer antes de\ngravar um contato: campos personalizados, etiquetas, funis com as etapas,\nmembros da equipe e números conectados.\n\nChame uma vez e guarde. Consultar isto evita o `400 unknown_fields` de\nquem inventou o nome de um campo.\n"
          }
        },
        {
          "name": "Números de WhatsApp conectados",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/connections",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "connections"
              ],
              "query": [
                {
                  "key": "agent_id",
                  "value": "",
                  "disabled": true,
                  "description": "Só os números atendidos por um agente específico."
                },
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Itens por página. Máximo 200."
                },
                {
                  "key": "cursor",
                  "value": "",
                  "disabled": true,
                  "description": "O `next_cursor` da página anterior."
                }
              ]
            },
            "description": "Os números de WhatsApp conectados, com a nota de qualidade que a Meta dá a\ncada um e o erro de configuração, quando existe.\n\nSe a organização tem um número só, você não precisa mandar `connection_id`\nnos envios.\n"
          }
        },
        {
          "name": "Uma conexão",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/connections/{{id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "connections",
                "{{id}}"
              ],
              "query": []
            },
            "description": "Um número conectado."
          }
        },
        {
          "name": "Templates de WhatsApp",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/templates",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "templates"
              ],
              "query": [
                {
                  "key": "connection_id",
                  "value": "",
                  "disabled": true,
                  "description": "Templates de um número específico."
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Filtra pelo status na Meta."
                },
                {
                  "key": "category",
                  "value": "",
                  "disabled": true,
                  "description": "Filtra pela categoria."
                },
                {
                  "key": "name",
                  "value": "",
                  "disabled": true,
                  "description": "Busca pelo nome do template."
                },
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Itens por página. Máximo 200."
                },
                {
                  "key": "cursor",
                  "value": "",
                  "disabled": true,
                  "description": "O `next_cursor` da página anterior."
                }
              ]
            },
            "description": "Os templates de mensagem da organização, com o status que a Meta deu a\ncada um. Só template `APPROVED` pode ser enviado.\n\nO campo `body_variables` diz quantos itens `body_params` precisa ter no\nenvio. Conferir isso antes evita o envio recusado.\n"
          }
        },
        {
          "name": "Cria e submete um template à Meta",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"connection_id\": \"c0a80101-4444-4444-8444-444444444444\",\n  \"name\": \"lembrete_retorno\",\n  \"category\": \"UTILITY\",\n  \"language_code\": \"pt_BR\",\n  \"body_text\": \"Oi {{1}}, faz {{2}} meses desde a sua última visita. Quer marcar um retorno?\",\n  \"footer_text\": \"Clínica Bem Estar\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/templates",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "templates"
              ],
              "query": []
            },
            "description": "Cria o template e submete à Meta na mesma chamada. Ele nasce `PENDING` e a\naprovação leva de minutos a algumas horas.\n\nAssine o evento `template.status_changed` para saber quando ele sair,\naprovado ou recusado, em vez de ficar consultando.\n"
          }
        },
        {
          "name": "Sincroniza templates com a Meta",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"connection_id\": \"c0a80101-4444-4444-8444-444444444444\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/templates/sync",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "templates",
                "sync"
              ],
              "query": []
            },
            "description": "Puxa da Meta o status atual de todos os templates do número. Use quando\ndesconfiar que a lista aqui está atrasada; no dia a dia, o evento\n`template.status_changed` já avisa.\n"
          }
        },
        {
          "name": "Um template, por id da Wevichat ou Meta ID",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/templates/{{id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "templates",
                "{{id}}"
              ],
              "query": []
            },
            "description": "Um template, pelo identificador da Wevichat ou pelo Meta ID."
          }
        },
        {
          "name": "Apaga o template na Meta e aqui",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/templates/{{id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "templates",
                "{{id}}"
              ],
              "query": []
            },
            "description": "Apaga o template na Meta e aqui. Campanha que ainda dependia dele para de funcionar, então confira antes."
          }
        },
        {
          "name": "Etiquetas de contato ou de conversa",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/tags",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "tags"
              ],
              "query": [
                {
                  "key": "type",
                  "value": "",
                  "disabled": true,
                  "description": "`contact` (padrão) ou `conversation`."
                }
              ]
            },
            "description": "As etiquetas da organização. As de contato e as de conversa são conjuntos separados."
          }
        },
        {
          "name": "Funis e suas etapas",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/pipelines",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "pipelines"
              ],
              "query": []
            },
            "description": "Os funis, com as etapas na ordem em que aparecem no painel. Use os nomes daqui em `POST /contacts/stage`."
          }
        },
        {
          "name": "Campos personalizados de contato",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/fields",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "fields"
              ],
              "query": []
            },
            "description": "Os campos personalizados de contato. As chaves daqui são as únicas aceitas em `fields`."
          }
        },
        {
          "name": "Membros da organização",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/users",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "users"
              ],
              "query": [
                {
                  "key": "role",
                  "value": "",
                  "disabled": true,
                  "description": "Filtra por papel."
                },
                {
                  "key": "assignable",
                  "value": "",
                  "disabled": true,
                  "description": "`true` traz só quem pode receber conversa ou carteira."
                }
              ]
            },
            "description": "Os membros da organização, com o papel de cada um. É daqui que sai o email para atribuir carteira ou conversa."
          }
        },
        {
          "name": "Respostas rápidas da equipe",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/quick-replies",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "quick-replies"
              ],
              "query": []
            },
            "description": "As respostas rápidas que a equipe usa no inbox. Serve para reaproveitar o mesmo texto no seu sistema."
          }
        }
      ]
    },
    {
      "name": "Conversas",
      "item": [
        {
          "name": "Lista conversas",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/conversations",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "conversations"
              ],
              "query": [
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Filtra por situação."
                },
                {
                  "key": "channel",
                  "value": "",
                  "disabled": true,
                  "description": "Filtra por canal de origem."
                },
                {
                  "key": "agent_id",
                  "value": "",
                  "disabled": true,
                  "description": "Conversas atendidas por um agente específico."
                },
                {
                  "key": "connection_id",
                  "value": "",
                  "disabled": true,
                  "description": "Conversas de um número de WhatsApp específico."
                },
                {
                  "key": "contact_id",
                  "value": "",
                  "disabled": true,
                  "description": "Conversas de um contato específico."
                },
                {
                  "key": "assigned_to",
                  "value": "",
                  "disabled": true,
                  "description": "UUID de quem assumiu, ou `none` para as que ninguém assumiu."
                },
                {
                  "key": "handoff",
                  "value": "",
                  "disabled": true,
                  "description": "`pending` traz quem espera atendente"
                },
                {
                  "key": "awaiting_reply",
                  "value": "",
                  "disabled": true,
                  "description": "`true` traz só as que estão esperando resposta da sua equipe."
                },
                {
                  "key": "sentiment",
                  "value": "",
                  "disabled": true,
                  "description": "Filtra pelo humor detectado na conversa."
                },
                {
                  "key": "tag",
                  "value": "",
                  "disabled": true,
                  "description": "Etiqueta de conversa, por nome ou id."
                },
                {
                  "key": "phone",
                  "value": "",
                  "disabled": true,
                  "description": "Telefone do cliente, em qualquer formato."
                },
                {
                  "key": "wa_user_id",
                  "value": "",
                  "disabled": true,
                  "description": "Identificador do cliente no WhatsApp"
                },
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Itens por página. Máximo 200."
                },
                {
                  "key": "cursor",
                  "value": "",
                  "disabled": true,
                  "description": "O `next_cursor` da página anterior."
                },
                {
                  "key": "updated_since",
                  "value": "",
                  "disabled": true,
                  "description": "Devolve só o que mudou depois desta data."
                }
              ]
            },
            "description": "As conversas da organização, da que teve movimento mais recente para a\nmais antiga.\n\nDois filtros resolvem a maioria dos casos: `handoff=pending` traz quem\nestá esperando atendente humano, e `awaiting_reply=true` traz quem falou\npor último e não foi respondido.\n"
          }
        },
        {
          "name": "Uma conversa",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/conversations/{{id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "conversations",
                "{{id}}"
              ],
              "query": []
            },
            "description": "Uma conversa, com contato, agente, situação, transbordo, avaliação, humor e a origem do anúncio quando ela veio de um Click to WhatsApp."
          }
        },
        {
          "name": "Mensagens da conversa",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/conversations/{{id}}/messages",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "conversations",
                "{{id}}",
                "messages"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Itens por página. Máximo 200."
                },
                {
                  "key": "cursor",
                  "value": "",
                  "disabled": true,
                  "description": "O `next_cursor` da página anterior."
                }
              ]
            },
            "description": "As mensagens da conversa, da mais antiga para a mais recente, com o status\nde entrega de cada uma quando o canal informa.\n"
          }
        },
        {
          "name": "Responde dentro da conversa",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"text\",\n  \"text\": \"Perfeito, Marina. Agendei para quinta às 14h.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/conversations/{{id}}/messages",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "conversations",
                "{{id}}",
                "messages"
              ],
              "query": []
            },
            "description": "Responde dentro de uma conversa que já existe. Aceita os mesmos doze tipos\ndo `POST /messages`, sem precisar informar destino: a conversa já diz para\nquem vai.\n\nA mensagem aparece na linha do tempo do inbox, como qualquer resposta da\nequipe.\n"
          }
        },
        {
          "name": "Eventos de conversão da conversa",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/conversations/{{id}}/events",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "conversations",
                "{{id}}",
                "events"
              ],
              "query": []
            },
            "description": "Os eventos de conversão que o agente detectou nesta conversa, como um\nagendamento marcado ou uma proposta aceita. Quais eventos existem é\nconfiguração de cada agente.\n"
          }
        },
        {
          "name": "Transcrição da conversa",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/conversations/{{id}}/export",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "conversations",
                "{{id}}",
                "export"
              ],
              "query": [
                {
                  "key": "format",
                  "value": "",
                  "disabled": true,
                  "description": "`json` (padrão) ou `markdown`."
                }
              ]
            },
            "description": "A conversa inteira num arquivo só, para anexar num chamado, num processo\nou num relatório. Em `markdown` sai legível para uma pessoa; em `json`,\npara outro sistema.\n"
          }
        },
        {
          "name": "Define quem atende a conversa",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"user_email\": \"paula@clinicabemestar.com.br\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/conversations/{{id}}/assign",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "conversations",
                "{{id}}",
                "assign"
              ],
              "query": []
            },
            "description": "Coloca um membro da equipe como responsável pela conversa. A IA para de\nresponder nela até alguém devolver com `/release`.\n\nInforme `user_id` ou `user_email`.\n"
          }
        },
        {
          "name": "Devolve a conversa para a IA",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/conversations/{{id}}/release",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "conversations",
                "{{id}}",
                "release"
              ],
              "query": []
            },
            "description": "Tira o responsável humano e devolve a conversa para a IA, que volta a responder na próxima mensagem do cliente."
          }
        },
        {
          "name": "Silencia a IA por um tempo",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"minutes\": 30\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/conversations/{{id}}/pause-ai",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "conversations",
                "{{id}}",
                "pause-ai"
              ],
              "query": []
            },
            "description": "Silencia a IA nesta conversa por um tempo, sem passar o atendimento para\nninguém. Serve para quem vai responder na mão agora e não quer o agente\nfalando junto.\n\nSem `minutes`, o padrão são 60 minutos.\n"
          }
        },
        {
          "name": "Volta a IA a responder",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/conversations/{{id}}/resume-ai",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "conversations",
                "{{id}}",
                "resume-ai"
              ],
              "query": []
            },
            "description": "Cancela a pausa e devolve a palavra à IA na hora."
          }
        },
        {
          "name": "Encerra a conversa",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"user_email\": \"paula@clinicabemestar.com.br\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/conversations/{{id}}/resolve",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "conversations",
                "{{id}}",
                "resolve"
              ],
              "query": []
            },
            "description": "Encerra a conversa. Ela sai da fila do inbox e passa a contar como\nresolvida nos números. Se o cliente escrever de novo, ela reabre sozinha.\n"
          }
        },
        {
          "name": "Reabre a conversa",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/conversations/{{id}}/reopen",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "conversations",
                "{{id}}",
                "reopen"
              ],
              "query": []
            },
            "description": "Reabre uma conversa encerrada, sem esperar o cliente escrever."
          }
        },
        {
          "name": "Pede atendente humano",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reason\": \"Cliente relatou cobrança indevida\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/conversations/{{id}}/handoff",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "conversations",
                "{{id}}",
                "handoff"
              ],
              "query": []
            },
            "description": "Marca que esta conversa precisa de atendente humano. Ela passa a aparecer\nno filtro `handoff=pending` e dispara o evento\n`conversation.handoff_requested`.\n\nUse quando o seu sistema descobrir algo que a IA não resolve, como um\ncliente em atraso ou um caso jurídico.\n"
          }
        },
        {
          "name": "Aplica etiqueta na conversa",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"tag\": \"Urgente\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/conversations/{{id}}/tags",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "conversations",
                "{{id}}",
                "tags"
              ],
              "query": []
            },
            "description": "Aplica uma etiqueta de conversa, criando a etiqueta se ela ainda não existir. Etiqueta de conversa é diferente de etiqueta de contato."
          }
        },
        {
          "name": "Remove etiqueta da conversa",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"tag\": \"Urgente\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/conversations/{{id}}/tags",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "conversations",
                "{{id}}",
                "tags"
              ],
              "query": []
            },
            "description": "Tira uma etiqueta da conversa."
          }
        }
      ]
    },
    {
      "name": "Mensagens",
      "item": [
        {
          "name": "Busca mensagens",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/messages",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "messages"
              ],
              "query": [
                {
                  "key": "wamid",
                  "value": "",
                  "disabled": true,
                  "description": "Id da mensagem no WhatsApp"
                },
                {
                  "key": "conversation_id",
                  "value": "",
                  "disabled": true,
                  "description": "Mensagens de uma conversa."
                },
                {
                  "key": "contact_id",
                  "value": "",
                  "disabled": true,
                  "description": "Disparos feitos para um contato."
                },
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Itens por página. Máximo 200."
                },
                {
                  "key": "cursor",
                  "value": "",
                  "disabled": true,
                  "description": "O `next_cursor` da página anterior."
                }
              ]
            },
            "description": "Busca mensagens de conversa e disparos avulsos no mesmo lugar. Exige um\nfiltro: `conversation_id` traz as mensagens daquela conversa, `contact_id`\ntraz os disparos feitos para um contato, e `wamid` traz a mensagem\nespecífica.\n\nÉ por aqui que você confere se aquele envio chegou, foi lido ou falhou.\nPara varrer tudo, use `GET /conversations` e depois\n`GET /conversations/{id}/messages`.\n"
          }
        },
        {
          "name": "Envia uma mensagem de qualquer tipo",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"template\",\n  \"to\": \"+5511987654321\",\n  \"connection_id\": \"c0a80101-4444-4444-8444-444444444444\",\n  \"template_name\": \"confirmacao_consulta\",\n  \"language_code\": \"pt_BR\",\n  \"body_params\": [\n    \"Marina\",\n    \"quinta às 14h\"\n  ],\n  \"contact\": {\n    \"name\": \"Marina Alves\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/messages",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "messages"
              ],
              "query": []
            },
            "description": "O envio de mensagem, para todos os tipos. O campo `type` decide o resto do\ncorpo: `text` usa `text`, `template` usa `template_name` e `body_params`,\nmídia usa `media`, e os interativos usam `body` mais o campo do formato.\n\nFora da janela de 24 horas desde a última mensagem do cliente, o WhatsApp\nsó aceita template aprovado. Texto livre nesse caso volta com `200` e\n`status: failed`.\n\nMande sempre o header `Idempotency-Key`. Se a rede cair e o seu código\ntentar de novo, a mensagem não sai duas vezes.\n"
          }
        },
        {
          "name": "Uma mensagem, ou um disparo avulso",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/messages/{{id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "messages",
                "{{id}}"
              ],
              "query": []
            },
            "description": "Uma mensagem de conversa ou um disparo avulso, pelo identificador que o envio devolveu."
          }
        }
      ]
    },
    {
      "name": "Agentes",
      "item": [
        {
          "name": "Lista agentes",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/agents",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "agents"
              ],
              "query": [
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Filtra por situação do agente."
                },
                {
                  "key": "type",
                  "value": "",
                  "disabled": true,
                  "description": "`ai` para agente de IA, `flow` para agente de botões."
                },
                {
                  "key": "q",
                  "value": "",
                  "disabled": true,
                  "description": "Busca pelo nome."
                },
                {
                  "key": "include_archived",
                  "value": "",
                  "disabled": true,
                  "description": "`true` inclui os arquivados."
                },
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Itens por página. Máximo 200."
                },
                {
                  "key": "cursor",
                  "value": "",
                  "disabled": true,
                  "description": "O `next_cursor` da página anterior."
                }
              ]
            },
            "description": "Os agentes da organização, com modelo, canal e o que cada um sabe detectar na conversa."
          }
        },
        {
          "name": "Um agente, por id ou slug público",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/agents/{{id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "agents",
                "{{id}}"
              ],
              "query": []
            },
            "description": "Um agente, pelo identificador interno ou pelo slug público. O prompt do sistema vem junto, então trate a resposta como conteúdo interno."
          }
        },
        {
          "name": "Conversa com o agente",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"message\": \"Quanto custa uma limpeza?\",\n  \"external_user_id\": \"usuario-4471\",\n  \"user\": {\n    \"name\": \"Marina Alves\",\n    \"email\": \"marina.alves@exemplo.com.br\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/agents/{{id}}/chat",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "agents",
                "{{id}}",
                "chat"
              ],
              "query": []
            },
            "description": "Conversa com um agente de IA sem passar pelo WhatsApp. A resposta vem no\ncorpo, e a conversa fica registrada no inbox como qualquer outra, no canal\n`api`.\n\nServe para colocar o agente dentro do seu produto: um chat no seu app, um\nassistente no seu site, ou um canal que a gente ainda não tem.\n\nGuarde o `conversation_id` da primeira resposta e mande nas seguintes, ou\nuse `external_user_id` com o identificador do usuário no seu sistema e\ndeixe a continuidade por nossa conta.\n\nO agente usa a chave de IA da sua organização, então o consumo aparece\nnormalmente no painel. Sem chave configurada, a resposta é `402`.\n"
          }
        },
        {
          "name": "Documentos da base de conhecimento",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/agents/{{id}}/knowledge/documents",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "agents",
                "{{id}}",
                "knowledge",
                "documents"
              ],
              "query": []
            },
            "description": "Os documentos que alimentam as respostas deste agente, com o status da indexação de cada um."
          }
        },
        {
          "name": "Adiciona um documento",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Tabela de preços 2026\",\n  \"content\": \"Limpeza: R$ 180. Clareamento: R$ 890...\",\n  \"format\": \"text\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/agents/{{id}}/knowledge/documents",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "agents",
                "{{id}}",
                "knowledge",
                "documents"
              ],
              "query": []
            },
            "description": "Adiciona um documento à base de conhecimento do agente, por texto direto\nou por URL. A indexação roda em segundo plano: o documento nasce\n`pending` e vira `ready` quando terminar.\n\nServe para manter a base sincronizada com o seu CMS ou repositório, sem\nninguém subir arquivo na mão.\n"
          }
        },
        {
          "name": "Remove um documento",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/agents/{{id}}/knowledge/documents/{{document_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "agents",
                "{{id}}",
                "knowledge",
                "documents",
                "{{document_id}}"
              ],
              "query": []
            },
            "description": "Remove o documento e os trechos indexados dele. O agente para de usar aquele conteúdo na resposta seguinte."
          }
        }
      ]
    },
    {
      "name": "Campanhas",
      "item": [
        {
          "name": "Lista campanhas",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/campaigns",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "campaigns"
              ],
              "query": [
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Filtra por situação da campanha."
                },
                {
                  "key": "connection_id",
                  "value": "",
                  "disabled": true,
                  "description": "Campanhas de um número específico."
                },
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Itens por página. Máximo 200."
                },
                {
                  "key": "cursor",
                  "value": "",
                  "disabled": true,
                  "description": "O `next_cursor` da página anterior."
                }
              ]
            },
            "description": "As campanhas da organização, com as métricas de entrega de cada uma."
          }
        },
        {
          "name": "Cria uma campanha como rascunho",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Retorno semestral\",\n  \"connection_id\": \"c0a80101-4444-4444-8444-444444444444\",\n  \"template_name\": \"lembrete_retorno\",\n  \"language_code\": \"pt_BR\",\n  \"audience_filter\": {\n    \"tag\": \"Inativo\"\n  },\n  \"open_conversation\": \"on_reply\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/campaigns",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "campaigns"
              ],
              "query": []
            },
            "description": "Cria a campanha como rascunho. Nada é enviado aqui: depois de conferir a\naudiência em `GET /campaigns/{id}`, dispare com `/start` ou marque hora\ncom `/schedule`.\n\nDefina quem recebe por `audience` (lista de ids de contato) ou por\n`audience_filter` (etiqueta, funil ou etapa). Quem pediu opt-out fica de\nfora automaticamente.\n"
          }
        },
        {
          "name": "Uma campanha, com métricas",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/campaigns/{{id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "campaigns",
                "{{id}}"
              ],
              "query": []
            },
            "description": "Uma campanha, com as métricas atualizadas. Durante o disparo, os números sobem aos poucos."
          }
        },
        {
          "name": "Dispara a campanha",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/campaigns/{{id}}/start",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "campaigns",
                "{{id}}",
                "start"
              ],
              "query": []
            },
            "description": "Dispara a campanha agora. O envio acontece em lotes, respeitando o limite do número na Meta."
          }
        },
        {
          "name": "Agenda a campanha",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"scheduled_at\": \"2026-09-10T09:00:00Z\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/campaigns/{{id}}/schedule",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "campaigns",
                "{{id}}",
                "schedule"
              ],
              "query": []
            },
            "description": "Marca hora para o disparo. A campanha fica `scheduled` até lá."
          }
        },
        {
          "name": "Cancela a campanha",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/campaigns/{{id}}/cancel",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "campaigns",
                "{{id}}",
                "cancel"
              ],
              "query": []
            },
            "description": "Cancela a campanha. O que já saiu não volta: cancelar interrompe os lotes\nque ainda não foram enviados.\n"
          }
        },
        {
          "name": "Destinatários da campanha",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/campaigns/{{id}}/recipients",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "campaigns",
                "{{id}}",
                "recipients"
              ],
              "query": [
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Filtra por situação do envio."
                },
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Itens por página. Máximo 200."
                },
                {
                  "key": "cursor",
                  "value": "",
                  "disabled": true,
                  "description": "O `next_cursor` da página anterior."
                }
              ]
            },
            "description": "Quem recebeu, com o status de cada envio. É onde você vê quais números\nfalharam e por quê, para limpar a sua base.\n"
          }
        }
      ]
    },
    {
      "name": "Automações",
      "item": [
        {
          "name": "Lista fluxos de automação",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/automations",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "automations"
              ],
              "query": [
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Filtra por situação do fluxo."
                },
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Itens por página. Máximo 200."
                },
                {
                  "key": "cursor",
                  "value": "",
                  "disabled": true,
                  "description": "O `next_cursor` da página anterior."
                }
              ]
            },
            "description": "Os fluxos de automação da organização. O token do webhook de cada fluxo é credencial e não aparece aqui."
          }
        },
        {
          "name": "Um fluxo",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/automations/{{id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "automations",
                "{{id}}"
              ],
              "query": []
            },
            "description": "Um fluxo, com o gatilho, as condições de saída e quantos passos ele tem."
          }
        },
        {
          "name": "Execuções do fluxo",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/automations/{{id}}/runs",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "automations",
                "{{id}}",
                "runs"
              ],
              "query": [
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Filtra por situação da execução."
                },
                {
                  "key": "contact_id",
                  "value": "",
                  "disabled": true,
                  "description": "Execuções de um contato específico."
                },
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Itens por página. Máximo 200."
                },
                {
                  "key": "cursor",
                  "value": "",
                  "disabled": true,
                  "description": "O `next_cursor` da página anterior."
                }
              ]
            },
            "description": "As passagens de contatos por este fluxo, da mais recente para a mais\nantiga. Mostra em que passo cada um está e por que os que saíram saíram.\n"
          }
        },
        {
          "name": "Coloca um contato no fluxo",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"phone\": \"+5511987654321\",\n  \"name\": \"Marina Alves\",\n  \"custom_fields\": {\n    \"orcamento\": \"1890\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/automations/{{id}}/start",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "automations",
                "{{id}}",
                "start"
              ],
              "query": []
            },
            "description": "Coloca um contato no fluxo. O contato é criado ou atualizado na mesma\nchamada, então você não precisa cadastrar antes.\n\nO fluxo precisa estar ativo. Se o contato já estiver nele, ou tiver saído\nhá menos tempo que o período de espera configurado, a resposta é `409`.\n"
          }
        },
        {
          "name": "Tira um contato do fluxo",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"phone\": \"+5511987654321\",\n  \"reason\": \"Cliente respondeu por telefone\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/automations/{{id}}/stop",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "automations",
                "{{id}}",
                "stop"
              ],
              "query": []
            },
            "description": "Tira o contato do fluxo antes da hora. Serve para parar a sequência quando ele já resolveu o assunto por outro canal."
          }
        },
        {
          "name": "Dispara um fluxo por token",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"token\": \"fluxo_token_exemplo\",\n  \"phone\": \"+5511987654321\",\n  \"name\": \"Marina Alves\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/automation-trigger",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "automation-trigger"
              ],
              "query": []
            },
            "description": "Dispara um fluxo usando o token do próprio fluxo, sem chave de API. É o\nformato antigo, mantido para as integrações que já existem.\n\nEm código novo, prefira `POST /automations/{id}/start`, que usa a chave\n`wevi_` como todo o resto e devolve o erro no envelope padrão.\n"
          }
        }
      ]
    },
    {
      "name": "Webhooks",
      "item": [
        {
          "name": "Lista os webhooks cadastrados",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/webhooks",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "webhooks"
              ],
              "query": []
            },
            "description": "Os endereços cadastrados para receber eventos, com a saúde de cada um. O\nsegredo de assinatura não aparece aqui: ele só é mostrado uma vez, na\ncriação.\n"
          }
        },
        {
          "name": "Cadastra um webhook",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://sistema.clinicabemestar.com.br/wevichat\",\n  \"events\": [\n    \"message.received\",\n    \"conversation.handoff_requested\"\n  ],\n  \"description\": \"CRM\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/webhooks",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "webhooks"
              ],
              "query": []
            },
            "description": "Cadastra um endereço para receber eventos. A resposta traz o `secret`, que\naparece uma vez só: guarde agora, porque não há como consultá-lo depois,\nsó gerar outro.\n\nConfira a assinatura de cada entrega com esse segredo. Sem isso, quem\ndescobrir o seu endereço consegue inventar um evento.\n"
          }
        },
        {
          "name": "Todos os tipos de evento disponíveis",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/webhooks/event-types",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "webhooks",
                "event-types"
              ],
              "query": []
            },
            "description": "Todos os tipos de evento que dá para assinar, como uma lista de\nidentificadores. Use para validar do seu lado antes de mandar em\n`POST /webhooks`, em vez de descobrir pelo `400`.\n"
          }
        },
        {
          "name": "Um webhook",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/webhooks/{{id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "webhooks",
                "{{id}}"
              ],
              "query": []
            },
            "description": "Um webhook, com a saúde da entrega. O segredo não vem junto."
          }
        },
        {
          "name": "Altera url, eventos, descrição ou situação",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"events\": [\n    \"message.received\",\n    \"message.failed\"\n  ],\n  \"active\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/webhooks/{{id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "webhooks",
                "{{id}}"
              ],
              "query": []
            },
            "description": "Muda endereço, eventos assinados, descrição ou liga e desliga o webhook.\nDesligar com `active: false` para a entrega sem apagar o histórico.\n"
          }
        },
        {
          "name": "Remove o webhook e o histórico dele",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/webhooks/{{id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "webhooks",
                "{{id}}"
              ],
              "query": []
            },
            "description": "Remove o webhook e o histórico de entregas dele. Não tem volta."
          }
        },
        {
          "name": "Dispara um evento de teste",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/webhooks/{{id}}/test",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "webhooks",
                "{{id}}",
                "test"
              ],
              "query": []
            },
            "description": "Enfileira um evento de teste para o endereço. Serve para conferir, antes\nde depender disso, que o seu servidor recebe e que a sua verificação de\nassinatura passa.\n\nO resultado aparece em `GET /webhooks/{id}/deliveries` alguns segundos\ndepois.\n"
          }
        },
        {
          "name": "Gera um segredo novo",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/webhooks/{{id}}/rotate-secret",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "webhooks",
                "{{id}}",
                "rotate-secret"
              ],
              "query": []
            },
            "description": "Gera um segredo novo e invalida o antigo na hora. A resposta mostra o novo\numa vez só.\n\nTroque as duas pontas junto: entre a rotação aqui e a atualização no seu\nservidor, as entregas chegam assinadas com o segredo novo e a sua\nverificação com o antigo vai recusar.\n"
          }
        },
        {
          "name": "Tentativas de entrega",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/webhooks/{{id}}/deliveries",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "webhooks",
                "{{id}}",
                "deliveries"
              ],
              "query": [
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Filtra por situação da entrega."
                },
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Itens por página. Máximo 200."
                },
                {
                  "key": "cursor",
                  "value": "",
                  "disabled": true,
                  "description": "O `next_cursor` da página anterior."
                }
              ]
            },
            "description": "As tentativas de entrega, da mais recente para a mais antiga, com o HTTP\nque o seu servidor devolveu e os primeiros bytes da resposta. É o primeiro\nlugar a olhar quando um evento não chegou.\n"
          }
        },
        {
          "name": "Reenvia uma entrega",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/webhooks/{{id}}/deliveries/{{delivery_id}}/retry",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "webhooks",
                "{{id}}",
                "deliveries",
                "{{delivery_id}}",
                "retry"
              ],
              "query": []
            },
            "description": "Reenvia uma entrega que falhou, sem esperar a próxima retentativa automática. Use depois de corrigir o seu lado."
          }
        },
        {
          "name": "Os mesmos eventos do webhook, por consulta",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/events",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "events"
              ],
              "query": [
                {
                  "key": "since",
                  "value": "",
                  "disabled": true,
                  "description": "Traz só os eventos criados depois desta data."
                },
                {
                  "key": "type",
                  "value": "",
                  "disabled": true,
                  "description": "Filtra por tipo de evento."
                },
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Itens por página. Máximo 200."
                },
                {
                  "key": "cursor",
                  "value": "",
                  "disabled": true,
                  "description": "O `next_cursor` da página anterior."
                }
              ]
            },
            "description": "Os mesmos eventos do webhook, por consulta. Serve para quem não tem\nendereço público: um script atrás de firewall, ou um n8n em rede fechada.\n\nGuarde o `created_at` do último evento que você processou e mande em\n`since` na chamada seguinte. Os eventos ficam disponíveis por 7 dias.\n"
          }
        }
      ]
    },
    {
      "name": "Parceiros",
      "item": [
        {
          "name": "Lista os clientes do parceiro",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/partner/clients",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "partner",
                "clients"
              ],
              "query": [
                {
                  "key": "plan",
                  "value": "",
                  "disabled": true,
                  "description": "Filtra por plano contratado."
                },
                {
                  "key": "q",
                  "value": "",
                  "disabled": true,
                  "description": "Busca pelo nome do cliente."
                },
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Itens por página. Máximo 200."
                },
                {
                  "key": "cursor",
                  "value": "",
                  "disabled": true,
                  "description": "O `next_cursor` da página anterior."
                }
              ]
            },
            "description": "Os clientes desta organização parceira, com o consumo do mês de cada um.\n\nServe para o parceiro montar o próprio painel de clientes, sem espelhar\ndados nossos no banco dele.\n\nOrganização que não é parceira recebe `403 not_a_partner`.\n"
          }
        },
        {
          "name": "Cria um cliente",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Clínica Bem Estar\",\n  \"plan\": \"pro\",\n  \"primary_color\": \"#B5F03F\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/partner/clients",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "partner",
                "clients"
              ],
              "query": []
            },
            "description": "Cria o espaço de um cliente dentro da sua organização parceira.\n\nSem `plan`, ele nasce em teste de 15 dias. Com `plan`, nasce ativo e entra\nna sua cobrança na hora, o que exige a sua assinatura de parceiro ativa.\n\nA resposta traz `invite_url`. Mande esse link para o cliente: é por ele que\nalguém do lado dele assume o espaço como administrador. Sem isso, o espaço\nexiste mas não tem dono humano.\n"
          }
        },
        {
          "name": "Um cliente, com o consumo do mês",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/partner/clients/{{id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "partner",
                "clients",
                "{{id}}"
              ],
              "query": []
            },
            "description": "Um cliente seu, com o consumo do mês. Cliente de outro parceiro responde\n`404`, não `403`: para a sua chave, ele não existe.\n"
          }
        },
        {
          "name": "Altera nome e identidade visual",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"primary_color\": \"#1CB945\",\n  \"logo_url\": \"https://cdn.exemplo.com/logo.png\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/partner/clients/{{id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "partner",
                "clients",
                "{{id}}"
              ],
              "query": []
            },
            "description": "Altera nome, cor, logotipo e domínio próprio do cliente.\n\nTrocar de plano ainda passa pelo painel, porque mexe na sua cobrança no\nStripe. Mandar `plan` aqui devolve `409` explicando isso.\n"
          }
        },
        {
          "name": "Gera uma chave dentro do cliente",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"integração do parceiro\",\n  \"scopes\": [\n    \"contacts:read\",\n    \"messages:send\"\n  ],\n  \"is_test\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/partner/clients/{{id}}/keys",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "partner",
                "clients",
                "{{id}}",
                "keys"
              ],
              "query": []
            },
            "description": "Gera uma chave de API dentro do espaço do cliente, para o seu sistema\noperar aquele espaço.\n\nA chave vale só naquele cliente: ela não enxerga os seus outros clientes\nnem a sua organização parceira. O token aparece uma vez só, nesta resposta.\n"
          }
        },
        {
          "name": "Consumo de todos os clientes",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/partner/usage",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "partner",
                "usage"
              ],
              "query": []
            },
            "description": "O consumo de todos os seus clientes de uma vez, agregado e por cliente.\nÉ o número que fecha com a sua fatura de licenças no fim do mês.\n\nOrganização que não é parceira recebe `403 not_a_partner`.\n"
          }
        }
      ]
    },
    {
      "name": "Sistema",
      "item": [
        {
          "name": "A organização da chave",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/org",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "org"
              ],
              "query": []
            },
            "description": "A organização da chave, com o plano, os limites e o consumo do mês. Limite\nsem teto vem como `null`, porque JSON não tem infinito.\n\nConsulte antes de uma carga grande para saber quanto ainda cabe.\n\nO campo `alerts` traz o que está quebrado agora: webhook falhando há mais\nde uma hora, número de WhatsApp com erro de configuração, chave prestes a\nvencer. Vem vazio quando está tudo certo.\n"
          }
        },
        {
          "name": "Consumo do mês corrente",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/org/usage",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "org",
                "usage"
              ],
              "query": []
            },
            "description": "Só o consumo do mês, sem os dados da organização. Mais barato para um painel que atualiza sozinho."
          }
        },
        {
          "name": "Números do atendimento",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/analytics/overview",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "analytics",
                "overview"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "disabled": true,
                  "description": "Início do período, em ISO 8601. Padrão: 30 dias atrás."
                },
                {
                  "key": "to",
                  "value": "",
                  "disabled": true,
                  "description": "Fim do período, em ISO 8601. Padrão: agora."
                }
              ]
            },
            "description": "Os números do atendimento no período: conversas, mensagens, transbordos,\navaliações e humor. Sem `from` e `to`, usa os últimos 30 dias.\n"
          }
        },
        {
          "name": "Os mesmos números, para um agente",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/analytics/agents/{{id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "analytics",
                "agents",
                "{{id}}"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "disabled": true,
                  "description": "Início do período, em ISO 8601. Padrão: 30 dias atrás."
                },
                {
                  "key": "to",
                  "value": "",
                  "disabled": true,
                  "description": "Fim do período, em ISO 8601. Padrão: agora."
                }
              ]
            },
            "description": "Os mesmos números, só do que passou por um agente. Serve para comparar dois agentes no mesmo período."
          }
        },
        {
          "name": "Ping para monitoramento",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/health",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "health"
              ],
              "query": []
            },
            "description": "Responde sem autenticação, para você apontar o seu monitoramento. Além do\nstatus, devolve `db_ms`, o tempo de uma consulta trivial ao banco: é o que\nsepara \"a API está de pé\" de \"a API está rápida\".\n\nSe o banco não responder, o status vira `degraded` e o HTTP, `503`.\n"
          }
        },
        {
          "name": "Esta especificação",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/openapi",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "openapi"
              ],
              "query": []
            },
            "description": "Esta especificação, em JSON, sem autenticação. Aponte a sua ferramenta\npara cá e ela gera o cliente sozinha.\n"
          }
        }
      ]
    }
  ]
}
