{"openapi":"3.1.0","info":{"title":"API da ConneIA","version":"1.0","description":"Integre o WhatsApp, a IA, o CRM e a agenda da ConneIA ao seu sistema. Cada chave vale para UMA instância e só para os escopos marcados no app que a emitiu.","contact":{"name":"ConneIA","url":"https://conneia.com.br/desenvolvedores","email":"contato@conneia.com.br"}},"servers":[{"url":"https://conneia.com.br/api/v1"}],"tags":[{"name":"Instância"},{"name":"IA"},{"name":"Conversas"},{"name":"Mensagens"},{"name":"CRM"},{"name":"Agenda"},{"name":"Pagamentos"},{"name":"Catálogo"},{"name":"Configurações"},{"name":"Operação"},{"name":"Automações"},{"name":"Campanhas"}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","bearerFormat":"dgf_live_…","description":"A chave gerada no painel em Apps e Integrações → API e Webhooks."}},"schemas":{"Erro":{"type":"object","required":["ok","error","message"],"properties":{"ok":{"type":"boolean","const":false},"error":{"type":"string","enum":["missing_message","missing_text","missing_name","missing_label","missing_chat","missing_fields","invalid_recipient","invalid_date","invalid_request","invalid_api_key","api_key_revoked","api_key_expired","app_suspended","missing_scope","tool_disabled","chat_not_found","charge_not_found","recurrence_not_found","not_found","department_not_found","label_not_found","stage_not_found","task_not_found","fact_not_found","campaign_not_found","contact_not_found","followup_not_found","appointment_not_found","scheduled_not_found","trigger_not_found","routine_not_found","operator_not_found","quick_reply_not_found","instance_not_found","instance_offline","payments_disabled","gateway_not_connected","invalid_state","already_exists","slot_unavailable","plan_without_ai","limit_reached","rate_limited","internal_error","send_failed","gateway_error","whatsapp_error","ai_unavailable","ai_not_connected"]},"message":{"type":"string"}}}}},"x-conneia-scopes":{"ai:ask":"Perguntar para a IA da instância","ai:read":"Ler a persona e a memória da IA, o uso e a produção","ai:write":"Mudar a persona e a memória da IA, apagar fatos e instruir a produção","messages:send":"Enviar mensagem no WhatsApp","chats:read":"Ler conversas, mensagens e etiquetas","chats:write":"Ligar/desligar IA no chat, anotar, etiquetar, fechar e transferir","crm:read":"Ler leads, estágios, tarefas e follow-ups","crm:write":"Criar, mudar e apagar leads, estágios, tarefas e follow-ups","agenda:read":"Ler compromissos","agenda:write":"Criar, mudar e cancelar compromissos","payments:read":"Ler cobranças, recorrências e o resumo dos pagamentos","payments:write":"Cobrar, reenviar, conferir, cancelar e marcar cobranças; criar e parar recorrências","payments:settings":"Mudar os ajustes dos pagamentos e testar a conta do gateway","catalog:read":"Ler pedidos do catálogo","settings:read":"Ler os ajustes, o silêncio, a jornada de trabalho e as ferramentas da conta","settings:write":"Mudar os ajustes, o nome da IA, o silêncio e a jornada de trabalho","team:read":"Ler operadores, departamentos e respostas rápidas","team:write":"Criar e apagar respostas rápidas e cuidar dos departamentos da equipe","metrics:read":"Ler métricas e status da instância","automations:read":"Ler gatilhos e rotinas","automations:write":"Criar, mudar e apagar gatilhos, rotinas e envios agendados","campaigns:read":"Ler as campanhas de disparo e o andamento de cada uma","campaigns:write":"Pausar, retomar, ajustar e encerrar campanhas de disparo e tirar contatos da fila"},"paths":{"/ping":{"get":{"operationId":"ping","summary":"Testar a chave","description":"Confere se a chave vale e mostra a instância, o status do WhatsApp, os escopos efetivos e o limite por minuto. Bom para o primeiro teste.","tags":["Instância"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"instanceId":24,"instanceStatus":"CONECTADO","scopes":["chats:read","messages:send"],"rateLimitPerMin":60}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/instance":{"get":{"operationId":"instance","summary":"Dados da instância","description":"O número de WhatsApp, o status da conexão e as configurações principais da IA da instância dona da chave.\n\nEscopo: `metrics:read`.","tags":["Instância"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"instance":{"id":24,"name":"DigiFood Lanches","whatsappNumber":"5561999990000","status":"CONECTADO","lastConnectedAt":"2026-10-15T09:12:00.000Z"},"settings":{"aiName":"Flora","aiEnabled":1,"aiReplyNewChats":1,"aiReplyOldChats":0,"crmAi":1,"agendaAi":1}}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"metrics:read"}},"/metrics":{"get":{"operationId":"metrics","summary":"Métricas","description":"Resumo da operação: conversas, quantas estão com a IA, quantas esperam um atendente, leads por estágio do funil e compromissos futuros.\n\nEscopo: `metrics:read`.","tags":["Instância"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"metrics":{"chats":1280,"chatsComIa":1104,"aguardandoHumano":3,"leadsNoFunil":412,"conversasAtivasHoje":57,"compromissosFuturos":9,"leadsPorEstagio":[{"stage":"Novo","total":120},{"stage":"Qualificado","total":64}]}}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"metrics:read"}},"/events":{"get":{"operationId":"events","summary":"Histórico da conexão","description":"As últimas quedas e reconexões do WhatsApp da instância.\n\nEscopo: `metrics:read`.","tags":["Instância"],"security":[{"bearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"Quantos eventos (padrão 30, máximo 200).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"count":1,"events":[{"id":901,"type":"connected","reason":null,"status":"CONECTADO","createdAt":"2026-10-15T09:12:00.000Z"}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"metrics:read"}},"/ai/ask":{"post":{"operationId":"ai-ask","summary":"Perguntar à IA","description":"Faz uma pergunta à IA da instância com a persona e as regras reais dela (as mesmas do WhatsApp). Não grava conversa nem manda mensagem a ninguém.\n\nEscopo: `ai:ask`.","tags":["IA"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"reply":"Entregamos sim! Hoje vamos até as 23h no Guará. Quer que eu já monte o seu pedido?","model":"gemini-3.5-flash-lite"}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"ai:ask","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["message"],"properties":{"message":{"type":"string","description":"A pergunta (até 4.000 caracteres)."},"context":{"type":"string","description":"Contexto extra sobre o cliente (até 4.000 caracteres)."}}},"example":{"message":"Vocês entregam no Guará hoje à noite?","context":"Cliente frequente, pede sempre X-burger."}}}}}},"/chats":{"get":{"operationId":"chats","summary":"Listar conversas","description":"As conversas da instância, da mais recente para a mais antiga.\n\nEscopo: `chats:read`.","tags":["Conversas"],"security":[{"bearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"Quantas (padrão 30, máximo 100).","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"Para paginar.","schema":{"type":"integer"}},{"name":"stage","in":"query","required":false,"description":"Só as conversas neste estágio do CRM.","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"Busca no nome ou no telefone.","schema":{"type":"string"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"count":1,"chats":[{"chatId":"5561999990000@c.us","name":"Mariana","phoneNumber":"5561999990000","aiEnabled":1,"crmStage":"Qualificado","awaitingOperator":0,"operatorName":null,"lastMessage":"Pode mandar o cardápio?","lastMessageTime":1760530320000,"unreadCount":0}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"chats:read"}},"/chats/{chatId}":{"get":{"operationId":"chat","summary":"Uma conversa","description":"O detalhe da conversa: dados do CRM (estágio, temperatura, pontuação, próxima ação, resumo), anotações e etiquetas.\n\nEscopo: `chats:read`.","tags":["Conversas"],"security":[{"bearer":[]}],"parameters":[{"name":"chatId","in":"path","required":true,"description":"O id da conversa, como 5561999990000@c.us.","schema":{"type":"string"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"chat":{"chatId":"5561999990000@c.us","name":"Mariana","clientName":"Mariana Souza","phoneNumber":"5561999990000","aiEnabled":1,"crmStage":"Qualificado","crmTemperature":"quente","crmScore":80,"crmNextAction":"Enviar cardápio do almoço","crmSummary":"Quer encomendar 20 marmitas para sexta.","notes":"","awaitingOperator":0,"isClosed":0,"labels":[{"id":3,"name":"Encomenda","color":"#00a884"}]}}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"chats:read"},"patch":{"operationId":"chat-update","summary":"Renomear e organizar a conversa","description":"Muda só o que vier: o nome que a equipe dá ao contato (\"\" volta o do WhatsApp), arquivar, fixar, silenciar e marcar como lida ou não lida. Arquivar e \"não lida\" vão ao celular; fixar e silenciar valem no painel mesmo quando o WhatsApp recusa (notice diz quando).\n\nEscopo: `chats:write`.","tags":["Conversas"],"security":[{"bearer":[]}],"parameters":[{"name":"chatId","in":"path","required":true,"description":"O id da conversa (vem em /chats).","schema":{"type":"string"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"chatId":"5561999990000@c.us","changed":{"name":"Mariana (Asa Norte)","pinned":true,"unread":false}}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"chats:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"name":{"type":"string","description":"O nome do contato (até 120 caracteres)."},"archived":{"type":"boolean","description":"Arquivada."},"pinned":{"type":"boolean","description":"Fixada no topo da lista."},"muted":{"type":"boolean","description":"Silenciada."},"unread":{"type":"boolean","description":"true = não lida; false = lida."}}},"example":{"name":"Mariana (Asa Norte)","pinned":true,"unread":false}}}}}},"/chats/{chatId}/messages":{"get":{"operationId":"chat-messages","summary":"Mensagens da conversa","description":"As mensagens mais recentes da conversa, em ordem de envio. `timestamp` vem em milissegundos.\n\nEscopo: `chats:read`.","tags":["Conversas"],"security":[{"bearer":[]}],"parameters":[{"name":"chatId","in":"path","required":true,"description":"O id da conversa.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Quantas (padrão 50, máximo 200).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"chatId":"5561999990000@c.us","count":2,"messages":[{"id":7717516,"body":"Pode mandar o cardápio?","fromMe":0,"timestamp":1760568000000,"hasMedia":0},{"id":7717519,"body":"Claro, Mariana! Segue o cardápio de hoje.","fromMe":1,"timestamp":1760568004000,"hasMedia":1}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"chats:read"}},"/chats/{chatId}/ai":{"post":{"operationId":"chat-ai","summary":"Ligar ou desligar a IA na conversa","description":"Desligar passa a conversa para um atendente (ela fica aguardando no painel); ligar devolve à IA e tira o atendente. Vale para todos os ids do contato (@lid e @c.us) e o painel aberto atualiza na hora.\n\nEscopo: `chats:write`.","tags":["Conversas"],"security":[{"bearer":[]}],"parameters":[{"name":"chatId","in":"path","required":true,"description":"O id da conversa.","schema":{"type":"string"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"chatId":"5561999990000@c.us","aiEnabled":false}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"chats:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["enabled"],"properties":{"enabled":{"type":"boolean","description":"true liga a IA, false desliga."}}},"example":{"enabled":false}}}}}},"/chats/{chatId}/notes":{"post":{"operationId":"chat-notes","summary":"Anotar na conversa","description":"Uma anotação interna, que a equipe vê no painel (na hora, assinada com o nome do app) e o cliente não vê.\n\nEscopo: `chats:write`.","tags":["Conversas"],"security":[{"bearer":[]}],"parameters":[{"name":"chatId","in":"path","required":true,"description":"O id da conversa.","schema":{"type":"string"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"chatId":"5561999990000@c.us","noteId":88}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"chats:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"properties":{"text":{"type":"string","description":"A anotação (até 2.000 caracteres)."}}},"example":{"text":"Pagamento do pedido 1042 confirmado no sistema da loja."}}}}},"get":{"operationId":"chat-notes-list","summary":"Ler as anotações","description":"As anotações internas da conversa (o cliente não vê), da mais antiga para a mais nova, com quem escreveu.\n\nEscopo: `chats:read`.","tags":["Conversas"],"security":[{"bearer":[]}],"parameters":[{"name":"chatId","in":"path","required":true,"description":"O id da conversa (vem em /chats).","schema":{"type":"string"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"chatId":"5561999990000@c.us","count":1,"notes":[{"id":88,"author":"API · Claude Code","text":"Pagamento do pedido 1042 confirmado no sistema da loja.","createdAt":"2026-10-24T18:05:00.000Z"}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"chats:read"}},"/chats/{chatId}/labels":{"post":{"operationId":"chat-labels","summary":"Etiquetar a conversa","description":"Aplica uma etiqueta pelo nome (sem diferença de acento ou maiúscula); se ela não existir, nasce na hora. A conta tem até 60 etiquetas.\n\nEscopo: `chats:write`.","tags":["Conversas"],"security":[{"bearer":[]}],"parameters":[{"name":"chatId","in":"path","required":true,"description":"O id da conversa.","schema":{"type":"string"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"chatId":"5561999990000@c.us","label":{"id":3,"name":"Encomenda","color":"#00a884"},"labels":[{"id":3,"name":"Encomenda","color":"#00a884"}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"chats:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["label"],"properties":{"label":{"type":"string","description":"O nome da etiqueta (2 a 40 caracteres)."}}},"example":{"label":"Encomenda"}}}}}},"/labels":{"get":{"operationId":"labels","summary":"Listar etiquetas","description":"Todas as etiquetas da instância.\n\nEscopo: `chats:read`.","tags":["Conversas"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"count":1,"labels":[{"id":3,"name":"Encomenda","color":"#00a884","createdAt":"2026-09-02T14:00:00.000Z"}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"chats:read"},"post":{"operationId":"labels-new","summary":"Criar etiqueta","description":"Cria a etiqueta; se já existir uma com o mesmo nome, devolve a existente com `alreadyExisted: true`.\n\nEscopo: `chats:write`.","tags":["Conversas"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"label":{"id":7,"name":"Delivery","color":"#34b7f1"}}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"chats:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"O nome (2 a 40 caracteres)."},"color":{"type":"string","description":"Cor em hexadecimal (padrão #00a884)."}}},"example":{"name":"Delivery","color":"#34b7f1"}}}}}},"/messages":{"post":{"operationId":"messages","summary":"Enviar mensagem","description":"Envia uma mensagem de texto agora, pelo WhatsApp da instância. Grupo e lista de transmissão são recusados: só conversa individual.\n\nEscopo: `messages:send`.","tags":["Mensagens"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"chatId":"5561999990000@c.us","messageId":"true_5561999990000@c.us_3EB0C4"}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"messages:send","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["to","message"],"properties":{"to":{"type":"string","description":"DDI + DDD + número (5561999990000) ou o chatId."},"message":{"type":"string","description":"O texto (até 4.000 caracteres)."}}},"example":{"to":"5561999990000","message":"Seu pedido 1042 saiu para entrega. Chega em uns 30 minutos."}}}}}},"/messages/schedule":{"post":{"operationId":"messages-schedule","summary":"Agendar mensagem","description":"Agenda uma mensagem para sair no horário pedido. O envio respeita o ritmo seguro da instância.\n\nEscopo: `automations:write`.","tags":["Mensagens"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"scheduledId":5120,"chatId":"5561999990000@c.us","sendAt":"2026-10-20T12:00:00.000Z"}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"automations:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["to","message","sendAt"],"properties":{"to":{"type":"string","description":"DDI + DDD + número ou o chatId."},"message":{"type":"string","description":"O texto (até 4.000 caracteres)."},"sendAt":{"type":"string","format":"date-time","description":"Quando enviar, com fuso (2026-10-20T09:00:00-03:00)."}}},"example":{"to":"5561999990000","message":"Bom dia! O cardápio de hoje já está no link da loja.","sendAt":"2026-10-20T09:00:00-03:00"}}}}}},"/messages/scheduled":{"get":{"operationId":"messages-scheduled","summary":"Mensagens agendadas","description":"Os envios agendados e o que aconteceu com cada um.\n\nEscopo: `automations:read`.","tags":["Mensagens"],"security":[{"bearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"Quantos (padrão 50, máximo 200).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"count":1,"scheduled":[{"id":5120,"chatId":"5561999990000@c.us","message":"Bom dia! O cardápio de hoje já está no link da loja.","sendAt":"2026-10-20T12:00:00.000Z","status":"pending","sentAt":null,"lastError":null}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"automations:read"}},"/crm/stages":{"get":{"operationId":"crm-stages","summary":"Estágios do funil","description":"Os estágios do CRM, na ordem do funil.\n\nEscopo: `crm:read`.","tags":["CRM"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"count":2,"stages":[{"id":1,"name":"Novo","color":"#34b7f1","position":0},{"id":2,"name":"Qualificado","color":"#00a884","position":1}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"crm:read"},"post":{"operationId":"crm-stages-new","summary":"Criar estágio","description":"Cria um estágio no fim do funil e o kanban aberto ganha a coluna na hora. Nome igual ao de um estágio que existe (sem diferença de maiúscula e acento) devolve o que existe, com `alreadyExisted: true`. Sem cor, ele pega a da paleta do painel.\n\nEscopo: `crm:write`.","tags":["CRM"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"stage":{"id":9,"name":"Pedido fechado","color":"#25d366","position":4}}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"crm:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"O nome (até 80 caracteres)."},"color":{"type":"string","description":"Cor em hexadecimal (#rgb ou #rrggbb)."}}},"example":{"name":"Pedido fechado","color":"#25d366"}}}}}},"/crm/leads":{"get":{"operationId":"crm-leads","summary":"Listar leads","description":"Os leads do CRM com estágio, temperatura, pontuação, próxima ação e resumo.\n\nEscopo: `crm:read`.","tags":["CRM"],"security":[{"bearer":[]}],"parameters":[{"name":"stage","in":"query","required":false,"description":"Só os leads neste estágio.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Quantos (padrão 50, máximo 200).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"count":1,"leads":[{"chatId":"5561999990000@c.us","name":"Mariana","phoneNumber":"5561999990000","stage":"Qualificado","temperature":"quente","score":80,"nextAction":"Enviar cardápio do almoço","summary":"Quer 20 marmitas para sexta.","notes":""}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"crm:read"},"post":{"operationId":"crm-leads-write","summary":"Criar ou atualizar lead","description":"Cria o lead (e a conversa) ou atualiza o que já existe, como o formulário do CRM: o painel aberto atualiza na hora e o lead fica no funil. Só muda o campo que vier; campo vazio não apaga o que estava lá. `created` diz se o contato acabou de entrar no CRM. Dispara `crm.lead_created` quando ele entra e `crm.stage_changed` quando o estágio muda de verdade.\n\nEscopo: `crm:write`.","tags":["CRM"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"chatId":"5561999990000@c.us","created":true,"stage":"Qualificado"}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"crm:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["phone"],"properties":{"phone":{"type":"string","description":"Telefone com DDD (ou chatId)."},"name":{"type":"string","description":"Nome do lead (trava contra o nome do perfil do WhatsApp)."},"stage":{"type":"string","description":"Um estágio que existe (GET /crm/stages); maiúscula e acento não importam."},"temperature":{"type":"string","description":"frio, morno ou quente."},"priority":{"type":"string","description":"baixa, media, alta ou urgente."},"score":{"type":"number","description":"Pontuação de 0 a 100."},"nextAction":{"type":"string","description":"Próximo passo combinado (até 255 caracteres)."},"summary":{"type":"string","description":"Resumo da negociação (até 1.000 caracteres)."},"notes":{"type":"string","description":"Anotações (até 2.000 caracteres). São a memória da IA sobre o contato, que ela lê no atendimento; substituem as de antes."},"amountPaid":{"type":"number","description":"Quanto o cliente já pagou, em reais."},"amountToReceive":{"type":"number","description":"Quanto falta receber, em reais."}}},"example":{"phone":"61999990000","name":"Mariana Souza","stage":"Qualificado","temperature":"quente","priority":"alta","score":80,"nextAction":"Ligar amanhã às 10h","amountToReceive":240}}}}}},"/crm/tasks":{"get":{"operationId":"crm-tasks","summary":"Tarefas do CRM","description":"As tarefas criadas nas conversas.\n\nEscopo: `crm:read`.","tags":["CRM"],"security":[{"bearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"Quantas (padrão 50, máximo 200).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"count":1,"tasks":[{"id":77,"chatId":"5561999990000@c.us","title":"Confirmar endereço da encomenda","status":"pending","dueDate":"2026-10-17T15:00:00.000Z","createdAt":"2026-10-15T10:00:00.000Z"}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"crm:read"},"post":{"operationId":"crm-tasks-new","summary":"Criar tarefa","description":"Cria uma tarefa ligada a uma conversa que já existe; a aba Tarefas da conversa aberta no painel atualiza sozinha.\n\nEscopo: `crm:write`.","tags":["CRM"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"taskId":77}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"crm:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["chatId","title"],"properties":{"chatId":{"type":"string","description":"O id da conversa (ou phone)."},"title":{"type":"string","description":"O título (até 500 caracteres)."},"dueDate":{"type":"string","format":"date-time","description":"O prazo."}}},"example":{"chatId":"5561999990000@c.us","title":"Confirmar endereço da encomenda","dueDate":"2026-10-17T12:00:00-03:00"}}}}}},"/crm/followups":{"get":{"operationId":"crm-followups","summary":"Follow-ups","description":"Os retornos programados e se já saíram.\n\nEscopo: `crm:read`.","tags":["CRM"],"security":[{"bearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"Quantos (padrão 50, máximo 200).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"count":1,"followups":[{"id":31,"chatId":"5561999990000@c.us","title":"Retomar orçamento","message":"Oi, Mariana! Conseguiu ver o orçamento das marmitas?","sendAt":"2026-10-16T13:00:00.000Z","status":"pending","autoSend":1,"sentAt":null}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"crm:read"},"post":{"operationId":"crm-followups-new","summary":"Programar follow-up","description":"Programa um retorno. Com `autoSend: true` (padrão) a mensagem sai sozinha no horário; com false, vira lembrete para a equipe. Como no painel, a conversa entra no CRM com o retorno como próxima ação.\n\nEscopo: `crm:write`.","tags":["CRM"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"followupId":31,"sendAt":"2026-10-16T13:00:00.000Z"}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"crm:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["chatId","title","message","sendAt"],"properties":{"chatId":{"type":"string","description":"O id da conversa (ou phone)."},"title":{"type":"string","description":"O título."},"message":{"type":"string","description":"A mensagem (até 4.000 caracteres)."},"sendAt":{"type":"string","format":"date-time","description":"Quando."},"autoSend":{"type":"boolean","description":"Envia sozinho (padrão true)."}}},"example":{"chatId":"5561999990000@c.us","title":"Retomar orçamento","message":"Oi, Mariana! Conseguiu ver o orçamento das marmitas?","sendAt":"2026-10-16T10:00:00-03:00","autoSend":true}}}}}},"/appointments":{"get":{"operationId":"appointments","summary":"Compromissos","description":"Os compromissos da agenda da instância, do mais próximo para o mais distante.\n\nEscopo: `agenda:read`.","tags":["Agenda"],"security":[{"bearer":[]}],"parameters":[{"name":"from","in":"query","required":false,"description":"A partir de.","schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":false,"description":"Até.","schema":{"type":"string","format":"date-time"}},{"name":"limit","in":"query","required":false,"description":"Quantos (padrão 50, máximo 200).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"count":1,"appointments":[{"id":210,"chatId":"5561999990000@c.us","clientName":"Mariana Souza","clientEmail":null,"serviceName":"Degustação do cardápio de eventos","date":"2026-10-18T17:00:00.000Z","status":"Agendado","origin":"api","googleSync":"synced"}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"agenda:read"},"post":{"operationId":"appointments-new","summary":"Criar compromisso","description":"Agenda um compromisso ligado a uma conversa (é por ela que sai o lembrete), como o painel: o horário tem de caber no expediente da conta e não bater em outro compromisso (senão 409 `slot_unavailable`, com `reason` e os próximos horários livres em `suggestions`). O Google Agenda acompanha (`googleSync`), a agenda aberta no painel atualiza e sai `appointment.created`. Crie o lead antes, se a conversa não existir.\n\nEscopo: `agenda:write`.","tags":["Agenda"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"appointmentId":210,"chatId":"5561999990000@c.us","date":"2026-10-18T17:00:00.000Z","status":"Agendado","googleSync":"synced"}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"agenda:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["chatId","clientName","serviceName","date"],"properties":{"chatId":{"type":"string","description":"O id da conversa (ou phone)."},"clientName":{"type":"string","description":"Nome do cliente."},"serviceName":{"type":"string","description":"O serviço."},"date":{"type":"string","format":"date-time","description":"Data e hora com fuso."},"clientEmail":{"type":"string","description":"E-mail do cliente (convite do Google Agenda)."},"status":{"type":"string","description":"Agendado (padrão) ou Confirmado."}}},"example":{"chatId":"5561999990000@c.us","clientName":"Mariana Souza","serviceName":"Degustação do cardápio de eventos","date":"2026-10-18T14:00:00-03:00"}}}}}},"/orders":{"get":{"operationId":"orders","summary":"Pedidos do catálogo","description":"Os pedidos que entraram pelo catálogo DigiFood ligado à instância.\n\nEscopo: `catalog:read`.","tags":["Catálogo"],"security":[{"bearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"description":"Só pedidos neste status.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Quantos (padrão 30, máximo 100).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"count":1,"orders":[{"id":1042,"chatId":"5561999990000@c.us","orderCode":"DF-1042","customerName":"Mariana Souza","orderStatus":"em_preparo","paymentStatus":"pago","paymentMethod":"pix","total":"79.90","trackingUrl":null,"createdAt":"2026-10-15T22:41:00.000Z"}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"catalog:read"}},"/operators":{"get":{"operationId":"operators","summary":"Equipe","description":"Quem tem acesso ao painel da conta.\n\nEscopo: `team:read`.","tags":["Operação"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"count":1,"operators":[{"id":5,"username":"joao.atendimento","name":"João","role":"atendente","createdAt":"2026-08-01T12:00:00.000Z"}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"team:read"}},"/quick-replies":{"get":{"operationId":"quick-replies","summary":"Respostas rápidas","description":"As respostas rápidas cadastradas no painel. \"message\" é o texto; áudio e imagem aparecem em \"items\" só com o tipo.\n\nEscopo: `team:read`.","tags":["Operação"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"count":1,"quickReplies":[{"id":12,"shortcut":"horario","message":"Funcionamos de terça a domingo, das 18h às 23h.","items":[{"type":"text","content":"Funcionamos de terça a domingo, das 18h às 23h."}]}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"team:read"},"post":{"operationId":"quick-reply-create","summary":"Criar resposta rápida","description":"Resposta rápida de texto: no chat do painel, a equipe digita /atalho e o texto entra pronto. Atalho repetido é recusado.\n\nEscopo: `team:write`.","tags":["Operação"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"quickReply":{"id":31,"shortcut":"cardapio"}}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"team:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["shortcut","message"],"properties":{"shortcut":{"type":"string","description":"O atalho: letras, números, _ e - (até 50)."},"message":{"type":"string","description":"O texto (até 4.000 caracteres)."}}},"example":{"shortcut":"cardapio","message":"Nosso cardápio de hoje: https://digifood.com.br/cardapio"}}}}}},"/automations/triggers":{"get":{"operationId":"triggers","summary":"Gatilhos","description":"Os gatilhos por palavra-chave dos grupos: as palavras (em texto JSON), a ação da IA ou o texto fixo, a espera entre disparos e quantas vezes cada um disparou.\n\nEscopo: `automations:read`.","tags":["Automações"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"count":1,"triggers":[{"id":8,"chatId":"120363000000000000@g.us","title":"Aviso de pedido grande","keywords":"[\"encomenda\",\"evento\"]","authorFilter":null,"action":"Avisar que a equipe de eventos responde em até 1 hora","message":null,"mentionAuthor":true,"cooldownSeconds":90,"status":"active","fireCount":4,"lastFiredAt":"2026-10-14T20:00:00.000Z"}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"automations:read"},"post":{"operationId":"triggers-new","summary":"Criar gatilho","description":"Num grupo, quando alguém falar uma das palavras sem mencionar a IA, sai o texto fixo (`message`) ou a IA escreve a resposta (`action`). Só dispara em grupo, até 10 gatilhos ativos por grupo. Vale na hora.\n\nEscopo: `automations:write`.","tags":["Automações"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"triggerId":8,"chatId":"120363000000000000@g.us","title":"Aviso de pedido grande","keywords":["encomenda","evento"],"cooldownSeconds":90}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"automations:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["chatId","keywords"],"properties":{"chatId":{"type":"string","description":"O grupo: o id que termina em @g.us (vem em /chats)."},"title":{"type":"string","description":"O nome do gatilho (até 120 caracteres; sem ele, \"Quando falarem: …\")."},"keywords":{"type":"array","items":{"type":"string"},"description":"As palavras que disparam (ou o texto \"a, b\"): 2 letras ou mais, até 12, sem diferença de maiúscula e acento. Palavra sozinha só casa inteira (\"messi\" não casa em \"messias\")."},"action":{"type":"string","description":"O que a IA escreve na hora, no tom da conta (até 1.000 caracteres; só em plano com IA)."},"message":{"type":"string","description":"O texto fixo que sai no grupo, no lugar de `action` (até 4.000 caracteres)."},"authorFilter":{"type":"string","description":"Só dispara quando esta pessoa falar (nome ou número)."},"mentionAuthor":{"type":"boolean","description":"Marca (@) quem disparou. Padrão: true."},"cooldownSeconds":{"type":"integer","description":"Espera mínima entre um disparo e o próximo, de 1 a 3.600 segundos (padrão 90). Fora isso, no máximo 12 disparos por hora."}}},"example":{"chatId":"120363000000000000@g.us","title":"Aviso de pedido grande","keywords":["encomenda","evento"],"action":"Avisar que a equipe de eventos responde em até 1 hora"}}}}}},"/automations/routines":{"get":{"operationId":"routines","summary":"Rotinas","description":"As rotinas agendadas: o que sai sozinho, onde e quando (no horário de Brasília), com a próxima rodada e o último erro.\n\nEscopo: `automations:read`.","tags":["Automações"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"count":1,"routines":[{"id":4,"chatId":"5561999990000@c.us","title":"Lembrete semanal de cardápio","action":null,"message":"Bom dia! O cardápio da semana já está no link da loja.","frequency":"weekly","nextRunAt":"2026-10-20T12:00:00.000Z","lastRunAt":"2026-10-13T12:00:00.000Z","status":"active","runCount":6,"lastError":null,"schedule":"toda segunda e quinta às 09:00"}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"automations:read"},"post":{"operationId":"routines-new","summary":"Criar rotina","description":"Uma mensagem que sai sozinha numa conversa ou num grupo, no horário de Brasília: o texto fixo (`message`) ou o que a IA escreve na hora (`action`, só em plano com IA). Fica também na aba Tarefas do painel. Até 10 rotinas ativas por conversa e 20 na conta; a igual a uma ativa é recusada.\n\nEscopo: `automations:write`.","tags":["Automações"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"routineId":4,"chatId":"5561999990000@c.us","title":"Lembrete semanal de cardápio","frequency":"weekly","schedule":"toda segunda e quinta às 09:00","nextRunAt":"2026-10-26T12:00:00.000Z"}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"automations:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["chatId","frequency"],"properties":{"chatId":{"type":"string","description":"Onde a rotina sai: o id da conversa ou do grupo (vem em /chats) ou o telefone com DDD."},"title":{"type":"string","description":"O nome da rotina (até 300 caracteres; sem ele, o começo do texto)."},"action":{"type":"string","description":"O que a IA escreve a cada rodada (até 1.000 caracteres)."},"message":{"type":"string","description":"O texto fixo de cada rodada, no lugar de `action` (até 4.000 caracteres)."},"frequency":{"type":"string","description":"`daily`, `weekly` (nos dias de `weekdays`), `every_n_days` (a cada `everyDays` dias) ou `once` (no dia de `date`)."},"time":{"type":"string","description":"A hora em HH:MM, horário de Brasília (padrão 09:00)."},"weekdays":{"type":"integer","description":"Para `weekly`: os dias, de 0 (domingo) a 6 (sábado)."},"everyDays":{"type":"integer","description":"Para `every_n_days`: de quantos em quantos dias (1 a 365)."},"date":{"type":"string","description":"Para `once`: o dia em AAAA-MM-DD."}}},"example":{"chatId":"5561999990000@c.us","title":"Lembrete semanal de cardápio","message":"Bom dia! O cardápio da semana já está no link da loja.","frequency":"weekly","weekdays":[1,4],"time":"09:00"}}}}}},"/payments/status":{"get":{"operationId":"payments-status","summary":"Estado dos pagamentos","description":"Se os pagamentos estão ligados, as contas do Mercado Pago e do Asaas conectadas (sem chave nem token), o gateway padrão e os ajustes. A ferramenta \"Pagamentos\" precisa estar liberada na conta.\n\nEscopo: `payments:read`.","tags":["Pagamentos"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"active":true,"defaultGateway":"mercadopago","settings":{"aiCanCharge":true,"aiMaxAmount":2000,"daysToPay":3,"sendPixCode":true,"notifyPayment":true,"moveFunnel":true,"reminders":{"enabled":true,"daysBefore":1,"onDueDate":true,"daysAfter":[1,3]},"chargeText":"","reminderText":"","confirmationText":""},"accounts":[{"gateway":"mercadopago","name":"Mercado Pago","mode":"oauth","environment":"producao","account":"DigiFood Lanches","active":true,"connectedAt":"2026-10-20T14:00:00.000Z","tokenExpiresAt":"2027-04-18T14:00:00.000Z","error":null}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"payments:read"}},"/payments/summary":{"get":{"operationId":"payments-summary","summary":"Resumo dos pagamentos","description":"Recebido hoje e no mês, a receber, vencido, quantidade por status, ticket médio, taxa de pagamento e a série diária dos últimos 30 dias.\n\nEscopo: `payments:read`.","tags":["Pagamentos"],"security":[{"bearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"description":"today, 7d, 30d (padrão), 90d ou year.","schema":{"type":"string"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"period":"30d","receivedToday":179.8,"receivedThisMonth":2310.5,"toReceive":420,"overdue":89.9,"count":{"pending":4,"paid":31,"overdue":1,"canceled":2,"refunded":0,"failed":0},"averageTicket":74.53,"paymentRate":91,"series":[{"day":"2026-10-24","total":179.8,"count":2}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"payments:read"}},"/payments/charges":{"get":{"operationId":"payments-charges","summary":"Listar cobranças","description":"As cobranças, da mais nova para a mais antiga. O CPF/CNPJ de quem paga volta mascarado.\n\nEscopo: `payments:read`.","tags":["Pagamentos"],"security":[{"bearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"description":"open (pendentes e vencidas), pending, paid, overdue, canceled, refunded ou failed.","schema":{"type":"string"}},{"name":"gateway","in":"query","required":false,"description":"mercadopago ou asaas.","schema":{"type":"string"}},{"name":"period","in":"query","required":false,"description":"Criadas em: today, 7d, 30d, 90d ou year.","schema":{"type":"string"}},{"name":"chatId","in":"query","required":false,"description":"Só as de uma conversa (id ou telefone com DDD).","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"Descrição, nome, telefone ou o número da cobrança.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Página, a partir de 0.","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"Quantas (padrão 50, máximo 200).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"count":1,"hasMore":false,"charges":[{"id":1042,"chatId":"5561999990000@c.us","contact":"Mariana","gateway":"mercadopago","amount":89.9,"amountPaid":null,"description":"Combo família (pedido 1042)","dueDate":"2026-10-27","status":"pending","statusLabel":"aguardando pagamento","method":"pix","link":"https://mpago.la/2kX9abc","pixCode":"00020126580014br.gov.bcb.pix…","payer":{"name":"Mariana","document":"***.456.789-**","email":null},"origin":"api","createdBy":"API · Claude Code","recurrenceId":null,"createdAt":"2026-10-24T18:02:11.000Z","sentAt":"2026-10-24T18:02:13.000Z","paidAt":null,"canceledAt":null,"reminders":{},"error":null}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"payments:read"},"post":{"operationId":"payments-charge-create","summary":"Cobrar um cliente","description":"Gera a cobrança no gateway da conta e, com a conversa, manda o link e o Pix copia-e-cola (numa mensagem sozinha) no WhatsApp, com a cadência de envio automático. Sem conversa, só gera o link. Sem \"message\", vale o texto da conta ou a IA escreve.\n\nEscopo: `payments:write`.","tags":["Pagamentos"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"charge":{"id":1042,"chatId":"5561999990000@c.us","contact":"Mariana","gateway":"mercadopago","amount":89.9,"amountPaid":null,"description":"Combo família (pedido 1042)","dueDate":"2026-10-27","status":"pending","statusLabel":"aguardando pagamento","method":"pix","link":"https://mpago.la/2kX9abc","pixCode":"00020126580014br.gov.bcb.pix…","payer":{"name":"Mariana","document":"***.456.789-**","email":null},"origin":"api","createdBy":"API · Claude Code","recurrenceId":null,"createdAt":"2026-10-24T18:02:11.000Z","sentAt":"2026-10-24T18:02:13.000Z","paidAt":null,"canceledAt":null,"reminders":{},"error":null},"sent":true,"sendError":null}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"payments:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["amount"],"properties":{"chatId":{"type":"string","description":"A conversa de quem paga (ou \"phone\"). A conversa precisa existir na instância."},"phone":{"type":"string","description":"Telefone com DDD, no lugar do chatId."},"amount":{"type":"number","description":"Valor em reais, de 1 a 100.000."},"description":{"type":"string","description":"O que está sendo cobrado (até 300 caracteres)."},"dueDate":{"type":"string","format":"date-time","description":"AAAA-MM-DD. Sem ele, o prazo dos ajustes."},"method":{"type":"string","description":"pix (padrão), link ou boleto (o boleto exige \"document\")."},"document":{"type":"string","description":"CPF ou CNPJ de quem paga."},"email":{"type":"string","description":"E-mail de quem paga."},"name":{"type":"string","description":"Nome de quem paga (sem ele, o da conversa)."},"gateway":{"type":"string","description":"mercadopago ou asaas (sem ele, o padrão)."},"send":{"type":"boolean","description":"true (padrão) manda na conversa; false só gera."},"message":{"type":"string","description":"Texto antes do link (até 2.000 caracteres)."}}},"example":{"chatId":"5561999990000@c.us","amount":89.9,"description":"Combo família (pedido 1042)","dueDate":"2026-10-27","method":"pix"}}}}}},"/payments/charges/{chargeId}":{"get":{"operationId":"payments-charge","summary":"Ver uma cobrança","description":"Uma cobrança com a linha do tempo: criada, enviada, lembretes, paga, cancelada.\n\nEscopo: `payments:read`.","tags":["Pagamentos"],"security":[{"bearer":[]}],"parameters":[{"name":"chargeId","in":"path","required":true,"description":"O id da cobrança (vem em /payments/charges).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"charge":{"id":1042,"chatId":"5561999990000@c.us","contact":"Mariana","gateway":"mercadopago","amount":89.9,"amountPaid":null,"description":"Combo família (pedido 1042)","dueDate":"2026-10-27","status":"pending","statusLabel":"aguardando pagamento","method":"pix","link":"https://mpago.la/2kX9abc","pixCode":"00020126580014br.gov.bcb.pix…","payer":{"name":"Mariana","document":"***.456.789-**","email":null},"origin":"api","createdBy":"API · Claude Code","recurrenceId":null,"createdAt":"2026-10-24T18:02:11.000Z","sentAt":"2026-10-24T18:02:13.000Z","paidAt":null,"canceledAt":null,"reminders":{},"error":null},"timeline":[{"event":"criada","detail":"Mercado Pago · api · API · Claude Code","at":"2026-10-24T18:02:11.000Z"},{"event":"enviada","detail":"link + Pix copia-e-cola","at":"2026-10-24T18:02:13.000Z"}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"payments:read"}},"/payments/charges/{chargeId}/resend":{"post":{"operationId":"payments-charge-resend","summary":"Reenviar a cobrança","description":"Manda de novo na conversa a cobrança em aberto (link e Pix copia-e-cola).\n\nEscopo: `payments:write`.","tags":["Pagamentos"],"security":[{"bearer":[]}],"parameters":[{"name":"chargeId","in":"path","required":true,"description":"O id da cobrança (vem em /payments/charges).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"charge":{"id":1042,"chatId":"5561999990000@c.us","contact":"Mariana","gateway":"mercadopago","amount":89.9,"amountPaid":null,"description":"Combo família (pedido 1042)","dueDate":"2026-10-27","status":"pending","statusLabel":"aguardando pagamento","method":"pix","link":"https://mpago.la/2kX9abc","pixCode":"00020126580014br.gov.bcb.pix…","payer":{"name":"Mariana","document":"***.456.789-**","email":null},"origin":"api","createdBy":"API · Claude Code","recurrenceId":null,"createdAt":"2026-10-24T18:02:11.000Z","sentAt":"2026-10-25T10:00:00.000Z","paidAt":null,"canceledAt":null,"reminders":{},"error":null}}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"payments:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"message":{"type":"string","description":"Texto antes do link (opcional)."}}},"example":{"message":"Oi, Mariana! Segue de novo o Pix do seu pedido."}}}}}},"/payments/charges/{chargeId}/check":{"post":{"operationId":"payments-charge-check","summary":"Conferir no gateway","description":"Reconsulta a cobrança no gateway e aplica o status de lá. Paga: a confirmação ao cliente e o funil seguem os ajustes da conta (o webhook faria o mesmo).\n\nEscopo: `payments:write`.","tags":["Pagamentos"],"security":[{"bearer":[]}],"parameters":[{"name":"chargeId","in":"path","required":true,"description":"O id da cobrança (vem em /payments/charges).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"charge":{"id":1042,"chatId":"5561999990000@c.us","contact":"Mariana","gateway":"mercadopago","amount":89.9,"amountPaid":89.9,"description":"Combo família (pedido 1042)","dueDate":"2026-10-27","status":"paid","statusLabel":"paga","method":"pix","link":"https://mpago.la/2kX9abc","pixCode":"00020126580014br.gov.bcb.pix…","payer":{"name":"Mariana","document":"***.456.789-**","email":null},"origin":"api","createdBy":"API · Claude Code","recurrenceId":null,"createdAt":"2026-10-24T18:02:11.000Z","sentAt":"2026-10-24T18:02:13.000Z","paidAt":"2026-10-24T18:20:40.000Z","canceledAt":null,"reminders":{},"error":null}}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"payments:write"}},"/payments/charges/{chargeId}/cancel":{"post":{"operationId":"payments-charge-cancel","summary":"Cancelar a cobrança","description":"Cancela a cobrança em aberto. Antes, confere no gateway: se acabou de ser paga, não cancela.\n\nEscopo: `payments:write`.","tags":["Pagamentos"],"security":[{"bearer":[]}],"parameters":[{"name":"chargeId","in":"path","required":true,"description":"O id da cobrança (vem em /payments/charges).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"charge":{"id":1042,"chatId":"5561999990000@c.us","contact":"Mariana","gateway":"mercadopago","amount":89.9,"amountPaid":null,"description":"Combo família (pedido 1042)","dueDate":"2026-10-27","status":"canceled","statusLabel":"cancelada","method":"pix","link":"https://mpago.la/2kX9abc","pixCode":"00020126580014br.gov.bcb.pix…","payer":{"name":"Mariana","document":"***.456.789-**","email":null},"origin":"api","createdBy":"API · Claude Code","recurrenceId":null,"createdAt":"2026-10-24T18:02:11.000Z","sentAt":"2026-10-24T18:02:13.000Z","paidAt":null,"canceledAt":"2026-10-24T19:00:00.000Z","reminders":{},"error":null}}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"payments:write"}},"/payments/charges/{chargeId}/mark-paid":{"post":{"operationId":"payments-charge-mark-paid","summary":"Marcar como paga","description":"Para o que o cliente pagou fora do gateway (dinheiro, transferência). Não manda confirmação ao cliente.\n\nEscopo: `payments:write`.","tags":["Pagamentos"],"security":[{"bearer":[]}],"parameters":[{"name":"chargeId","in":"path","required":true,"description":"O id da cobrança (vem em /payments/charges).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"charge":{"id":1042,"chatId":"5561999990000@c.us","contact":"Mariana","gateway":"mercadopago","amount":89.9,"amountPaid":null,"description":"Combo família (pedido 1042)","dueDate":"2026-10-27","status":"paid","statusLabel":"paga","method":"pix","link":"https://mpago.la/2kX9abc","pixCode":"00020126580014br.gov.bcb.pix…","payer":{"name":"Mariana","document":"***.456.789-**","email":null},"origin":"api","createdBy":"API · Claude Code","recurrenceId":null,"createdAt":"2026-10-24T18:02:11.000Z","sentAt":"2026-10-24T18:02:13.000Z","paidAt":"2026-10-24T19:05:00.000Z","canceledAt":null,"reminders":{},"error":null}}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"payments:write"}},"/payments/recurrences":{"get":{"operationId":"payments-recurrences","summary":"Cobranças recorrentes","description":"As cobranças que se repetem, com o próximo vencimento, os ciclos e se estão ativas.\n\nEscopo: `payments:read`.","tags":["Pagamentos"],"security":[{"bearer":[]}],"parameters":[{"name":"chatId","in":"query","required":false,"description":"Só as de uma conversa.","schema":{"type":"string"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"count":1,"recurrences":[{"id":7,"chatId":"5561999990000@c.us","contact":"Mariana","description":"Mensalidade do clube do lanche","amount":49.9,"frequency":"monthly","nextDueDate":"2026-11-05","daysBefore":3,"cycles":12,"cyclesDone":0,"active":true,"gateway":null,"error":null,"createdBy":"API · Claude Code","createdAt":"2026-10-24T18:10:00.000Z"}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"payments:read"},"post":{"operationId":"payments-recurrence-create","summary":"Criar recorrência","description":"Uma cobrança que se repete: a cada ciclo ela sai sozinha na conversa, \"daysBefore\" dias antes do vencimento, em horário comercial.\n\nEscopo: `payments:write`.","tags":["Pagamentos"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"recurrence":{"id":7,"chatId":"5561999990000@c.us","contact":"Mariana","description":"Mensalidade do clube do lanche","amount":49.9,"frequency":"monthly","nextDueDate":"2026-11-05","daysBefore":3,"cycles":12,"cyclesDone":0,"active":true,"gateway":null,"error":null,"createdBy":"API · Claude Code","createdAt":"2026-10-24T18:10:00.000Z"}}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"payments:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["amount"],"properties":{"chatId":{"type":"string","description":"A conversa (ou \"phone\"). Obrigatório um dos dois."},"phone":{"type":"string","description":"Telefone com DDD, no lugar do chatId."},"amount":{"type":"number","description":"Valor de cada cobrança, em reais."},"description":{"type":"string","description":"Padrão \"Mensalidade\"."},"frequency":{"type":"string","description":"weekly, biweekly ou monthly (padrão)."},"firstDueDate":{"type":"string","format":"date-time","description":"AAAA-MM-DD do primeiro vencimento (padrão: daqui a 7 dias)."},"daysBefore":{"type":"integer","description":"Dias antes do vencimento em que a cobrança sai (0 a 15, padrão 3)."},"cycles":{"type":"integer","description":"Quantas vezes (1 a 120). Sem ele, até alguém parar."},"document":{"type":"string","description":"CPF ou CNPJ de quem paga."},"email":{"type":"string","description":"E-mail de quem paga."},"gateway":{"type":"string","description":"mercadopago ou asaas."}}},"example":{"chatId":"5561999990000@c.us","amount":49.9,"description":"Mensalidade do clube do lanche","frequency":"monthly","firstDueDate":"2026-11-05","cycles":12}}}}}},"/payments/recurrences/{recurrenceId}/toggle":{"post":{"operationId":"payments-recurrence-toggle","summary":"Pausar ou retomar","description":"Pausa (active false) ou retoma (active true) a recorrência.\n\nEscopo: `payments:write`.","tags":["Pagamentos"],"security":[{"bearer":[]}],"parameters":[{"name":"recurrenceId","in":"path","required":true,"description":"O id da recorrência (vem em /payments/recurrences).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"recurrenceId":7,"active":false}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"payments:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["active"],"properties":{"active":{"type":"boolean","description":"true retoma, false pausa."}}},"example":{"active":false}}}}}},"/payments/recurrences/{recurrenceId}":{"delete":{"operationId":"payments-recurrence-delete","summary":"Apagar recorrência","description":"Nenhuma cobrança nova sai dela; as já feitas continuam como estão.\n\nEscopo: `payments:write`.","tags":["Pagamentos"],"security":[{"bearer":[]}],"parameters":[{"name":"recurrenceId","in":"path","required":true,"description":"O id da recorrência (vem em /payments/recurrences).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"deleted":7}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"payments:write"}},"/payments/settings":{"patch":{"operationId":"payments-settings","summary":"Mudar os ajustes","description":"Muda só os campos enviados (nos lembretes também). Nos textos, {nome}, {valor}, {descricao}, {vencimento} e {link} são trocados pelos dados da cobrança; vazio volta ao padrão.\n\nEscopo: `payments:settings`.","tags":["Pagamentos"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"active":true,"defaultGateway":"mercadopago","settings":{"aiCanCharge":true,"aiMaxAmount":500,"daysToPay":3,"sendPixCode":true,"notifyPayment":true,"moveFunnel":true,"reminders":{"enabled":true,"daysBefore":1,"onDueDate":true,"daysAfter":[1,3,7]},"chargeText":"","reminderText":"","confirmationText":""},"accounts":[{"gateway":"mercadopago","name":"Mercado Pago","mode":"oauth","environment":"producao","account":"DigiFood Lanches","active":true,"connectedAt":"2026-10-20T14:00:00.000Z","tokenExpiresAt":"2027-04-18T14:00:00.000Z","error":null}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"payments:settings","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"active":{"type":"boolean","description":"Liga (precisa de uma conta conectada) ou desliga os pagamentos."},"defaultGateway":{"type":"string","description":"mercadopago ou asaas (precisa estar conectado)."},"aiCanCharge":{"type":"boolean","description":"A IA pode cobrar na conversa."},"aiMaxAmount":{"type":"number","description":"Teto da cobrança feita pela IA; acima dele, uma pessoa cobra."},"daysToPay":{"type":"integer","description":"Prazo padrão para pagar, em dias (0 a 60)."},"sendPixCode":{"type":"boolean","description":"Manda o Pix copia-e-cola numa mensagem à parte."},"notifyPayment":{"type":"boolean","description":"Avisa o cliente quando o pagamento cai."},"moveFunnel":{"type":"boolean","description":"Move a conversa no funil quando o pagamento cai."},"reminders":{"type":"string","description":"{ enabled, daysBefore, onDueDate, daysAfter[] }."},"chargeText":{"type":"string","description":"Texto da cobrança (até 1.000 caracteres)."},"reminderText":{"type":"string","description":"Texto do lembrete."},"confirmationText":{"type":"string","description":"Texto da confirmação de pagamento."}}},"example":{"aiMaxAmount":500,"reminders":{"daysAfter":[1,3,7]}}}}}}},"/payments/accounts/{gateway}/test":{"post":{"operationId":"payments-account-test","summary":"Testar a conta do gateway","description":"Confere a conta conectada (no Asaas, refaz o webhook de pagamento). Conectar e desconectar o gateway é só pelo painel.\n\nEscopo: `payments:settings`.","tags":["Pagamentos"],"security":[{"bearer":[]}],"parameters":[{"name":"gateway","in":"path","required":true,"description":"mercadopago ou asaas.","schema":{"type":"string"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"gateway":"mercadopago","account":"DigiFood Lanches","active":true,"defaultGateway":"mercadopago","settings":{"aiCanCharge":true,"aiMaxAmount":2000,"daysToPay":3,"sendPixCode":true,"notifyPayment":true,"moveFunnel":true,"reminders":{"enabled":true,"daysBefore":1,"onDueDate":true,"daysAfter":[1,3]},"chargeText":"","reminderText":"","confirmationText":""},"accounts":[{"gateway":"mercadopago","name":"Mercado Pago","mode":"oauth","environment":"producao","account":"DigiFood Lanches","active":true,"connectedAt":"2026-10-20T14:00:00.000Z","tokenExpiresAt":"2027-04-18T14:00:00.000Z","error":null}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"payments:settings"}},"/settings":{"get":{"operationId":"settings","summary":"Ver os ajustes","description":"Os ajustes gerais da conta: a IA (ligada, nome, novas/antigas, boas-vindas, CRM, agenda, catálogo, retomadas), a despedida, a avaliação, o número escondido e o horário de silêncio. aiAvailable=false é conta de plano sem IA: os ajustes da IA não valem nela.\n\nEscopo: `settings:read`.","tags":["Configurações"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"settings":{"instanceName":"DigiFood Lanches","aiName":"Duda","aiEnabled":true,"aiReplyNewChats":true,"aiReplyOldChats":false,"welcomeText":"Oi! Aqui é a Duda, da DigiFood Lanches. Quer ver o cardápio de hoje?","aiDecidesWelcome":true,"farewellText":"Obrigada pelo pedido! Qualquer coisa é só chamar.","askRating":true,"aiFreshStartOnClose":false,"hideNumber":false,"showOperatorName":true,"crmAi":true,"agendaAi":false,"autoFollowups":true,"catalogAi":true,"quietHours":{"enabled":true,"start":"23:00","end":"07:00","days":[0,1,2,3,4,5,6]},"aiAvailable":true}}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"settings:read"},"patch":{"operationId":"settings-update","summary":"Mudar os ajustes","description":"Muda só os campos que vierem; o resto fica como está. Desligar aiReplyNewChats e aiReplyOldChats juntos tira a IA de todas as conversas (aiTurnedOffInChats diz de quantas). Em conta sem IA, os campos da IA voltam em skipped.\n\nEscopo: `settings:write`.","tags":["Configurações"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"applied":["aiName","askRating","quietHours.enabled","quietHours.start","quietHours.end"],"skipped":[],"aiTurnedOffInChats":0,"settings":{"instanceName":"DigiFood Lanches","aiName":"Duda","aiEnabled":true,"aiReplyNewChats":true,"aiReplyOldChats":false,"welcomeText":"Oi! Aqui é a Duda, da DigiFood Lanches. Quer ver o cardápio de hoje?","aiDecidesWelcome":true,"farewellText":"Obrigada pelo pedido! Qualquer coisa é só chamar.","askRating":true,"aiFreshStartOnClose":false,"hideNumber":false,"showOperatorName":true,"crmAi":true,"agendaAi":false,"autoFollowups":true,"catalogAi":true,"quietHours":{"enabled":true,"start":"23:00","end":"07:00","days":[0,1,2,3,4,5,6]},"aiAvailable":true}}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"settings:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"instanceName":{"type":"string","description":"Nome da instância, de 2 a 60 caracteres."},"aiName":{"type":"string","description":"Nome da IA, de 2 a 40 caracteres, sem * _ ~ (vira a assinatura das mensagens)."},"aiEnabled":{"type":"boolean","description":"A IA respondendo nesta conta (o botão geral)."},"aiReplyNewChats":{"type":"boolean","description":"A IA responde conversas novas."},"aiReplyOldChats":{"type":"boolean","description":"A IA responde conversas que já existiam."},"welcomeText":{"type":"string","description":"Boas-vindas (até 1.000 caracteres; \"\" apaga)."},"aiDecidesWelcome":{"type":"boolean","description":"A IA decide quando mandar as boas-vindas."},"farewellText":{"type":"string","description":"Despedida ao encerrar o atendimento (até 1.000 caracteres)."},"askRating":{"type":"boolean","description":"Pedir avaliação ao encerrar."},"aiFreshStartOnClose":{"type":"boolean","description":"A IA começa do zero depois de finalizar o atendimento."},"hideNumber":{"type":"boolean","description":"Esconder o número do cliente da equipe."},"showOperatorName":{"type":"boolean","description":"Mostrar o nome do atendente nas mensagens."},"crmAi":{"type":"boolean","description":"A IA move os contatos no funil."},"agendaAi":{"type":"boolean","description":"A IA marca horários na agenda."},"autoFollowups":{"type":"boolean","description":"A IA retoma sozinha quem parou de responder."},"catalogAi":{"type":"boolean","description":"A IA usa o catálogo de produtos."},"quietHours":{"type":"string","description":"{ enabled, start \"HH:MM\", end \"HH:MM\", days [0-6] }: o silêncio da IA. Mande só o que muda."}}},"example":{"aiName":"Duda","askRating":true,"quietHours":{"enabled":true,"start":"23:00","end":"07:00"}}}}}}},"/settings/work-shifts":{"get":{"operationId":"settings-work-shifts","summary":"Ver a jornada de trabalho","description":"Os dias e horários de atendimento (0 = domingo … 6 = sábado) e se a jornada manda na IA: com respect, a IA só atende dentro dela e a agenda e as retomadas seguem os mesmos horários.\n\nEscopo: `settings:read`.","tags":["Configurações"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"respect":true,"days":[{"day":0,"open":false,"start":"08:00","end":"18:00"},{"day":1,"open":true,"start":"11:00","end":"23:00"},{"day":2,"open":true,"start":"11:00","end":"23:00"},{"day":3,"open":true,"start":"11:00","end":"23:00"},{"day":4,"open":true,"start":"11:00","end":"23:00"},{"day":5,"open":true,"start":"11:00","end":"23:30"},{"day":6,"open":true,"start":"11:00","end":"23:30"}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"settings:read"},"patch":{"operationId":"settings-work-shifts-update","summary":"Mudar a jornada de trabalho","description":"Muda os dias que vierem (os outros ficam como estão) e, com respect, liga ou desliga \"Respeitar a jornada\". Dia aberto termina depois de começar, no mesmo dia.\n\nEscopo: `settings:write`.","tags":["Configurações"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"respect":true,"days":[{"day":0,"open":true,"start":"17:00","end":"23:00"},{"day":1,"open":true,"start":"11:00","end":"23:00"},{"day":2,"open":true,"start":"11:00","end":"23:00"},{"day":3,"open":true,"start":"11:00","end":"23:00"},{"day":4,"open":true,"start":"11:00","end":"23:00"},{"day":5,"open":true,"start":"11:00","end":"23:30"},{"day":6,"open":true,"start":"11:00","end":"23:30"}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"settings:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"days":{"type":"array","items":{"type":"string"},"description":"[{ day 0-6, open, start \"HH:MM\", end \"HH:MM\" }] — só os dias que mudam."},"respect":{"type":"boolean","description":"A jornada manda na IA, na agenda e nas retomadas."}}},"example":{"days":[{"day":0,"open":true,"start":"17:00","end":"23:00"}],"respect":true}}}}}},"/settings/tools":{"get":{"operationId":"settings-tools","summary":"Ferramentas da conta","description":"As ferramentas da conta, ligadas ou não, e o plano que destrava as trancadas (requiresPlan). Ligar e desligar ferramenta é pelo painel.\n\nEscopo: `settings:read`.","tags":["Configurações"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"plan":"plus","preset":"restaurante","tools":[{"key":"crm","group":"painel","name":"CRM","description":"Funil de vendas com estágios, tarefas e follow-ups.","enabled":true,"requiresPlan":null},{"key":"pagamentos","group":"painel","name":"Pagamentos","description":"Cobranças pelo Mercado Pago e pelo Asaas da própria conta.","enabled":true,"requiresPlan":null},{"key":"voz_ia","group":"painel","name":"Conneia Voz","description":"A IA que liga e atende por voz.","enabled":false,"requiresPlan":"business"}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"settings:read"}},"/quick-replies/{replyId}":{"delete":{"operationId":"quick-reply-delete","summary":"Apagar resposta rápida","description":"Apaga uma resposta rápida da instância.\n\nEscopo: `team:write`.","tags":["Operação"],"security":[{"bearer":[]}],"parameters":[{"name":"replyId","in":"path","required":true,"description":"O id (vem em /quick-replies).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"deleted":31}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"team:write"}},"/departments":{"get":{"operationId":"departments","summary":"Departamentos","description":"Os departamentos da equipe (valem para todas as instâncias da conta) e os ids dos operadores de cada um — os nomes vêm em /operators.\n\nEscopo: `team:read`.","tags":["Operação"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"departments":[{"id":3,"name":"Cozinha","operatorIds":[12,15]},{"id":4,"name":"Entregas","operatorIds":[]}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"team:read"},"post":{"operationId":"department-create","summary":"Criar departamento","description":"Departamento novo. Nome repetido na conta é recusado.\n\nEscopo: `team:write`.","tags":["Operação"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"department":{"id":4,"name":"Entregas","operatorIds":[]}}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"team:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Nome do departamento (até 120 caracteres)."}}},"example":{"name":"Entregas"}}}}}},"/departments/{departmentId}":{"patch":{"operationId":"department-update","summary":"Renomear departamento","description":"Troca o nome de um departamento.\n\nEscopo: `team:write`.","tags":["Operação"],"security":[{"bearer":[]}],"parameters":[{"name":"departmentId","in":"path","required":true,"description":"O id do departamento (vem em /departments).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"department":{"id":4,"name":"Delivery"}}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"team:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Nome do departamento (até 120 caracteres)."}}},"example":{"name":"Delivery"}}}}},"delete":{"operationId":"department-delete","summary":"Apagar departamento","description":"Apaga o departamento. Os operadores continuam existindo, só saem dele.\n\nEscopo: `team:write`.","tags":["Operação"],"security":[{"bearer":[]}],"parameters":[{"name":"departmentId","in":"path","required":true,"description":"O id do departamento (vem em /departments).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"deleted":4}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"team:write"}},"/departments/{departmentId}/members":{"put":{"operationId":"department-members","summary":"Quem está no departamento","description":"Troca a lista inteira de operadores do departamento ([] esvazia). Id de operador que não é desta conta é ignorado; a resposta diz quem ficou.\n\nEscopo: `team:write`.","tags":["Operação"],"security":[{"bearer":[]}],"parameters":[{"name":"departmentId","in":"path","required":true,"description":"O id do departamento (vem em /departments).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"department":{"id":3,"operatorIds":[12,15]}}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"team:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["operatorIds"],"properties":{"operatorIds":{"type":"array","items":{"type":"string"},"description":"Os ids dos operadores (vêm em /operators), até 200."}}},"example":{"operatorIds":[12,15]}}}}}},"/chats/{chatId}/close":{"post":{"operationId":"chat-close","summary":"Finalizar o atendimento","description":"O botão Finalizar do painel: manda a despedida e o pedido de avaliação da conta (se ligados, com a cadência de envio automático), tira o atendente e a próxima conversa do contato é um atendimento novo (a IA começa do zero, se a conta ligou a opção). Grupo é recusado. Instagram/Messenger: a despedida sai pelo canal; se a janela de 24 h fechou, finaliza sem ela.\n\nEscopo: `chats:write`.","tags":["Conversas"],"security":[{"bearer":[]}],"parameters":[{"name":"chatId","in":"path","required":true,"description":"O id da conversa (vem em /chats).","schema":{"type":"string"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"chatId":"5561999990000@c.us","closed":true,"farewellSent":true}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"chats:write"}},"/chats/{chatId}/assign":{"post":{"operationId":"chat-assign","summary":"Passar para alguém da equipe","description":"Põe a conversa com uma pessoa da equipe: a IA sai da conversa (em todos os ids do contato) e o painel mostra quem atende. Dispara o webhook chat.assigned. Para devolver à IA, POST /chats/:chatId/ai com enabled true.\n\nEscopo: `chats:write`.","tags":["Conversas"],"security":[{"bearer":[]}],"parameters":[{"name":"chatId","in":"path","required":true,"description":"O id da conversa (vem em /chats).","schema":{"type":"string"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"chatId":"5561999990000@c.us","operator":{"id":12,"name":"Bruna"},"aiEnabled":false}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"chats:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["operatorId"],"properties":{"operatorId":{"type":"integer","description":"O id da pessoa (vem em /operators)."}}},"example":{"operatorId":12}}}}}},"/chats/{chatId}/labels/{labelId}":{"delete":{"operationId":"chat-label-remove","summary":"Tirar etiqueta da conversa","description":"Tira a etiqueta da conversa (de todos os ids do contato). A etiqueta continua existindo; labels são as que ficaram.\n\nEscopo: `chats:write`.","tags":["Conversas"],"security":[{"bearer":[]}],"parameters":[{"name":"chatId","in":"path","required":true,"description":"O id da conversa (vem em /chats).","schema":{"type":"string"}},{"name":"labelId","in":"path","required":true,"description":"O id da etiqueta (vem em /labels).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"chatId":"5561999990000@c.us","removed":true,"labels":[]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"chats:write"}},"/labels/{labelId}":{"patch":{"operationId":"label-update","summary":"Mudar etiqueta","description":"Troca o nome e/ou a cor da etiqueta (vale em todas as conversas que a têm).\n\nEscopo: `chats:write`.","tags":["Conversas"],"security":[{"bearer":[]}],"parameters":[{"name":"labelId","in":"path","required":true,"description":"O id da etiqueta (vem em /labels).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"label":{"id":3,"name":"Encomenda de bolo","color":"#f97316","chats":4}}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"chats:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"name":{"type":"string","description":"O nome novo (2 a 40 caracteres)."},"color":{"type":"string","description":"Cor em hexadecimal (ex.: #f97316)."}}},"example":{"name":"Encomenda de bolo","color":"#f97316"}}}}},"delete":{"operationId":"label-delete","summary":"Apagar etiqueta","description":"Apaga a etiqueta da conta; ela sai de todas as conversas (removedFromChats diz de quantas).\n\nEscopo: `chats:write`.","tags":["Conversas"],"security":[{"bearer":[]}],"parameters":[{"name":"labelId","in":"path","required":true,"description":"O id da etiqueta (vem em /labels).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"deleted":3,"removedFromChats":4}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"chats:write"}},"/messages/search":{"get":{"operationId":"messages-search","summary":"Buscar nas mensagens","description":"Procura no texto das mensagens, nas transcrições de áudio e no nome e telefone dos contatos, da mais nova para a mais antiga.\n\nEscopo: `chats:read`.","tags":["Mensagens"],"security":[{"bearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"description":"O que procurar (pelo menos 2 caracteres).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Quantas (padrão 50, máximo 100).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"query":"pix","count":1,"results":[{"messageId":"true_5561999990000@c.us_3EB0A1","chatId":"5561999990000@c.us","chatName":"Mariana","body":"Pode mandar o pix?","fromMe":false,"type":"chat","sentAt":"2026-10-24T17:58:00.000Z"}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"chats:read"}},"/crm/stages/{stageId}":{"patch":{"operationId":"crm-stage-update","summary":"Renomear ou recolorir estágio","description":"Muda o nome e/ou a cor do estágio. Renomear leva junto os leads que estão nele (leadsMoved diz quantos); nome de outro estágio é recusado.\n\nEscopo: `crm:write`.","tags":["CRM"],"security":[{"bearer":[]}],"parameters":[{"name":"stageId","in":"path","required":true,"description":"O id do estágio (vem em /crm/stages).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"stage":{"id":4,"name":"Orçamento enviado","color":"#f97316","position":2},"leadsMoved":3}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"crm:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"name":{"type":"string","description":"O nome novo (até 80 caracteres)."},"color":{"type":"string","description":"Cor em hexadecimal (ex.: #f97316)."}}},"example":{"name":"Orçamento enviado","color":"#f97316"}}}}},"delete":{"operationId":"crm-stage-delete","summary":"Apagar estágio","description":"Apaga o estágio; os leads dele vão para o primeiro estágio que sobrar (ou \"Em análise\", se não sobrar nenhum).\n\nEscopo: `crm:write`.","tags":["CRM"],"security":[{"bearer":[]}],"parameters":[{"name":"stageId","in":"path","required":true,"description":"O id do estágio (vem em /crm/stages).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"deleted":4,"leadsMovedTo":"Em análise","leadsMoved":3}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"crm:write"}},"/crm/stages/order":{"put":{"operationId":"crm-stages-order","summary":"Reordenar o funil","description":"A ordem nova do funil, com os ids de TODOS os estágios, cada um uma vez.\n\nEscopo: `crm:write`.","tags":["CRM"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"stages":[{"id":1,"name":"Em análise","color":"#0ea5e9","position":0},{"id":4,"name":"Orçamento enviado","color":"#f97316","position":1},{"id":2,"name":"Qualificado","color":"#14b8a6","position":2},{"id":3,"name":"Convertido","color":"#f59e0b","position":3}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"crm:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["stageIds"],"properties":{"stageIds":{"type":"integer","description":"Os ids dos estágios, na ordem nova."}}},"example":{"stageIds":[1,4,2,3]}}}}}},"/crm/leads/{chatId}":{"delete":{"operationId":"crm-lead-remove","summary":"Tirar lead do CRM","description":"Tira o lead do funil. A conversa e o histórico continuam; POST /crm/leads põe de volta.\n\nEscopo: `crm:write`.","tags":["CRM"],"security":[{"bearer":[]}],"parameters":[{"name":"chatId","in":"path","required":true,"description":"O id da conversa (vem em /crm/leads).","schema":{"type":"string"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"chatId":"5561999990000@c.us","removedFromCrm":true}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"crm:write"}},"/crm/tasks/{taskId}":{"patch":{"operationId":"crm-task-update","summary":"Concluir ou mudar tarefa","description":"Conclui ou reabre a tarefa, ou muda o título e o prazo. Só o que vier muda.\n\nEscopo: `crm:write`.","tags":["CRM"],"security":[{"bearer":[]}],"parameters":[{"name":"taskId","in":"path","required":true,"description":"O id da tarefa (vem em /crm/tasks).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"taskId":77,"chatId":"5561999990000@c.us","changed":{"status":"completed"}}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"crm:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"status":{"type":"string","description":"completed (concluída) ou pending (reaberta)."},"title":{"type":"string","description":"O título novo (até 500 caracteres)."},"dueDate":{"type":"string","format":"date-time","description":"O prazo novo (\"\" ou null tira o prazo)."}}},"example":{"status":"completed"}}}}},"delete":{"operationId":"crm-task-delete","summary":"Apagar tarefa","description":"Apaga a tarefa. A que acompanha uma rotina da IA (o \"Rotina: ...\" da lista) não se apaga aqui: ela sai quando a rotina for cancelada.\n\nEscopo: `crm:write`.","tags":["CRM"],"security":[{"bearer":[]}],"parameters":[{"name":"taskId","in":"path","required":true,"description":"O id da tarefa (vem em /crm/tasks).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"deleted":77,"chatId":"5561999990000@c.us"}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"crm:write"}},"/crm/followups/{followupId}":{"patch":{"operationId":"crm-followup-update","summary":"Editar, reprogramar ou cancelar follow-up","description":"Edita o que vier (assunto, mensagem, data, envio automático) num follow-up que ainda não saiu, e ele volta a esperar a hora. Ou, sozinho, status canceled (cancela) ou sent (marca como feito à mão). O que já saiu não se edita nem se cancela. A próxima ação do lead acompanha.\n\nEscopo: `crm:write`.","tags":["CRM"],"security":[{"bearer":[]}],"parameters":[{"name":"followupId","in":"path","required":true,"description":"O id do follow-up (vem em /crm/followups).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"followupId":31,"chatId":"5561999990000@c.us","status":"pending"}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"crm:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"title":{"type":"string","description":"O assunto (\"\" ou null tira)."},"message":{"type":"string","description":"A mensagem (até 4.000 caracteres)."},"sendAt":{"type":"string","format":"date-time","description":"A nova data."},"autoSend":{"type":"boolean","description":"Envia sozinho na data (false: só lembra a equipe)."},"status":{"type":"string","description":"Sozinho: canceled ou sent."}}},"example":{"sendAt":"2026-10-28T10:00:00-03:00","message":"Oi, Mariana! Ainda quer as 20 marmitas para sexta?"}}}}},"delete":{"operationId":"crm-followup-delete","summary":"Apagar follow-up","description":"Apaga o follow-up; se ainda não tinha saído, não sai mais.\n\nEscopo: `crm:write`.","tags":["CRM"],"security":[{"bearer":[]}],"parameters":[{"name":"followupId","in":"path","required":true,"description":"O id do follow-up (vem em /crm/followups).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"deleted":31,"chatId":"5561999990000@c.us"}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"crm:write"}},"/appointments/{appointmentId}":{"patch":{"operationId":"appointment-update","summary":"Remarcar ou mudar compromisso","description":"Muda só o que vier. A data nova é conferida como no painel (expediente da conta e os outros compromissos; senão 409 `slot_unavailable`, com `reason` e os próximos livres em `suggestions`) e o Google Agenda acompanha o mesmo evento. A reunião que a ligação de voz marcou não muda de data por aqui. Não avisa o cliente.\n\nEscopo: `agenda:write`.","tags":["Agenda"],"security":[{"bearer":[]}],"parameters":[{"name":"appointmentId","in":"path","required":true,"description":"O id do compromisso (vem em /appointments).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"appointment":{"id":210,"chatId":"5561999990000@c.us","clientName":"Mariana Souza","clientEmail":null,"serviceName":"Degustação do cardápio de eventos","date":"2026-10-28T18:00:00.000Z","status":"Agendado","origin":"api","googleSync":"synced"},"googleSync":"synced"}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"agenda:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"date":{"type":"string","format":"date-time","description":"A nova data e hora, com fuso."},"serviceName":{"type":"string","description":"O serviço (até 120 caracteres)."},"clientName":{"type":"string","description":"Nome do cliente (até 120 caracteres)."},"clientEmail":{"type":"string","description":"E-mail do cliente, para o convite do Google (\"\" ou null tira)."},"status":{"type":"string","description":"Agendado, Confirmado ou Finalizado. Cancelar é apagar."}}},"example":{"date":"2026-10-28T15:00:00-03:00"}}}}},"delete":{"operationId":"appointment-delete","summary":"Apagar compromisso","description":"Apaga (cancela) o compromisso e o evento dele no Google Agenda, como o painel. Não avisa o cliente.\n\nEscopo: `agenda:write`.","tags":["Agenda"],"security":[{"bearer":[]}],"parameters":[{"name":"appointmentId","in":"path","required":true,"description":"O id do compromisso (vem em /appointments).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"deleted":210}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"agenda:write"}},"/messages/scheduled/{scheduledId}":{"patch":{"operationId":"scheduled-update","summary":"Mudar mensagem agendada","description":"Muda o texto e/ou a hora de uma mensagem que ainda não saiu; ela volta a esperar a hora (a falha de antes some). Hora que já passou vale como agora.\n\nEscopo: `automations:write`.","tags":["Mensagens"],"security":[{"bearer":[]}],"parameters":[{"name":"scheduledId","in":"path","required":true,"description":"O id da mensagem agendada (vem em /messages/scheduled).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"scheduledId":5120,"chatId":"5561999990000@c.us","sendAt":"2026-10-28T12:00:00.000Z","status":"pending"}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"automations:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"message":{"type":"string","description":"O texto novo (até 4.000 caracteres)."},"sendAt":{"type":"string","format":"date-time","description":"A hora nova."}}},"example":{"sendAt":"2026-10-28T09:00:00-03:00"}}}}},"delete":{"operationId":"scheduled-delete","summary":"Apagar mensagem agendada","description":"Apaga a mensagem que ainda não saiu: ela não sai mais. A que já saiu fica no histórico.\n\nEscopo: `automations:write`.","tags":["Mensagens"],"security":[{"bearer":[]}],"parameters":[{"name":"scheduledId","in":"path","required":true,"description":"O id da mensagem agendada (vem em /messages/scheduled).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"deleted":5120,"chatId":"5561999990000@c.us"}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"automations:write"}},"/automations/triggers/{triggerId}":{"patch":{"operationId":"trigger-update","summary":"Mudar gatilho","description":"Muda só o que vier num gatilho ativo; `action`, `message` e `authorFilter` vazios (ou null) tiram. Ele precisa ficar com `action` ou `message`. Vale no próximo disparo.\n\nEscopo: `automations:write`.","tags":["Automações"],"security":[{"bearer":[]}],"parameters":[{"name":"triggerId","in":"path","required":true,"description":"O id do gatilho (vem em /automations/triggers).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"trigger":{"id":8,"chatId":"120363000000000000@g.us","title":"Aviso de pedido grande","keywords":["encomenda","evento"],"authorFilter":null,"action":null,"message":"Pedido para evento? A equipe responde em até 1 hora.","mentionAuthor":true,"cooldownSeconds":90,"status":"active","fireCount":4,"lastFiredAt":"2026-10-14T20:00:00.000Z"}}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"automations:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"title":{"type":"string","description":"O nome do gatilho (até 120 caracteres; sem ele, \"Quando falarem: …\")."},"keywords":{"type":"array","items":{"type":"string"},"description":"As palavras que disparam (ou o texto \"a, b\"): 2 letras ou mais, até 12, sem diferença de maiúscula e acento. Palavra sozinha só casa inteira (\"messi\" não casa em \"messias\")."},"action":{"type":"string","description":"O que a IA escreve na hora, no tom da conta (até 1.000 caracteres; só em plano com IA)."},"message":{"type":"string","description":"O texto fixo que sai no grupo, no lugar de `action` (até 4.000 caracteres)."},"authorFilter":{"type":"string","description":"Só dispara quando esta pessoa falar (nome ou número)."},"mentionAuthor":{"type":"boolean","description":"Marca (@) quem disparou. Padrão: true."},"cooldownSeconds":{"type":"integer","description":"Espera mínima entre um disparo e o próximo, de 1 a 3.600 segundos (padrão 90). Fora isso, no máximo 12 disparos por hora."}}},"example":{"message":"Pedido para evento? A equipe responde em até 1 hora.","action":""}}}}},"delete":{"operationId":"trigger-delete","summary":"Cancelar gatilho","description":"O gatilho para de disparar na hora e fica na lista como `canceled`.\n\nEscopo: `automations:write`.","tags":["Automações"],"security":[{"bearer":[]}],"parameters":[{"name":"triggerId","in":"path","required":true,"description":"O id do gatilho (vem em /automations/triggers).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"triggerId":8,"chatId":"120363000000000000@g.us","status":"canceled"}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"automations:write"}},"/automations/routines/{routineId}":{"delete":{"operationId":"routine-delete","summary":"Cancelar rotina","description":"A rotina não sai mais e a tarefa dela na aba Tarefas fica concluída.\n\nEscopo: `automations:write`.","tags":["Automações"],"security":[{"bearer":[]}],"parameters":[{"name":"routineId","in":"path","required":true,"description":"O id da rotina (vem em /automations/routines).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"routineId":4,"chatId":"5561999990000@c.us","status":"canceled"}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"automations:write"}},"/ai/memory":{"get":{"operationId":"ai-memory","summary":"Ler a memória","description":"O texto que a IA lê em toda conversa (a memória da conta, com a persona) ou o que ela sabe de uma conversa, com o tamanho e o teto. `managedByScript` diz que a memória da conta virou fatos: aí o texto vem montado deles.\n\nEscopo: `ai:read`.","tags":["IA"],"security":[{"bearer":[]}],"parameters":[{"name":"scope","in":"query","required":false,"description":"`instance` (a memória da conta, com a persona; o padrão) ou `contact` (o que a IA sabe de uma conversa).","schema":{"type":"string"}},{"name":"chatId","in":"query","required":false,"description":"Com `scope=contact`: o id da conversa (vem em /chats) ou o telefone com DDD.","schema":{"type":"string"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"scope":"instance","chatId":null,"text":"Você é a atendente da DigiFood…","length":1840,"limit":20000,"managedByScript":false}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"ai:read"},"post":{"operationId":"ai-memory-write","summary":"Gravar na memória","description":"Acrescenta ao fim (`append`, o padrão), troca tudo (`replace`) ou limpa (`clear`); vale na próxima mensagem. Na memória da conta que virou fatos, o `append` entra como fato novo (`savedAsFact`).\n\nEscopo: `ai:write`.","tags":["IA"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"scope":"contact","chatId":"5561999990000@c.us","mode":"append","length":64,"savedAsFact":false,"message":"Memória atualizada."}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"ai:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["scope"],"properties":{"scope":{"type":"string","description":"`instance` (a memória da conta, com a persona) ou `contact` (a de uma conversa)."},"chatId":{"type":"string","description":"Com `scope=contact`: o id da conversa (vem em /chats) ou o telefone com DDD."},"mode":{"type":"string","description":"`append`, `replace` ou `clear`."},"text":{"type":"string","description":"O que a IA tem de saber, até o teto da memória (20.000 caracteres na conta, 6.000 numa conversa); no `clear` não vai."}}},"example":{"scope":"contact","chatId":"5561999990000@c.us","mode":"append","text":"Prefere receber os pedidos depois das 18h."}}}}}},"/ai/memory/facts":{"get":{"operationId":"ai-facts","summary":"Listar os fatos","description":"Os fatos da memória: o que vale sempre (`always`), o que acende pelo assunto (`topics`) e até quando (`validUntil`), com quantas vezes a IA usou. A persona migrada vem com `migratedPersona: true` e só o começo do texto (ela inteira está em GET /ai/memory).\n\nEscopo: `ai:read`.","tags":["IA"],"security":[{"bearer":[]}],"parameters":[{"name":"scope","in":"query","required":false,"description":"`instance` (a memória da conta, com a persona; o padrão) ou `contact` (o que a IA sabe de uma conversa).","schema":{"type":"string"}},{"name":"chatId","in":"query","required":false,"description":"Com `scope=contact`: o id da conversa (vem em /chats) ou o telefone com DDD.","schema":{"type":"string"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"scope":"instance","chatId":null,"count":1,"facts":[{"id":41,"scope":"instance","chatId":null,"key":"horario_de_sabado","value":"Sábado abrimos das 9h às 13h.","length":29,"truncated":false,"type":"horario","origin":"integracao","always":false,"topics":["sábado","horário"],"validUntil":null,"active":true,"migratedPersona":false,"uses":3,"lastUsedAt":"2026-10-24T15:02:11.000Z","updatedAt":"2026-10-20T12:00:00.000Z"}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"ai:read"},"post":{"operationId":"ai-facts-write","summary":"Criar ou mudar um fato","description":"A mesma `key` muda o fato (maiúscula e acento não contam) e o que não vier fica como estava; `null` em `topics` e `validUntil` tira. Na conversa, o fato entra quando o assunto aparece: `always` vale só na memória da conta.\n\nEscopo: `ai:write`.","tags":["IA"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"created":true,"fact":{"id":41,"scope":"instance","chatId":null,"key":"horario_de_sabado","value":"Sábado abrimos das 9h às 13h.","length":29,"truncated":false,"type":"horario","origin":"integracao","always":false,"topics":["sábado","horário"],"validUntil":null,"active":true,"migratedPersona":false,"uses":3,"lastUsedAt":"2026-10-24T15:02:11.000Z","updatedAt":"2026-10-20T12:00:00.000Z"}}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"ai:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["scope","key"],"properties":{"scope":{"type":"string","description":"`instance` (a memória da conta, com a persona) ou `contact` (a de uma conversa)."},"chatId":{"type":"string","description":"Com `scope=contact`: o id da conversa (vem em /chats) ou o telefone com DDD."},"key":{"type":"string","description":"O nome do fato (até 120 caracteres)."},"value":{"type":"string","description":"O texto do fato (até 4.000 caracteres); obrigatório no fato novo."},"type":{"type":"string","description":"`regra` (o padrão), `preco`, `horario`, `politica`, `fato_do_cliente` ou `bloco_livre`."},"always":{"type":"boolean","description":"Entra em toda conversa (só na memória da conta)."},"topics":{"type":"array","items":{"type":"string"},"description":"As palavras do assunto que acendem o fato (ou o texto \"a, b\"; até 400 caracteres)."},"validUntil":{"type":"string","description":"Até quando o fato vale, em ISO 8601 com fuso."},"active":{"type":"boolean","description":"false guarda o fato sem a IA usar."}}},"example":{"scope":"instance","key":"horario_de_sabado","value":"Sábado abrimos das 9h às 13h.","type":"horario","topics":["sábado","horário"]}}}}}},"/ai/memory/facts/{factId}":{"delete":{"operationId":"ai-fact-delete","summary":"Apagar um fato","description":"Apaga um fato da memória da conta ou de uma conversa desta instância. A persona migrada não se apaga por aqui: ela muda (ou se limpa) pelo POST /ai/memory.\n\nEscopo: `ai:write`.","tags":["IA"],"security":[{"bearer":[]}],"parameters":[{"name":"factId","in":"path","required":true,"description":"O id do fato (vem em /ai/memory/facts).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"deleted":41}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"ai:write"}},"/ai/usage":{"get":{"operationId":"ai-usage","summary":"Consumo da IA","description":"O mesmo da tela Consumo: hoje, o mês (com a projeção) e os últimos 30 dias, a série por dia, as médias por resposta e os limites do plano (por minuto, por dia e o orçamento do mês).\n\nEscopo: `ai:read`.","tags":["IA"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"updatedAt":"2026-10-24T22:00:00.000Z","model":"gemini-3.5-flash-lite","usdBrlRate":5.4,"today":{"requests":120,"paidReplies":118,"inputTokens":2300000,"outputTokens":9800,"cachedTokens":1900000,"totalTokens":2309800,"costUsd":0.26,"costBrl":1.4,"measurement":"medido"},"month":{"requests":120,"paidReplies":118,"inputTokens":2300000,"outputTokens":9800,"cachedTokens":1900000,"totalTokens":2309800,"costUsd":0.26,"costBrl":1.4,"measurement":"medido","label":"outubro de 2026","daysElapsed":24,"daysInMonth":31,"projectionUsd":8.1,"projectionBrl":43.6},"last30Days":{"requests":120,"paidReplies":118,"inputTokens":2300000,"outputTokens":9800,"cachedTokens":1900000,"totalTokens":2309800,"costUsd":0.26,"costBrl":1.4,"measurement":"medido"},"daily":[{"date":"2026-10-24","requests":120,"tokens":2309800,"costUsd":0.26,"costBrl":1.4}],"averages":{"tokensPerReply":19575,"costBrlPerReply":0.012,"costBrlPer1000Replies":11.9},"plan":{"code":"plus","unlimited":false},"limits":{"repliesPerMinute":20,"repliesPerDay":{"limit":2000,"used":118,"percent":6},"monthlyBudget":{"limitBrl":100,"spentBrl":33.8,"percent":34,"alert":false,"exceeded":false,"projectionExceeds":false,"pausesAi":false}}}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"ai:read"}},"/ai/tasks":{"get":{"operationId":"ai-tasks","summary":"Listar a Produção","description":"As tarefas que a IA executa em segundo plano (site, logo, cobrança, arquivo…), da mais nova para a mais velha, com a contagem de eventos e o último passo. Precisa da ferramenta Produção ligada na conta.\n\nEscopo: `ai:read`.","tags":["IA"],"security":[{"bearer":[]}],"parameters":[{"name":"chatId","in":"query","required":false,"description":"Só as tarefas de uma conversa ou de um grupo.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Quantas (padrão 30, até 200).","schema":{"type":"integer"}},{"name":"live","in":"query","required":false,"description":"true traz só as que estão andando (pending, running, sending).","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"count":1,"tasks":[{"id":912,"chatId":"5561999990000@c.us","contact":"DigiFood","type":"site","status":"running","attempts":1,"args":{"slug":"digifood"},"result":null,"startedAt":"2026-10-24T21:55:00.000Z","updatedAt":"2026-10-24T21:58:02.000Z","siteSlug":"digifood","siteUrl":null,"events":6,"pendingInstructions":0,"lastStep":"Montando a página","lastLevel":"info"}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"ai:read"}},"/ai/tasks/{taskId}":{"get":{"operationId":"ai-task","summary":"Ver uma tarefa","description":"A tarefa com a linha do tempo. `afterEventId` traz só os passos depois daquele, para acompanhar sem reler tudo.\n\nEscopo: `ai:read`.","tags":["IA"],"security":[{"bearer":[]}],"parameters":[{"name":"taskId","in":"path","required":true,"description":"O id da tarefa (vem em /ai/tasks).","schema":{"type":"integer"}},{"name":"afterEventId","in":"query","required":false,"description":"Só os eventos depois deste id.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"task":{"id":912,"chatId":"5561999990000@c.us","contact":"DigiFood","type":"site","status":"running","attempts":1,"args":{"slug":"digifood"},"result":null,"startedAt":"2026-10-24T21:55:00.000Z","updatedAt":"2026-10-24T21:58:02.000Z","siteSlug":"digifood","siteUrl":null},"events":[{"id":5120,"phase":"site","level":"info","title":"Montando a página","detail":null,"data":null,"at":"2026-10-24T21:58:02.000Z"}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"ai:read"}},"/ai/tasks/{taskId}/instructions":{"post":{"operationId":"ai-task-instruct","summary":"Instruir uma tarefa","description":"Uma instrução para a tarefa no meio do trabalho (ex.: \"use o verde do logo no botão\"): ela entra no próximo passo. Na tarefa que já terminou, a instrução fica registrada e a resposta avisa que não será aplicada (`applies: false`).\n\nEscopo: `ai:write`.","tags":["IA"],"security":[{"bearer":[]}],"parameters":[{"name":"taskId","in":"path","required":true,"description":"O id da tarefa (vem em /ai/tasks).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"taskId":912,"instructionId":77,"applies":true}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"ai:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"properties":{"text":{"type":"string","description":"A instrução (até 4.000 caracteres)."}}},"example":{"text":"Use o verde do logo no botão do WhatsApp."}}}}}},"/campaigns":{"get":{"operationId":"campaigns","summary":"Listar campanhas","description":"As campanhas de disparo da conta (até 100, a mais nova primeiro) com o andamento de cada uma e o que a segura: `stoppedBy` (o WhatsApp fora, com quem resolve), `dailyLimitReached` (o número esgotou os envios do dia), `aiNotAnswering` (a IA não escreveu a mensagem; tenta de novo em `aiRetryAt`) e `stoppedAtDeadline`. Precisa da ferramenta Campanhas ligada na conta.\n\nEscopo: `campaigns:read`.","tags":["Campanhas"],"security":[{"bearer":[]}],"parameters":[],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"count":1,"campaigns":[{"id":14,"name":"Cardápio da semana","status":"active","mode":"text","message":"Oi! O cardápio da semana já está no link da loja.","variations":3,"aiInstruction":null,"attachment":null,"aiContinuesConversation":true,"followUpDays":[2],"perHour":20,"startsAt":"2026-10-24T12:00:00.000Z","createdAt":"2026-10-24T11:40:00.000Z","finishedAt":null,"createdBy":"DigiFood","deadline":"2026-10-25T21:00:00.000Z","fitsBeforeDeadline":410,"estimatedEndAt":"2026-10-25T13:20:00.000Z","summary":{"total":240,"active":236,"queued":120,"sending":2,"sent":110,"replied":19,"failed":4,"optedOut":1,"removed":4,"percent":48},"stoppedBy":null,"dailyLimitReached":false,"aiNotAnswering":false,"aiRetryAt":null,"stoppedAtDeadline":false}],"optedOutTotal":3}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"campaigns:read"}},"/campaigns/{campaignId}":{"get":{"operationId":"campaign","summary":"Ver campanha","description":"Uma campanha com os contatos, 50 por página (primeiro quem está na fila), e quantos há em cada filtro.\n\nEscopo: `campaigns:read`.","tags":["Campanhas"],"security":[{"bearer":[]}],"parameters":[{"name":"campaignId","in":"path","required":true,"description":"O id da campanha (vem em /campaigns).","schema":{"type":"integer"}},{"name":"filter","in":"query","required":false,"description":"`all` (o padrão), `queued`, `sent`, `replied`, `no_reply`, `failed` ou `opted_out`.","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"Nome ou número do contato (até 60 caracteres).","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"A página (padrão 1); `hasMore` diz se há próxima.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"campaign":{"id":14,"name":"Cardápio da semana","status":"active","mode":"text","message":"Oi! O cardápio da semana já está no link da loja.","variations":3,"aiInstruction":null,"attachment":null,"aiContinuesConversation":true,"followUpDays":[2],"perHour":20,"startsAt":"2026-10-24T12:00:00.000Z","createdAt":"2026-10-24T11:40:00.000Z","finishedAt":null,"createdBy":"DigiFood","deadline":"2026-10-25T21:00:00.000Z","fitsBeforeDeadline":410,"estimatedEndAt":"2026-10-25T13:20:00.000Z","summary":{"total":240,"active":236,"queued":120,"sending":2,"sent":110,"replied":19,"failed":4,"optedOut":1,"removed":4,"percent":48},"stoppedBy":null,"dailyLimitReached":false,"aiNotAnswering":false,"aiRetryAt":null,"stoppedAtDeadline":false},"filter":"replied","search":"","page":1,"hasMore":false,"counts":{"all":236,"queued":120,"sent":111,"replied":19,"no_reply":91,"failed":4,"opted_out":1},"contacts":[{"id":3301,"phone":"5561999990000","chatId":"5561999990000@c.us","name":"DigiFood","source":"conversas","status":"sent","message":"Oi! O cardápio da semana já está no link da loja.","sentAt":"2026-10-24T12:31:00.000Z","repliedAt":"2026-10-24T12:40:00.000Z","error":null}]}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"campaigns:read"},"patch":{"operationId":"campaign-update","summary":"Ajustar campanha","description":"Os ajustes da tela, um ou mais no mesmo pedido: o ritmo, a hora de parar de enviar e os dias das retomadas (a IA volta a escrever para quem recebeu e não respondeu; só na campanha em que a IA continua a conversa). Tudo é conferido antes de gravar: o pedido nunca fica pela metade. `null` tira a hora de parar ou as retomadas. A resposta traz o que mudou e a campanha como ficou.\n\nEscopo: `campaigns:write`.","tags":["Campanhas"],"security":[{"bearer":[]}],"parameters":[{"name":"campaignId","in":"path","required":true,"description":"O id da campanha (vem em /campaigns).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"changed":["followUpDays","deadline","perHour"],"campaign":{"id":14,"name":"Cardápio da semana","status":"active","mode":"text","message":"Oi! O cardápio da semana já está no link da loja.","variations":3,"aiInstruction":null,"attachment":null,"aiContinuesConversation":true,"followUpDays":[2,5],"perHour":15,"startsAt":"2026-10-24T12:00:00.000Z","createdAt":"2026-10-24T11:40:00.000Z","finishedAt":null,"createdBy":"DigiFood","deadline":"2026-10-25T21:00:00.000Z","fitsBeforeDeadline":410,"estimatedEndAt":"2026-10-25T13:20:00.000Z","summary":{"total":240,"active":236,"queued":120,"sending":2,"sent":110,"replied":19,"failed":4,"optedOut":1,"removed":4,"percent":48},"stoppedBy":null,"dailyLimitReached":false,"aiNotAnswering":false,"aiRetryAt":null,"stoppedAtDeadline":false}}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"campaigns:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"perHour":{"type":"integer","description":"Mensagens por hora, de 5 a 25."},"deadline":{"type":"string","format":"date-time","description":"Hora de parar de enviar; quem ainda estiver na fila fica nela. `null` tira."},"followUpDays":{"type":"integer","description":"Até 6 dias, de 1 a 60, em ordem crescente (ex.: `[2, 5, 10]`); `[]` ou `null` tira as retomadas."}}},"example":{"perHour":15,"deadline":"2026-10-25T18:00:00-03:00","followUpDays":[2,5]}}}}}},"/campaigns/{campaignId}/pause":{"post":{"operationId":"campaign-pause","summary":"Pausar campanha","description":"Pausa a campanha em andamento: nada mais sai até retomar, e quem já estava na fila de envio do WhatsApp volta para a fila da campanha.\n\nEscopo: `campaigns:write`.","tags":["Campanhas"],"security":[{"bearer":[]}],"parameters":[{"name":"campaignId","in":"path","required":true,"description":"O id da campanha (vem em /campaigns).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"campaignId":14,"status":"paused"}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"campaigns:write"}},"/campaigns/{campaignId}/resume":{"post":{"operationId":"campaign-resume","summary":"Retomar campanha","description":"O \"Retomar de onde parou\" da tela: quem falhou por queda do WhatsApp e quem ficou preso na fila de envio voltam para a fila, e a campanha pausada (ou terminada com gente na fila) volta a enviar no ritmo dela. `whatsappDown` diz se o WhatsApp ainda segura o envio. Recusa se a hora de parar já passou.\n\nEscopo: `campaigns:write`.","tags":["Campanhas"],"security":[{"bearer":[]}],"parameters":[{"name":"campaignId","in":"path","required":true,"description":"O id da campanha (vem em /campaigns).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"campaignId":14,"reactivated":true,"requeuedAfterDisconnect":12,"requeuedLate":0,"queued":132,"next":{"name":"DigiFood","phone":"5561999990000"},"whatsappDown":null,"message":"Voltaram 12 para a fila; a campanha segue com 132."}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"campaigns:write"}},"/campaigns/{campaignId}/retry-failed":{"post":{"operationId":"campaign-retry-failed","summary":"Reenviar as falhas","description":"O \"Reenviar as que falharam\" da tela: TODO contato com falha volta para a fila (número inválido também) e a campanha terminada volta a enviar. Para só os que falharam por queda do WhatsApp, use Retomar. Sem falha nenhuma, nada muda (`requeued: 0`).\n\nEscopo: `campaigns:write`.","tags":["Campanhas"],"security":[{"bearer":[]}],"parameters":[{"name":"campaignId","in":"path","required":true,"description":"O id da campanha (vem em /campaigns).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"campaignId":14,"requeued":4,"message":"4 contato(s) voltaram para a fila."}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"campaigns:write"}},"/campaigns/{campaignId}/cancel":{"post":{"operationId":"campaign-cancel","summary":"Encerrar campanha","description":"Encerra a campanha: ela para de enviar, quem estava na fila sai dela e as retomadas param. Não se desfaz.\n\nEscopo: `campaigns:write`.","tags":["Campanhas"],"security":[{"bearer":[]}],"parameters":[{"name":"campaignId","in":"path","required":true,"description":"O id da campanha (vem em /campaigns).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"campaignId":14,"status":"finished"}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"campaigns:write"}},"/campaigns/{campaignId}/contacts/{contactId}":{"delete":{"operationId":"campaign-contact-remove","summary":"Tirar contato da campanha","description":"Tira uma pessoa da campanha antes de ela receber (na fila, saindo agora ou com falha); quem já recebeu não sai (409). O contato fica na lista como `removed`.\n\nEscopo: `campaigns:write`.","tags":["Campanhas"],"security":[{"bearer":[]}],"parameters":[{"name":"campaignId","in":"path","required":true,"description":"O id da campanha (vem em /campaigns).","schema":{"type":"integer"}},{"name":"contactId","in":"path","required":true,"description":"O id do contato na campanha (vem em `contacts` de Ver campanha).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Deu certo.","content":{"application/json":{"example":{"ok":true,"campaignId":14,"contactId":3301,"removed":true}}}},"default":{"description":"Erro (veja `error` e `message`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}},"x-conneia-scope":"campaigns:write"}}},"webhooks":{"message.received":{"post":{"summary":"Um cliente mandou mensagem.","description":"Toda mensagem que chega numa conversa individual da instância. Assinado em X-Digifood-Signature: sha256=HMAC_SHA256(segredo, `${timestamp}.${corpo}`).","requestBody":{"content":{"application/json":{"example":{"event":"message.received","instanceId":24,"sentAt":"2026-10-15T22:40:05.000Z","data":{"chatId":"5561999990000@c.us","phoneNumber":"5561999990000","contactName":"Mariana","body":"Pode mandar o cardápio?","hasMedia":false,"timestamp":1760568000000,"aiEnabled":true}}}}},"responses":{"200":{"description":"Recebido (qualquer 2xx em até 8 segundos)."}}}},"ai.replied":{"post":{"summary":"A IA respondeu um cliente.","description":"Cada resposta da IA enviada no WhatsApp. Assinado em X-Digifood-Signature: sha256=HMAC_SHA256(segredo, `${timestamp}.${corpo}`).","requestBody":{"content":{"application/json":{"example":{"event":"ai.replied","instanceId":24,"sentAt":"2026-10-15T22:40:05.000Z","data":{"chatId":"5561999990000@c.us","phoneNumber":"5561999990000","contactName":"Mariana","reply":"Claro, Mariana! Segue o cardápio de hoje.","crmStage":"Qualificado","repliedAt":"2026-10-15T22:40:04.000Z"}}}}},"responses":{"200":{"description":"Recebido (qualquer 2xx em até 8 segundos)."}}}},"crm.stage_changed":{"post":{"summary":"Um lead mudou de estágio no CRM.","description":"Quando o estágio muda de verdade: a IA classificou o lead (origin ai), alguém arrastou o cartão ou salvou o formulário no painel (origin panel) ou POST /crm/leads mudou o estágio (origin api). Salvar o mesmo estágio não dispara. Assinado em X-Digifood-Signature: sha256=HMAC_SHA256(segredo, `${timestamp}.${corpo}`).","requestBody":{"content":{"application/json":{"example":{"event":"crm.stage_changed","instanceId":24,"sentAt":"2026-10-15T22:40:05.000Z","data":{"chatId":"5561999990000@c.us","phoneNumber":"5561999990000","contactName":"Mariana","stage":"Qualificado","previousStage":"Em análise","temperature":"quente","score":80,"nextAction":"Enviar cardápio do almoço","origin":"ai","changedAt":"2026-10-15T22:40:05.000Z"}}}}},"responses":{"200":{"description":"Recebido (qualquer 2xx em até 8 segundos)."}}}},"crm.lead_created":{"post":{"summary":"Um lead novo entrou no CRM.","description":"Quando o contato entra no CRM pelo painel (origin panel) ou por POST /crm/leads (origin api): não existia ou estava fora do funil. Assinado em X-Digifood-Signature: sha256=HMAC_SHA256(segredo, `${timestamp}.${corpo}`).","requestBody":{"content":{"application/json":{"example":{"event":"crm.lead_created","instanceId":24,"sentAt":"2026-10-15T22:40:05.000Z","data":{"chatId":"5561999990000@c.us","name":"Mariana Souza","stage":"Em análise","origin":"api"}}}}},"responses":{"200":{"description":"Recebido (qualquer 2xx em até 8 segundos)."}}}},"message.sent":{"post":{"summary":"Saiu uma mensagem da instância.","description":"Toda mensagem que o sistema envia pelo número: a equipe no painel (origin panel), a IA (origin ai), um envio automático como follow-up, campanha ou boas-vindas (origin automation), o POST /messages (origin api) ou um aviso do sistema (origin system). A resposta que sai em várias mensagens dispara uma vez, com o texto inteiro. Em mídia, message é a legenda. A mensagem digitada direto no celular não passa pelo sistema e não dispara. Assinado em X-Digifood-Signature: sha256=HMAC_SHA256(segredo, `${timestamp}.${corpo}`).","requestBody":{"content":{"application/json":{"example":{"event":"message.sent","instanceId":24,"sentAt":"2026-10-15T22:40:05.000Z","data":{"chatId":"5561999990000@c.us","message":"Seu pedido 1042 saiu para entrega.","hasMedia":false,"mediaType":null,"origin":"api","messageId":"true_5561999990000@c.us_3EB0A1B2C3D4E5F60718","sentAt":"2026-10-15T22:55:00.000Z"}}}}},"responses":{"200":{"description":"Recebido (qualquer 2xx em até 8 segundos)."}}}},"appointment.created":{"post":{"summary":"Um compromisso foi agendado.","description":"Quando um compromisso é marcado: pela IA na conversa, no grupo ou na ligação (origin ai), pela equipe no painel (origin panel) ou por POST /appointments (origin api). Assinado em X-Digifood-Signature: sha256=HMAC_SHA256(segredo, `${timestamp}.${corpo}`).","requestBody":{"content":{"application/json":{"example":{"event":"appointment.created","instanceId":24,"sentAt":"2026-10-15T22:40:05.000Z","data":{"appointmentId":210,"chatId":"5561999990000@c.us","clientName":"Mariana Souza","serviceName":"Degustação do cardápio de eventos","date":"2026-10-18T17:00:00.000Z","origin":"api"}}}}},"responses":{"200":{"description":"Recebido (qualquer 2xx em até 8 segundos)."}}}},"chat.assigned":{"post":{"summary":"A conversa foi para uma pessoa da equipe (a IA sai dela).","description":"Quando alguém clica em Atender ou transfere no painel, ou pelo POST /chats/:chatId/assign. Assinado em X-Digifood-Signature: sha256=HMAC_SHA256(segredo, `${timestamp}.${corpo}`).","requestBody":{"content":{"application/json":{"example":{"event":"chat.assigned","instanceId":24,"sentAt":"2026-10-15T22:40:05.000Z","data":{"chatId":"5561999990000@c.us","operatorId":12,"operatorName":"Bruna","assignedAt":"2026-10-24T18:20:00.000Z"}}}}},"responses":{"200":{"description":"Recebido (qualquer 2xx em até 8 segundos)."}}}},"order.created":{"post":{"summary":"Entrou um pedido novo no catálogo.","description":"Quando a IA fecha um pedido do cardápio DigiFood na conversa e ele entra pela primeira vez na lista do GET /orders (as mesmas chaves de lá, com orderId). Atualizar o mesmo pedido não dispara de novo. Assinado em X-Digifood-Signature: sha256=HMAC_SHA256(segredo, `${timestamp}.${corpo}`).","requestBody":{"content":{"application/json":{"example":{"event":"order.created","instanceId":24,"sentAt":"2026-10-15T22:40:05.000Z","data":{"orderId":1042,"orderCode":"A1042","chatId":"5561999990000@c.us","customerName":"Mariana Souza","orderStatus":"pending","paymentStatus":"pending","paymentMethod":"pix","total":89.9,"trackingUrl":null,"createdAt":"2026-10-15T22:50:00.000Z"}}}}},"responses":{"200":{"description":"Recebido (qualquer 2xx em até 8 segundos)."}}}},"instance.status_changed":{"post":{"summary":"O WhatsApp da instância conectou ou caiu.","description":"Quando a instância fica conectada (connected true) ou deixa de estar (connected false), com o status de agora e o de antes. As etapas do caminho (iniciando, esperando o QR, autenticando) não disparam. Assinado em X-Digifood-Signature: sha256=HMAC_SHA256(segredo, `${timestamp}.${corpo}`).","requestBody":{"content":{"application/json":{"example":{"event":"instance.status_changed","instanceId":24,"sentAt":"2026-10-15T22:40:05.000Z","data":{"status":"DESCONECTADO","previousStatus":"CONECTADO","connected":false,"changedAt":"2026-10-26T23:10:00.000Z"}}}}},"responses":{"200":{"description":"Recebido (qualquer 2xx em até 8 segundos)."}}}}}}