@lionchat/mcp-server 1.34.1 → 1.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/endpoints.json CHANGED
@@ -1205,7 +1205,7 @@
1205
1205
  "type": "string",
1206
1206
  "location": "query",
1207
1207
  "required": false,
1208
- "description": "Busca rapida na lista (min 3 caracteres): casa nome, e-mail, telefone ou identifier do contato; se for so digitos, casa tambem o numero da conversa (display_id). Respeita o filtro de status. Para busca ampla (CPF, atributo, conteudo de mensagem) use conversations_search."
1208
+ "description": "Busca rapida na lista (min 3 caracteres): casa nome, e-mail, telefone ou identifier do contato; se for so digitos, casa tambem o numero da conversa (display_id). Respeita o filtro de status. Para CPF/CNPJ e atributo use lionchat_search_list; para texto de mensagem, lionchat_conversations_search."
1209
1209
  },
1210
1210
  {
1211
1211
  "name": "source_id",
@@ -1219,7 +1219,7 @@
1219
1219
  "type": "integer",
1220
1220
  "location": "query",
1221
1221
  "required": false,
1222
- "description": "So conversas atualizadas nos ultimos N segundos (ex.: 3600 = ultima hora). Util para polling de atividade recente."
1222
+ "description": "So conversas atualizadas nos ultimos N segundos (ex.: 3600 = ultima hora). Util para polling de atividade recente. TETOS (desde 09/11/2026): no maximo 3 horas (10800 s; pedido maior e cortado para 3 h) e no maximo as 1.000 conversas atualizadas mais recentemente. A resposta traz meta.updated_within_applied (segundos de fato usados) e meta.truncated (true = havia mais de 1.000 e as mais antigas ficaram fora). Com updated_within NAO ha paginacao: page 2 em diante volta vazia. Precisa de mais? Faca janelas menores (ex.: de hora em hora) ou use a lista paginada sem updated_within."
1223
1223
  }
1224
1224
  ],
1225
1225
  "returns": "Objeto com envelope DUPLO: { data: { meta: {...}, payload: [conversas] } }. A lista fica em data.payload (NAO em payload direto). O meta traz exatamente: mine_count, assigned_count, unassigned_count, all_count, groups_count. Cada conversa vem com um array extra `kanban_items` (cards do Kanban visiveis pro usuario). Paginacao real: 25/pagina.",
@@ -1239,7 +1239,7 @@
1239
1239
  "method": "POST",
1240
1240
  "path": "/api/v1/accounts/{account_id}/conversations",
1241
1241
  "title": "Criar Conversa",
1242
- "description": "Cria uma nova conversa. Obrigatorios: inbox_id, contact_id. Cria ContactInbox automaticamente; para inbox WAHA valida se o numero tem WhatsApp (422 phone_not_on_whatsapp). RESERVADO (02/09/2026): additional_attributes recusa as chaves do sistema (imported_from, live_since, has_imported_history, mail_subject, type, in_reply_to, initiated_by, auto_reply, original_channel_type, conversation_language, agent_reply_time_window, conference_sid, call_status, tiktok_capabilities, captain_media_asset_id, import_digits) — sao ignoradas. A mensagem que chega ADOTA a conversa existente (uma por contato/caixa) e NAO dispara 'conversa criada'; o gatilho equivalente e 'Conversa reaberta'. Use last_incoming_message_at da conversa para saber se a janela de 24h esta aberta.",
1242
+ "description": "Cria uma nova conversa. Obrigatorios: inbox_id, contact_id. Cria ContactInbox automaticamente; para inbox WAHA valida se o numero tem WhatsApp (422 phone_not_on_whatsapp). RESERVADO (02/09/2026): additional_attributes recusa as chaves do sistema (imported_from, live_since, has_imported_history, mail_subject, type, in_reply_to, initiated_by, auto_reply, original_channel_type, conversation_language, agent_reply_time_window, conference_sid, call_status, tiktok_capabilities, captain_media_asset_id, import_digits) — sao ignoradas. A mensagem que chega ADOTA a conversa existente (uma por contato/caixa) e NAO dispara 'conversa criada'; o gatilho equivalente e 'Conversa reaberta'. Use last_incoming_message_at da conversa para saber se a janela de 24h esta aberta. assignee_id e team_id têm de ser da conta: fora disso responde 422 e não cria.",
1243
1243
  "category": "Conversas",
