Download OpenAPI specification:
Documentação pública da Mais Chat API.
API REST para uso restrito a clientes da Mais Chat.
Todas as chamadas exigem o header authorization no formato:
authorization: Bearer {{tenantToken}}
Content-Type: application/json
O tenantToken é exclusivo do cliente e deve ser solicitado ao Suporte Mais Chat.
Sem esse header a API responderá 401 Unauthorized.
Todas as rotas da API possuem rate limit para garantir a estabilidade do serviço.
Para detalhes sobre limites específicos ou aumento de capacidade, entre em contato com o Suporte Mais Chat.
Além da API REST, a Mais Chat envia eventos HTTP para endpoints configurados pelos clientes. Webhooks são contratos de eventos recebidos pelo servidor do cliente; eles não representam rotas REST da API Mais Chat.
Cada entrega é um POST com Content-Type: application/json, headers padrão e corpo no envelope:
{
"event": "newProtocol",
"entry": {},
"timestamp": 1719320400000
}
Headers enviados:
X-Webhook-Event: nome do evento, igual ao campo event.X-Webhook-Delivery: UUID da tentativa de entrega.X-Webhook-Id: identificador do evento de origem, quando disponível, para idempotência.X-Webhook-Signature: assinatura HMAC-SHA256 quando o webhook possui secret.Quando há secret, o corpo bruto é assinado no formato sha256=HMAC_SHA256(secret, corpo_bruto).
A validação deve usar o corpo bruto recebido, antes do parse JSON.
O endpoint do cliente deve responder 2xx para confirmar o recebimento. Respostas 4xx indicam rejeição definitiva.
Respostas 5xx ou timeout são reprocessadas. Cada tentativa usa um novo X-Webhook-Delivery; o mesmo evento mantém
o mesmo X-Webhook-Id, quando disponível.
Retorna a lista de mensagens enviadas pela API através de um canal específico (appId) ou número de origem associado.
A rota suporta paginação e permite consultar o histórico de mensagens enviadas, incluindo metadados sobre o envio, status de entrega (ack), payload da requisição e resposta do provedor (ex: WhatsApp Cloud API).
Cada item retornado representa uma mensagem enviada pelo sistema, com dados completos sobre:
Limite de requisições (rate limit):
| mobile required | string Identificador do canal (appId) ou número do remetente configurado no broker. |
| limit | integer Default: 10 |
| offset | integer Default: 0 Example: offset=200 Número de registros a serem ignorados antes de iniciar a listagem. |
{- "status": true,
- "data": [
- {
- "_id": "abc1234567890fakeid",
- "type": "wppCloudAPI",
- "from": "55999998888",
- "to": "5541999887766",
- "message": "Olá João, seu pedido #12345 foi confirmado!",
- "ack": "2",
- "ackLog": [
- {
- "ack": "1",
- "createdAt": "2025-09-23T10:00:00.000Z"
}, - {
- "ack": "2",
- "createdAt": "2025-09-23T10:01:10.000Z"
}
], - "components": [
- {
- "type": "BODY",
- "text": "Olá João, seu pedido #12345 foi confirmado!"
}, - {
- "type": "FOOTER",
- "text": "Obrigado por comprar conosco!"
}, - {
- "type": "BUTTONS",
- "buttons": [
- {
- "type": "text",
- "text": "Ver detalhes",
- "sub_type": "url",
- "index": "0",
- "buttonText": "Acompanhar pedido",
}
]
}
], - "payload": {
- "request": {
- "type": "apiTemplate",
- "broker": "wppCloudAPI",
- "appId": "111111111111111",
- "source": "55999998888",
- "destination": "5541999887766",
- "template": {
- "name": "pedido_confirmado",
- "language": "pt_BR",
- "components": [
- {
- "type": "body",
- "parameters": [
- {
- "type": "text",
- "text": "12345"
}
]
}
]
}
}, - "response": {
- "messaging_product": "whatsapp",
- "contacts": [
- {
- "input": "5541999887766",
- "wa_id": "5541999887766"
}
], - "messages": [
- {
- "id": "wamid.fakeMessageId123",
- "message_status": "accepted"
}
]
}
}, - "tenant": {
- "_id": "fakeTenantId123",
- "name": "Loja Exemplo",
- "id": "fakeTenantId123"
}, - "createdAt": "2025-09-23T10:00:00.000Z",
- "updatedAt": "2025-09-23T10:01:10.000Z"
}
]
}Retorna a lista de mensagens enviadas pela API através do número de destino.
Limite de requisições (rate limit):
| destination required | string |
| limit | integer Default: 10 |
| offset | integer Default: 0 Example: offset=200 Número de registros a serem ignorados antes de iniciar a listagem. |
{- "status": true,
- "data": { }
}Retorna a lista de templates cadastrados na Meta.
appId via query para filtrar os templates do aplicativo específico (requisito da Meta).{{1}}, {{2}} etc).Limite de requisições (rate limit):
| broker required | string Value: "wppCloudAPI" |
| appId required | string Example: appId=123456789012345 Identificador do aplicativo na Meta Cloud API. Obrigatório quando |
{- "status": true,
- "data": [
- {
- "name": "saudacao",
- "parameter_format": "POSITIONAL",
- "components": [
- {
- "type": "BODY",
- "text": "Olá {{1}}, me chamo {{2}} da Mais Chat.",
- "example": {
- "body_text": [
- [
- "João",
- "Maria"
]
]
}
}
], - "language": "pt_BR",
- "status": "APPROVED",
- "category": "MARKETING",
- "id": "1511471309205472"
}
]
}Envia uma mensagem de template (mensagem pré-aprovada pela Meta/WhatsApp)
pelo broker Meta Cloud API. Templates são usados para iniciar ou retomar
conversas fora da janela de 24h e para comunicações padronizadas (notificações,
alertas, confirmações etc.). A propriedade template deve seguir
obrigatoriamente o formato e as regras da documentação oficial da Meta:
https://developers.facebook.com/docs/whatsapp/cloud-api/guides/send-message-templates.
Apenas templates previamente aprovados e ativos podem ser utilizados.
Limite de requisições (rate limit):
| broker required | string Value: "wppCloudAPI" |
| type required | string Value: "apiTemplate" Tipo de operação; para Meta Cloud use sempre |
| broker required | string Value: "wppCloudAPI" Broker de envio; atualmente suportado: |
| appId required | string Phone Number ID do seu canal (número do WhatsApp Business na Meta). |
| source required | string Número do remetente (seu canal) em formato E.164 (ex.: 5511999991234). |
| destination required | string Número do destinatário em formato E.164 (ex.: 5511912341234). |
| token required | string Token do Graph API (Meta Cloud) com permissões para envio. |
required | object Dados do template conforme a documentação oficial da Meta: https://developers.facebook.com/docs/whatsapp/cloud-api/guides/send-message-templates. Deve referenciar um template aprovado e ativo na sua conta WhatsApp Business. Campos mínimos: - |
{- "type": "apiTemplate",
- "broker": "wppCloudAPI",
- "appId": "317774448096214",
- "source": "5511999991234",
- "destination": "5511912341234",
- "token": "EAA...",
- "template": {
- "name": "flow_meta_2",
- "language": "pt_BR",
- "components": [
- {
- "type": "header",
}, - {
- "type": "body",
- "parameters": [
- {
- "type": "text",
- "text": "João"
}
]
}, - {
- "type": "button",
- "sub_type": "flow",
- "index": "0",
- "parameters": [
- {
- "type": "action",
- "action": {
- "flow_token": "{\"flowId\": 3293039314163350}"
}
}
]
}
]
}
}{- "status": true,
- "data": {
- "messaging_product": "whatsapp",
- "contacts": [
- {
- "input": "5511912341234",
- "wa_id": "5511912341234"
}
], - "messages": [
- {
- "id": "wamid.HBgMNTU0ODg4MTU2NTg2FQIAERgSQjQ3MzM1QUZGRDlDMkQxNTkyAA==",
- "message_status": "accepted"
}
], - "msgId": "66be3b896671d540a47be362"
}
}Retorna a lista de brokers configurados na plataforma, incluindo dados técnicos e de identificação necessários para integração com os canais de mensagens.
Limite de requisições (rate limit):
{- "status": true,
- "data": [
- {
- "version": null,
- "_id": "65eb2a5529408895f2afc3da",
- "broker": "wppCloudAPI",
- "name": "Exemplo - Cloud",
- "app": "Exemplo Tecnologia",
- "appId": "234057352740299",
- "wabaId": "267173379104556",
- "number": "5511912341234",
- "token": "EAA..."
}
]
}Retorna uma lista de contatos cadastrados na plataforma.
A listagem pode ser paginada com limit e offset, filtrada pelo período de criação
(startTime/endTime) e pelos campos do contato
(tags, categoria, mês de aniversário, nome, celular, CPF/CNPJ e e-mail).
Todos os filtros são combináveis (E lógico / AND). Parâmetros desconhecidos ou com valores inválidos resultam em HTTP 400 — nunca são ignorados silenciosamente.
Observações:
limit possui limite máximo de 200 registros por requisição.count (quantidade retornada) e countTotal (quantidade total de registros que atendem ao filtro).Limite de requisições (rate limit):
| limit | integer [ 1 .. 200 ] Default: 10 Número máximo de registros retornados por requisição (mín. 1, máx. 200). |
| offset | integer Default: 0 Example: offset=200 Número de registros a serem ignorados antes de iniciar a listagem. |
| startTime | string <date> Example: startTime=2023-03-01 Data inicial de cadastro do contato. |
| endTime | string <date> Example: endTime=2024-03-31 Data final de cadastro do contato. |
| name | string Nome do contato (busca parcial, case-insensitive). |
| mobile | string Número de celular (busca com e sem o nono dígito). |
| cpfCnpj | string CPF ou CNPJ (com ou sem máscara). |
string E-mail do contato (busca parcial, case-insensitive). | |
| tag | string Uma ou mais tags de contato (ObjectId), separadas por vírgula. Ex.: |
| category | string Enum: "PF" "PJ" Categoria do contato — |
| birthMonth | integer [ 1 .. 12 ] Mês de aniversário (1 a 12), derivado da data de nascimento. |
{- "status": true,
- "data": [
- {
- "linked": [ ],
- "externalCode": null,
- "countryCode": "55",
- "tags": [
- {
- "_id": "5f91c4a9fccea6157cf2f",
- "tag": "NOVO"
}, - {
- "_id": "5f1e829f48cb380741e5cecd",
- "tag": "LEAD"
}
], - "_id": "68d215cd92eeb37882463a09",
- "name": "Pedro Augusto",
- "celular": "11912341234",
- "notes": [
- {
- "_id": "68d215cd79eeb3278d461a01",
- "type": "text",
- "date": "2025-09-23T03:36:45.124Z",
- "text": "<div><b>Contato cadastrado automaticamente</b></div><p>Este contato foi cadastrado automaticamente pelo canal WhatsApp Business.</p>"
}
], - "createdAt": "2025-09-23T03:36:45.138Z",
- "updatedAt": "2025-09-23T03:36:45.625Z",
- "address": [ ],
- "id": "68d2895cd79eeb37222425a03"
}
], - "count": 100,
- "countTotal": 29034
}Cria um novo contato na plataforma.
Detalhes:
name e type.email deve ser válido quando informado.tags devem conter IDs válidos de tags previamente cadastradas.Limite de requisições (rate limit):
Observações adicionais:
409.StandardResponse, com o objeto criado em data.| name required | string |
| type required | string PF/PJ (case-insensitive) |
| cpf | string |
| celular | string |
| telefoneFixo | string |
string <email> | |
| departamento | string |
| funcao | string |
Array of objects | |
| tags | Array of strings |
{- "name": "Fulana 5 de Tal",
- "type": "pf",
- "cpf": "813.844.599-87",
- "celular": "48 98888-9999",
- "telefoneFixo": "+34 654232147",
- "departamento": "Dep Teste",
- "funcao": "Função teste",
- "notes": [
- {
- "type": "text",
- "text": "Cadastro automático via formulário"
}, - {
- "type": "text",
- "text": "Modelo de interesse xxxx"
}
], - "tags": [
- "5e42ab48a61cfa56d01c508e",
- "60c0cd228e0e1d4a5d68d26a"
]
}{- "status": true,
- "data": { }
}Atualiza parcial de um contato existente. Todos os campos são opcionais.
Se o campo name for enviado, ele não pode ser vazio.
Se o campo tags for enviado, deve conter um array com IDs válidos de tags. E tais tags serão adicionadas ao contato (não substituem as existentes).
Limite de requisições (rate limit):
| id required | string |
| name | string non-empty |
| type | string PF/PJ (case-insensitive) |
| cpf | string |
| celular | string |
| telefoneFixo | string |
string <email> | |
| departamento | string |
| funcao | string |
Array of objects | |
| tags | Array of strings |
{- "name": "Fulana de Tal (atualizado)",
- "notes": [
- {
- "type": "text",
- "text": "Ajuste de cadastro pelo time comercial"
}
], - "tags": [
- "60c0cd228e0e1d4a5d68d26a"
]
}{- "status": true,
- "data": { }
}Remove tags de um contato existente.
Limite de requisições (rate limit):
| id required | string |
| tags required | Array of strings |
{- "tags": [
- "60c0cd228e0e1d4a5d68d26a"
]
}{- "status": true,
- "data": { }
}Retorna dados do contado onde a busca é pelo número de celular.
Limite de requisições (rate limit):
| cellphone required | string |
{- "status": true,
- "data": { }
}Retorna lista de protocolos.
Todos os filtros são combináveis (E lógico / AND). Parâmetros desconhecidos ou com valores inválidos resultam em HTTP 400 — nunca são ignorados silenciosamente.
Limite de requisições (rate limit):
| limit | integer [ 1 .. 200 ] Default: 10 Número máximo de registros retornados por requisição (mín. 1, máx. 200). |
| offset | integer Default: 0 Example: offset=200 Número de registros a serem ignorados antes de iniciar a listagem. |
| state | string Enum: "open" "closed" Filtrar por estado do protocolo (aberto/fechado). |
| situation | string^[0-9a-fA-F]{24}$ Situação configurável do protocolo (ObjectId de uma situação cadastrada).
Diferente de |
| motive | string^[0-9a-fA-F]{24}$ Motivo de encerramento (ObjectId). Consulte os IDs disponíveis em |
| attendanceState | string Enum: "bot" "queue" "attendant" Estado do atendimento:
|
| queue | string Uma ou mais filas (ObjectId), separadas por vírgula. Ex.: |
| tag | string Uma ou mais tags do protocolo (ObjectId), separadas por vírgula. Ex.: |
| contactName | string Nome do contato (busca parcial, case-insensitive). |
| contactEmail | string E-mail do contato (busca parcial, case-insensitive). |
| contactMobile | string Celular do contato (busca parcial pelos dígitos). |
| attendant | string^[0-9a-fA-F]{24}$ Atendente (ObjectId do usuário). |
| role | string^[0-9a-fA-F]{24}$ Papel do atendente (ObjectId). Filtra protocolos de atendentes com esse papel. |
| channel | string Canal do protocolo (ex.: |
| whatsappConnection | string Conexão WhatsApp (número da conexão que originou o protocolo). |
| rating | string Avaliação do atendimento. |
| receptive | boolean Tipo de comunicação — |
| startTime | string <date> Example: startTime=2023-03-01 Data inicial de cadastro do contato. |
| endTime | string <date> Example: endTime=2024-03-31 Data final de cadastro do contato. |
| closeStartTime | string <date> Data inicial de fechamento ( |
| closeEndTime | string <date> Data final de fechamento ( |
{- "status": true,
- "data": { }
}Retorna os dados de um protocolo e a lista de mensagens relacionadas. Use este endpoint para inspecionar o histórico de atendimento (bot e humano), filas, tags e motivos de encerramento.
Limite de requisições (rate limit):
Observações:
messages é retornado em ordem cronológica crescente (mais antigo → mais recente).| protocolNumber required | string Example: 17585415876230366 Número do protocolo (string numérica gerada pelo sistema). |
{- "status": true,
- "data": {
- "_id": "6ab13713fab6bcd272025a00",
- "channel": "web",
- "channelNumber": null,
- "chatId": null,
- "protocol_number": "17585415876230366",
- "attendant": {
- "_id": "6ab198a96054aa45422ba100",
- "name": "Ana Souza"
}, - "contact": {
- "_id": "6aa214678ff52271edc7ce01",
- "name": "João Pereira",
- "address": null
}, - "human": true,
- "receptive": true,
- "tags": [
- {
- "_id": "659feb1f49c7f81ec701de01",
- "tag": "SUPORTE - APP WEB"
}
], - "queue": {
- "_id": "60d0f2a53c9b6c57b6d37301",
- "name": "SAC",
- "description": "Fila de atendimento geral"
}, - "state_protocol": "closed",
- "countMessages": 10,
- "messages": [
- {
- "id": "6ab13713fab6bc4eb0025a01",
- "ack": null,
- "ackLog": [ ],
- "hasQuotedMsg": false,
- "human": false,
- "template": false,
- "wppId": null,
- "direction": "incoming",
- "message_type": "text",
- "createdAt": "2025-09-22T11:46:27.639Z",
- "message": "Olá, bom dia!"
}, - {
- "id": "6ab13713fab6bc2dd6025a02",
- "ack": "2",
- "ackLog": [ ],
- "hasQuotedMsg": false,
- "human": false,
- "template": false,
- "wppId": null,
- "direction": "outgoing",
- "message_type": "text",
- "createdAt": "2025-09-22T11:46:27.703Z",
- "message": "Para agilizar, descreva o assunto e aguarde um atendente, por favor."
}, - {
- "id": "6ab13713fab6bcb968025a03",
- "ack": "0",
- "ackLog": [ ],
- "hasQuotedMsg": false,
- "human": false,
- "template": false,
- "wppId": null,
- "direction": "outgoing",
- "message_type": "note",
- "createdAt": "2025-09-22T11:46:27.741Z",
- "message": "Direcionado pelo bot para a fila: SAC."
}, - {
- "id": "6ab1371d5ce68b0e5dc37004",
- "ack": null,
- "ackLog": [ ],
- "hasQuotedMsg": false,
- "human": true,
- "template": false,
- "wppId": null,
- "direction": "incoming",
- "message_type": "text",
- "createdAt": "2025-09-22T11:46:37.694Z",
- "message": "Preciso de ajuda para criar um novo template."
}, - {
- "id": "6ab13787d2a9b395fe6b9f05",
- "ack": "0",
- "ackLog": [ ],
- "hasQuotedMsg": false,
- "human": true,
- "template": false,
- "wppId": null,
- "direction": "outgoing",
- "message_type": "note",
- "createdAt": "2025-09-22T11:48:23.125Z",
- "message": "Protocolo assumido pela agente Ana Souza."
}, - {
- "id": "6ab137eb0fc4693df670ef06",
- "ack": "1",
- "ackLog": [ ],
- "hasQuotedMsg": false,
- "human": true,
- "template": false,
- "wppId": null,
- "direction": "outgoing",
- "message_type": "text",
- "createdAt": "2025-09-22T11:50:03.755Z",
- "message": "Bom dia! Vou verificar para você."
}, - {
- "id": "6ab137ee6f0f41e2285c9507",
- "ack": "1",
- "ackLog": [ ],
- "hasQuotedMsg": false,
- "human": true,
- "template": false,
- "wppId": null,
- "direction": "outgoing",
- "message_type": "text",
- "createdAt": "2025-09-22T11:50:06.899Z",
- "message": "Um instante, por gentileza."
}, - {
- "id": "6ab1388bf9d6cc5a4a4acf08",
- "ack": null,
- "ackLog": [ ],
- "hasQuotedMsg": false,
- "human": true,
- "template": false,
- "wppId": null,
- "direction": "incoming",
- "message_type": "text",
- "createdAt": "2025-09-22T11:52:43.130Z",
- "message": "Enviei os detalhes por e-mail."
}, - {
- "id": "6ab13b7c17e7d5411fd5b009",
- "ack": "1",
- "ackLog": [ ],
- "hasQuotedMsg": false,
- "human": true,
- "template": false,
- "wppId": null,
- "direction": "outgoing",
- "message_type": "text",
- "createdAt": "2025-09-22T12:05:16.628Z",
- "message": "Template criado e ativo. Qualquer ajuste, me avise."
}, - {
- "id": "6ab18ac38291321c7490400a",
- "ack": "0",
- "ackLog": [ ],
- "hasQuotedMsg": false,
- "human": true,
- "template": false,
- "wppId": null,
- "direction": "outgoing",
- "message_type": "note",
- "createdAt": "2025-09-22T17:43:31.311Z",
- "message": "Protocolo encerrado pela agente Ana Souza."
}
], - "reason": {
- "protocolReason": {
- "reasonParent": null,
- "reasonNote": "",
- "_id": "6ab18ac3be4c840257583caa",
- "reasonName": "Resolvido"
}, - "reason": "660d2ef2eca7d763c325abdb",
- "motive": null
}, - "createdAt": "2025-09-22T11:46:27.628Z",
- "humanDate": "2025-09-22T11:46:27.698Z",
- "queueDate": "2025-09-22T11:46:27.698Z",
- "attendanceDate": "2025-09-22T11:48:19.962Z",
- "closeDate": "2025-09-22T17:43:31.270Z"
}
}Retorna protocolos abertos onde o número alvo é o número de WhatsApp usado na conversa.
Limite de requisições (rate limit):
| phoneNumber required | string |
{- "status": true,
- "data": { }
}Retorna as filas de atendimento do tenant, ordenadas por status (ativas primeiro) e nome.
Use o _id retornado no filtro queue de GET /protocol.
Parâmetros desconhecidos ou com valores inválidos resultam em HTTP 400.
Limite de requisições (rate limit):
| limit | integer [ 1 .. 200 ] Default: 10 Número máximo de registros retornados por requisição (mín. 1, máx. 200). |
| offset | integer Default: 0 Example: offset=200 Número de registros a serem ignorados antes de iniciar a listagem. |
| status | boolean
|
{- "status": true,
- "data": [
- {
- "_id": "507f1f77bcf86cd799439031",
- "name": "Suporte",
- "description": "Fila de suporte técnico",
- "status": true,
- "isDefault": false,
- "createdAt": "2025-01-15T12:00:00.000Z"
}
], - "count": 1,
- "countTotal": 1
}Retorna uma fila de atendimento pelo seu ID.
Limite de requisições (rate limit):
| id required | string^[0-9a-fA-F]{24}$ ObjectId da fila. |
{- "status": true,
- "data": {
- "_id": "507f1f77bcf86cd799439031",
- "name": "Suporte",
- "description": "Fila de suporte técnico",
- "status": true,
- "isDefault": false,
- "createdAt": "2025-01-15T12:00:00.000Z"
}
}Consulta de situações e motivos de encerramento de protocolo (IDs para uso nos filtros)
Retorna as situações de protocolo cadastradas (nível raiz), cada uma com seus
motivos aninhados no campo childs (em ordem alfabética).
Use o _id da situação no filtro situation e o _id do motivo no filtro
motive de GET /protocol.
Parâmetros desconhecidos ou com valores inválidos resultam em HTTP 400.
Limite de requisições (rate limit):
| limit | integer [ 1 .. 200 ] Default: 10 Número máximo de registros retornados por requisição (mín. 1, máx. 200). |
| offset | integer Default: 0 Example: offset=200 Número de registros a serem ignorados antes de iniciar a listagem. |
| status | boolean
|
{- "status": true,
- "data": [
- {
- "_id": "507f1f77bcf86cd799439021",
- "name": "Resolvido",
- "status": true,
- "note": false,
- "position": 1,
- "colorTag": "#2e7d32",
- "colorFont": "#ffffff",
- "createdAt": "2025-01-15T12:00:00.000Z",
- "childs": [
- {
- "_id": "507f1f77bcf86cd799439022",
- "name": "Dúvida sanada",
- "status": true,
- "parent": "507f1f77bcf86cd799439021",
- "position": 1
}
]
}
], - "count": 1,
- "countTotal": 1
}Retorna apenas os motivos (registros com situação-pai), com a situação populada em parent.
Parâmetros desconhecidos ou com valores inválidos resultam em HTTP 400.
Limite de requisições (rate limit):
| limit | integer [ 1 .. 200 ] Default: 10 Número máximo de registros retornados por requisição (mín. 1, máx. 200). |
| offset | integer Default: 0 Example: offset=200 Número de registros a serem ignorados antes de iniciar a listagem. |
| status | boolean
|
| search | string <= 60 characters Busca parcial (case-insensitive) pelo nome do motivo. |
| reason | string^[0-9a-fA-F]{24}$ Restringe aos motivos de uma situação específica (ObjectId da situação). |
{- "status": true,
- "data": [
- {
- "_id": "507f1f77bcf86cd799439022",
- "name": "Dúvida sanada",
- "status": true,
- "position": 1,
- "parent": {
- "_id": "507f1f77bcf86cd799439021",
- "name": "Resolvido",
- "status": true
}
}
], - "count": 1,
- "countTotal": 1
}Retorna uma situação ou motivo pelo seu ID. Quando for um motivo, a situação vem populada em parent.
Limite de requisições (rate limit):
| id required | string^[0-9a-fA-F]{24}$ ObjectId da situação ou motivo. |
{- "status": true,
- "data": {
- "_id": "507f1f77bcf86cd799439022",
- "name": "Dúvida sanada",
- "status": true,
- "position": 1,
- "parent": {
- "_id": "507f1f77bcf86cd799439021",
- "name": "Resolvido",
- "status": true
}
}
}Retorna a lista de boards do tenant autenticado.
Limite de requisições (rate limit):
| limit | integer Default: 10 |
| offset | integer Default: 0 Example: offset=200 Número de registros a serem ignorados antes de iniciar a listagem. |
| closed | boolean Filtrar boards abertos/fechados. |
| state | string Filtrar por estado do board. |
| name | string Filtrar por nome com busca parcial. |
{- "status": true,
- "data": [
- {
- "_id": "67c8b1f0f31a2b0012345801",
- "name": "Operacao Comercial",
- "description": "Board para acompanhar o funil comercial",
- "closed": false,
- "state": "ABERTO",
- "prefs": {
- "permissionLevel": "private"
}, - "tenant": "67c89ffaf31a2b0012345600",
- "createdAt": "2026-03-10T13:00:00.000Z",
- "updatedAt": "2026-03-10T13:00:00.000Z"
}
], - "count": 1,
- "countTotal": 1
}Cria um novo board para o tenant autenticado.
Limite de requisições (rate limit):
| name required | string [ 3 .. 120 ] characters |
| description | string <= 500 characters |
| closed | boolean |
| state | string |
object | |
| members | Array of strings |
Array of objects | |
| tags | Array of strings |
| createdUser | string |
| updatedUser | string |
{- "name": "Operacao Comercial",
- "description": "Board para acompanhar o funil comercial",
- "state": "ABERTO",
- "prefs": {
- "permissionLevel": "private"
}, - "members": [
- "67c8a5d4f31a2b0012345678"
], - "memberships": [
- {
- "idMember": "67c8a5d4f31a2b0012345678",
- "memberType": "admin"
}
], - "tags": [
- "67c8a7b4f31a2b0012345699"
], - "createdUser": "67c8a5d4f31a2b0012345678"
}{- "status": true,
- "data": { }
}Atualiza parcialmente um board existente.
Limite de requisições (rate limit):
| id required | string |
| name | string [ 3 .. 120 ] characters |
| description | string <= 500 characters |
| closed | boolean |
| state | string |
object | |
| members | Array of strings |
Array of objects | |
| tags | Array of strings |
| updatedUser | string |
| closedUser | string |
| closedAt | string <date-time> |
{- "name": "Operacao Comercial BR",
- "description": "Board atualizado para o time Brasil",
- "updatedUser": "67c8a5d4f31a2b0012345678",
- "tags": [
- "67c8a7b4f31a2b0012345699",
- "67c8a7b4f31a2b0012345700"
]
}{- "status": true,
- "data": { }
}Retorna as taskLists do tenant autenticado, sempre filtradas por board.
Limite de requisições (rate limit):
| limit | integer Default: 10 |
| offset | integer Default: 0 Example: offset=200 Número de registros a serem ignorados antes de iniciar a listagem. |
| board required | string ID do board dono das taskLists. |
| closed | boolean Filtrar taskLists abertas/fechadas. |
| name | string Filtrar por nome com busca parcial. |
{- "status": true,
- "data": [
- {
- "_id": "67c8b2b8f31a2b0012345802",
- "name": "Novos Leads",
- "position": 0,
- "closed": false,
- "board": {
- "_id": "67c8b1f0f31a2b0012345801",
- "name": "Operacao Comercial"
}, - "tenant": "67c89ffaf31a2b0012345600",
- "createdAt": "2026-03-10T13:10:00.000Z",
- "updatedAt": "2026-03-10T13:10:00.000Z"
}
], - "count": 1,
- "countTotal": 1
}Cria uma nova taskList vinculada a um board.
Se position não for enviada, a API usa a maior posição atual do board e soma +1.
Limite de requisições (rate limit):
| name required | string [ 2 .. 120 ] characters |
| board required | string |
| position | integer >= 0 |
| closed | boolean |
| createdUser | string |
| updatedUser | string |
{- "name": "Novos Leads",
- "board": "67c8b1f0f31a2b0012345801",
- "createdUser": "67c8a5d4f31a2b0012345678"
}{- "status": true,
- "data": { }
}Atualiza parcialmente uma taskList existente.
Limite de requisições (rate limit):
| id required | string |
| name | string [ 2 .. 120 ] characters |
| board | string |
| position | integer >= 0 |
| closed | boolean |
| updatedUser | string |
{- "name": "Leads Qualificados",
- "board": "67c8b1f0f31a2b0012345801",
- "position": 1,
- "updatedUser": "67c8a5d4f31a2b0012345678"
}{- "status": true,
- "data": { }
}Retorna as tasks do tenant autenticado, sempre filtradas por list.
Limite de requisições (rate limit):
| limit | integer Default: 10 |
| offset | integer Default: 0 Example: offset=200 Número de registros a serem ignorados antes de iniciar a listagem. |
| list required | string ID da taskList dona das tasks. |
| protocol | string |
| contact | string |
| state | string |
| status | string |
| closed | boolean |
| title | string Filtrar por título com busca parcial. |
{- "status": true,
- "data": [
- {
- "_id": "67c8b4f4f31a2b0012345805",
- "title": "Entrar em contato com cliente premium",
- "description": "Priorizar contato via WhatsApp no inicio da tarde",
- "position": 0,
- "priority": "Alta",
- "status": "open",
- "state": "ABERTO",
- "closed": false,
- "deadline": "2026-03-20T21:00:00.000Z",
- "board": {
- "_id": "67c8b1f0f31a2b0012345801",
- "name": "Operacao Comercial"
}, - "list": {
- "_id": "67c8b2b8f31a2b0012345802",
- "name": "Novos Leads"
}, - "createdAt": "2026-03-10T13:20:00.000Z",
- "updatedAt": "2026-03-10T13:20:00.000Z"
}
], - "count": 1,
- "countTotal": 1
}Cria uma nova task vinculada a uma taskList e ao board correspondente.
Se position não for enviada, a API usa a maior posição atual da taskList e soma +1.
Validações adicionais:
deadline, quando enviada, deve conter uma data válida.deadline aceita YYYY-MM-DD ou date-time em ISO 8601.deadline: null remove o valor atual.Limite de requisições (rate limit):
| title required | string [ 3 .. 160 ] characters |
| description | string <= 2000 characters |
| board required | string |
| list required | string |
| position | integer >= 0 |
| state | string |
| status | string |
| closed | boolean |
| priority | string Enum: "Baixa" "Média" "Alta" "Crítica" |
string or string or null (TaskDeadlineField) | |
| protocol | string or null |
| contact | string or null |
| companies | Array of strings |
| tags | Array of strings |
| responsible | string or null |
| participants | Array of strings |
Array of objects (TaskNote) | |
| closeBoard | boolean |
| createdUser | string |
| updatedUser | string |
{- "title": "Entrar em contato com cliente premium",
- "description": "Priorizar contato via WhatsApp no inicio da tarde",
- "board": "67c8b1f0f31a2b0012345801",
- "list": "67c8b2b8f31a2b0012345802",
- "priority": "Alta",
- "status": "open",
- "state": "ABERTO",
- "contact": "67c8b3def31a2b0012345803",
- "protocol": "67c8b45af31a2b0012345804",
- "responsible": "67c8a5d4f31a2b0012345678",
- "participants": [
- "67c8a5d4f31a2b0012345678"
], - "tags": [
- "67c8a7b4f31a2b0012345699"
], - "notes": [
- {
- "note": "Cliente aguardando proposta comercial",
- "createdUser": "67c8a5d4f31a2b0012345678"
}
], - "deadline": "2026-03-20",
- "createdUser": "67c8a5d4f31a2b0012345678"
}{- "status": true,
- "data": { }
}Atualiza parcialmente uma task existente.
Validações adicionais:
deadline, quando enviada, deve conter uma data válida.deadline aceita YYYY-MM-DD, date-time ISO 8601, null ou string vazia para limpeza.Limite de requisições (rate limit):
| id required | string |
| title | string [ 3 .. 160 ] characters |
| description | string <= 2000 characters |
| board | string |
| list | string |
| position | integer >= 0 |
| state | string |
| status | string |
| closed | boolean |
| priority | string Enum: "Baixa" "Média" "Alta" "Crítica" |
string or string or string or null Aceita | |
| protocol | string or null |
| contact | string or null |
| companies | Array of strings |
| tags | Array of strings |
| responsible | string or null |
| participants | Array of strings |
Array of objects (TaskNote) | |
| closeBoard | boolean |
| updatedUser | string |
| closedUser | string |
| closedAt | string <date-time> |
{- "title": "Retornar cliente premium",
- "description": "Contato reagendado para o fim da tarde",
- "board": "67c8b1f0f31a2b0012345801",
- "list": "67c8b2b8f31a2b0012345802",
- "position": 2,
- "priority": "Crítica",
- "deadline": "2026-03-20T18:00:00.000Z",
- "updatedUser": "67c8a61ef31a2b0012345680"
}{- "status": true,
- "data": { }
}Retorna lista de usuários cadastrados.
Limite de requisições (rate limit):
| limit | integer <= 1000 Default: 10 Máximo 1000 (default 10). Ordenação por nome asc. |
| offset | integer Default: 0 Registros a pular |
| ativo | boolean Filtrar por status (true/false) |
{- "status": true,
- "data": { }
}Esta rota retorna métricas de uso da API em nível de tenant, rota ou identidade. É possível filtrar por período (dia/mês), intervalo de datas, rotas, status HTTP, método de requisição e tipo de identidade.
Limite de requisições (rate limit):
| period required | string Enum: "day" "month" Example: period=month |
| start required | string <date> Example: start=2025-09-01 Data inicial (AAAA-MM-DD) |
| end required | string <date> Example: end=2025-09-30 Data final (AAAA-MM-DD) |
| routeContains | string Example: routeContains=/msg/template |
| statusClass | string Enum: "2xx" "4xx" "5xx" Example: statusClass=2xx |
| identityType | string Example: identityType=tenant |
| identityValue | string Example: identityValue=5deab0f9b7a6ac4236b5a179 |
| method | string Enum: "GET" "POST" "PATCH" Example: method=POST |
| sort | string Example: sort=countTotal:-1 |
| page | integer Default: 1 Example: page=1 |
| limit | integer Default: 20 Example: limit=20 |
{- "meta": {
- "page": 1,
- "limit": 20,
- "totalItems": 7,
- "totalPages": 1,
- "hasNext": false,
- "hasPrev": false,
- "sort": {
- "countTotal": -1
}
}, - "filters": {
- "period": "month",
- "startKey": "202509",
- "endKey": "202509",
- "tenant": "",
- "identityType": null,
- "identityValue": null,
- "routeId": null,
- "routeContains": null,
- "method": null,
- "statusClass": null,
- "minCount": 0
}, - "totals": {
- "countTotal": 1988,
- "count2xx": 1887,
- "count4xx": 98,
- "count5xx": 1,
- "countRateLimited": 0,
- "sumDurMs": 2075522,
- "avgDurMs": 1044
}, - "data": [
- {
- "_id": "68b56dede86f53954c04eb43",
- "identityType": "tenant",
- "identityValue": "5deab0f9b7a6ac4236b5a179",
- "key": "202509",
- "method": "POST",
- "period": "month",
- "routeId": "POST:/v2/msg/template/:broker",
- "tenant": "5deab0f9b7a6ac4236b5a179",
- "count2xx": 1690,
- "count4xx": 0,
- "count5xx": 0,
- "countRateLimited": 0,
- "countTotal": 1690,
- "avgDurMs": 873,
- "sumDurMs": 1475115,
- "createdAt": "2025-09-01T09:57:01.076Z",
- "updatedAt": "2025-09-23T11:33:17.046Z"
}
]
}Contratos dos eventos HTTP enviados pela Mais Chat para endpoints configurados pelos clientes.
Webhooks são enviados para endpoints HTTP configurados pelo cliente. Cada entrega é um POST com corpo JSON
no envelope padrão:
{
"event": "newProtocol",
"entry": {},
"timestamp": 1719320400000
}
Campos do envelope:
event: nome do evento enviado.entry: conteúdo específico do evento.timestamp: epoch em milissegundos do momento de montagem do envelope.Headers padrão:
Content-Type: sempre application/json.X-Webhook-Event: nome do evento enviado.X-Webhook-Delivery: UUID da tentativa de entrega.X-Webhook-Id: identificador do evento de origem, quando disponível, para idempotência.X-Webhook-Signature: assinatura HMAC-SHA256 quando há secret.Retry e idempotência:
2xx para confirmar recebimento.4xx indicam rejeição definitiva e não são reprocessadas.5xx ou timeout são reprocessadas.X-Webhook-Delivery.X-Webhook-Id, quando disponível.X-Webhook-Id como chave de idempotência.Eventos disponíveis:
newProtocol, closedProtocol, queueProtocol, transferProtocol, tagsProtocol.newContact, updateContact.validacao, edicao.Evento enviado quando um protocolo é aberto.
| X-Webhook-Event required | string Enum: "newProtocol" "closedProtocol" "queueProtocol" "transferProtocol" "tagsProtocol" "newContact" "updateContact" "validacao" "edicao" Nome do evento enviado, igual ao campo |
| X-Webhook-Delivery required | string <uuid> UUID da tentativa de entrega. Cada retry recebe um novo valor. |
| X-Webhook-Id | string Identificador do evento de origem, quando disponível. Use como chave de idempotência. |
| X-Webhook-Signature | string^sha256=.+$ Assinatura |
Envelope JSON do evento newProtocol.
| event required | string Nome do evento enviado. Value: "newProtocol" |
required | object Conteúdo específico do evento. |
| timestamp required | integer <int64> Epoch em milissegundos do momento de montagem do envelope. |
{- "event": "newProtocol",
- "entry": {
- "protocolId": "6657a1f2c3d4e5f6a7b8c9d0",
- "protocol_number": "2024062500001",
- "channel": "wpp",
- "channelNumber": "5511999998888",
- "attendant": {
- "_id": "6650aa00bb11cc22dd33ee44",
- "name": "Maria Atendente"
}, - "contact": {
- "_id": "6651bb11cc22dd33ee44ff55",
- "name": "João Cliente",
- "messengerId": null,
- "instagramId": null,
- "address": {
- "cep": "01310100",
- "logradouro": "Av. Paulista",
- "numero": "1000",
- "complemento": "Conj. 101",
- "bairro": "Bela Vista",
- "cidade": "São Paulo",
- "estado": "SP",
- "pais": "BR"
}
}, - "human": true,
- "receptive": true,
- "tags": [
- {
- "_id": "6652cc22dd33ee44ff556600",
- "tag": "VIP"
}
], - "queue": {
- "_id": "6653dd33ee44ff5566001122",
- "name": "Suporte",
- "description": "Fila de suporte técnico"
}, - "state_protocol": "open",
- "createdAt": "2024-06-25T12:00:00.000Z",
- "humanDate": "2024-06-25T12:00:30.000Z",
- "queueDate": "2024-06-25T12:00:05.000Z",
- "attendanceDate": "2024-06-25T12:01:00.000Z"
}, - "timestamp": 1719320460000
}Evento enviado quando um protocolo entra em uma fila. Usa o mesmo formato de entry de newProtocol.
| X-Webhook-Event required | string Enum: "newProtocol" "closedProtocol" "queueProtocol" "transferProtocol" "tagsProtocol" "newContact" "updateContact" "validacao" "edicao" Nome do evento enviado, igual ao campo |
| X-Webhook-Delivery required | string <uuid> UUID da tentativa de entrega. Cada retry recebe um novo valor. |
| X-Webhook-Id | string Identificador do evento de origem, quando disponível. Use como chave de idempotência. |
| X-Webhook-Signature | string^sha256=.+$ Assinatura |
Envelope JSON do evento queueProtocol.
| event required | string Nome do evento enviado. Value: "queueProtocol" |
required | object Conteúdo específico do evento. |
| timestamp required | integer <int64> Epoch em milissegundos do momento de montagem do envelope. |
{- "event": "queueProtocol",
- "entry": {
- "protocolId": "6657a1f2c3d4e5f6a7b8c9d0",
- "protocol_number": "2024062500001",
- "channel": "wpp",
- "channelNumber": "5511999998888",
- "attendant": null,
- "contact": null,
- "human": false,
- "receptive": true,
- "tags": [ ],
- "queue": {
- "_id": "6653dd33ee44ff5566001122",
- "name": "Suporte",
- "description": "Fila de suporte técnico"
}, - "state_protocol": "queue",
- "createdAt": "2024-06-25T12:00:00.000Z",
- "humanDate": null,
- "queueDate": "2024-06-25T12:00:05.000Z",
- "attendanceDate": null
}, - "timestamp": 1719320405000
}Evento enviado quando um protocolo é transferido para outra fila ou usuário. Usa o mesmo formato de entry de newProtocol.
| X-Webhook-Event required | string Enum: "newProtocol" "closedProtocol" "queueProtocol" "transferProtocol" "tagsProtocol" "newContact" "updateContact" "validacao" "edicao" Nome do evento enviado, igual ao campo |
| X-Webhook-Delivery required | string <uuid> UUID da tentativa de entrega. Cada retry recebe um novo valor. |
| X-Webhook-Id | string Identificador do evento de origem, quando disponível. Use como chave de idempotência. |
| X-Webhook-Signature | string^sha256=.+$ Assinatura |
Envelope JSON do evento transferProtocol.
| event required | string Nome do evento enviado. Value: "transferProtocol" |
required | object Conteúdo específico do evento. |
| timestamp required | integer <int64> Epoch em milissegundos do momento de montagem do envelope. |
{- "event": "transferProtocol",
- "entry": {
- "protocolId": "6657a1f2c3d4e5f6a7b8c9d0",
- "protocol_number": "2024062500001",
- "channel": "wpp",
- "channelNumber": "5511999998888",
- "attendant": {
- "_id": "6650aa00bb11cc22dd33ee44",
- "name": "Maria Atendente"
}, - "contact": null,
- "human": true,
- "receptive": true,
- "tags": [ ],
- "queue": {
- "_id": "6653dd33ee44ff5566001122",
- "name": "Suporte",
- "description": "Fila de suporte técnico"
}, - "state_protocol": "open",
- "createdAt": "2024-06-25T12:00:00.000Z",
- "humanDate": "2024-06-25T12:00:30.000Z",
- "queueDate": "2024-06-25T12:00:05.000Z",
- "attendanceDate": "2024-06-25T12:01:00.000Z"
}, - "timestamp": 1719320460000
}Evento enviado quando as tags de um protocolo são alteradas. Usa o mesmo formato de entry de newProtocol.
| X-Webhook-Event required | string Enum: "newProtocol" "closedProtocol" "queueProtocol" "transferProtocol" "tagsProtocol" "newContact" "updateContact" "validacao" "edicao" Nome do evento enviado, igual ao campo |
| X-Webhook-Delivery required | string <uuid> UUID da tentativa de entrega. Cada retry recebe um novo valor. |
| X-Webhook-Id | string Identificador do evento de origem, quando disponível. Use como chave de idempotência. |
| X-Webhook-Signature | string^sha256=.+$ Assinatura |
Envelope JSON do evento tagsProtocol.
| event required | string Nome do evento enviado. Value: "tagsProtocol" |
required | object Conteúdo específico do evento. |
| timestamp required | integer <int64> Epoch em milissegundos do momento de montagem do envelope. |
{- "event": "tagsProtocol",
- "entry": {
- "protocolId": "6657a1f2c3d4e5f6a7b8c9d0",
- "protocol_number": "2024062500001",
- "channel": "wpp",
- "channelNumber": "5511999998888",
- "attendant": null,
- "contact": null,
- "human": true,
- "receptive": true,
- "tags": [
- {
- "_id": "6652cc22dd33ee44ff556600",
- "tag": "VIP"
}
], - "queue": null,
- "state_protocol": "open",
- "createdAt": "2024-06-25T12:00:00.000Z",
- "humanDate": "2024-06-25T12:00:30.000Z",
- "queueDate": null,
- "attendanceDate": "2024-06-25T12:01:00.000Z"
}, - "timestamp": 1719320460000
}Evento enviado no encerramento de um protocolo. Adiciona motivo, data de encerramento e mensagens normalizadas.
| X-Webhook-Event required | string Enum: "newProtocol" "closedProtocol" "queueProtocol" "transferProtocol" "tagsProtocol" "newContact" "updateContact" "validacao" "edicao" Nome do evento enviado, igual ao campo |
| X-Webhook-Delivery required | string <uuid> UUID da tentativa de entrega. Cada retry recebe um novo valor. |
| X-Webhook-Id | string Identificador do evento de origem, quando disponível. Use como chave de idempotência. |
| X-Webhook-Signature | string^sha256=.+$ Assinatura |
Envelope JSON do evento closedProtocol.
| event required | string Nome do evento enviado. Value: "closedProtocol" |
required | object (ClosedProtocolEntry) Conteúdo específico do evento. |
| timestamp required | integer <int64> Epoch em milissegundos do momento de montagem do envelope. |
{- "event": "closedProtocol",
- "entry": {
- "protocolId": "6657a1f2c3d4e5f6a7b8c9d0",
- "protocol_number": "2024062500001",
- "channel": "wpp",
- "channelNumber": "5511999998888",
- "attendant": {
- "_id": "6650aa00bb11cc22dd33ee44",
- "name": "Maria Atendente"
}, - "contact": {
- "_id": "6651bb11cc22dd33ee44ff55",
- "name": "João Cliente",
- "messengerId": null,
- "instagramId": null,
- "address": null
}, - "human": true,
- "receptive": true,
- "tags": [
- {
- "_id": "6652cc22dd33ee44ff556600",
- "tag": "VIP"
}
], - "queue": {
- "_id": "6653dd33ee44ff5566001122",
- "name": "Suporte",
- "description": "Fila de suporte técnico"
}, - "state_protocol": "closed",
- "createdAt": "2024-06-25T12:00:00.000Z",
- "humanDate": "2024-06-25T12:00:30.000Z",
- "queueDate": "2024-06-25T12:00:05.000Z",
- "attendanceDate": "2024-06-25T12:01:00.000Z",
- "reason": {
- "protocolReason": {
- "_id": "6654ee44ff55660011223344",
- "reasonParent": "Financeiro",
- "reasonName": "Dúvida de cobrança",
- "reasonNote": "Cliente sanou a dúvida"
}, - "reason": "6655ff5566001122334455aa",
- "motive": "6655ff5566001122334455bb"
}, - "closeDate": "2024-06-25T12:30:00.000Z",
- "countMessages": 2,
- "messages": [
- {
- "id": "6656001122334455aabbccdd",
- "ack": null,
- "ackLog": [ ],
- "hasQuotedMsg": false,
- "human": false,
- "template": false,
- "wppId": "ABCD1234",
- "direction": "incoming",
- "message_type": "text",
- "createdAt": "2024-06-25T12:00:10.000Z",
- "message": "Olá, preciso de ajuda com a fatura"
}, - {
- "id": "6656001122334455aabbccee",
- "ack": "3",
- "ackLog": [
- {
- "status": "3",
- "date": "2024-06-25T12:01:05.000Z"
}
], - "hasQuotedMsg": true,
- "quoted": "6656001122334455aabbccdd",
- "human": true,
- "template": false,
- "wppId": "ABCD1235",
- "direction": "outgoing",
- "message_type": "text",
- "createdAt": "2024-06-25T12:01:00.000Z",
- "message": "Claro! Já estou verificando."
}
]
}, - "timestamp": 1719322200000
}Evento enviado quando um contato é criado.
| X-Webhook-Event required | string Enum: "newProtocol" "closedProtocol" "queueProtocol" "transferProtocol" "tagsProtocol" "newContact" "updateContact" "validacao" "edicao" Nome do evento enviado, igual ao campo |
| X-Webhook-Delivery required | string <uuid> UUID da tentativa de entrega. Cada retry recebe um novo valor. |
| X-Webhook-Id | string Identificador do evento de origem, quando disponível. Use como chave de idempotência. |
| X-Webhook-Signature | string^sha256=.+$ Assinatura |
Envelope JSON do evento newContact.
| event required | string Nome do evento enviado. Value: "newContact" |
required | object Conteúdo específico do evento. |
| timestamp required | integer <int64> Epoch em milissegundos do momento de montagem do envelope. |
{- "event": "newContact",
- "entry": {
- "contactId": "6651bb11cc22dd33ee44ff55",
- "name": "João Cliente",
- "messengerId": null,
- "instagramId": null,
- "celular": "11988887777",
- "countryCode": "55",
- "type": "PF",
- "externalCode": "ERP-4567",
- "address": {
- "cep": "01310100",
- "logradouro": "Av. Paulista",
- "numero": "1000",
- "complemento": "Conj. 101",
- "bairro": "Bela Vista",
- "cidade": "São Paulo",
- "estado": "SP",
- "pais": "BR",
- "isPrincipal": true,
- "type": "contact"
}, - "createdAt": "2024-06-25T11:50:00.000Z",
- "updatedAt": "2024-06-25T11:50:00.000Z"
}, - "timestamp": 1719319800000
}Evento enviado quando um contato é atualizado. Usa o mesmo formato de entry de newContact.
| X-Webhook-Event required | string Enum: "newProtocol" "closedProtocol" "queueProtocol" "transferProtocol" "tagsProtocol" "newContact" "updateContact" "validacao" "edicao" Nome do evento enviado, igual ao campo |
| X-Webhook-Delivery required | string <uuid> UUID da tentativa de entrega. Cada retry recebe um novo valor. |
| X-Webhook-Id | string Identificador do evento de origem, quando disponível. Use como chave de idempotência. |
| X-Webhook-Signature | string^sha256=.+$ Assinatura |
Envelope JSON do evento updateContact.
| event required | string Nome do evento enviado. Value: "updateContact" |
required | object Conteúdo específico do evento. |
| timestamp required | integer <int64> Epoch em milissegundos do momento de montagem do envelope. |
{- "event": "updateContact",
- "entry": {
- "contactId": "6651bb11cc22dd33ee44ff55",
- "name": "João Cliente",
- "messengerId": null,
- "instagramId": null,
- "celular": "11988887777",
- "countryCode": "55",
- "type": "PF",
- "externalCode": "ERP-4567",
- "address": null,
- "createdAt": "2024-06-25T11:50:00.000Z",
- "updatedAt": "2024-06-25T12:10:00.000Z"
}, - "timestamp": 1719321000000
}Handshake enviado ao cadastrar ou revalidar a URL do webhook.
| X-Webhook-Event required | string Enum: "newProtocol" "closedProtocol" "queueProtocol" "transferProtocol" "tagsProtocol" "newContact" "updateContact" "validacao" "edicao" Nome do evento enviado, igual ao campo |
| X-Webhook-Delivery required | string <uuid> UUID da tentativa de entrega. Cada retry recebe um novo valor. |
| X-Webhook-Id | string Identificador do evento de origem, quando disponível. Use como chave de idempotência. |
| X-Webhook-Signature | string^sha256=.+$ Assinatura |
Envelope JSON do evento sistêmico validacao.
| event required | string Enum: "validacao" "edicao" Nome do evento enviado. |
required | object Conteúdo específico do evento. |
| timestamp required | integer <int64> Epoch em milissegundos do momento de montagem do envelope. |
{- "event": "validacao",
- "entry": {
- "test": true
}, - "timestamp": 1719319000000
}Notificação best-effort enviada ao salvar uma edição do webhook.
| X-Webhook-Event required | string Enum: "newProtocol" "closedProtocol" "queueProtocol" "transferProtocol" "tagsProtocol" "newContact" "updateContact" "validacao" "edicao" Nome do evento enviado, igual ao campo |
| X-Webhook-Delivery required | string <uuid> UUID da tentativa de entrega. Cada retry recebe um novo valor. |
| X-Webhook-Id | string Identificador do evento de origem, quando disponível. Use como chave de idempotência. |
| X-Webhook-Signature | string^sha256=.+$ Assinatura |
Envelope JSON do evento sistêmico edicao.
| event required | string Enum: "validacao" "edicao" Nome do evento enviado. |
required | object Conteúdo específico do evento. |
| timestamp required | integer <int64> Epoch em milissegundos do momento de montagem do envelope. |
{- "event": "edicao",
- "entry": {
- "test": true
}, - "timestamp": 1719319000000
}