1244
1244
  "params": [
1245
1245
  {
@@ -1513,7 +1513,7 @@
1513
1513
  "method": "GET",
1514
1514
  "path": "/api/v1/accounts/{account_id}/conversations/search",
1515
1515
  "title": "Buscar Conversas",
1516
- "description": "LENTO — EVITE. Busca conversas por texto (no conteúdo das mensagens). Diferente de filter — pesquisa free-text.\n\nCUSTO MEDIDO EM PRODUCAO (11/08/2026): 15 a 22 SEGUNDOS por chamada. E o endpoint legado: alem da varredura, ele devolve todas as mensagens que casaram, e so a montagem da resposta consome ate 8 s. As rotas /search/* fazem o mesmo trabalho com indice proprio e teto de tempo.\n\nPREFIRA: para achar a conversa DE UMA PESSOA/EMPRESA (nome, telefone, e-mail, CPF/CNPJ, numero da conversa) use lionchat_search_list. Para achar ONDE FOI DITO algo dentro da conversa use lionchat_search_list_2. Para as duas coisas de uma vez, sem ter que adivinhar, use lionchat_search_search.\n\nPISO DE 3 CARACTERES (desde 11/08/2026): termo com menos de 3 caracteres — INCLUSIVE so-digitos — e recusado e a resposta vem VAZIA sem nenhum aviso. Vazio NAO quer dizer que a conversa nao existe, quer dizer que a busca nem rodou; refaca com 3+ caracteres. (Aqui digito NAO e isento, diferente de /search/messages, porque este caminho nao tem teto de tempo.)\n\nNOVO (2026-06): 'q' aceita multiplos termos (espacos = E/AND, cap 5; cada termo precisa bater) e dados cadastrais (CPF/CNPJ/RG por digitos, ignora pontuacao).",
1516
+ "description": "Busca por TEXTO dentro das mensagens: responde EM QUAIS CONVERSAS algo foi dito e QUANTAS, no historico inteiro. Refeita em 05/11/2026: antes levava 15 a 22 s e chegou a derrubar o servidor; resposta anterior que mandava EVITAR esta ferramenta ficou velha.\n\nO QUE PROCURA: o TRECHO EXATO digitado em `q`, com os espacos (frase, nao palavras soltas), sem diferenca de maiuscula e minuscula (acento conta), nas mensagens do cliente e da equipe. Nota privada e evento do sistema ficam fora. NAO procura no nome, telefone, e-mail ou CPF do contato: para achar a conversa DE UMA PESSOA use lionchat_search_list. Termo com menos de 3 caracteres, ou sem nenhuma letra ou numero, volta VAZIO de proposito (a busca nem rodou).\n\nRESPOSTA: 25 conversas por pagina, as de atividade mais recente primeiro. `meta.all_count` conta CONVERSAS (nao vezes) e ja responde 'quantas' na 1a pagina: peca outras paginas so para ler mais conversas. Cada conversa traz `matched_messages_count` (quantas mensagens casam nela) e `messages` com ate 5 delas, as mais novas, em ordem de data; para ler o resto use lionchat_conversations_messages_search naquela conversa.\n\nAVISOS: `meta.truncated: true` = passou de 5.000 conversas, o numero e 'pelo menos'; refine o termo. `meta.message_search_interrupted: true` = estourou o tempo: payload vazio NAO quer dizer que nao existe e os numeros vem null; refine o termo. Resposta cortada por tamanho: as conversas cortadas NAO voltam na pagina seguinte; refine o termo.\n\nRespeita o que o usuario pode ver (caixas, cargo). Recorte opcional: `inbox_id` e `team_id` recortam a lista e os numeros; `assignee_type` recorta so a lista. A situacao (aberta/resolvida) e IGNORADA aqui: a busca cobre todas. Com `meta.truncated: true` o recorte so alcanca as primeiras 5.000 conversas que casam.",
1517
1517
  "category": "Conversas",
1518
1518
  "params": [
1519
1519
  {
@@ -1521,44 +1521,48 @@
1521
1521
  "type": "string",
1522
1522
  "location": "query",
1523
1523
  "required": true,
1524
- "description": "Termo de busca"
1524
+ "description": "Trecho exato a procurar no texto das mensagens (minimo 3 caracteres, com ao menos uma letra ou numero)"
1525
1525
  },
1526
1526
  {
1527
1527
  "name": "page",
1528
1528
  "type": "integer",
1529
1529
  "location": "query",
1530
1530
  "required": false,
1531
- "description": "Página"
1531
+ "description": "Pagina (25 conversas por pagina)"
1532
1532
  },
1533
1533
  {
1534
- "name": "conversation_filters",
1535
- "type": "string",
1534
+ "name": "inbox_id",
1535
+ "type": "integer",
1536
1536
  "location": "query",
1537
1537
  "required": false,
1538
- "description": "Filtros estruturados aplicados aos resultados de CONVERSAS. JSON-string de condicoes no formato do endpoint /filter correspondente (ex: [{\"attribute_key\":\"status\",\"filter_operator\":\"equal_to\",\"values\":[\"open\"]}]). Cap 10 condicoes; payload invalido = 422 assignee_id aceita 'current_user' (quem pergunta)."
1538
+ "description": "So conversas desta caixa (recorta lista e numeros)"
1539
1539
  },
1540
1540
  {
1541
- "name": "contact_filters",
1542
- "type": "string",
1541
+ "name": "team_id",
1542
+ "type": "integer",
1543
1543
  "location": "query",
1544
1544
  "required": false,
1545
- "description": "Filtros estruturados aplicados aos resultados de CONTATOS. JSON-string de condicoes no formato do endpoint /filter correspondente (ex: [{\"attribute_key\":\"status\",\"filter_operator\":\"equal_to\",\"values\":[\"open\"]}]). Cap 10 condicoes; payload invalido = 422"
1545
+ "description": "So conversas deste time (recorta lista e numeros)"
1546
1546
  },
1547
1547
  {
1548
- "name": "kanban_filters",
1548
+ "name": "assignee_type",
1549
1549
  "type": "string",
1550
1550
  "location": "query",
1551
1551
  "required": false,
1552
- "description": "Filtros estruturados aplicados aos resultados de CARDS. JSON-string de condicoes no formato do endpoint /filter correspondente (ex: [{\"attribute_key\":\"status\",\"filter_operator\":\"equal_to\",\"values\":[\"open\"]}]). Cap 10 condicoes; payload invalido = 422"
1552
+ "description": "Recorta SO a lista: 'me' (minhas), 'unassigned' (sem responsavel), 'assigned' (com responsavel). Vazio = todas. Os numeros de meta continuam do conjunto inteiro"
1553
1553
  }
1554
1554
  ],
1555
- "returns": "Array de conversas que contêm o texto buscado",
1555
+ "returns": "{ meta: { mine_count, unassigned_count, all_count (CONVERSAS que casam), truncated, message_search_interrupted, current_page, per }, payload: [{ id (numero da conversa), uuid, created_at, contact: {id, name}, inbox: {id, name, channel_type}, matched_messages_count, messages: [ate 5: {id, content, sender_name, message_type, created_at}], account_id }] }. No corte de tempo: payload vazio e os tres numeros null.",
1556
1556
  "common_use_cases": [
1557
- "Pergunta \"qual conversa tinha sobre orçamento Y?\"",
1558
- "Auditoria de palavras-chave",
1559
- "Localizar conversas perdidas"
1557
+ "Em quantas conversas o cliente falou \"cancelar\"?",
1558
+ "Quais conversas citaram o produto ou a promocao X (historico inteiro)",
1559
+ "Auditoria de palavra-chave com o numero real de conversas"
1560
1560
  ],
1561
- "related_tools": []
1561
+ "related_tools": [
1562
+ "lionchat_search_list",
1563
+ "lionchat_search_list_2",
1564
+ "lionchat_conversations_messages_search"
1565
+ ]
1562
1566
  },
1563
1567
  {
1564
1568
  "id": "lionchat_conversations_create_1",
@@ -2325,7 +2329,7 @@
2325
2329
  "method": "POST",
2326
2330
  "path": "/api/v1/accounts/{account_id}/conversations/{conversation_id}/messages/{id}/retry",
2327
2331
  "title": "Reenviar Mensagem",
2328
- "description": "[POST] Reenvia uma mensagem que falhou. Obrigatorios: conversation_id, id. [2026-07-24] Motor unico de reenvio: limpeza cirurgica de content_attributes (preserva vinculos de flow/automacao/comentario IG) + trava anti-duplicata por mensagem. Pra reenviar TODAS as falhadas de uma caixa de uma vez, use lionchat_inboxes_failed_messages_bulk_retry. [2026-07-25] Mensagem cancelada ou excluida NAO reenvia — a chamada responde 422 com o motivo. Pra cancelar de vez o reenvio, use lionchat_conversations_messages_cancel_retry.",
2332
+ "description": "[POST] Reenvia uma mensagem que falhou. Obrigatorios: conversation_id, id. [2026-07-24] Motor unico de reenvio: limpeza cirurgica de content_attributes (preserva vinculos de flow/automacao/comentario IG) + trava anti-duplicata por mensagem. Pra reenviar TODAS as falhadas de uma caixa de uma vez, use lionchat_inboxes_failed_messages_bulk_retry. [2026-07-25] Mensagem cancelada ou excluida NAO reenvia — a chamada responde 422 com o motivo. Pra cancelar de vez o reenvio, use lionchat_conversations_messages_cancel_retry. [2026-11-09] Mensagem que JA saiu pela conexao hibrida da caixa oficial (inteira, ou so parte dos anexos) NAO reenvia: responde 422 dizendo que reenviar duplicaria — oriente o usuario a mandar uma mensagem nova. Mensagem pedida pela hibrida que saiu pela API oficial e foi recusada depois continua reenviavel.",
2329
2333
  "category": "Mensagens",
2330
2334
  "params": [
2331
2335
  {
@@ -2483,7 +2487,7 @@
2483
2487
  "description": "FUNIL = KANBAN (pipeline/board) — no LionChat sao a mesma coisa. Lista todos os funis com contagem de itens por etapa (stage_items_count, contada na hora em todo pedido desde 2026-10-23; os dados dos funis ficam lembrados 5 min). NAO e paginado. ACESSO (2026-06): retorna SO os funis visiveis pro usuario do token (admin, permissao kanban, funil aberto ou participante). Funil nao-visivel da 404 no show.",
2484
2488
  "category": "Funis",
2485
2489
  "params": [],
2486
- "returns": "array de funis (cada um com stage_items_count); sem meta/paginacao Inclui resolved_agents: [{id, name, avatar_url, via: 'agent'|'team'}] — quem efetivamente participa do funil (2026-07-21).",
2490
+ "returns": "array de funis (cada um com stage_items_count); sem meta/paginacao Inclui resolved_agents: [{id, name, avatar_url, via: 'agent'|'team'}] — quem efetivamente participa do funil, só gente da conta (2026-07-21).",
2487
2491
  "common_use_cases": [
2488
2492
  "Dashboard: contar/exibir funis",
2489
2493
  "Buscar com filtros antes de outra operação",
@@ -2574,7 +2578,7 @@
2574
2578
  "description": "ID do funil"
2575
2579
  }
2576
2580
  ],
2577
- "returns": "funil (objeto completo com associações) Inclui resolved_agents: [{id, name, avatar_url, via: 'agent'|'team'}] — quem efetivamente participa do funil (2026-07-21).",
2581
+ "returns": "funil (objeto completo com associações) Inclui resolved_agents: [{id, name, avatar_url, via: 'agent'|'team'}] — quem efetivamente participa do funil, só gente da conta (2026-07-21).",
2578
2582
  "common_use_cases": [
2579
2583
  "Ver dados completos antes de editar",
2580
2584
  "Verificar estado atual antes de uma ação",
@@ -2766,7 +2770,7 @@
2766
2770
  "description": "Objeto de configuracoes do funil. Chaves: goals[], agents[] e automations[] (automacoes do funil). agents[] = [{id: <id do agente>}] — cada item e um OBJETO com id, nunca numero solto; use lionchat_agents_list para os IDs; o sistema completa sozinho nome, e-mail, cargo e foto de cada agente (e o que as telas mostram). Mande so agentes DESTA conta: id de outra conta fica sem nome e nao da acesso. Cada automacao: {id (formato 'automation_<timestamp_ms>'), enabled: true, trigger_type: 'card_created'|'stage_moved'|'status_change', trigger_value SEMPRE preenchido ('card_created' literal p/ card_created; chave da etapa de destino no hash funnel.stages p/ stage_moved; 'won'|'lost'|'snoozed' p/ status_change ('snoozed' desde 11/10/2026: roda quando o card e ADIADO)), action: 'move_to_stage'|'assign_agent'|'create_note'|'update_checklist'|'apply_checklist_template'|'notify_team'|'duplicate_item'|'send_webhook', action_config: {} (move_to_stage->{stage}; assign_agent->{agent_id}; create_note->{note_text}; update_checklist->{checklist_updates:[{checklist_item_id,completed,text}]}; apply_checklist_template->{template_id}; notify_team->{message}; send_webhook->{webhook_url}; duplicate_item->{funnel_id,stage})}. Regras: trigger_value vazio faz a UI descartar a automacao no proximo salvar do usuario (enabled=false e estado valido desde 20/10: a regra fica guardada, desligada); stage_moved + move_to_stage nunca executa (anti-loop); notify_team hoje so registra em log (nao notifica ninguem); update_checklist nao aparece na UI (so via API). ATENCAO: gravar settings SUBSTITUI o objeto inteiro — leia o funil (show) e reenvie settings completo (goals+agents+automations). NOVO (2026-07-21): settings.teams[] = [{id: <team_id>}] — vincula TIMES ao funil: membros do time ganham acesso e entram no rodízio, resolvidos AO VIVO (mudou o time, mudou o funil). Lista efetiva = agents[] + membros dos teams[]; vazia = funil aberto a todos. IMPORTANTE: settings é substituído por inteiro — reenvie completo (goals+agents+teams+automations). Regra com action 'create_task' (cria uma tarefa presa ao card quando o gatilho acontece): action_config = {title (texto, obrigatorio), description, task_type, agenda_id, priority, occupies_agenda (true|false), duration_minutes (22/10/2026: minutos que a tarefa ocupa, inteiro de 1 a 1440; ausente ou null = o tempo do TIPO: Tarefa/Follow-up/Prazo 15, Ligacao/Personalizado 30, Reuniao/Call 60, tipo da conta 30), due: {amount, unit: 'hours'|'days', at: 'HH:MM' (so em dias), business_days: true (so em dias)}, responsible: {mode: 'card_owner'|'fixed'|'funnel_rotation'|'team_rotation', fallback_user_id (card_owner), user_id (fixed), team_id (team_rotation)}}. Cada regra create_task NOVA ou alterada e conferida uma a uma: regra torta recebe 422 que diz a posicao da regra e o campo a consertar; as demais regras do funil nao sao afetadas. `settings.removed_stages` (a lista das etapas ja excluidas) e do SERVIDOR: se voce mandar essa chave dentro de funnel.settings ela e IGNORADA (nao da erro), e o servidor a mantem sozinho. Para excluir uma etapa que tem cards, NAO reenvie o funil sem a etapa nem use migrate_stage: use lionchat_funnels_remove_stage. ORDEM E ACOES MORTAS (22/10/2026): a ordem de automations[] e a ordem de execucao — regras do mesmo acontecimento (ex.: duas em status_change 'won') rodam de cima para baixo; para reordenar, reenvie a lista inteira na ordem nova (a configuracao de cada regra nao muda). NAO grave assign_agent com status_change 'won'/'lost' (a regra roda com o card ja fechado e card fechado nao aceita responsavel: nao faz nada) nem notify_team (so escreve log, nao avisa ninguem). O servidor aceita os dois, mas a regra fica morta e o painel mostra um aviso amarelo nela. "
2767
2771
  }
2768
2772
  ],
2769
- "returns": "funil atualizado Inclui resolved_agents: [{id, name, avatar_url, via: 'agent'|'team'}] — quem efetivamente participa do funil (2026-07-21).",
2773
+ "returns": "funil atualizado Inclui resolved_agents: [{id, name, avatar_url, via: 'agent'|'team'}] — quem efetivamente participa do funil, só gente da conta (2026-07-21).",
2770
2774
  "common_use_cases": [
2771
2775
  "Edição parcial de funil",
2772
2776
  "Alteração de status/estado",
@@ -3256,7 +3260,7 @@
3256
3260
  "method": "POST",
3257
3261
  "path": "/api/v1/accounts/{account_id}/kanban_items",
3258
3262
  "title": "Criar Item",
3259
- "description": "Cria um novo item no kanban com suporte a detalhes, agentes, ofertas e automações. Cria novo item Kanban. Obrigatórios: kanban_item.funnel_id, kanban_item.funnel_stage, kanban_item.position, kanban_item.item_details.title. Valida unicidade quando aplicável. Retorna o item Kanban criado com ID atribuído.",
3263
+ "description": "Cria um novo item no kanban com suporte a detalhes, agentes, ofertas e automações. Cria novo item Kanban. Obrigatórios: kanban_item.funnel_id, kanban_item.funnel_stage, kanban_item.position, kanban_item.item_details.title. Valida unicidade quando aplicável. Retorna o item Kanban criado com ID atribuído. funnel_id tem de ser da conta: fora disso responde 422.",
3260
3264
  "category": "Itens",
3261
3265
  "params": [
3262
3266
  {
@@ -3369,7 +3373,7 @@
3369
3373
  "type": "object",
3370
3374
  "location": "body",
3371
3375
  "required": false,
3372
- "description": "Coluna propria do card, objeto {chave: valor}. NAO aparece na aba Campos, no filtro do quadro nem na busca — para campo visivel use kanban_item.item_details.custom_attributes (LISTA [{name, type, value}], ver lionchat_kanban_items_update). Enviada, SUBSTITUI o objeto inteiro."
3376
+ "description": "Campos de Atributos do Card, objeto {nome do campo: valor}. Grava so os campos enviados; os outros ficam. Campo que nao existe e criado como Texto, para a conta inteira: confira o nome com lionchat_kanban_config_list antes. null ou vazio apaga aquele campo. Texto ou lista aqui recusa o pedido inteiro (422)."
3373
3377
  },
3374
3378
  {
3375
3379
  "name": "kanban_item.timer_started_at",
@@ -3431,7 +3435,7 @@
3431
3435
  "method": "PUT",
3432
3436
  "path": "/api/v1/accounts/{account_id}/kanban_items/{id}",
3433
3437
  "title": "Atualizar Item",
3434
- "description": "Atualiza item (detalhes, agentes, timer, ofertas, automações). Atualiza campos do item Kanban existente. Suporta atualização parcial (PATCH) — só campos enviados são alterados. Campos suportados: kanban_item.funnel_stage, kanban_item.position, kanban_item.item_details, kanban_item.assigned_agents, kanban_item.custom_attributes, kanban_item.timer_started_at. CARD ADIADO (11/10/2026): item_details.status \"open\" NAO abre um card adiado (e o mesmo salvar que o aplicativo faz o tempo todo); para abrir use lionchat_kanban_items_unsnooze ou lionchat_kanban_items_create_2. Mandar \"won\"/\"lost\" encerra o adiamento. CO-PARTICIPANTE (13/10/2026): num card GANHO, item_details.co_attributed_to = id do co-participante da venda (ex. o SDR); null tira. Fora de ganho a chave e apagada. Mande so o id — co_attributed_name o card preenche.",
3438
+ "description": "Atualiza item (detalhes, agentes, timer, ofertas, automações). Atualiza campos do item Kanban existente. Suporta atualização parcial (PATCH) — só campos enviados são alterados. Campos suportados: kanban_item.funnel_stage, kanban_item.position, kanban_item.item_details, kanban_item.assigned_agents, kanban_item.custom_attributes, kanban_item.timer_started_at. CARD ADIADO (11/10/2026): item_details.status \"open\" NAO abre um card adiado (e o mesmo salvar que o aplicativo faz o tempo todo); para abrir use lionchat_kanban_items_unsnooze ou lionchat_kanban_items_create_2. Mandar \"won\"/\"lost\" encerra o adiamento. CO-PARTICIPANTE (13/10/2026): num card GANHO, item_details.co_attributed_to = id do co-participante da venda (ex. o SDR); null tira. Fora de ganho a chave e apagada. Mande so o id — co_attributed_name o card preenche. funnel_id tem de ser da conta: fora disso responde 422.",
3435
3439
  "category": "Itens",
3436
3440
  "params": [
3437
3441
  {
@@ -3460,7 +3464,7 @@
3460
3464
  "type": "object",
3461
3465
  "location": "body",
3462
3466
  "required": false,
3463
- "description": "Objeto com os detalhes do card. MESCLA SO NO 1o NIVEL: cada chave enviada troca a chave inteira no card; as nao enviadas ficam. Lista FECHADA (outras chaves sao descartadas em silencio): title, description, status, reason, win_reason, loss_reason, attributed_to, co_attributed_to (co-participante da venda, so em card ganho; id de agente; null tira), duplicated_from_id, priority, value (NUMERO; texto de numero como \"1500.5\" e convertido, \"R$ 1.500,00\" e recusado com 422), currency, custom_attributes, offers, closed_offers, closed_offer, deadline_at, scheduling_type, scheduled_at, conversation_id, automations, notes, retroativo_em. custom_attributes = campos da aba Campos do card: LISTA [{name, type, value}] onde name+type batem EXATAMENTE com a definicao da CONTA (lionchat_kanban_config_list -> global_custom_attributes). Ex.: [{\"name\": \"Origem do Lead\", \"type\": \"string\", \"value\": \"Google\"}]. A lista e TROCADA inteira: leia o card com lionchat_kanban_items_show e reenvie TODOS os campos. Objeto {chave: valor} no lugar da lista APAGA todos os campos do card. notes e offers tambem sao listas trocadas inteiras. Motivo de ganho/perda: status \"won\"/\"lost\" + win_reason/loss_reason = o id (TEXTO) de um motivo de kanban_config.win_reasons/loss_reasons + reason = o titulo dele. Motivo livre (fora da lista): win_reason/loss_reason nulo e o texto em reason. Ex.: {\"status\": \"lost\", \"loss_reason\": \"perda-preco\", \"reason\": \"Preco alto\"}. Lancamento retroativo (marcar o fechamento com data PASSADA): retroativo_em = \"AAAA-MM-DD\" faz o ganho/perda contar no MES ESCOLHIDO em todos os relatorios, em vez do dia de hoje. So funciona JUNTO com um status \"won\"/\"lost\" que MUDA o status do card — card que ja esta ganho ignora a data (pra corrigir uma data lancada errado: mande status \"open\", que apaga o carimbo, e depois \"won\"/\"lost\" com o retroativo_em certo). A chave NAO fica gravada no card: ela so decide o carimbo item_details.status_changed_at, que e o que os relatorios contam. Data FUTURA ou ilegivel = 422. Data anterior a criacao do card e permitida. Vale SO nesta ferramenta — no criar card a chave e descartada. Ex.: {\"status\": \"won\", \"win_reason\": \"indicacao\", \"retroativo_em\": \"2026-08-05\"}."
3467
+ "description": "Objeto com os detalhes do card. MESCLA SO NO 1o NIVEL: cada chave enviada troca a chave inteira no card; as nao enviadas ficam. Lista FECHADA (outras chaves sao descartadas em silencio): title, description, status, reason, win_reason, loss_reason, attributed_to, co_attributed_to (co-participante da venda, so em card ganho; id de agente; null tira), duplicated_from_id, priority, value (NUMERO; texto de numero como \"1500.5\" e convertido, \"R$ 1.500,00\" e recusado com 422), currency, custom_attributes, offers, closed_offers, closed_offer, deadline_at, scheduling_type, scheduled_at, conversation_id, automations, notes, retroativo_em. custom_attributes = campos de Atributos do Card: LISTA [{name, type, value}]. Ex.: [{\"name\": \"Origem do Lead\", \"type\": \"string\", \"value\": \"Google\"}]. A lista e TROCADA inteira: leia o card com lionchat_kanban_items_show e reenvie TODOS os campos; para mudar so alguns, use kanban_item.custom_attributes. Objeto {chave: valor} aqui e IGNORADO: nao grava nem apaga. Item que nao seja objeto recusa o pedido inteiro (422). notes e offers tambem sao listas trocadas inteiras. Motivo de ganho/perda: status \"won\"/\"lost\" + win_reason/loss_reason = o id (TEXTO) de um motivo de kanban_config.win_reasons/loss_reasons + reason = o titulo dele. Motivo livre (fora da lista): win_reason/loss_reason nulo e o texto em reason. Ex.: {\"status\": \"lost\", \"loss_reason\": \"perda-preco\", \"reason\": \"Preco alto\"}. Lancamento retroativo (marcar o fechamento com data PASSADA): retroativo_em = \"AAAA-MM-DD\" faz o ganho/perda contar no MES ESCOLHIDO em todos os relatorios, em vez do dia de hoje. So funciona JUNTO com um status \"won\"/\"lost\" que MUDA o status do card — card que ja esta ganho ignora a data (pra corrigir uma data lancada errado: mande status \"open\", que apaga o carimbo, e depois \"won\"/\"lost\" com o retroativo_em certo). A chave NAO fica gravada no card: ela so decide o carimbo item_details.status_changed_at, que e o que os relatorios contam. Data FUTURA ou ilegivel = 422. Data anterior a criacao do card e permitida. Vale SO nesta ferramenta — no criar card a chave e descartada. Ex.: {\"status\": \"won\", \"win_reason\": \"indicacao\", \"retroativo_em\": \"2026-08-05\"}."
3464
3468
  },
3465
3469
  {
3466
3470
  "name": "kanban_item.assigned_agents",
@@ -3474,7 +3478,7 @@
3474
3478
  "type": "object",
3475
3479
  "location": "body",
3476
3480
  "required": false,
3477
- "description": "Coluna propria do card, objeto {chave: valor}. NAO aparece na aba Campos, no filtro do quadro nem na busca — para campo visivel use kanban_item.item_details.custom_attributes (LISTA [{name, type, value}], ver lionchat_kanban_items_update). Enviada, SUBSTITUI o objeto inteiro."
3481
+ "description": "Campos de Atributos do Card, objeto {nome do campo: valor}. Grava so os campos enviados; os outros ficam. Campo que nao existe e criado como Texto, para a conta inteira: confira o nome com lionchat_kanban_config_list antes. null ou vazio apaga aquele campo. Texto ou lista aqui recusa o pedido inteiro (422)."
3478
3482
  },
3479
3483
  {
3480
3484
  "name": "kanban_item.timer_started_at",
@@ -3614,7 +3618,7 @@
3614
3618
  "method": "POST",
3615
3619
  "path": "/api/v1/accounts/{account_id}/kanban_items/{id}/move",
3616
3620
  "title": "Mover entre Funis",
3617
- "description": "Move o card entre funis/etapas. Obrigatorios: id, funnel_id, funnel_stage. PERMISSAO (2026-06): mover sem acesso ao funil retorna 403 — confira o campo can_move no show do card antes.",
3621
+ "description": "Move o card entre funis/etapas. Obrigatorios: id, funnel_id, funnel_stage. PERMISSAO (2026-06): mover sem acesso ao funil retorna 403 — confira o campo can_move no show do card antes. replace_agent_id só aceita usuário desta conta: de fora recusa com 422, sem mover.",
3618
3622
  "category": "Itens",
3619
3623
  "params": [
3620
3624
  {
@@ -5277,7 +5281,7 @@
5277
5281
  "method": "POST",
5278
5282
  "path": "/api/v1/accounts/{account_id}/conversations/{conversation_id}/window_reactivation",
5279
5283
  "title": "Ativar Janela de Conversa",
5280
- "description": "Ativa a janela de reativacao (WhatsApp) da conversa.",
5284
+ "description": "Ativa a janela de reativacao (WhatsApp) da conversa. canned_response_id tem de ser da conta: fora disso responde 404.",
5281
5285
  "category": "Conversas",
5282
5286
  "params": [
5283
5287
  {
@@ -8386,7 +8390,7 @@
8386
8390
  "method": "POST",
8387
8391
  "path": "/api/v1/accounts/{account_id}/macros",
8388
8392
  "title": "Criar Macro",
8389
- "description": "Cria uma nova macro com ações. Obrigatórios: name, actions (visibility: personal ou global). As actions DEVEM ser um array de objetos {action_name, action_params} — item malformado (ex.: texto solto) retorna 422. CARDÁPIO (11/10/2026, 42 ações — os action_params seguem os MESMOS formatos das automações, ver conversation-flows.md 'Acoes de automacao'): send_message, add_private_note, send_canned_response ([id] — na MACRO a mensagem sai assinada pelo EXECUTOR; na automação sai como robô), send_attachment, send_email_transcript, send_email_to_team, send_webhook_event, add_label/remove_label (etiqueta da CONVERSA), add_contact_label/remove_contact_label ([titulos] — etiqueta do CONTATO), assign_agent, assign_team, remove_assigned_team, distribute_agents ([agent_ids] — rodízio de verdade, nunca sorteio), change_status, change_priority, open_conversation/pending_conversation/resolve_conversation, snooze_conversation ([] = até a próxima resposta, ou ['until_tomorrow'] etc.), mute_conversation, mark_unread ([]), add_sla ([sla_policy_id]), assign_captain_assistant ([id] ou [{assistant_id, proactive}]), deactivate_captain ([]), send_signature_document, update_contact_attribute/update_conversation_attribute ([{attribute_key, value}] — chave PROTEGIDA é recusada na execução e fica só no log: prefixos waha_whatsapp_/whatsapp_/origin_/ctwa_/meta_lead_/lt_ e atributos de sistema como utm_*/gclid), update_card_attribute ([{funnel_id, attribute_key, value}]), add_card_checklist ([{funnel_id, checklist_template_ids}]), add_card_offer ([{funnel_id, offer_ids}]), e as 8 de Kanban: create_kanban_item, move_kanban_item_to_stage, assign_agent_to_kanban_item, add_note_to_kanban_item, start_kanban_item_timer, stop_kanban_item_timer, set_kanban_item_status, snooze_kanban_item (todas exigem card já existente no funil informado, exceto create). snooze_kanban_item ([{funnel_id, amount, unit: \"hours\"|\"days\"}], desde 11/10/2026) ADIA o card e, ao contrário das irmãs, FALHA visível quando não dá para adiar (card fechado, sem card no funil, tempo inválido); set_kanban_item_status [\"open\"] num card adiado ABRE o card. send_conversion ([{destinations, event_names, value}] — Meta CAPI/GA4/Google Ads com trigger_type 'macro') só pode ser SALVO por administrador ou cargo com marketing_integrations_manage: para os demais, 422 com o motivo; EXECUTAR segue liberado; teto de 50 conversões por execução (o excedente é pulado com log e as outras ações rodam). Fora do cardápio: send_whatsapp_template. start_flow ([flow_id] — dispara um FLOW DE ACOES (flow_type 'action') na conversa; 17/09/2026). SO flow de acoes entra aqui: a macro roda em qualquer conversa e nao filtra caixa, entao um flow de MENSAGEM apontado aqui rodaria numa caixa que nao e dele. Flow inexistente, desligado ou de outro tipo e ignorado em silencio.",
8393
+ "description": "Cria uma nova macro com ações. Obrigatórios: name, actions (visibility: personal ou global). As actions DEVEM ser um array de objetos {action_name, action_params} — item malformado (ex.: texto solto) retorna 422. CARDÁPIO (11/10/2026, 42 ações — os action_params seguem os MESMOS formatos das automações, ver conversation-flows.md 'Acoes de automacao'): send_message, add_private_note, send_canned_response ([id] — na MACRO a mensagem sai assinada pelo EXECUTOR; na automação sai como robô), send_attachment, send_email_transcript, send_email_to_team, send_webhook_event, add_label/remove_label (etiqueta da CONVERSA), add_contact_label/remove_contact_label ([titulos] — etiqueta do CONTATO), assign_agent, assign_team, remove_assigned_team, distribute_agents ([agent_ids] — rodízio de verdade, nunca sorteio), change_status, change_priority, open_conversation/pending_conversation/resolve_conversation, snooze_conversation ([] = até a próxima resposta, ou ['until_tomorrow'] etc.), mute_conversation, mark_unread ([]), add_sla ([sla_policy_id]), assign_captain_assistant ([id] ou [{assistant_id, proactive}]), deactivate_captain ([]), send_signature_document, update_contact_attribute/update_conversation_attribute ([{attribute_key, value}] — chave PROTEGIDA é recusada na execução e fica só no log: prefixos waha_whatsapp_/whatsapp_/origin_/ctwa_/meta_lead_/lt_ e atributos de sistema como utm_*/gclid), update_card_attribute ([{funnel_id, attribute_key, value}]), add_card_checklist ([{funnel_id, checklist_template_ids}]), add_card_offer ([{funnel_id, offer_ids}]), e as 8 de Kanban: create_kanban_item, move_kanban_item_to_stage, assign_agent_to_kanban_item, add_note_to_kanban_item, start_kanban_item_timer, stop_kanban_item_timer, set_kanban_item_status, snooze_kanban_item (todas exigem card já existente no funil informado, exceto create). snooze_kanban_item ([{funnel_id, amount, unit: \"hours\"|\"days\"}], desde 11/10/2026) ADIA o card e, ao contrário das irmãs, FALHA visível quando não dá para adiar (card fechado, sem card no funil, tempo inválido); set_kanban_item_status [\"open\"] num card adiado ABRE o card. send_conversion ([{destinations, event_names, value}] — Meta CAPI/GA4/Google Ads com trigger_type 'macro') só pode ser SALVO por administrador ou cargo com marketing_integrations_manage: para os demais, 422 com o motivo; EXECUTAR segue liberado; teto de 50 conversões por execução (o excedente é pulado com log e as outras ações rodam). Fora do cardápio: send_whatsapp_template. start_flow ([flow_id] — dispara um FLOW DE ACOES (flow_type 'action') na conversa; 17/09/2026). SO flow de acoes entra aqui: a macro roda em qualquer conversa e nao filtra caixa, entao um flow de MENSAGEM apontado aqui rodaria numa caixa que nao e dele. Flow inexistente, desligado ou de outro tipo e ignorado em silencio. send_email_to_team só alcança times desta conta: time de outra conta na lista é ignorado.",
8390
8394
  "category": "Macros",
8391
8395
  "params": [
8392
8396
  {
@@ -8448,7 +8452,7 @@
8448
8452
  "method": "PATCH",
8449
8453
  "path": "/api/v1/accounts/{account_id}/macros/{id}",
8450
8454
  "title": "Atualizar Macro",
8451
- "description": "Atualiza macro. PATCH parcial: só campos enviados são alterados (name, actions, visibility). As actions DEVEM ser um array de objetos {action_name, action_params} — item malformado retorna 422. CARDÁPIO (11/10/2026, 42 ações — os action_params seguem os MESMOS formatos das automações, ver conversation-flows.md 'Acoes de automacao'): send_message, add_private_note, send_canned_response ([id] — na MACRO a mensagem sai assinada pelo EXECUTOR; na automação sai como robô), send_attachment, send_email_transcript, send_email_to_team, send_webhook_event, add_label/remove_label (etiqueta da CONVERSA), add_contact_label/remove_contact_label ([titulos] — etiqueta do CONTATO), assign_agent, assign_team, remove_assigned_team, distribute_agents ([agent_ids] — rodízio de verdade, nunca sorteio), change_status, change_priority, open_conversation/pending_conversation/resolve_conversation, snooze_conversation ([] = até a próxima resposta, ou ['until_tomorrow'] etc.), mute_conversation, mark_unread ([]), add_sla ([sla_policy_id]), assign_captain_assistant ([id] ou [{assistant_id, proactive}]), deactivate_captain ([]), send_signature_document, update_contact_attribute/update_conversation_attribute ([{attribute_key, value}] — chave PROTEGIDA é recusada na execução e fica só no log: prefixos waha_whatsapp_/whatsapp_/origin_/ctwa_/meta_lead_/lt_ e atributos de sistema como utm_*/gclid), update_card_attribute ([{funnel_id, attribute_key, value}]), add_card_checklist ([{funnel_id, checklist_template_ids}]), add_card_offer ([{funnel_id, offer_ids}]), e as 8 de Kanban: create_kanban_item, move_kanban_item_to_stage, assign_agent_to_kanban_item, add_note_to_kanban_item, start_kanban_item_timer, stop_kanban_item_timer, set_kanban_item_status, snooze_kanban_item (todas exigem card já existente no funil informado, exceto create). snooze_kanban_item ([{funnel_id, amount, unit: \"hours\"|\"days\"}], desde 11/10/2026) ADIA o card e, ao contrário das irmãs, FALHA visível quando não dá para adiar (card fechado, sem card no funil, tempo inválido); set_kanban_item_status [\"open\"] num card adiado ABRE o card. send_conversion ([{destinations, event_names, value}] — Meta CAPI/GA4/Google Ads com trigger_type 'macro') só pode ser SALVO por administrador ou cargo com marketing_integrations_manage: para os demais, 422 com o motivo; EXECUTAR segue liberado; teto de 50 conversões por execução (o excedente é pulado com log e as outras ações rodam). Fora do cardápio: send_whatsapp_template. start_flow ([flow_id] — dispara um FLOW DE ACOES (flow_type 'action') na conversa; 17/09/2026). SO flow de acoes entra aqui: a macro roda em qualquer conversa e nao filtra caixa, entao um flow de MENSAGEM apontado aqui rodaria numa caixa que nao e dele. Flow inexistente, desligado ou de outro tipo e ignorado em silencio.",
8455
+ "description": "Atualiza macro. PATCH parcial: só campos enviados são alterados (name, actions, visibility). As actions DEVEM ser um array de objetos {action_name, action_params} — item malformado retorna 422. CARDÁPIO (11/10/2026, 42 ações — os action_params seguem os MESMOS formatos das automações, ver conversation-flows.md 'Acoes de automacao'): send_message, add_private_note, send_canned_response ([id] — na MACRO a mensagem sai assinada pelo EXECUTOR; na automação sai como robô), send_attachment, send_email_transcript, send_email_to_team, send_webhook_event, add_label/remove_label (etiqueta da CONVERSA), add_contact_label/remove_contact_label ([titulos] — etiqueta do CONTATO), assign_agent, assign_team, remove_assigned_team, distribute_agents ([agent_ids] — rodízio de verdade, nunca sorteio), change_status, change_priority, open_conversation/pending_conversation/resolve_conversation, snooze_conversation ([] = até a próxima resposta, ou ['until_tomorrow'] etc.), mute_conversation, mark_unread ([]), add_sla ([sla_policy_id]), assign_captain_assistant ([id] ou [{assistant_id, proactive}]), deactivate_captain ([]), send_signature_document, update_contact_attribute/update_conversation_attribute ([{attribute_key, value}] — chave PROTEGIDA é recusada na execução e fica só no log: prefixos waha_whatsapp_/whatsapp_/origin_/ctwa_/meta_lead_/lt_ e atributos de sistema como utm_*/gclid), update_card_attribute ([{funnel_id, attribute_key, value}]), add_card_checklist ([{funnel_id, checklist_template_ids}]), add_card_offer ([{funnel_id, offer_ids}]), e as 8 de Kanban: create_kanban_item, move_kanban_item_to_stage, assign_agent_to_kanban_item, add_note_to_kanban_item, start_kanban_item_timer, stop_kanban_item_timer, set_kanban_item_status, snooze_kanban_item (todas exigem card já existente no funil informado, exceto create). snooze_kanban_item ([{funnel_id, amount, unit: \"hours\"|\"days\"}], desde 11/10/2026) ADIA o card e, ao contrário das irmãs, FALHA visível quando não dá para adiar (card fechado, sem card no funil, tempo inválido); set_kanban_item_status [\"open\"] num card adiado ABRE o card. send_conversion ([{destinations, event_names, value}] — Meta CAPI/GA4/Google Ads com trigger_type 'macro') só pode ser SALVO por administrador ou cargo com marketing_integrations_manage: para os demais, 422 com o motivo; EXECUTAR segue liberado; teto de 50 conversões por execução (o excedente é pulado com log e as outras ações rodam). Fora do cardápio: send_whatsapp_template. start_flow ([flow_id] — dispara um FLOW DE ACOES (flow_type 'action') na conversa; 17/09/2026). SO flow de acoes entra aqui: a macro roda em qualquer conversa e nao filtra caixa, entao um flow de MENSAGEM apontado aqui rodaria numa caixa que nao e dele. Flow inexistente, desligado ou de outro tipo e ignorado em silencio. send_email_to_team só alcança times desta conta: time de outra conta na lista é ignorado.",
8452
8456
  "category": "Macros",
8453
8457
  "params": [
8454
8458
  {
@@ -8517,7 +8521,7 @@
8517
8521
  "method": "POST",
8518
8522
  "path": "/api/v1/accounts/{account_id}/macros/{id}/execute",
8519
8523
  "title": "Executar Macro",
8520
- "description": "Executa uma macro em uma ou mais conversas (job assíncrono; responde 200 sem corpo). Obrigatório: conversation_ids (array). FREIOS (10/09/2026): (1) até 100 conversas por chamada — acima disso 422 'Too many conversations'; (2) a mesma macro na MESMA conversa dentro de 5 s é PULADA em silêncio (as demais conversas da lista seguem) — se todas forem puladas, 422 'executed just now'; lista vazia = 422; (3) 30 execuções por minuto por usuário — acima disso 429. Dentro da macro, send_conversion dispara no máximo 50 conversões por execução. Cada ação que falhar numa conversa fica no log do servidor e não interrompe as outras.",
8524
+ "description": "Executa uma macro em uma ou mais conversas (job assíncrono; responde 200 sem corpo). Obrigatório: conversation_ids (array). FREIOS (10/09/2026): (1) até 100 conversas por chamada — acima disso 422 'Too many conversations'; (2) a mesma macro na MESMA conversa dentro de 5 s é PULADA em silêncio (as demais conversas da lista seguem) — se todas forem puladas, 422 'executed just now'; lista vazia = 422; (3) 30 execuções por minuto por usuário — acima disso 429. Dentro da macro, send_conversion dispara no máximo 50 conversões por execução. Cada ação que falhar numa conversa fica no log do servidor e não interrompe as outras. Conversa que a pessoa dona da chave não consegue abrir é PULADA em silêncio (a resposta continua 200 e as demais seguem): a macro só age no que a pessoa alcança; ao relatar o resultado, não afirme que agiu em todas sem conferir. Macro que não existe, ou de outra conta, responde 404 sem enfileirar nada.",
8521
8525
  "category": "Macros",
8522
8526
  "params": [
8523
8527
  {
@@ -8547,7 +8551,7 @@
8547
8551
  "method": "GET",
8548
8552
  "path": "/api/v1/accounts/{account_id}/search",
8549
8553
  "title": "Busca Global",
8550
- "description": "RAPIDO, e a opcao mais segura quando nao se sabe se o termo e o nome de alguem ou algo dito no papo — cobre os dois casos numa chamada. Busca global por texto (conversas, contatos, mensagens, artigos) — sempre retorna todos os tipos. Para um tipo unico use /search/conversations|contacts|messages.\n\nPREFIRA esta ao lionchat_conversations_search legado, que leva 15 a 22 segundos (medido em producao 11/08/2026).\n\nNOVO (2026-06): 'q' aceita multiplos termos (espacos = E/AND, cap 5; cada termo precisa bater) e dados cadastrais (CPF/CNPJ/RG por digitos, ignora pontuacao). Sempre retorna todos os tipos: conversations, contacts, messages, articles e kanban_items. Mensagens trazem previous_message/next_message.",
8554
+ "description": "RAPIDO, e a opcao mais segura quando nao se sabe se o termo e o nome de alguem ou algo dito no papo — cobre os dois casos numa chamada. Busca global por texto (conversas, contatos, mensagens, artigos) — sempre retorna todos os tipos. Para um tipo unico use /search/conversations|contacts|messages.\n\nPara saber EM QUANTAS conversas algo foi dito, no historico inteiro, use lionchat_conversations_search.\n\nNOVO (2026-06): 'q' aceita multiplos termos (espacos = E/AND, cap 5; cada termo precisa bater) e dados cadastrais (CPF/CNPJ/RG por digitos, ignora pontuacao). Sempre retorna todos os tipos: conversations, contacts, messages, articles e kanban_items. Mensagens trazem previous_message/next_message.",
8551
8555
  "category": "Busca",
8552
8556
  "params": [
8553
8557
  {
@@ -8634,7 +8638,7 @@
8634
8638
  "method": "GET",
8635
8639
  "path": "/api/v1/accounts/{account_id}/search/conversations",
8636
8640
  "title": "Buscar Conversas",
8637
- "description": "RAPIDO. E uma BUSCA, nao uma listagem — o sufixo _list no id e historico, ignore. Acha a conversa PELA PESSOA/EMPRESA: nome, e-mail, telefone, identificador, CPF/CNPJ por digitos, atributos personalizados da conversa e numero da conversa.\n\nNAO procura dentro do texto das mensagens — para isso use lionchat_search_list_2 (ou lionchat_search_search para as duas coisas). E a substituta rapida do lionchat_conversations_search legado (15 a 22 s) quando a intencao e achar a conversa de alguem.\n\nDevolve payload.conversations[], 15 por pagina. Termo de texto com menos de 3 caracteres e descartado (so-digitos e isento); se todos os termos forem curtos a resposta vem VAZIA — isso nao significa que nao existe, significa que a busca nao rodou.\n\nNOVO (2026-06): 'q' aceita multiplos termos (espacos = E/AND, cap 5; cada termo precisa bater) e dados cadastrais (CPF/CNPJ/RG por digitos, ignora pontuacao).",
8641
+ "description": "RAPIDO. E uma BUSCA, nao uma listagem — o sufixo _list no id e historico, ignore. Acha a conversa PELA PESSOA/EMPRESA: nome, e-mail, telefone, identificador, CPF/CNPJ por digitos, atributos personalizados da conversa e numero da conversa.\n\nNAO procura dentro do texto das mensagens — para isso use lionchat_search_list_2 (ou lionchat_search_search para as duas coisas). lionchat_conversations_search procura so no texto das mensagens: para achar a conversa de alguem, use esta.\n\nDevolve payload.conversations[], 15 por pagina. Termo de texto com menos de 3 caracteres e descartado (so-digitos e isento); se todos os termos forem curtos a resposta vem VAZIA — isso nao significa que nao existe, significa que a busca nao rodou.\n\nNOVO (2026-06): 'q' aceita multiplos termos (espacos = E/AND, cap 5; cada termo precisa bater) e dados cadastrais (CPF/CNPJ/RG por digitos, ignora pontuacao).",
8638
8642
  "category": "Busca",
8639
8643
  "params": [
8640
8644
  {
@@ -8772,7 +8776,7 @@
8772
8776
  "method": "GET",
8773
8777
  "path": "/api/v1/accounts/{account_id}/search/messages",
8774
8778
  "title": "Buscar Mensagens",
8775
- "description": "RAPIDO. E uma BUSCA, nao uma listagem — o sufixo _list no id e historico, ignore. Procura o termo DENTRO DO TEXTO das mensagens.\n\nE A SUBSTITUTA CERTA do lionchat_conversations_search legado, que faz a mesma busca em 15 a 22 segundos: aqui ha indice trigram proprio e teto de tempo em duas fases (2 s na primeira tentativa, 14 s no limite absoluto), entao nao trava. Devolve payload.messages[], 15 por pagina.\n\nTermo de texto com menos de 3 caracteres e descartado (so-digitos e isento, protegido pelo limite da primeira fase); se todos os termos forem curtos a resposta vem VAZIA — isso nao significa que nao existe, significa que a busca nao rodou.\n\nNOVO (2026-06): 'q' aceita multiplos termos (espacos = E/AND, cap 5; cada termo precisa bater) e dados cadastrais (CPF/CNPJ/RG por digitos, ignora pontuacao). NOVO (2026-06-16): casa por TRECHO/substring (multi-termo AND — ex.: 'época d' acha 'época do'); e cada resultado de mensagem inclui previous_message e next_message (as mensagens anterior e seguinte da MESMA conversa, em ordem cronológica, ignorando eventos de sistema) como objeto {id, content, sender_name, message_type, private, created_at} ou null quando não há vizinha. Leia message_search_interrupted no retorno antes de afirmar 'nao encontrado'.",
8779
+ "description": "RAPIDO. E uma BUSCA, nao uma listagem — o sufixo _list no id e historico, ignore. Procura o termo DENTRO DO TEXTO das mensagens.\n\nSo os ULTIMOS 3 MESES, por palavras soltas e sem agrupar por conversa; serve para ver mensagens recentes com o contexto em volta. Indice trigram proprio e teto de tempo em duas fases (2 s + 2 s). Para saber EM QUANTAS conversas algo foi dito no historico inteiro, use lionchat_conversations_search. Devolve payload.messages[], 15 por pagina.\n\nTermo de texto com menos de 3 caracteres e descartado (so-digitos e isento, protegido pelo limite da primeira fase); se todos os termos forem curtos a resposta vem VAZIA — isso nao significa que nao existe, significa que a busca nao rodou.\n\nNOVO (2026-06): 'q' aceita multiplos termos (espacos = E/AND, cap 5; cada termo precisa bater) e dados cadastrais (CPF/CNPJ/RG por digitos, ignora pontuacao). NOVO (2026-06-16): casa por TRECHO/substring (multi-termo AND — ex.: 'época d' acha 'época do'); e cada resultado de mensagem inclui previous_message e next_message (as mensagens anterior e seguinte da MESMA conversa, em ordem cronológica, ignorando eventos de sistema) como objeto {id, content, sender_name, message_type, private, created_at} ou null quando não há vizinha. Leia message_search_interrupted no retorno antes de afirmar 'nao encontrado'.",
8776
8780
  "category": "Busca",
8777
8781
  "params": [
8778
8782
  {
@@ -8932,7 +8936,7 @@
8932
8936
  "method": "POST",
8933
8937
  "path": "/api/v1/accounts/{account_id}/account_tasks",
8934
8938
  "title": "Criar Tarefa",
8935
- "description": "Cria uma tarefa/compromisso. Obrigatorios: title, scheduled_at. Requer feature unified_agenda + LionLab PRO. Para task_type video_call ou meeting, o link do Google Meet é gerado automaticamente após ~5s (campo meeting_url). Reuniões com convidados NÃO suportam recorrência. **Tratamento em sessoes (15/09):** com tipo `sessions_enabled`, o agendamento pelo painel/API nasce como sessao do tratamento do contato (proxima a marcar; cheio = sessao extra ate 60; concluido = ciclo novo) e a tarefa devolve `tratamento` {id, sessao, total, titulo} (nulo em compromisso comum). `treatment.*` cria o plano; `agenda_treatment_id` + `treatment_session_number` marcam uma sessao pedida. **Presa a card (20/10):** `kanban_item_id` prende a tarefa a um card do Kanban e `occupies_agenda` diz se ela bloqueia o horario. Tentar prender a card um agendamento, uma sessao de programa ou um evento do Google devolve 422 (errors.kanban_item_id); card inexistente, de outra conta ou que a pessoa nao ve tambem e 422.",
8939
+ "description": "Cria uma tarefa/compromisso. Obrigatorios: title, scheduled_at. Requer feature unified_agenda + LionLab PRO. Para task_type video_call ou meeting, o link do Google Meet é gerado automaticamente após ~5s (campo meeting_url). Reuniões com convidados NÃO suportam recorrência. **Tratamento em sessoes (15/09):** com tipo `sessions_enabled`, o agendamento pelo painel/API nasce como sessao do tratamento do contato (proxima a marcar; cheio = sessao extra ate 60; concluido = ciclo novo) e a tarefa devolve `tratamento` {id, sessao, total, titulo} (nulo em compromisso comum). `treatment.*` cria o plano; `agenda_treatment_id` + `treatment_session_number` marcam uma sessao pedida. **Presa a card (20/10):** `kanban_item_id` prende a tarefa a um card do Kanban e `occupies_agenda` diz se ela bloqueia o horario. Tentar prender a card um agendamento, uma sessao de programa ou um evento do Google devolve 422 (errors.kanban_item_id); card inexistente, de outra conta ou que a pessoa nao ve tambem e 422. assignee_ids e user_id têm de ser da conta: fora disso responde 422 e não cria.",
8936
8940
  "category": "Agenda / Tarefas",
8937
8941
  "params": [
8938
8942
  {
@@ -9151,7 +9155,7 @@
9151
9155
  "method": "PATCH",
9152
9156
  "path": "/api/v1/accounts/{account_id}/account_tasks/{id}",
9153
9157
  "title": "Atualizar Tarefa",
9154
- "description": "Atualiza uma tarefa. Campos alterados em video_call/meeting disparam sync com Google Calendar. Atualiza campos do tarefa/agenda existente. Suporta atualização parcial (PATCH) — só campos enviados são alterados. Campos suportados: title, description, task_type, priority, scheduled_at, duration_minutes. **Tratamento em sessoes (15/09):** com tipo `sessions_enabled`, o agendamento pelo painel/API nasce como sessao do tratamento do contato (proxima a marcar; cheio = sessao extra ate 60; concluido = ciclo novo) e a tarefa devolve `tratamento` {id, sessao, total, titulo} (nulo em compromisso comum). `treatment.*` cria o plano; `agenda_treatment_id` + `treatment_session_number` marcam uma sessao pedida. **Compromisso de Booking (17/09):** tarefa com `booking_id` tem responsavel FIXO (o profissional do tipo de evento) — `assignee_ids` e IGNORADO (200, o resto da edicao vale). Para mudar quem atende, edite o tipo de evento. **Presenca nao conclui:** mandar `attendance` NAO muda `status`; nao conclua a tarefa so porque a presenca foi marcada (concluir compromisso de Booking encerra lembretes/pos-atendimento e dispara o gatilho de fluxo 'agendamento concluido'). A resposta traz `selo` com o rotulo resultante. **Presa a card (20/10):** `kanban_item_id` prende a tarefa a um card do Kanban e `occupies_agenda` diz se ela bloqueia o horario. Tentar prender a card um agendamento, uma sessao de programa ou um evento do Google devolve 422 (errors.kanban_item_id); card inexistente, de outra conta ou que a pessoa nao ve tambem e 422.",
9158
+ "description": "Atualiza uma tarefa. Campos alterados em video_call/meeting disparam sync com Google Calendar. Atualiza campos do tarefa/agenda existente. Suporta atualização parcial (PATCH) — só campos enviados são alterados. Campos suportados: title, description, task_type, priority, scheduled_at, duration_minutes. **Tratamento em sessoes (15/09):** com tipo `sessions_enabled`, o agendamento pelo painel/API nasce como sessao do tratamento do contato (proxima a marcar; cheio = sessao extra ate 60; concluido = ciclo novo) e a tarefa devolve `tratamento` {id, sessao, total, titulo} (nulo em compromisso comum). `treatment.*` cria o plano; `agenda_treatment_id` + `treatment_session_number` marcam uma sessao pedida. **Compromisso de Booking (17/09):** tarefa com `booking_id` tem responsavel FIXO (o profissional do tipo de evento) — `assignee_ids` e IGNORADO (200, o resto da edicao vale). Para mudar quem atende, edite o tipo de evento. **Presenca nao conclui:** mandar `attendance` NAO muda `status`; nao conclua a tarefa so porque a presenca foi marcada (concluir compromisso de Booking encerra lembretes/pos-atendimento e dispara o gatilho de fluxo 'agendamento concluido'). A resposta traz `selo` com o rotulo resultante. **Presa a card (20/10):** `kanban_item_id` prende a tarefa a um card do Kanban e `occupies_agenda` diz se ela bloqueia o horario. Tentar prender a card um agendamento, uma sessao de programa ou um evento do Google devolve 422 (errors.kanban_item_id); card inexistente, de outra conta ou que a pessoa nao ve tambem e 422. Quem ENTRA em assignee_ids e user_id tem de ser da conta: fora disso responde 422. Vale também em compromisso de Booking.",
9155
9159
  "category": "Agenda / Tarefas",
9156
9160
  "params": [
9157
9161
  {
@@ -9467,7 +9471,7 @@
9467
9471
  "method": "PATCH",
9468
9472
  "path": "/api/v1/accounts/{account_id}/account_tasks/{id}/update_future",
9469
9473
  "title": "Atualizar Futuras",
9470
- "description": "Atualiza esta e todas as futuras instâncias de tarefa recorrente. Atualiza campos do tarefa/agenda existente. Suporta atualização parcial (PATCH) — só campos enviados são alterados. Campos suportados: title, scheduled_at. **Compromisso de Booking (17/09):** tarefa com `booking_id` tem responsavel FIXO (o profissional do tipo de evento) — `assignee_ids` e IGNORADO (200, o resto da edicao vale). Para mudar quem atende, edite o tipo de evento. **Presenca nao conclui:** mandar `attendance` NAO muda `status`; nao conclua a tarefa so porque a presenca foi marcada (concluir compromisso de Booking encerra lembretes/pos-atendimento e dispara o gatilho de fluxo 'agendamento concluido'). A resposta traz `selo` com o rotulo resultante. **Presa a card (20/10):** `kanban_item_id` prende a tarefa a um card do Kanban e `occupies_agenda` diz se ela bloqueia o horario. Tentar prender a card um agendamento, uma sessao de programa ou um evento do Google devolve 422 (errors.kanban_item_id); card inexistente, de outra conta ou que a pessoa nao ve tambem e 422. Na serie, `kanban_item_id` e `occupies_agenda` valem para esta e todas as ocorrencias futuras.",
9474
+ "description": "Atualiza esta e todas as futuras instâncias de tarefa recorrente. Atualiza campos do tarefa/agenda existente. Suporta atualização parcial (PATCH) — só campos enviados são alterados. Campos suportados: title, scheduled_at. **Compromisso de Booking (17/09):** tarefa com `booking_id` tem responsavel FIXO (o profissional do tipo de evento) — `assignee_ids` e IGNORADO (200, o resto da edicao vale). Para mudar quem atende, edite o tipo de evento. **Presenca nao conclui:** mandar `attendance` NAO muda `status`; nao conclua a tarefa so porque a presenca foi marcada (concluir compromisso de Booking encerra lembretes/pos-atendimento e dispara o gatilho de fluxo 'agendamento concluido'). A resposta traz `selo` com o rotulo resultante. **Presa a card (20/10):** `kanban_item_id` prende a tarefa a um card do Kanban e `occupies_agenda` diz se ela bloqueia o horario. Tentar prender a card um agendamento, uma sessao de programa ou um evento do Google devolve 422 (errors.kanban_item_id); card inexistente, de outra conta ou que a pessoa nao ve tambem e 422. Na serie, `kanban_item_id` e `occupies_agenda` valem para esta e todas as ocorrencias futuras. Quem ENTRA em assignee_ids e user_id tem de ser da conta: fora disso responde 422.",
9471
9475
  "category": "Agenda / Tarefas",
9472
9476
  "params": [
9473
9477
  {
@@ -10110,7 +10114,7 @@
10110
10114
  "method": "POST",
10111
10115
  "path": "/api/v1/accounts/{account_id}/kanban_items/bulk_move_items",
10112
10116
  "title": "Mover em Massa",
10113
- "description": "Move múltiplos itens para uma etapa. Cria novo operação em massa. Obrigatórios: item_ids, new_stage. Valida unicidade quando aplicável. Retorna o operação em massa criado com ID atribuído.",
10117
+ "description": "Move múltiplos itens para uma etapa. Cria novo operação em massa. Obrigatórios: item_ids, new_stage. Valida unicidade quando aplicável. Retorna o operação em massa criado com ID atribuído. funnel_id tem de ser da conta: fora disso o card fica onde está e o motivo vem em errors.",
10114
10118
  "category": "Operacoes em Massa",
10115
10119
  "params": [
10116
10120
  {
@@ -10152,7 +10156,7 @@
10152
10156
  "method": "POST",
10153
10157
  "path": "/api/v1/accounts/{account_id}/kanban_items/bulk_assign_agent",
10154
10158
  "title": "Agente em Massa",
10155
- "description": "Atribui agente a múltiplos itens. Cria novo operação em massa. Obrigatórios: item_ids, agent_id. Valida unicidade quando aplicável. Retorna o operação em massa criado com ID atribuído.",
10159
+ "description": "Atribui agente a múltiplos itens. Cria novo operação em massa. Obrigatórios: item_ids, agent_id. Valida unicidade quando aplicável. Retorna o operação em massa criado com ID atribuído. Só entra usuário desta conta: id de fora recusa, sem mudar nada.",
10156
10160
  "category": "Operacoes em Massa",
10157
10161
  "params": [
10158
10162
  {
@@ -10411,7 +10415,7 @@
10411
10415
  "method": "POST",
10412
10416
  "path": "/api/v1/accounts/{account_id}/flows",
10413
10417
  "title": "Criar Flow",
10414
- "description": "Cria um flow (FlowBuilder) na conta. Requer Admin. flow_data segue formato Vue Flow {nodes:[], edges:[]}. NODE SCHEMA — start: {label, items:[...]} — os GATILHOS moram em data.items (NUNCA data.triggers), cada item um OBJETO {key, config}. Ex.: {key:'message_received', config:{keywords:['oi','orcamento'], match_type:'contains'}}. config.keywords e LISTA de textos (texto solto quebra o despacho de TODA mensagem da caixa); listas de id vao como LISTA DE TEXTOS — team_ids:['3'], agent_ids:['70'], funnel_ids:['31'] (numero puro [3] nunca casa); label_names:['vip']. nodes e edges sao LISTAS de objetos; exit_conditions (irmao de nodes, no flow_data) e LISTA de {type, value}. send_message: {label, messageItems:[{id, type:'text', content}]} handles: success/no_response/error. wait_response: {label, waitTime, waitUnit:'minutes'|'seconds', validation:'any'|'options'|'regex', acceptedOptions:['1','2'] (se options), regexPattern (se regex), invalidMessage, maxRetries:3, saveTo:'variable'|'contact_name'|'contact_email'|'contact_phone'|'contact_attr'|'conversation_attr'|'', saveVariable, saveAttrKey} — quando validation='options' os handles ficam 'option_{val}' + 'timeout'; senão 'success' + 'timeout' — NUNCA precisa de condition node depois. condition: {label, conditions:[{id, label, field, operator, value}]} handles = 'cond_0','cond_1',... (INDICE no array, NAO o id) + 'default'. action: {label, items:[{key, config:{...}}]} keys comuns assign_team({team_id}), assign_agent({agent_id}), add_label({labels:['slug',...]}), remove_label({labels}), change_status({status}), change_priority({priority}), mute_conversation({}), add_private_note({content}), create_kanban_item({funnel_id, funnel_stage,...}), move_kanban_stage({funnel_id, funnel_stage}), deactivate_flow({}), assign_captain({assistant_id}). api: {label, method, url, headers:[{key,value}], body, apiResponseVar}. set_variable: {label, variables:[{name, value}]}. wait: {label, waitTime, waitUnit}. EDGE SCHEMA: {id, source, target, sourceHandle (opcional, OBRIGATORIO casar com handle exposto pelo node source), type:'deletable', animated:true}. ERROS COMUNS QUE DEVEM SER EVITADOS: (1) action usa items[].config NAO items[].params; (2) send_message usa messageItems NAO items; (3) wait_response com validation='options' NAO precisa de condition node — use sourceHandle='option_X' diretamente; (4) sourceHandle inventado tipo 'c1','c2' nao funciona — sempre usar o handle real; (5) inbox_ids precisa vir aninhado em {flow:{inbox_ids:[]}} no PUT bruto, mas no MCP basta inbox_ids no nivel raiz. Cria novo flow. Obrigatórios: name, channel_type. Valida unicidade quando aplicável. Retorna o flow criado com ID atribuído. POSITIONING (CRITICO): cada node DEVE ter position:{x,y}. Sem isso, todos empilham no canvas no (0,0). Regra basica de layout: start em {x:50,y:300}, espaco horizontal +320 entre nodes sequenciais, ramificacoes em +/-150 vertical. ANTES DE GERAR JSON consulte o resource lionchat://docs/flowbuilder-design-guide (schema completo de cada tipo de node, handles expostos, erros comuns, checklist) e lionchat://docs/flowbuilder-patterns (10 templates prontos pra adaptar). BRAINSTORMING: se faltou info critica (canal, gatilho, conteudo), use o prompt create_flow_brainstorm como banco de perguntas sugeridas — pergunte SO o que falta, sem checklist forcado. APOS GERAR: rode o checklist da secao 6 do design guide antes de submeter (1 node start, todo node com id unico + position + data, todo edge com sourceHandle valido). NUNCA invente sourceHandle (no condition use cond_0/cond_1/default, no wait_response options use option_X, no AI intent use intent_<opcao>). IMPORTANTE: chame lionchat_flows_schema_reference antes pra ver o schema COMPLETO e atualizado (nodes end/ai/note, etiqueta conversa vs contato, webhook embutido, timeout, anti-loop). Pra ferramentas da IA (ai_tool) use lionchat_flow_tools_create. conversation_mode: 'individual' (default) | 'group'. Sticky note (type 'note'): data usa title+body+color(yellow|teal|blue|violet|pink|orange|slate)+width+height — NUNCA 'content'. ORGANIZAÇÃO: preencha tags ao criar (reutilizando as tags já existentes nos flows da conta — veja flows_list) pra manter a lista organizada. STICKY NOTE: o texto da nota (type note) vai em data.title + data.body — content/label/text deixam a nota EM BRANCO na tela; nunca crie nota sem body. LAYOUT: espace os nodes (colunas a >=320px no x, ramos a >=180px no y; notas AO LADO/ACIMA do trecho, nunca sobre nodes ou linhas). REGRAS 18/08: acao start_flow com flow_id do PROPRIO flow e aceita no save mas IGNORADA EM SILENCIO na execucao (o fluxo para ali) — aponte sempre pra OUTRO flow. Condicoes: preencha operator E field juntos (tabela dos pares no resource flowbuilder-patterns), senao a regra roda certa e aparece errada na tela do cliente. NOVIDADES 01/09/2026 no schema (lionchat_flows_schema_reference): acao send_conversion (Meta/Google Ads/GA4 de dentro do fluxo) e condicao por origem/campanha (attr_config de conversa com origin_kind=paid_ad etc.). NOVIDADES 02/09/2026: (1) send_conversion ganhou event_names — UM evento por destino ({meta, google_ads, ga4}); event_name virou reserva (grave os dois); Google Ads so aceita nome do conversion_action_map. (2) preset 'Origem do lead' (attrScope 'lead_origin', attr_key origin_platform; valores: plataforma ou 'custom:<slug>'). (3) REGRA DE VALOR na condicao de atributo: equal/not_equal/contains/not_contains gravam em values:[...] (LISTA) com value:'' — value solo abre VAZIO na tela do cliente. Ver lionchat_flows_schema_reference. TIPO DE FLUXO (17/09/2026): o parametro flow_type aceita 'conversation' (padrao) ou 'action' (Fluxo de Acoes). O de ACOES nao fica ligado a caixa nenhuma, roda em QUALQUER conversa de QUALQUER caixa e SO executa acoes — NAO pode ter os blocos send_message, wait_response nem update_group (a validacao recusa o save inteiro), nao aceita inbox_ids e ignora conversation_mode. Use pra regra que vale na empresa toda e nao depende da caixa (ex.: etiqueta 'urgente' -> atribui equipe de suporte). Se precisa FALAR com a pessoa, o tipo e 'conversation'. Pra ferramenta da IA continue usando lionchat_flow_tools_create.",
10418
+ "description": "Cria um flow (FlowBuilder) na conta. Requer Admin. flow_data segue formato Vue Flow {nodes:[], edges:[]}. NODE SCHEMA — start: {label, items:[...]} — os GATILHOS moram em data.items (NUNCA data.triggers), cada item um OBJETO {key, config}. Ex.: {key:'message_received', config:{keywords:['oi','orcamento'], match_type:'contains'}}. config.keywords e LISTA de textos (texto solto quebra o despacho de TODA mensagem da caixa); listas de id vao como LISTA DE TEXTOS — team_ids:['3'], agent_ids:['70'], funnel_ids:['31'] (numero puro [3] nunca casa); label_names:['vip']. nodes e edges sao LISTAS de objetos; exit_conditions (irmao de nodes, no flow_data) e LISTA de {type, value}. send_message: {label, messageItems:[{id, type:'text', content}]} handles: success/no_response/error. wait_response: {label, waitTime, waitUnit:'minutes'|'seconds', validation:'any'|'options'|'regex', acceptedOptions:['1','2'] (se options), regexPattern (se regex), invalidMessage, maxRetries:3, saveTo:'variable'|'contact_name'|'contact_email'|'contact_phone'|'contact_attr'|'conversation_attr'|'', saveVariable, saveAttrKey} — quando validation='options' os handles ficam 'option_{val}' + 'timeout'; senão 'success' + 'timeout' — NUNCA precisa de condition node depois. condition: {label, conditions:[{id, label, field, operator, value}]} handles = 'cond_0','cond_1',... (INDICE no array, NAO o id) + 'default'. action: {label, items:[{key, config:{...}}]} keys comuns assign_team({team_id}), assign_agent({agent_id}), add_label({labels:['slug',...]}), remove_label({labels}), change_status({status}), change_priority({priority}), mute_conversation({}), add_private_note({content}), create_kanban_item({funnel_id, funnel_stage,...}), move_kanban_stage({funnel_id, funnel_stage}), deactivate_flow({}), assign_captain({assistant_id}). api: {label, method, url, headers:[{key,value}], body, apiResponseVar}. set_variable: {label, variables:[{name, value}]}. wait: {label, waitTime, waitUnit}. EDGE SCHEMA: {id, source, target, sourceHandle (opcional, OBRIGATORIO casar com handle exposto pelo node source), type:'deletable', animated:true}. ERROS COMUNS QUE DEVEM SER EVITADOS: (1) action usa items[].config NAO items[].params; (2) send_message usa messageItems NAO items; (3) wait_response com validation='options' NAO precisa de condition node — use sourceHandle='option_X' diretamente; (4) sourceHandle inventado tipo 'c1','c2' nao funciona — sempre usar o handle real; (5) inbox_ids precisa vir aninhado em {flow:{inbox_ids:[]}} no PUT bruto, mas no MCP basta inbox_ids no nivel raiz. Cria novo flow. Obrigatórios: name, channel_type. Valida unicidade quando aplicável. Retorna o flow criado com ID atribuído. POSITIONING (CRITICO): cada node DEVE ter position:{x,y}. Sem isso, todos empilham no canvas no (0,0). Regra basica de layout: start em {x:50,y:300}, espaco horizontal +320 entre nodes sequenciais, ramificacoes em +/-150 vertical. ANTES DE GERAR JSON consulte o resource lionchat://docs/flowbuilder-design-guide (schema completo de cada tipo de node, handles expostos, erros comuns, checklist) e lionchat://docs/flowbuilder-patterns (10 templates prontos pra adaptar). BRAINSTORMING: se faltou info critica (canal, gatilho, conteudo), use o prompt create_flow_brainstorm como banco de perguntas sugeridas — pergunte SO o que falta, sem checklist forcado. APOS GERAR: rode o checklist da secao 6 do design guide antes de submeter (1 node start, todo node com id unico + position + data, todo edge com sourceHandle valido). NUNCA invente sourceHandle (no condition use cond_0/cond_1/default, no wait_response options use option_X, no AI intent use intent_<opcao>). IMPORTANTE: chame lionchat_flows_schema_reference antes pra ver o schema COMPLETO e atualizado (nodes end/ai/note, etiqueta conversa vs contato, webhook embutido, timeout, anti-loop). Pra ferramentas da IA (ai_tool) use lionchat_flow_tools_create. conversation_mode: 'individual' (default) | 'group'. Sticky note (type 'note'): data usa title+body+color(yellow|teal|blue|violet|pink|orange|slate)+width+height — NUNCA 'content'. ORGANIZAÇÃO: preencha tags ao criar (reutilizando as tags já existentes nos flows da conta — veja flows_list) pra manter a lista organizada. STICKY NOTE: o texto da nota (type note) vai em data.title + data.body — content/label/text deixam a nota EM BRANCO na tela; nunca crie nota sem body. LAYOUT: espace os nodes (colunas a >=320px no x, ramos a >=180px no y; notas AO LADO/ACIMA do trecho, nunca sobre nodes ou linhas). REGRAS 18/08: acao start_flow com flow_id do PROPRIO flow e aceita no save mas IGNORADA EM SILENCIO na execucao (o fluxo para ali) — aponte sempre pra OUTRO flow. Condicoes: preencha operator E field juntos (tabela dos pares no resource flowbuilder-patterns), senao a regra roda certa e aparece errada na tela do cliente. NOVIDADES 01/09/2026 no schema (lionchat_flows_schema_reference): acao send_conversion (Meta/Google Ads/GA4 de dentro do fluxo) e condicao por origem/campanha (attr_config de conversa com origin_kind=paid_ad etc.). NOVIDADES 02/09/2026: (1) send_conversion ganhou event_names — UM evento por destino ({meta, google_ads, ga4}); event_name virou reserva (grave os dois); Google Ads so aceita nome do conversion_action_map. (2) preset 'Origem do lead' (attrScope 'lead_origin', attr_key origin_platform; valores: plataforma ou 'custom:<slug>'). (3) REGRA DE VALOR na condicao de atributo: equal/not_equal/contains/not_contains gravam em values:[...] (LISTA) com value:'' — value solo abre VAZIO na tela do cliente. Ver lionchat_flows_schema_reference. TIPO DE FLUXO (17/09/2026): o parametro flow_type aceita 'conversation' (padrao) ou 'action' (Fluxo de Acoes). O de ACOES nao fica ligado a caixa nenhuma, roda em QUALQUER conversa de QUALQUER caixa e SO executa acoes — NAO pode ter os blocos send_message, wait_response nem update_group (a validacao recusa o save inteiro), nao aceita inbox_ids e ignora conversation_mode. Use pra regra que vale na empresa toda e nao depende da caixa (ex.: etiqueta 'urgente' -> atribui equipe de suporte). Se precisa FALAR com a pessoa, o tipo e 'conversation'. Pra ferramenta da IA continue usando lionchat_flow_tools_create. inbox_ids só com caixa da conta: fora disso responde 422 e não cria.",
10415
10419
  "category": "Flows",
10416
10420
  "params": [
10417
10421
  {
@@ -10513,7 +10517,7 @@
10513
10517
  "method": "PUT",
10514
10518
  "path": "/api/v1/accounts/{account_id}/flows/{id}",
10515
10519
  "title": "Atualizar Flow",
10516
- "description": "Atualiza nome, descricao, caixas de entrada ou dados dos blocos. Mesmo schema de flow_data do tool lionchat_flows_create — consulte a descricao daquele tool para o schema completo dos nodes (start, send_message, wait_response, condition, action, api, set_variable) e dos edges. RECAP RAPIDO: start: {label, items:[...]} — os GATILHOS moram em data.items (NUNCA data.triggers), cada item um OBJETO {key, config}. Ex.: {key:'message_received', config:{keywords:['oi','orcamento'], match_type:'contains'}}. config.keywords e LISTA de textos (texto solto quebra o despacho de TODA mensagem da caixa); listas de id vao como LISTA DE TEXTOS — team_ids:['3'], agent_ids:['70'], funnel_ids:['31'] (numero puro [3] nunca casa); label_names:['vip']. nodes e edges sao LISTAS de objetos; exit_conditions (irmao de nodes, no flow_data) e LISTA de {type, value}. flow_data enviado SUBSTITUI o desenho inteiro (nodes + edges + exit_conditions): leia com lionchat_flows_show e reenvie COMPLETO. action items[].config (nao params); send_message messageItems (nao items); wait_response validation='options' gera handles 'option_X' (dispensa condition node); edges sourceHandle DEVE casar com handle real do node source. Atualiza campos do flow existente. Suporta atualização parcial (PATCH) — só campos enviados são alterados. Campos suportados: name, description, inbox_ids, flow_data. IMPORTANTE: chame lionchat_flows_schema_reference antes pra ver o schema COMPLETO e atualizado (nodes end/ai/note, etiqueta conversa vs contato, webhook embutido, timeout, anti-loop). Pra ferramentas da IA (ai_tool) use lionchat_flow_tools_create. STICKY NOTE: o texto da nota (type note) vai em data.title + data.body — content/label/text deixam a nota EM BRANCO na tela; nunca crie nota sem body. LAYOUT: espace os nodes (colunas a >=320px no x, ramos a >=180px no y; notas AO LADO/ACIMA do trecho, nunca sobre nodes ou linhas). REGRAS 18/08: acao start_flow com flow_id do PROPRIO flow e aceita no save mas IGNORADA EM SILENCIO na execucao (o fluxo para ali) — aponte sempre pra OUTRO flow. Condicoes: preencha operator E field juntos (tabela dos pares no resource flowbuilder-patterns), senao a regra roda certa e aparece errada na tela do cliente. NOVIDADES 01/09/2026 no schema (lionchat_flows_schema_reference): acao send_conversion (Meta/Google Ads/GA4 de dentro do fluxo) e condicao por origem/campanha (attr_config de conversa com origin_kind=paid_ad etc.). NOVIDADES 02/09/2026: (1) send_conversion ganhou event_names — UM evento por destino ({meta, google_ads, ga4}); event_name virou reserva (grave os dois); Google Ads so aceita nome do conversion_action_map. (2) preset 'Origem do lead' (attrScope 'lead_origin', attr_key origin_platform; valores: plataforma ou 'custom:<slug>'). (3) REGRA DE VALOR na condicao de atributo: equal/not_equal/contains/not_contains gravam em values:[...] (LISTA) com value:'' — value solo abre VAZIO na tela do cliente. Ver lionchat_flows_schema_reference.",
10520
+ "description": "Atualiza nome, descricao, caixas de entrada ou dados dos blocos. Mesmo schema de flow_data do tool lionchat_flows_create — consulte a descricao daquele tool para o schema completo dos nodes (start, send_message, wait_response, condition, action, api, set_variable) e dos edges. RECAP RAPIDO: start: {label, items:[...]} — os GATILHOS moram em data.items (NUNCA data.triggers), cada item um OBJETO {key, config}. Ex.: {key:'message_received', config:{keywords:['oi','orcamento'], match_type:'contains'}}. config.keywords e LISTA de textos (texto solto quebra o despacho de TODA mensagem da caixa); listas de id vao como LISTA DE TEXTOS — team_ids:['3'], agent_ids:['70'], funnel_ids:['31'] (numero puro [3] nunca casa); label_names:['vip']. nodes e edges sao LISTAS de objetos; exit_conditions (irmao de nodes, no flow_data) e LISTA de {type, value}. flow_data enviado SUBSTITUI o desenho inteiro (nodes + edges + exit_conditions): leia com lionchat_flows_show e reenvie COMPLETO. action items[].config (nao params); send_message messageItems (nao items); wait_response validation='options' gera handles 'option_X' (dispensa condition node); edges sourceHandle DEVE casar com handle real do node source. Atualiza campos do flow existente. Suporta atualização parcial (PATCH) — só campos enviados são alterados. Campos suportados: name, description, inbox_ids, flow_data. IMPORTANTE: chame lionchat_flows_schema_reference antes pra ver o schema COMPLETO e atualizado (nodes end/ai/note, etiqueta conversa vs contato, webhook embutido, timeout, anti-loop). Pra ferramentas da IA (ai_tool) use lionchat_flow_tools_create. STICKY NOTE: o texto da nota (type note) vai em data.title + data.body — content/label/text deixam a nota EM BRANCO na tela; nunca crie nota sem body. LAYOUT: espace os nodes (colunas a >=320px no x, ramos a >=180px no y; notas AO LADO/ACIMA do trecho, nunca sobre nodes ou linhas). REGRAS 18/08: acao start_flow com flow_id do PROPRIO flow e aceita no save mas IGNORADA EM SILENCIO na execucao (o fluxo para ali) — aponte sempre pra OUTRO flow. Condicoes: preencha operator E field juntos (tabela dos pares no resource flowbuilder-patterns), senao a regra roda certa e aparece errada na tela do cliente. NOVIDADES 01/09/2026 no schema (lionchat_flows_schema_reference): acao send_conversion (Meta/Google Ads/GA4 de dentro do fluxo) e condicao por origem/campanha (attr_config de conversa com origin_kind=paid_ad etc.). NOVIDADES 02/09/2026: (1) send_conversion ganhou event_names — UM evento por destino ({meta, google_ads, ga4}); event_name virou reserva (grave os dois); Google Ads so aceita nome do conversion_action_map. (2) preset 'Origem do lead' (attrScope 'lead_origin', attr_key origin_platform; valores: plataforma ou 'custom:<slug>'). (3) REGRA DE VALOR na condicao de atributo: equal/not_equal/contains/not_contains gravam em values:[...] (LISTA) com value:'' — value solo abre VAZIO na tela do cliente. Ver lionchat_flows_schema_reference. A caixa que ENTRA em inbox_ids tem de ser da conta: fora disso responde 422 e o fluxo fica com as caixas que tinha.",
10517
10521
  "category": "Flows",
10518
10522
  "params": [
10519
10523
  {
@@ -11299,7 +11303,7 @@
11299
11303
  "method": "POST",
11300
11304
  "path": "/api/v1/accounts/{account_id}/automation_rules",
11301
11305
  "title": "Criar Regra de Automacao",
11302
- "description": "Cria uma regra de automacao. event_name validos: conversation_created, conversation_updated, conversation_resolved, message_created, conversation_opened, webhook, kanban_item_created, kanban_item_stage_changed. conditions: [{attribute_key, filter_operator, query_operator, values[]}]. actions: [{action_name, action_params[]}]. Aceita active, inbox_id. As actions DEVEM ser um array de objetos {action_name, action_params} — item malformado (ex.: texto solto) retorna 422 (novo 22/07; antes estourava 500). [27/10/2026] conditions NAO aceitam 'current_user' em assignee_id (422): automacao nao tem \"quem esta vendo\" — use o id do agente.",
11306
+ "description": "Cria uma regra de automacao. event_name validos: conversation_created, conversation_updated, conversation_resolved, message_created, conversation_opened, webhook, kanban_item_created, kanban_item_stage_changed. conditions: [{attribute_key, filter_operator, query_operator, values[]}]. actions: [{action_name, action_params[]}]. Aceita active, inbox_id. As actions DEVEM ser um array de objetos {action_name, action_params} — item malformado (ex.: texto solto) retorna 422 (novo 22/07; antes estourava 500). [27/10/2026] conditions NAO aceitam 'current_user' em assignee_id (422): automacao nao tem \"quem esta vendo\" — use o id do agente. inbox_id tem de ser da conta: fora disso responde 422.",
11303
11307
  "category": "Regras de Automacao",
11304
11308
  "params": [
11305
11309
  {
@@ -11397,7 +11401,7 @@
11397
11401
  "method": "PUT",
11398
11402
  "path": "/api/v1/accounts/{account_id}/automation_rules/{id}",
11399
11403
  "title": "Atualizar Regra",
11400
- "description": "Atualiza uma regra de automacao (PUT, substituicao completa). Campos: name, event_name, conditions, actions, active, inbox_id. As actions DEVEM ser um array de objetos {action_name, action_params} — item malformado (ex.: texto solto) retorna 422 (novo 22/07; antes estourava 500). [27/10/2026] conditions NAO aceitam 'current_user' em assignee_id (422 quando as conditions mudam): automacao nao tem \"quem esta vendo\" — use o id do agente.",
11404
+ "description": "Atualiza uma regra de automacao (PUT, substituicao completa). Campos: name, event_name, conditions, actions, active, inbox_id. As actions DEVEM ser um array de objetos {action_name, action_params} — item malformado (ex.: texto solto) retorna 422 (novo 22/07; antes estourava 500). [27/10/2026] conditions NAO aceitam 'current_user' em assignee_id (422 quando as conditions mudam): automacao nao tem \"quem esta vendo\" — use o id do agente. inbox_id tem de ser da conta: fora disso responde 422.",
11401
11405
  "category": "Regras de Automacao",
11402
11406
  "params": [
11403
11407
  {
@@ -11563,7 +11567,7 @@
11563
11567
  "method": "POST",
11564
11568
  "path": "/api/v1/accounts/{account_id}/teams/{team_id}/team_members",
11565
11569
  "title": "Adicionar Membros ao Time",
11566
- "description": "Adiciona agentes (membros) a um time/equipe existente. NÃO cria o time — apenas vincula agentes a ele. Obrigatórios: team_id (path) e user_ids (array de IDs de agentes). Para criar o time em si, use lionchat_teams_create.",
11570
+ "description": "Adiciona agentes (membros) a um time/equipe existente. NÃO cria o time — apenas vincula agentes a ele. Obrigatórios: team_id (path) e user_ids (array de IDs de agentes). Para criar o time em si, use lionchat_teams_create. Só entra usuário desta conta, nas duas listas: id de fora recusa o pedido inteiro com 401 'IDs de usuario invalidos', sem mudar nada. Número em texto é aceito.",
11567
11571
  "category": "Times",
11568
11572
  "params": [
11569
11573
  {
@@ -11594,7 +11598,7 @@
11594
11598
  "method": "PATCH",
11595
11599
  "path": "/api/v1/accounts/{account_id}/teams/{team_id}/team_members",
11596
11600
  "title": "Atualizar Membros do Time",
11597
- "description": "Substitui a lista de membros (agentes) de um time/equipe existente. NÃO altera nome/configuração do time — apenas o conjunto de agentes vinculados. Obrigatórios: team_id (path) e user_ids (nova lista de IDs). Para editar o time em si, use lionchat_teams_update.",
11601
+ "description": "Substitui a lista de membros (agentes) de um time/equipe existente. NÃO altera nome/configuração do time — apenas o conjunto de agentes vinculados. Obrigatórios: team_id (path) e user_ids (nova lista de IDs). Para editar o time em si, use lionchat_teams_update. Só entra usuário desta conta, nas duas listas: id de fora recusa o pedido inteiro com 401 'IDs de usuario invalidos', sem mudar nada. Número em texto é aceito. Atenção: [null] vale como lista vazia e remove todos, porque o servidor tira o null antes de conferir; confira a variável antes de mandar.",
11598
11602
  "category": "Times",
11599
11603
  "params": [
11600
11604
  {
@@ -11824,7 +11828,7 @@
11824
11828
  "method": "POST",
11825
11829
  "path": "/api/v1/accounts/{account_id}/bulk_actions",
11826
11830
  "title": "Acoes em Massa",
11827
- "description": "Executa acao em massa em CONVERSAS ou CONTATOS (roda em segundo plano: responde 200 e aplica depois). Obrigatorios: type e ids. ATENCAO ao `type`: escreva no SINGULAR com inicial maiuscula (Conversation / Contact) — o PLURAL e RECUSADO com 422. Teto de 300 ids por chamada. Esta e a acao de CONVERSAS e CONTATOS; card do Kanban tem ferramentas proprias (lionchat_kanban_bulk_create / _create_1 / _create_2).",
11831
+ "description": "Executa acao em massa em CONVERSAS ou CONTATOS (roda em segundo plano: responde 200 e aplica depois). Obrigatorios: type e ids. ATENCAO ao `type`: escreva no SINGULAR com inicial maiuscula (Conversation / Contact) — o PLURAL e RECUSADO com 422. Teto de 300 ids por chamada. Esta e a acao de CONVERSAS e CONTATOS; card do Kanban tem ferramentas proprias (lionchat_kanban_bulk_create / _create_1 / _create_2). Em type Conversation, fields.assignee_id, fields.team_id e fields.inbox_id têm de ser da conta: fora disso responde 422 'Invalid <campo>' e nada é aplicado. Para tirar responsável ou time, mande null ou 0; a caixa não aceita vazio.",
11828
11832
  "category": "Operacoes em Massa",
11829
11833
  "params": [
11830
11834
  {
@@ -13649,7 +13653,7 @@
13649
13653
  "method": "POST",
13650
13654
  "path": "/api/v1/accounts/{account_id}/kanban_items/{id}/assign_agent",
13651
13655
  "title": "Atribuir Agente",
13652
- "description": "Atribui agente a item. Cria novo agente Kanban. Obrigatórios: id, agent_id. Valida unicidade quando aplicável. Retorna o agente Kanban criado com ID atribuído.",
13656
+ "description": "Atribui agente a item. Cria novo agente Kanban. Obrigatórios: id, agent_id. Valida unicidade quando aplicável. Retorna o agente Kanban criado com ID atribuído. Só entra usuário desta conta: id de fora recusa, sem mudar nada.",
13653
13657
  "category": "Agentes (Kanban)",
13654
13658
  "params": [
13655
13659
  {
@@ -22005,7 +22009,7 @@
22005
22009
  "method": "POST",
22006
22010
  "path": "/api/v1/accounts/{account_id}/inbox_members",
22007
22011
  "title": "Definir Membros da Inbox",
22008
- "description": "ACRESCENTA agentes como membros da inbox (não substitui a lista nem remove ninguém; para tirar, use inbox_members_destroy). supervisor_ids[] e IGNORADO aqui (todos entram como agentes): para marcar supervisores (veem tudo, fora da distribuicao automatica) use inbox_members_update, que SUBSTITUI a lista inteira. A resposta traz is_supervisor por agente.",
22012
+ "description": "ACRESCENTA agentes como membros da inbox (não substitui a lista nem remove ninguém; para tirar, use inbox_members_destroy). supervisor_ids[] e IGNORADO aqui (todos entram como agentes): para marcar supervisores (veem tudo, fora da distribuicao automatica) use inbox_members_update, que SUBSTITUI a lista inteira. A resposta traz is_supervisor por agente. Só entra usuário desta conta: id de fora, valor que não é número ou user_ids ausente recusa o pedido inteiro com 422, sem mudar nada.",
22009
22013
  "category": "Membros de Inbox",
22010
22014
  "params": [
22011
22015
  {
@@ -22075,7 +22079,7 @@
22075
22079
  "method": "PATCH",
22076
22080
  "path": "/api/v1/accounts/{account_id}/inbox_members",
22077
22081
  "title": "Atualizar Membros da Inbox",
22078
- "description": "Atualiza os agentes membros da inbox (substitui a lista). Use supervisor_ids[] para marcar supervisores (veem tudo, fora da distribuicao automatica); a resposta traz is_supervisor por agente.",
22082
+ "description": "Atualiza os agentes membros da inbox (substitui a lista). Use supervisor_ids[] para marcar supervisores (veem tudo, fora da distribuicao automatica); a resposta traz is_supervisor por agente. Só entra usuário desta conta, nas duas listas: id de fora ou valor que não é número recusa o pedido inteiro com 422, sem mudar nada. As duas listas ausentes também recusam; lista vazia enviada esvazia. Atenção: [null] vale como lista vazia e remove todos, porque o servidor tira o null antes de conferir; confira a variável antes de mandar.",
22079
22083
  "category": "Membros de Inbox",
22080
22084
  "params": [
22081
22085
  {
@@ -22090,7 +22094,7 @@
22090
22094
  "type": "array",
22091
22095
  "location": "body",
22092
22096
  "required": true,
22093
- "description": "Nova lista de IDs"
22097
+ "description": "Nova lista de IDs. [null] vale como lista vazia e remove todos: confira a variável antes de mandar."
22094
22098
  },
22095
22099
  {
22096
22100
  "name": "supervisor_ids",
@@ -22403,7 +22407,7 @@
22403
22407
  "method": "POST",
22404
22408
  "path": "/api/v1/accounts/{account_id}/agents",
22405
22409
  "title": "Convidar Agente",
22406
- "description": "Convida um único agente para a conta. Obrigatório: email. Opcionais: name, role (agent ou administrator), availability, auto_offline, custom_role_id, team_ids (times) e inboxes (caixas com cargo Agente/Supervisor). O agente recebe um convite por e-mail. Times/caixas de um convite ainda NAO confirmado ficam pendentes e sao aplicados automaticamente quando o agente confirmar o cadastro; se o usuario ja for confirmado, valem na hora. Para convidar vários de uma vez, use lionchat_agents_bulk_create.",
22410
+ "description": "Convida um único agente para a conta. Obrigatório: email. Opcionais: name, role (agent ou administrator), availability, auto_offline, custom_role_id, team_ids (times) e inboxes (caixas com cargo Agente/Supervisor). O agente recebe um convite por e-mail. Times/caixas de um convite ainda NAO confirmado ficam pendentes e sao aplicados automaticamente quando o agente confirmar o cadastro; se o usuario ja for confirmado, valem na hora. Para convidar vários de uma vez, use lionchat_agents_bulk_create. custom_role_id tem de ser da conta: fora disso responde 422 e não cria.",
22407
22411
  "category": "Agentes",
22408
22412
  "params": [
22409
22413
  {
@@ -22505,7 +22509,7 @@
22505
22509
  "method": "PATCH",
22506
22510
  "path": "/api/v1/accounts/{account_id}/agents/{id}",
22507
22511
  "title": "Atualizar Agente",
22508
- "description": "Atualiza um agente existente. Campos suportados: name, role (agent ou administrator), availability, auto_offline, custom_role_id, team_ids (times) e inboxes (caixas com cargo Agente/Supervisor). Ao enviar team_ids e/ou inboxes, o agente e RECONCILIADO para o estado enviado: entra nos novos, SAI dos que nao estao na lista e ajusta o cargo por caixa — envie sempre a lista COMPLETA desejada. Se NAO enviar team_ids/inboxes, os vinculos atuais ficam intactos. Use para promover/rebaixar papel, ajustar disponibilidade, aplicar cargo personalizado ou gerenciar times/caixas do agente. PROPRIO USUARIO (02/09/2026): editar a si mesmo e permitido para times e caixas, mas NAO para o cargo — mandar role/custom_role_id do proprio usuario devolve 422 e DESCARTA a chamada inteira (a recusa e antes do update), entao as outras alteracoes tambem se perdem. Troca de cargo so por outro administrador.",
22512
+ "description": "Atualiza um agente existente. Campos suportados: name, role (agent ou administrator), availability, auto_offline, custom_role_id, team_ids (times) e inboxes (caixas com cargo Agente/Supervisor). Ao enviar team_ids e/ou inboxes, o agente e RECONCILIADO para o estado enviado: entra nos novos, SAI dos que nao estao na lista e ajusta o cargo por caixa — envie sempre a lista COMPLETA desejada. Se NAO enviar team_ids/inboxes, os vinculos atuais ficam intactos. Use para promover/rebaixar papel, ajustar disponibilidade, aplicar cargo personalizado ou gerenciar times/caixas do agente. PROPRIO USUARIO (02/09/2026): editar a si mesmo e permitido para times e caixas, mas NAO para o cargo — mandar role/custom_role_id do proprio usuario devolve 422 e DESCARTA a chamada inteira (a recusa e antes do update), entao as outras alteracoes tambem se perdem. Troca de cargo so por outro administrador. custom_role_id tem de ser da conta: fora disso responde 422 e nada do pedido é gravado.",
22509
22513
  "category": "Agentes",
22510
22514
  "params": [
22511
22515
  {
@@ -23337,7 +23341,7 @@
23337
23341
  "type": "object",
23338
23342
  "location": "body",
23339
23343
  "required": false,
23340
- "description": "WhatsApp oficial: { name, namespace, lang_code, parameters }. QR Code/WAHA: { delay_min, delay_max, variations: ['variação 1', ...], bulk_actions: { assignee_id, priority, labels: [] } } CAMPANHA DE FLUXO (flow_id presente): { delay_min, delay_max, daily_cap } — intervalo sorteado em SEGUNDOS entre uma pessoa e outra (padrao 20/40) e teto de PESSOAS por dia (padrao 500 no QR Code; em caixa oficial, sem o campo, herda o limite que a Meta libera). Quem passa do teto do dia entra no dia seguinte no mesmo horario, automaticamente. NAO aceita variations nem bulk_actions (as acoes pos-envio sao blocos do proprio flow)."
23344
+ "description": "WhatsApp oficial: { name, namespace, lang_code, parameters }. QR Code/WAHA: { delay_min, delay_max, variations: ['variação 1', ...], bulk_actions: { assignee_id, priority, labels: [] } } CAMPANHA DE FLUXO (flow_id presente): { delay_min, delay_max, daily_cap } — intervalo sorteado em SEGUNDOS entre uma pessoa e outra (padrao 20/40) e teto de PESSOAS por dia (padrao 500 no QR Code; em caixa oficial, sem o campo, herda o limite que a Meta libera). Quem passa do teto do dia entra no dia seguinte no mesmo horario, automaticamente. NAO aceita variations nem bulk_actions (as acoes pos-envio sao blocos do proprio flow). QR CODE (desde 09/11/2026): a campanha envia UMA mensagem por vez por NUMERO, respeitando a espera escolhida (delay_min/delay_max, de 1 a 3600 s; vazio = 20/40). daily_cap = teto da campanha por dia, no maximo 1000; vazio, zero ou acima de 1000 vira 1000, e sem a chave vale 500. O NUMERO tambem nunca passa de 1000 mensagens de campanha por dia, SOMANDO todas as campanhas dele: o excedente sai no dia seguinte, na hora em que a campanha comecou."
23341
23345
  },
23342
23346
  {
23343
23347
  "name": "flow_id",
@@ -24906,7 +24910,7 @@
24906
24910
  "method": "GET",
24907
24911
  "path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/failed_messages/summary",
24908
24912
  "title": "Falhas de Envio da Caixa (painel)",
24909
- "description": "[NOVO 2026-07-24] Painel 'Falhas de envio' da caixa: mensagens FALHADAS das ultimas 24h agrupadas por motivo — billing (falta de saldo/pagamento), transient (erro comum, reenviavel), window_expired (janela de 24h da API oficial fechou), permanent (erro definitivo) — + grupos informativos campaign (mensagem de campanha NUNCA reenvia por aqui) e partial (multi-anexo parcial, anti-duplicata). group_details traz ate 30 itens por grupo com contato, conversa, erro real e horario. Canais elegiveis: WAHA (QR), WhatsApp oficial e Messenger (Telegram/Instagram nao marcam failed). ADMIN-ONLY. Use antes do bulk_retry pra mostrar ao usuario O QUE falhou e quanto e reenviavel (retryable_count = billing + transient). [ATUALIZADO 2026-07-25] Novo grupo informativo 'deleted' (Excluidas): mensagem falhada que o usuario APAGOU continua no painel como registro, com o motivo ORIGINAL da falha preservado e sem botao de reenviar/cancelar; vem tambem no campo deleted_count e fica FORA de retryable_count e do total. Mensagem CANCELADA (lionchat_conversations_messages_cancel_retry ou bulk_cancel) some do painel de vez.",
24913
+ "description": "[NOVO 2026-07-24] Painel 'Falhas de envio' da caixa: mensagens FALHADAS das ultimas 24h agrupadas por motivo — billing (falta de saldo/pagamento), transient (erro comum, reenviavel), window_expired (janela de 24h da API oficial fechou), permanent (erro definitivo) — + grupos informativos campaign (mensagem de campanha NUNCA reenvia por aqui) e partial (multi-anexo parcial, anti-duplicata). group_details traz ate 30 itens por grupo com contato, conversa, erro real e horario. Canais elegiveis: WAHA (QR), WhatsApp oficial e Messenger (Telegram/Instagram nao marcam failed). ADMIN-ONLY. Use antes do bulk_retry pra mostrar ao usuario O QUE falhou e quanto e reenviavel (retryable_count = billing + transient). [ATUALIZADO 2026-07-25] Novo grupo informativo 'deleted' (Excluidas): mensagem falhada que o usuario APAGOU continua no painel como registro, com o motivo ORIGINAL da falha preservado e sem botao de reenviar/cancelar; vem tambem no campo deleted_count e fica FORA de retryable_count e do total. Mensagem CANCELADA (lionchat_conversations_messages_cancel_retry ou bulk_cancel) some do painel de vez. [2026-11-09] retryable_count passou a ser exatamente o que o bulk_retry agendaria: na caixa oficial com conexao hibrida ja desconta o bloqueio 463 da hibrida e as mensagens dela com a conexao caida (os grupos continuam com a mesma classificacao).",
24910
24914
  "category": "Caixas de Entrada",
24911
24915
  "params": [
24912
24916
  {
@@ -24934,7 +24938,7 @@
24934
24938
  "method": "POST",
24935
24939
  "path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/failed_messages/bulk_retry",
24936
24940
  "title": "Reenvio em Massa das Falhadas",
24937
- "description": "[NOVO 2026-07-24] Reenvia EM LOTE as mensagens falhadas REENVIAVEIS das ultimas 24h da caixa (grupos billing + transient do summary). Teto 500 por clique; cadencia anti-ban (WAHA 8s entre mensagens, demais 1s); trava de 1 lote por caixa (409 bulk_retry_running se ja houver lote rodando); cada mensagem e re-validada na hora do reenvio (ainda failed, sem source_id, sessao WAHA WORKING, janela 24h da oficial) e tem teto de 3 tentativas no erro comum. Mensagens de CAMPANHA e multi-anexo PARCIAL nunca entram (anti-duplicata). ADMIN-ONLY. Sempre chame o summary antes e mostre as contagens ao usuario; confirme antes de disparar (acao de envio em massa real). [2026-07-25] Mensagem CANCELADA ou EXCLUIDA nunca entra no lote (bloqueio na fonte, vale tambem pro botao de reenvio e pra auto-recuperacao do WAHA). Pra descartar em vez de reenviar use lionchat_inboxes_failed_messages_bulk_cancel.",
24941
+ "description": "[NOVO 2026-07-24] Reenvia EM LOTE as mensagens falhadas REENVIAVEIS das ultimas 24h da caixa (grupos billing + transient do summary). Teto 500 por clique; cadencia anti-ban (WAHA 8s entre mensagens, demais 1s); trava de 1 lote por caixa (409 bulk_retry_running se ja houver lote rodando); cada mensagem e re-validada na hora do reenvio (ainda failed, sem source_id, sessao WAHA WORKING, janela 24h da oficial) e tem teto de 3 tentativas no erro comum. Mensagens de CAMPANHA e multi-anexo PARCIAL nunca entram (anti-duplicata). ADMIN-ONLY. Sempre chame o summary antes e mostre as contagens ao usuario; confirme antes de disparar (acao de envio em massa real). [2026-07-25] Mensagem CANCELADA ou EXCLUIDA nunca entra no lote (bloqueio na fonte, vale tambem pro botao de reenvio e pra auto-recuperacao do WAHA). Pra descartar em vez de reenviar use lionchat_inboxes_failed_messages_bulk_cancel. [2026-11-09] Caixa oficial com conexao hibrida: mensagem que sai pela hibrida entra no lote com cadencia de 8s (nunca 1s), so se a conexao hibrida estiver no ar (caida = fica de fora sem gastar tentativa), e o bloqueio 463 dela (abordagem fria) nunca entra. As frases \"Nao enviada: o cliente respondeu antes.\" e \"Nao enviada: a saida pela conexao hibrida foi desligada nesta caixa.\" sao paradas por regra de negocio: ficam fora de todo reenvio automatico (o reenvio de UMA mensagem pelo botao continua possivel).",
24938
24942
  "category": "Caixas de Entrada",
24939
24943
  "params": [
24940
24944
  {
@@ -25371,10 +25375,10 @@
25371
25375
  "method": "GET",
25372
25376
  "path": "/api/v1/accounts/{account_id}/meta_pixel_integrations",
25373
25377
  "title": "Listar Integrações Meta CAPI",
25374
- "description": "Lista os pixels da Meta (Conversions API) configurados na conta. ADMIN-ONLY.",
25378
+ "description": "Lista os pixels da Meta (Conversions API) configurados na conta. ADMIN-ONLY.\n\nSITUACAO (04/11/2026): `last_success_at` preenchido = a Meta ja ACEITOU um envio deste pixel com este token (a tela mostra 'Conectado'). `enabled: true` sem `last_success_at` = 'Salvo, sem envio aceito': ligado, mas a Meta nunca aceitou um evento deste par. `last_success_at` e apagado ao trocar o pixel ou o token e quando o teste e recusado (4xx). Motivo das recusas reais: `last_failure_reason`, `failed_count`, `last_failure_at`.",
25375
25379
  "category": "Integracoes",
25376
25380
  "params": [],
25377
- "returns": "[{ id, pixel_id, enabled, test_event_code, funnel_id }]",
25381
+ "returns": "[{ id, pixel_id, access_token (mascarado), enabled, test_event_code, funnel_id, last_event_sent_at, last_success_at, last_failure_at, failed_count, last_failure_reason, degraded_7d, test_event_active }]",
25378
25382
  "common_use_cases": [
25379
25383
  "Auditar pixels configurados"
25380
25384
  ],
@@ -25387,7 +25391,7 @@
25387
25391
  "method": "POST",
25388
25392
  "path": "/api/v1/accounts/{account_id}/meta_pixel_integrations",
25389
25393
  "title": "Criar Integração Meta CAPI",
25390
- "description": "Conecta um pixel da Meta (CAPI). Nasce desativado (enabled=false) — após test_event com sucesso, ativa sozinho. ADMIN-ONLY. Evento de checkout: nome atual é 'begin_checkout' (antigo InitiateCheckout).",
25394
+ "description": "Conecta um pixel da Meta (CAPI). Nasce desativado (enabled=false) — após test_event com sucesso, ativa sozinho. ADMIN-ONLY. Evento de checkout: nome atual é 'begin_checkout' (antigo InitiateCheckout). Pixel de FUNIL (09/11/2026): com funnel_id, o funil usa SO esse registro; criar com pixel_id vazio deixa o funil SEM Pixel (nasce desligado e nao envia nada, nao cai no Pixel da conta). O Pixel da CONTA (sem funnel_id) continua exigindo pixel_id e token.",
25391
25395
  "category": "Integracoes",
25392
25396
  "params": [
25393
25397
  {
@@ -25432,7 +25436,7 @@
25432
25436
  "method": "PATCH",
25433
25437
  "path": "/api/v1/accounts/{account_id}/meta_pixel_integrations/{id}",
25434
25438
  "title": "Atualizar Integração Meta CAPI",
25435
- "description": "Atualiza pixel/token/código de teste/funil. ADMIN-ONLY.",
25439
+ "description": "Atualiza pixel/token/codigo de teste/funil. ADMIN-ONLY. Trocar o pixel ou o token apaga `last_success_at` (a prova de envio aceito era do par antigo): rode lionchat_meta_pixel_integrations_test_event depois. Pixel de FUNIL (09/11/2026): zerar o pixel_id deixa o funil SEM Pixel (desligado, nao envia e nao cai no Pixel da conta). Pixel de funil DESLIGADO tambem nao envia. Para o funil voltar a usar o Pixel da conta, apague o registro do funil (destroy).",
25436
25440
  "category": "Integracoes",
25437
25441
  "params": [
25438
25442
  {
@@ -25482,7 +25486,7 @@
25482
25486
  "method": "DELETE",
25483
25487
  "path": "/api/v1/accounts/{account_id}/meta_pixel_integrations/{id}",
25484
25488
  "title": "Excluir Integração Meta CAPI",
25485
- "description": "Remove o pixel da conta. DESTRUTIVO — confirme antes. ADMIN-ONLY.",
25489
+ "description": "Remove o pixel da conta. DESTRUTIVO — confirme antes. ADMIN-ONLY. Apagar o registro de um FUNIL faz o funil voltar a usar o Pixel da conta (09/11/2026).",
25486
25490
  "category": "Integracoes",
25487
25491
  "params": [
25488
25492
  {
@@ -25504,7 +25508,7 @@
25504
25508
  "method": "POST",
25505
25509
  "path": "/api/v1/accounts/{account_id}/meta_pixel_integrations/{id}/test_event",
25506
25510
  "title": "Testar Evento Meta CAPI",
25507
- "description": "Dispara evento de teste REAL contra a API da Meta. 200 OK = integração é ativada automaticamente. ADMIN-ONLY.",
25511
+ "description": "Dispara evento de teste REAL contra a API da Meta. 200 OK = integracao ativada (enabled) e `last_success_at` gravado. ADMIN-ONLY.\n\nRECUSA: 502 com `ok: false` e o motivo da Meta em `response.error`; recusa 4xx apaga `last_success_at`. Codigo 100 com subcodigo 33 = este token nao tem acesso a este pixel (numero do pixel errado, ou token gerado em outro pixel). 190 = token invalido ou vencido. `response.error` em texto solto = a Meta nem respondeu (tente de novo).",
25508
25512
  "category": "Integracoes",
25509
25513
  "params": [
25510
25514
  {
@@ -27519,7 +27523,7 @@
27519
27523
  "method": "PATCH",
27520
27524
  "path": "/api/v1/accounts/{account_id}/inboxes/{id}",
27521
27525
  "title": "Atualizar Caixa de Entrada",
27522
- "description": "Atualiza configurações da caixa (nome, saudação, atribuição automática, atributos extras). MUDANÇA DE CONFIG — confirme com o usuário antes. channel.additional_attributes.mark_as_seen (bool, default true, WhatsApp oficial, 2026-06-11): envia o visto/check azul quando o agente abre a conversa — desligar em coexistência app+API. channel.additional_attributes SOMA no 1o nivel nas caixas de WhatsApp/Instagram/Facebook/TikTok (troca inteiro so na caixa de API); no QR Code mande SO as chaves da tela (accept_*, reject_calls, reject_calls_message, mark_as_seen) com true/false de verdade — o resto e interno do sistema. Email (sincronizacao de mao dupla, admin, via objeto channel): two_way_sync_enabled, sync_sent, sync_deletions, sync_read, delete_strategy. CAIXA OFICIAL CRIADA A MAO (26/08): channel.provider_config aceita phone_number_id, business_account_id e api_key — mas o objeto SUBSTITUI o salvo: SEMPRE mande o provider_config INTEIRO (leia o atual antes e reenvie tudo com o campo alterado), senao webhook_verify_token e a marca source sao APAGADOS em silencio e a caixa para de receber. Os 3 campos sao validados JUNTOS na Meta a cada gravacao (422 'Invalid Credentials' = algum dos tres errado ou chave vencida). O telefone da caixa e somente leitura.",
27526
+ "description": "Atualiza configurações da caixa (nome, saudação, atribuição automática, atributos extras). MUDANÇA DE CONFIG — confirme com o usuário antes. channel.additional_attributes.mark_as_seen (bool, default true, WhatsApp oficial, 2026-06-11): envia o visto/check azul quando o agente abre a conversa — desligar em coexistência app+API. channel.additional_attributes SOMA no 1o nivel nas caixas de WhatsApp/Instagram/Facebook/TikTok (troca inteiro so na caixa de API); no QR Code mande SO as chaves da tela (accept_*, reject_calls, reject_calls_message, mark_as_seen) com true/false de verdade — o resto e interno do sistema. Email (sincronizacao de mao dupla, admin, via objeto channel): two_way_sync_enabled, sync_sent, sync_deletions, sync_read, delete_strategy. CAIXA OFICIAL CRIADA A MAO (26/08): channel.provider_config aceita phone_number_id, business_account_id e api_key — mas o objeto SUBSTITUI o salvo: SEMPRE mande o provider_config INTEIRO (leia o atual antes e reenvie tudo com o campo alterado), senao webhook_verify_token e a marca source sao APAGADOS em silencio e a caixa para de receber. Os 3 campos sao validados JUNTOS na Meta a cada gravacao (422 'Invalid Credentials' = algum dos tres errado ou chave vencida). O telefone da caixa e somente leitura. portal_id tem de ser da conta: fora disso responde 422.",
27523
27527
  "category": "Caixas de Entrada",
27524
27528
  "params": [
27525
27529
  {
@@ -28411,7 +28415,7 @@
28411
28415
  "method": "POST",
28412
28416
  "path": "/api/v1/accounts/{account_id}/voip/vtcall_ramals",
28413
28417
  "title": "Definir Ramal VTCall",
28414
- "description": "Define/atualiza o ramal de um agente no VTCall (upsert por user_id, admin).",
28418
+ "description": "Define/atualiza o ramal de um agente no VTCall (upsert por user_id, admin). user_id tem de ser da conta: fora disso responde 422.",
28415
28419
  "category": "Chamadas",
28416
28420
  "params": [
28417
28421
  {
@@ -28633,7 +28637,7 @@
28633
28637
  "method": "PUT",
28634
28638
  "path": "/api/v1/accounts/{account_id}",
28635
28639
  "title": "Atualizar Configurações da Conta",
28636
- "description": "Atualiza as configurações GERAIS da conta (Configurações > Conta). Inclui o FUSO HORÁRIO próprio da conta (novo 2026-07-21): timezone IANA, default America/Sao_Paulo — caixas novas e o Gatilho de Data do FlowBuilder herdam. ATENÇÃO: timezone inválido é DESCARTADO em silêncio (não dá erro) — confirme com account_show depois. Não confundir com account_update (que é o PERFIL do usuário logado). NOTA 18/08: mudar o timezone da conta move a fronteira do dia dos filtros de DATA FIXA e das datas relativas (contatos, conversas, segmentos e condicoes de automacao).",
28640
+ "description": "Atualiza as configurações GERAIS da conta (Configurações > Conta). Inclui o FUSO HORÁRIO próprio da conta (novo 2026-07-21): timezone IANA, default America/Sao_Paulo — caixas novas e o Gatilho de Data do FlowBuilder herdam. ATENÇÃO: timezone inválido é DESCARTADO em silêncio (não dá erro) — confirme com account_show depois. TRANSCRICAO DE AUDIO (04/11/2026): `audio_transcriptions` + `audio_transcription_provider`, para toda conta, com a chave do cliente. Não confundir com account_update (que é o PERFIL do usuário logado). NOTA 18/08: mudar o timezone da conta move a fronteira do dia dos filtros de DATA FIXA e das datas relativas (contatos, conversas, segmentos e condicoes de automacao).",
28637
28641
  "category": "Conta",
28638
28642
  "params": [
28639
28643
  {
@@ -28670,12 +28674,27 @@
28670
28674
  "location": "body",
28671
28675
  "required": false,
28672
28676
  "description": "Fuso horário IANA da conta (ex. America/Sao_Paulo, America/Manaus). Gravado em custom_attributes.timezone; vem no topo do payload da conta. Inválido = ignorado em silêncio."
28677
+ },
28678
+ {
28679
+ "name": "audio_transcriptions",
28680
+ "type": "boolean",
28681
+ "location": "body",
28682
+ "required": false,
28683
+ "description": "Liga/desliga 'Transcrever Mensagens de Audio' (Configuracoes > Conta). Desde 04/11/2026 vale para TODA conta, com ou sem Agente de IA; nasce desligada e usa a chave do proprio cliente (OpenAI ou Groq cadastrada em Integracoes)."
28684
+ },
28685
+ {
28686
+ "name": "audio_transcription_provider",
28687
+ "type": "string",
28688
+ "location": "body",
28689
+ "required": false,
28690
+ "description": "Provedor da transcricao: 'openai' ou 'groq'. So funciona se a conta tiver a chave daquele provedor. Sem escolher, usa a OpenAI se houver chave e depois a Groq."
28673
28691
  }
28674
28692
  ],
28675
28693
  "returns": "Conta atualizada (payload completo, com timezone no topo)",
28676
28694
  "common_use_cases": [
28677
28695
  "Mudar o fuso horário da conta",
28678
- "Atualizar nome/idioma/e-mail de suporte"
28696
+ "Atualizar nome/idioma/e-mail de suporte",
28697
+ "Ligar a transcricao de audio da conta"
28679
28698
  ],
28680
28699
  "related_tools": [
28681
28700
  "lionchat_account_show",
@@ -28719,7 +28738,7 @@
28719
28738
  "method": "POST",
28720
28739
  "path": "/api/v1/accounts/{account_id}/teams/{team_id}/team_members/remove_agents_with_reassignment",
28721
28740
  "title": "Remover agentes do time reatribuindo os cards",
28722
- "description": "Remove agentes de um time vinculado a funil Kanban REATRIBUINDO os cards deles em uma operação atômica (2026-07-21). Use a prévia (kanban_reassignment_preview) antes pra montar o destino por funil. 422 {error: 'reassignment_failed'} se algum destino for inválido — nada é aplicado.",
28741
+ "description": "Remove agentes de um time vinculado a funil Kanban REATRIBUINDO os cards deles em uma operação atômica (2026-07-21). Use a prévia (kanban_reassignment_preview) antes pra montar o destino por funil. 422 {error: 'reassignment_failed'} se algum destino for inválido — nada é aplicado. Só entra usuário desta conta, nas duas listas: id de fora recusa o pedido inteiro com 401 'IDs de usuario invalidos', sem mudar nada. Número em texto é aceito. Atenção: [null] vale como lista vazia e remove todos, porque o servidor tira o null antes de conferir; confira a variável antes de mandar.",
28723
28742
  "category": "Times",
28724
28743
  "params": [
28725
28744
  {
@@ -31423,7 +31442,7 @@
31423
31442
  "method": "POST",
31424
31443
  "path": "/api/v1/accounts/{account_id}/conversations/{conversation_id}/participants",
31425
31444
  "title": "Adicionar Participantes",
31426
- "description": "ACRESCENTA atendentes à lista de quem acompanha a conversa, sem mexer em quem já está — quem já é participante é simplesmente ignorado. Mande user_ids como lista de IDs de usuário. Se a intenção for deixar a lista EXATAMENTE igual à enviada (entrando e saindo gente), use a versão PATCH desta mesma rota.",
31445
+ "description": "ACRESCENTA atendentes à lista de quem acompanha a conversa, sem mexer em quem já está — quem já é participante é simplesmente ignorado. Mande user_ids como lista de IDs de usuário. Se a intenção for deixar a lista EXATAMENTE igual à enviada (entrando e saindo gente), use a versão PATCH desta mesma rota. Só entra quem é da conta: número de fora responde 422 e nada é gravado. Colega da conta sem acesso à caixa não entra e não aparece na resposta: o retorno lista só quem entrou.",
31427
31446
  "category": "Conversas",
31428
31447
  "params": [
31429
31448
  {
@@ -31465,7 +31484,7 @@
31465
31484
  "method": "PATCH",
31466
31485
  "path": "/api/v1/accounts/{account_id}/conversations/{conversation_id}/participants",
31467
31486
  "title": "Substituir Participantes",
31468
- "description": "SUBSTITUI a lista inteira de quem acompanha a conversa pela lista enviada em user_ids: quem está na lista e ainda não acompanhava entra, e quem acompanhava e NÃO está na lista é REMOVIDO. Mandar lista vazia tira todo mundo. Se a intenção é só acrescentar sem tirar ninguém, use o POST desta mesma rota.",
31487
+ "description": "SUBSTITUI a lista inteira de quem acompanha a conversa pela lista enviada em user_ids: quem está na lista e ainda não acompanhava entra, e quem acompanhava e NÃO está na lista é REMOVIDO. Mandar lista vazia tira todo mundo. Se a intenção é só acrescentar sem tirar ninguém, use o POST desta mesma rota. Quem ENTRA tem de ser da conta: número de fora responde 422 e a lista fica como estava. Quem já acompanhava e saiu da conta pode continuar na lista enviada.",
31469
31488
  "category": "Conversas",
31470
31489
  "params": [
31471
31490
  {
@@ -33033,7 +33052,107 @@
33033
33052
  "related_tools": [
33034
33053
  "lionchat_captain_assistants_list",
33035
33054
  "lionchat_captain_assistants_show",
33036
- "lionchat_reports_summary"
33055
+ "lionchat_reports_summary",
33056
+ "lionchat_captain_judge_runs_results"
33057
+ ]
33058
+ },
33059
+ {
33060
+ "id": "lionchat_captain_judge_runs_current",
33061
+ "method": "GET",
33062
+ "path": "/api/v1/accounts/{account_id}/captain/judge_runs/current",
33063
+ "title": "Juiz do Supervisor: andamento",
33064
+ "description": "Devolve a análise viva ou a última da conta: situação, quantas conversas foram escolhidas e lidas, quantas ficaram de fora e por quê, tokens e custo. Só leitura. A análise é iniciada apenas pelo botão do Supervisor no painel, por um administrador: não há ferramenta para iniciar, porque gasta a chave da conta.",
33065
+ "category": "Assistentes",
33066
+ "params": [],
33067
+ "returns": "{ run: { id, status, days, assistant_ids, selected_count, analyzed_count, pending_count, selecting, not_analyzed, error_code, input_tokens, cost_usd, created_at, finished_at } } ou { run: null }",
33068
+ "common_use_cases": [
33069
+ "Saber se há análise rodando",
33070
+ "Ver quando foi a última análise e o que ficou de fora"
33071
+ ],
33072
+ "related_tools": [
33073
+ "lionchat_captain_supervisor_show",
33074
+ "lionchat_captain_judge_runs_results"
33075
+ ]
33076
+ },
33077
+ {
33078
+ "id": "lionchat_captain_judge_runs_results",
33079
+ "method": "GET",
33080
+ "path": "/api/v1/accounts/{account_id}/captain/judge_runs/results",
33081
+ "title": "Juiz do Supervisor: resultados por IA",
33082
+ "description": "O que o juiz respondeu nas conversas já analisadas, por IA: nota do atendimento de 1 a 5, disse e não fez, não soube responder, perguntas sem resposta, pediu dado de novo, cliente irritado, o que travou e objeções nas conversas que não converteram, e a média de 0 a 100% de quanto a IA seguiu cada cenário (average vem de 0 a 1, do menor para o maior). Só leitura. Traga junto os avisos em warnings: com menos de 30 conversas analisadas o número ainda não permite concluir. O juiz não muda nada na conversa.",
33083
+ "category": "Assistentes",
33084
+ "params": [
33085
+ {
33086
+ "name": "days",
33087
+ "type": "number",
33088
+ "location": "query",
33089
+ "required": false,
33090
+ "description": "Período em dias, pela data da última fala da IA. Padrão 30."
33091
+ }
33092
+ ],
33093
+ "returns": "{ has_judgments, assistants: [{ id, name, analyzed, note_average, said_not_done, didnt_know, irritated, asked_again, unanswered, lost_count, objections, stuck, scenarios, same_model_as_judge }], warnings }",
33094
+ "common_use_cases": [
33095
+ "Entender por que uma IA perde",
33096
+ "Achar o cenário que precisa de ajuste",
33097
+ "Comparar a qualidade do atendimento entre IAs"
33098
+ ],
33099
+ "related_tools": [
33100
+ "lionchat_captain_supervisor_show",
33101
+ "lionchat_captain_judge_runs_conversations"
33102
+ ]
33103
+ },
33104
+ {
33105
+ "id": "lionchat_captain_judge_runs_conversations",
33106
+ "method": "GET",
33107
+ "path": "/api/v1/accounts/{account_id}/captain/judge_runs/conversations",
33108
+ "title": "Juiz do Supervisor: conversas por trás de um número",
33109
+ "description": "Lista as conversas que formam um número do juiz, só as que a pessoa conectada pode abrir. Só leitura. Para scenario, value é o id do cenário e a lista vem da menor para a maior porcentagem.",
33110
+ "category": "Assistentes",
33111
+ "params": [
33112
+ {
33113
+ "name": "assistant_id",
33114
+ "type": "number",
33115
+ "location": "query",
33116
+ "required": true,
33117
+ "description": "ID da IA."
33118
+ },
33119
+ {
33120
+ "name": "metric",
33121
+ "type": "string",
33122
+ "location": "query",
33123
+ "required": true,
33124
+ "description": "said_not_done, didnt_know, unanswered, asked_again, irritated, note, analyzed, stuck, objection ou scenario."
33125
+ },
33126
+ {
33127
+ "name": "value",
33128
+ "type": "string",
33129
+ "location": "query",
33130
+ "required": false,
33131
+ "description": "Para stuck e objection, a opção (ex.: ia_errou, preco). Para scenario, o id do cenário."
33132
+ },
33133
+ {
33134
+ "name": "days",
33135
+ "type": "number",
33136
+ "location": "query",
33137
+ "required": false,
33138
+ "description": "Período em dias. Padrão 30."
33139
+ },
33140
+ {
33141
+ "name": "page",
33142
+ "type": "number",
33143
+ "location": "query",
33144
+ "required": false,
33145
+ "description": "Página; 25 por página."
33146
+ }
33147
+ ],
33148
+ "returns": "{ total, page, per_page, conversations: [{ display_id, status, contact_name, inbox_name, value }] }",
33149
+ "common_use_cases": [
33150
+ "Abrir as conversas em que a IA disse e não fez",
33151
+ "Ver as conversas com a menor nota de um cenário"
33152
+ ],
33153
+ "related_tools": [
33154
+ "lionchat_captain_judge_runs_results",
33155
+ "lionchat_conversations_show"
33037
33156
  ]
33038
33157
  },
33039
33158
  {
@@ -33704,7 +33823,7 @@
33704
33823
  "method": "GET",
33705
33824
  "path": "/api/v1/accounts/{account_id}/funnels/{funnel_id}/meta_capi_events",
33706
33825
  "title": "Histórico de Eventos Meta CAPI do Funil",
33707
- "description": "SÓ LEITURA. Lista os eventos de conversão Meta CAPI disparados pelo funil (50 por página, mais novos primeiro) com status (pending | sent | failed | duplicate), nome do evento, como foi disparado (trigger_type: stage_move | card_won | card_lost | manual | automation | auto_create | test | booking_reservation | lead_form), motivo da falha, o card de origem (kanban_item_title), por onde saiu (action_source: website | business_messaging) e fallback_reason — preenchido quando um lead de ANÚNCIO DE WHATSAPP saiu como site (plano B): lionchat:dataset_nao_configurado (caixa sem 'Vincular à Meta'), lionchat:caixa_token_recusado, lionchat:caixa_nao_encontrada, lionchat:caixa_sem_token, lionchat:dataset_id_invalido, lionchat:desligado_pelo_cliente, lionchat:nome_sem_equivalente_whatsapp, ou '<subcode>: <mensagem da Meta>'. Responde 'por que a venda não apareceu no Meta CAPI?'. Administrador ou cargo com marketing_integrations_manage (403).",
33826
+ "description": "SÓ LEITURA. Lista os eventos de conversão Meta CAPI disparados pelo funil (50 por página, mais novos primeiro) com status (pending | sent | failed | duplicate), nome do evento, como foi disparado (trigger_type: stage_move | card_won | card_lost | manual | automation | auto_create | test | booking_reservation | lead_form), motivo da falha, o card de origem (kanban_item_title), por onde saiu (action_source: website | business_messaging) e fallback_reason — preenchido quando um lead de ANÚNCIO DE WHATSAPP saiu como site (plano B): lionchat:dataset_nao_configurado (caixa sem 'Vincular à Meta'), lionchat:caixa_token_recusado, lionchat:caixa_nao_encontrada, lionchat:caixa_sem_token, lionchat:dataset_id_invalido, lionchat:desligado_pelo_cliente, lionchat:nome_sem_equivalente_whatsapp, ou '<subcode>: <mensagem da Meta>'. Responde 'por que a venda não apareceu no Meta CAPI?'. Administrador ou cargo com marketing_integrations_manage (403). Desde 09/11/2026 cada linha traz inbox_name: a caixa de entrada da conversa do card (null = card sem conversa ou caixa excluida).",
33708
33827
  "category": "Integracoes",
33709
33828
  "params": [
33710
33829
  {
@@ -33771,7 +33890,7 @@
33771
33890
  "description": "Página (50 por página)"
33772
33891
  }
33773
33892
  ],
33774
- "returns": "{data: [{id, event_name, event_id, status, trigger_type, failure_reason, fallback_reason, action_source, created_at, sent_at, kanban_item_id, kanban_item_title, fbtrace_id}], meta: {total, page}}",
33893
+ "returns": "{data: [{id, event_name, event_id, status, trigger_type, failure_reason, fallback_reason, action_source, created_at, sent_at, kanban_item_id, kanban_item_title, inbox_name, fbtrace_id}], meta: {total, page}}",
33775
33894
  "common_use_cases": [
33776
33895
  "Ver se o evento de conversão chegou no Meta CAPI",
33777
33896
  "Listar os disparos falhados pra reenviar",
@@ -33854,7 +33973,7 @@
33854
33973
  "method": "GET",
33855
33974
  "path": "/api/v1/accounts/{account_id}/funnels/{funnel_id}/ga4_events",
33856
33975
  "title": "Histórico de Eventos GA4 do Funil",
33857
- "description": "SÓ LEITURA. Lista os eventos de conversão GA4 disparados pelo funil (50 por página, mais novos primeiro) com status (pending | sent | failed), nome do evento, como foi disparado (trigger_type: stage_move | card_won | card_lost | auto_create | manual | automation | booking_reservation | test | lead_form), motivo da falha e o card de origem (kanban_item_title). Responde 'por que a venda não apareceu no GA4?'. Administrador ou cargo com marketing_integrations_manage (403).",
33976
+ "description": "SÓ LEITURA. Lista os eventos de conversão GA4 disparados pelo funil (50 por página, mais novos primeiro) com status (pending | sent | failed), nome do evento, como foi disparado (trigger_type: stage_move | card_won | card_lost | auto_create | manual | automation | booking_reservation | test | lead_form), motivo da falha e o card de origem (kanban_item_title). Responde 'por que a venda não apareceu no GA4?'. Administrador ou cargo com marketing_integrations_manage (403). Desde 09/11/2026 cada linha traz inbox_name: a caixa de entrada da conversa do card (null = card sem conversa ou caixa excluida).",
33858
33977
  "category": "Integracoes",
33859
33978
  "params": [
33860
33979
  {
@@ -33914,7 +34033,7 @@
33914
34033
  "description": "Página (50 por página)"
33915
34034
  }
33916
34035
  ],
33917
- "returns": "{data: [{id, event_name, event_id, status, trigger_type, failure_reason, created_at, sent_at, kanban_item_id, kanban_item_title}], meta: {total, page}}",
34036
+ "returns": "{data: [{id, event_name, event_id, status, trigger_type, failure_reason, created_at, sent_at, kanban_item_id, kanban_item_title, inbox_name}], meta: {total, page}}",
33918
34037
  "common_use_cases": [
33919
34038
  "Ver se o evento de conversão chegou no GA4",
33920
34039
  "Listar os disparos falhados pra reenviar"
@@ -33996,7 +34115,7 @@
33996
34115
  "method": "GET",
33997
34116
  "path": "/api/v1/accounts/{account_id}/funnels/{funnel_id}/google_ads_conversions",
33998
34117
  "title": "Histórico de Eventos Google Ads do Funil",
33999
- "description": "SÓ LEITURA. Lista os eventos de conversão Google Ads disparados pelo funil (50 por página, mais novos primeiro) com status (pending | sent | failed), nome do evento, como foi disparado (trigger_type: stage_move | card_won | card_lost | auto_create | manual | automation | booking_reservation | test), motivo da falha e o card de origem (kanban_item_title). Responde 'por que a venda não apareceu no Google Ads?'. Administrador ou cargo com marketing_integrations_manage (403).",
34118
+ "description": "SÓ LEITURA. Lista os eventos de conversão Google Ads disparados pelo funil (50 por página, mais novos primeiro) com status (pending | sent | failed), nome do evento, como foi disparado (trigger_type: stage_move | card_won | card_lost | auto_create | manual | automation | booking_reservation | test), motivo da falha e o card de origem (kanban_item_title). Responde 'por que a venda não apareceu no Google Ads?'. Administrador ou cargo com marketing_integrations_manage (403). Desde 09/11/2026 cada linha traz inbox_name: a caixa de entrada da conversa do card (null = card sem conversa ou caixa excluida).",
34000
34119
  "category": "Integracoes",
34001
34120
  "params": [
34002
34121
  {
@@ -34056,7 +34175,7 @@
34056
34175
  "description": "Página (50 por página)"
34057
34176
  }
34058
34177
  ],
34059
- "returns": "{data: [{id, event_name, event_id, status, trigger_type, failure_reason, created_at, sent_at, kanban_item_id, kanban_item_title}], meta: {total, page}}",
34178
+ "returns": "{data: [{id, event_name, event_id, status, trigger_type, failure_reason, created_at, sent_at, kanban_item_id, kanban_item_title, inbox_name}], meta: {total, page}}",
34060
34179
  "common_use_cases": [
34061
34180
  "Ver se o evento de conversão chegou no Google Ads",
34062
34181
  "Listar os disparos falhados pra reenviar"