@lionchat/mcp-server 1.4.0 → 1.6.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
@@ -698,7 +698,7 @@
698
698
  "method": "POST",
699
699
  "path": "/api/v1/accounts/{account_id}/contacts/filter",
700
700
  "title": "Filtrar Contatos",
701
- "description": "Filtra contatos com condições avançadas (múltiplas condições combinadas com AND/OR, operadores como contains, is_present, days_before, starts_with, e filtro por custom_attributes). Ver a seção Casos de Uso e Filtros para a lista completa de atributos e operadores. Filtragem avançada de contatos via payload de condições. Múltiplos operadores: equal_to, contains, includes, is_present, etc.\n\nNOVO (2026-06): filtro por REGISTROS VINCULADOS — acha o contato pelo que aconteceu com ele: attribute_key 'conversation_search' (conversa vinculada: status/etiquetas/caixa), condicoes com custom_attribute_type 'conversation_attribute' (atributos da conversa) e attribute_key 'kanban_card' (card vinculado: funil/etapa/prioridade/status). Combinaveis com E/OU.",
701
+ "description": "Filtra contatos com condicoes avancadas (payload de condicoes). 15/pagina.\n\nCHAVES FILTRAVEIS: name, email, identifier (equal_to/not_equal_to/contains/does_not_contain — match parcial case-insensitive); phone_number (+starts_with); country_code, city, company; cpf, cnpj, rg, profession (cadastral; cpf/cnpj/rg aceitam is_present/is_not_present); labels; created_at, last_activity_at (is_greater_than/is_less_than/days_before); blocked (equal_to true/false); QUALQUER outra chave = atributo personalizado do contato.\n\nREGISTROS VINCULADOS (acha o contato pelo que aconteceu com ele): attribute_key 'conversation_search' (conversa vinculada: conversation_status/conversation_labels/conversation_inbox_id), condicoes com custom_attribute_type 'conversation_attribute' (atributo da conversa vinculada) e attribute_key 'kanban_card' (card vinculado: card_funnel_id/card_stage/card_priority/card_status). Combinaveis com E/OU.\n\nCada condicao: {attribute_key, filter_operator, values[], query_operator:'and'|'or', custom_attribute_type?}. Operador fora da lista da chave = 422.",
702
702
  "category": "Contatos",
703
703
  "params": [
704
704
  {
@@ -1313,6 +1313,47 @@
1313
1313
  ],
1314
1314
  "related_tools": []
1315
1315
  },
1316
+ {
1317
+ "id": "lionchat_conversations_toggle_status",
1318
+ "method": "POST",
1319
+ "path": "/api/v1/accounts/{account_id}/conversations/{conversation_id}/toggle_status",
1320
+ "title": "Resolver / Reabrir / Mudar Status da Conversa",
1321
+ "description": "Muda o status da conversa: fechar/encerrar/resolver (status=resolved), reabrir (open), marcar pendente (pending) ou adiar (snoozed, com snoozed_until). É A ferramenta para 'fechar a conversa' — a lionchat_conversations_update NÃO altera status. Sem o param status, alterna resolved↔open. ATENÇÃO: reabrir conversa antiga de contato com trava de conversa única pode ser recusado (reopen_blocked).",
1322
+ "category": "Conversas",
1323
+ "params": [
1324
+ {
1325
+ "name": "conversation_id",
1326
+ "type": "integer",
1327
+ "location": "path",
1328
+ "required": true,
1329
+ "description": "display_id da conversa"
1330
+ },
1331
+ {
1332
+ "name": "status",
1333
+ "type": "string",
1334
+ "location": "body",
1335
+ "required": false,
1336
+ "description": "open, resolved, pending ou snoozed (sem ele: alterna resolved/open)"
1337
+ },
1338
+ {
1339
+ "name": "snoozed_until",
1340
+ "type": "string",
1341
+ "location": "body",
1342
+ "required": false,
1343
+ "description": "Até quando adiar (ISO 8601), junto com status=snoozed"
1344
+ }
1345
+ ],
1346
+ "returns": "200 {payload: {success: true, current_status, conversation_id}}",
1347
+ "common_use_cases": [
1348
+ "Fechar/resolver uma conversa após o atendimento",
1349
+ "Reabrir uma conversa resolvida",
1350
+ "Adiar (snooze) uma conversa até uma data"
1351
+ ],
1352
+ "related_tools": [
1353
+ "lionchat_conversations_show",
1354
+ "lionchat_conversations_update"
1355
+ ]
1356
+ },
1316
1357
  {
1317
1358
  "id": "lionchat_conversations_update",
1318
1359
  "method": "PATCH",
@@ -1385,7 +1426,7 @@
1385
1426
  "method": "POST",
1386
1427
  "path": "/api/v1/accounts/{account_id}/conversations/filter",
1387
1428
  "title": "Filtrar Conversas",
1388
- "description": "Filtra conversas com condições avançadas (múltiplas condições AND/OR, operadores como equal_to, contains, is_present, days_before, filtro por custom_attributes). Ordenação fixa: last_activity_at DESC. Paginação: 25 registros/página. Ver a seção Casos de Uso e Filtros para a lista completa de atributos e operadores. Filtragem avançada de conversas via payload de condições. Múltiplos operadores: equal_to, contains, includes, is_present, etc.",
1429
+ "description": "Filtra conversas com condicoes avancadas (payload de condicoes, mesmas da tela). Ordenacao fixa last_activity_at DESC, 25/pagina.\n\nCHAVES FILTRAVEIS (attribute_key -> operadores): status, chat_type, priority (equal_to/not_equal_to); assignee_id, inbox_id, team_id, campaign_id, captain_assistant_id, labels (equal_to/not_equal_to/is_present/is_not_present); display_id (equal_to/not_equal_to/contains/does_not_contain); created_at, last_activity_at (is_greater_than/is_less_than/days_before — valor de data); browser_language, conversation_language, referer, mail_subject; card_funnel_stage (conversa POR CARD do Kanban — valor 'funnel:<id>' ou 'stage:<id>:<chave_etapa>'); QUALQUER outra chave = atributo personalizado (use custom_attribute_type na condicao: 'conversation_attribute' ou 'contact_attribute').\n\nCada condicao: {attribute_key, filter_operator, values[], query_operator:'and'|'or', custom_attribute_type?}. Operador fora da lista da chave = 422 'Operador invalido' (ex: labels NAO aceita 'includes' — use equal_to).",
1389
1430
  "category": "Conversas",
1390
1431
  "params": [
1391
1432
  {
@@ -2211,7 +2252,7 @@
2211
2252
  "method": "POST",
2212
2253
  "path": "/api/v1/accounts/{account_id}/conversations/{conversation_id}/messages/{id}/retry",
2213
2254
  "title": "Reenviar Mensagem",
2214
- "description": "Reenvia uma mensagem que falhou. Obrigatorios: conversation_id, id.",
2255
+ "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.",
2215
2256
  "category": "Mensagens",
2216
2257
  "params": [
2217
2258
  {
@@ -2238,7 +2279,9 @@
2238
2279
  "related_tools": [
2239
2280
  "lionchat_conversations_messages_list",
2240
2281
  "lionchat_conversations_messages_create",
2241
- "lionchat_conversations_messages_update"
2282
+ "lionchat_conversations_messages_update",
2283
+ "lionchat_inboxes_failed_messages_summary",
2284
+ "lionchat_inboxes_failed_messages_bulk_retry"
2242
2285
  ]
2243
2286
  },
2244
2287
  {
@@ -3463,7 +3506,7 @@
3463
3506
  "method": "GET",
3464
3507
  "path": "/api/v1/accounts/{account_id}/kanban_items/filter",
3465
3508
  "title": "Filtrar Items",
3466
- "description": "Filtra items com condições avançadas (mesmos filtros do index). Filtragem avançada de itens Kanban via payload de condições. Múltiplos operadores: equal_to, contains, includes, is_present, etc.",
3509
+ "description": "Filtra cards do Kanban com o filtro RICO da plataforma (mesmo motor da tela '+ Filtro'). Filtros REAIS aplicados: etapas (stages), prioridades, status do card (open/won/lost), agente, faixa de valor, periodo de criacao (date_start/end), periodo de agendamento (scheduled_date_*), tarefas (task_filter), canal, etiqueta da conversa, oferta e atributos personalizados de card/contato/conversa (JSON-string + custom_attribute_match all/any). ATENCAO: SEM paginacao — retorna ate 5000 cards em ordem created_at DESC, shape {items:[], total, filters}. NAO existe filtro por time aqui (use lionchat_kanban_items_list_3 pra relatorio por time, ou filtre por agent_id); ordenacao e fixa. (2026-07-24: removidos os parametros stage_id/inbox_id/sort_by/sort_direction/page — eram aceitos mas IGNORADOS pelo backend; use stages[] no lugar de stage_id.)",
3467
3510
  "category": "Itens",
3468
3511
  "params": [
3469
3512
  {
@@ -3473,13 +3516,6 @@
3473
3516
  "required": true,
3474
3517
  "description": "ID do funil"
3475
3518
  },
3476
- {
3477
- "name": "stage_id",
3478
- "type": "string",
3479
- "location": "query",
3480
- "required": false,
3481
- "description": "Etapa"
3482
- },
3483
3519
  {
3484
3520
  "name": "agent_id",
3485
3521
  "type": "integer",
@@ -3518,39 +3554,103 @@
3518
3554
  "description": "Valor máximo"
3519
3555
  },
3520
3556
  {
3521
- "name": "inbox_id",
3522
- "type": "integer",
3557
+ "name": "stages",
3558
+ "query_name": "stages[]",
3559
+ "type": "array",
3523
3560
  "location": "query",
3524
3561
  "required": false,
3525
- "description": "Inbox"
3562
+ "description": "Etapas do funil (chaves internas/slugs, ex: ['novo_lead','qualificado'])"
3526
3563
  },
3527
3564
  {
3528
- "name": "sort_by",
3565
+ "name": "date_start",
3529
3566
  "type": "string",
3530
3567
  "location": "query",
3531
3568
  "required": false,
3532
- "description": "Campo de ordenação"
3569
+ "description": "Criado a partir de (YYYY-MM-DD) — filtra created_at do card"
3533
3570
  },
3534
3571
  {
3535
- "name": "sort_direction",
3572
+ "name": "date_end",
3536
3573
  "type": "string",
3537
3574
  "location": "query",
3538
3575
  "required": false,
3539
- "description": "asc ou desc"
3576
+ "description": "Criado ate (YYYY-MM-DD)"
3540
3577
  },
3541
3578
  {
3542
- "name": "page",
3543
- "type": "integer",
3579
+ "name": "scheduled_date_start",
3580
+ "type": "string",
3544
3581
  "location": "query",
3545
3582
  "required": false,
3546
- "description": "Página"
3583
+ "description": "Agendamento a partir de (YYYY-MM-DD) — considera scheduled_at/deadline_at do card E tarefas da agenda vinculadas"
3584
+ },
3585
+ {
3586
+ "name": "scheduled_date_end",
3587
+ "type": "string",
3588
+ "location": "query",
3589
+ "required": false,
3590
+ "description": "Agendamento ate (YYYY-MM-DD)"
3591
+ },
3592
+ {
3593
+ "name": "task_filter",
3594
+ "type": "string",
3595
+ "location": "query",
3596
+ "required": false,
3597
+ "description": "Filtro por tarefas vinculadas: has_task | no_task | today | tomorrow | this_week | overdue"
3598
+ },
3599
+ {
3600
+ "name": "channel",
3601
+ "type": "string",
3602
+ "location": "query",
3603
+ "required": false,
3604
+ "description": "Tipo de canal da conversa do card, SEM o prefixo Channel:: (ex: Waha, Whatsapp, Instagram, Email)"
3605
+ },
3606
+ {
3607
+ "name": "label",
3608
+ "type": "string",
3609
+ "location": "query",
3610
+ "required": false,
3611
+ "description": "Etiqueta aplicada na CONVERSA vinculada ao card (match parcial por titulo)"
3612
+ },
3613
+ {
3614
+ "name": "offer",
3615
+ "type": "string",
3616
+ "location": "query",
3617
+ "required": false,
3618
+ "description": "Descricao exata de uma oferta presente no card (item_details.offers)"
3619
+ },
3620
+ {
3621
+ "name": "card_custom_attribute_filters",
3622
+ "type": "string",
3623
+ "location": "query",
3624
+ "required": false,
3625
+ "description": "STRING JSON (array serializado) de condicoes sobre atributos personalizados do CARD: [{\"attribute_key\":\"...\",\"filter_operator\":\"equal_to|not_equal_to|contains|does_not_contain|is_present|is_not_present\",\"values\":[\"...\"]}]. Ex: \"[{\\\"attribute_key\\\":\\\"origem\\\",\\\"filter_operator\\\":\\\"equal_to\\\",\\\"values\\\":[\\\"indicacao\\\"]}]\". NAO enviar como array nativo — o backend faz JSON.parse da string."
3626
+ },
3627
+ {
3628
+ "name": "contact_custom_attribute_filters",
3629
+ "type": "string",
3630
+ "location": "query",
3631
+ "required": false,
3632
+ "description": "STRING JSON (array serializado) de condicoes sobre atributos personalizados do CONTATO vinculado: [{\"attribute_key\":\"...\",\"filter_operator\":\"equal_to|not_equal_to|contains|does_not_contain|is_present|is_not_present\",\"values\":[\"...\"]}]. Ex: \"[{\\\"attribute_key\\\":\\\"origem\\\",\\\"filter_operator\\\":\\\"equal_to\\\",\\\"values\\\":[\\\"indicacao\\\"]}]\". NAO enviar como array nativo — o backend faz JSON.parse da string."
3633
+ },
3634
+ {
3635
+ "name": "conversation_custom_attribute_filters",
3636
+ "type": "string",
3637
+ "location": "query",
3638
+ "required": false,
3639
+ "description": "STRING JSON (array serializado) de condicoes sobre atributos personalizados da CONVERSA vinculada: [{\"attribute_key\":\"...\",\"filter_operator\":\"equal_to|not_equal_to|contains|does_not_contain|is_present|is_not_present\",\"values\":[\"...\"]}]. Ex: \"[{\\\"attribute_key\\\":\\\"origem\\\",\\\"filter_operator\\\":\\\"equal_to\\\",\\\"values\\\":[\\\"indicacao\\\"]}]\". NAO enviar como array nativo — o backend faz JSON.parse da string."
3640
+ },
3641
+ {
3642
+ "name": "custom_attribute_match",
3643
+ "type": "string",
3644
+ "location": "query",
3645
+ "required": false,
3646
+ "description": "'all' (E — todas as condicoes de atributo, padrao) ou 'any' (OU — qualquer uma)"
3547
3647
  }
3548
3648
  ],
3549
- "returns": "payload (array de itens Kanban filtrados)",
3649
+ "returns": "{ items: [cards serializados], total: <int>, filters: <eco dos filtros> } — cap 5000, sem paginacao",
3550
3650
  "common_use_cases": [
3551
- "Filtros complexos com múltiplas condições",
3552
- "Relatórios customizados",
3553
- "Substituir vários list calls por 1 filtro estruturado"
3651
+ "Relatorio de cards por periodo + etapa + valor",
3652
+ "Cards com atributo personalizado especifico (card/contato/conversa)",
3653
+ "Cards com tarefa atrasada (task_filter=overdue) ou sem tarefa"
3554
3654
  ],
3555
3655
  "related_tools": [
3556
3656
  "lionchat_kanban_items_list",
@@ -3689,8 +3789,8 @@
3689
3789
  "id": "lionchat_kanban_items_list_3",
3690
3790
  "method": "GET",
3691
3791
  "path": "/api/v1/accounts/{account_id}/kanban_items/reports",
3692
- "title": "Relatórios Kanban",
3693
- "description": "Retorna relatórios agregados do kanban. Lista itens Kanban paginados (per_page padrão 25, máximo 100). Retorna meta (contadores) + payload (array de item Kanban).",
3792
+ "title": "Relatório Agregado do Kanban",
3793
+ "description": "RELATORIO AGREGADO do Kanban (funil de vendas) — a resposta e um OBJETO de metricas, nao lista de cards: soma de valores GANHOS no periodo, contagem/valor por etapa, previsao ponderada (forecast), top negocios, cards parados (stale) e metas do funil. Filtra por periodo (from/to), agentes (user_ids[]) e time (team_id). USE ESTA TOOL quando pedirem 'relatorio do funil/vendas/ganhos do mes por agente ou time'. Pra LISTAR os cards em si, use lionchat_kanban_items_filter.",
3694
3794
  "category": "Itens",
3695
3795
  "params": [
3696
3796
  {
@@ -3699,13 +3799,42 @@
3699
3799
  "location": "query",
3700
3800
  "required": true,
3701
3801
  "description": "ID do funil"
3802
+ },
3803
+ {
3804
+ "name": "from",
3805
+ "type": "string",
3806
+ "location": "query",
3807
+ "required": false,
3808
+ "description": "Inicio do periodo (YYYY-MM-DD ou ISO 8601)"
3809
+ },
3810
+ {
3811
+ "name": "to",
3812
+ "type": "string",
3813
+ "location": "query",
3814
+ "required": false,
3815
+ "description": "Fim do periodo (YYYY-MM-DD ou ISO 8601)"
3816
+ },
3817
+ {
3818
+ "name": "user_ids",
3819
+ "query_name": "user_ids[]",
3820
+ "type": "array",
3821
+ "location": "query",
3822
+ "required": false,
3823
+ "description": "IDs de agentes — restringe o relatorio aos cards atribuidos a eles"
3824
+ },
3825
+ {
3826
+ "name": "team_id",
3827
+ "type": "integer",
3828
+ "location": "query",
3829
+ "required": false,
3830
+ "description": "ID do time — restringe aos cards dos agentes do time"
3702
3831
  }
3703
3832
  ],
3704
- "returns": "objeto de relatorios agregados (nao array de itens)",
3833
+ "returns": "objeto de metricas agregadas do funil (valores ganhos, por etapa, forecast, top deals, stale) — NAO e array de itens",
3705
3834
  "common_use_cases": [
3706
- "Dashboard: contar/exibir itens Kanban",
3707
- "Buscar com filtros antes de outra operação",
3708
- "Auditoria/relatório de itens Kanban ativas"
3835
+ "Ganhos do mes por agente ou time",
3836
+ "Valor total e contagem por etapa do funil",
3837
+ "Forecast (previsao ponderada) e negocios parados"
3709
3838
  ],
3710
3839
  "related_tools": [
3711
3840
  "lionchat_kanban_items_list",
@@ -5059,14 +5188,14 @@
5059
5188
  "type": "string",
5060
5189
  "location": "query",
5061
5190
  "required": false,
5062
- "description": "Data inicio (ISO 8601)"
5191
+ "description": "Inicio do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
5063
5192
  },
5064
5193
  {
5065
5194
  "name": "until",
5066
5195
  "type": "string",
5067
5196
  "location": "query",
5068
5197
  "required": false,
5069
- "description": "Data fim (ISO 8601)"
5198
+ "description": "Fim do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
5070
5199
  },
5071
5200
  {
5072
5201
  "name": "business_hours",
@@ -5101,14 +5230,21 @@
5101
5230
  "type": "string",
5102
5231
  "location": "query",
5103
5232
  "required": false,
5104
- "description": "Data inicio"
5233
+ "description": "Inicio do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
5105
5234
  },
5106
5235
  {
5107
5236
  "name": "until",
5108
5237
  "type": "string",
5109
5238
  "location": "query",
5110
5239
  "required": false,
5111
- "description": "Data fim"
5240
+ "description": "Fim do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
5241
+ },
5242
+ {
5243
+ "name": "business_hours",
5244
+ "type": "boolean",
5245
+ "location": "query",
5246
+ "required": false,
5247
+ "description": "true = medias consideram so o horario de atendimento configurado"
5112
5248
  }
5113
5249
  ],
5114
5250
  "returns": "array por time { id, name, conversations_count, avg_resolution_time (seg), avg_first_response_time (seg), avg_reply_time (seg), resolved_count } (sem paginacao/meta)",
@@ -5136,14 +5272,21 @@
5136
5272
  "type": "string",
5137
5273
  "location": "query",
5138
5274
  "required": false,
5139
- "description": "Data inicio"
5275
+ "description": "Inicio do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
5140
5276
  },
5141
5277
  {
5142
5278
  "name": "until",
5143
5279
  "type": "string",
5144
5280
  "location": "query",
5145
5281
  "required": false,
5146
- "description": "Data fim"
5282
+ "description": "Fim do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
5283
+ },
5284
+ {
5285
+ "name": "business_hours",
5286
+ "type": "boolean",
5287
+ "location": "query",
5288
+ "required": false,
5289
+ "description": "true = medias consideram so o horario de atendimento configurado"
5147
5290
  }
5148
5291
  ],
5149
5292
  "returns": "array por inbox (mesma estrutura do resumo); sem meta",
@@ -5171,14 +5314,21 @@
5171
5314
  "type": "string",
5172
5315
  "location": "query",
5173
5316
  "required": false,
5174
- "description": "Data inicio"
5317
+ "description": "Inicio do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
5175
5318
  },
5176
5319
  {
5177
5320
  "name": "until",
5178
5321
  "type": "string",
5179
5322
  "location": "query",
5180
5323
  "required": false,
5181
- "description": "Data fim"
5324
+ "description": "Fim do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
5325
+ },
5326
+ {
5327
+ "name": "business_hours",
5328
+ "type": "boolean",
5329
+ "location": "query",
5330
+ "required": false,
5331
+ "description": "true = medias consideram so o horario de atendimento configurado"
5182
5332
  }
5183
5333
  ],
5184
5334
  "returns": "array por label; sem meta",
@@ -5206,14 +5356,21 @@
5206
5356
  "type": "string",
5207
5357
  "location": "query",
5208
5358
  "required": false,
5209
- "description": "Data inicio"
5359
+ "description": "Inicio do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
5210
5360
  },
5211
5361
  {
5212
5362
  "name": "until",
5213
5363
  "type": "string",
5214
5364
  "location": "query",
5215
5365
  "required": false,
5216
- "description": "Data fim"
5366
+ "description": "Fim do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
5367
+ },
5368
+ {
5369
+ "name": "business_hours",
5370
+ "type": "boolean",
5371
+ "location": "query",
5372
+ "required": false,
5373
+ "description": "true = medias consideram so o horario de atendimento configurado"
5217
5374
  }
5218
5375
  ],
5219
5376
  "returns": "array por canal; sem meta",
@@ -5241,7 +5398,7 @@
5241
5398
  "type": "string",
5242
5399
  "location": "query",
5243
5400
  "required": false,
5244
- "description": "Metrica: conversations_count, incoming_messages_count, etc"
5401
+ "description": "Metrica (UMA por chamada): conversations_count | incoming_messages_count | outgoing_messages_count | avg_first_response_time | avg_resolution_time | resolutions_count | reply_time | bot_resolutions_count | bot_handoffs_count. Tempos em SEGUNDOS."
5245
5402
  },
5246
5403
  {
5247
5404
  "name": "type",
@@ -5255,14 +5412,14 @@
5255
5412
  "type": "string",
5256
5413
  "location": "query",
5257
5414
  "required": false,
5258
- "description": "Timestamp inicio"
5415
+ "description": "Inicio do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
5259
5416
  },
5260
5417
  {
5261
5418
  "name": "until",
5262
5419
  "type": "string",
5263
5420
  "location": "query",
5264
5421
  "required": false,
5265
- "description": "Timestamp fim"
5422
+ "description": "Fim do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
5266
5423
  },
5267
5424
  {
5268
5425
  "name": "id",
@@ -5290,7 +5447,7 @@
5290
5447
  "type": "string",
5291
5448
  "location": "query",
5292
5449
  "required": false,
5293
- "description": "Offset de timezone em horas"
5450
+ "description": "Deslocamento de fuso em horas (ex: -3 pra Brasilia) — afeta SO o agrupamento dos pontos do grafico (fronteira do dia/hora), NAO altera totais de summary."
5294
5451
  }
5295
5452
  ],
5296
5453
  "returns": "array de { value, timestamp[, count] } (sem meta)",
@@ -5318,14 +5475,14 @@
5318
5475
  "type": "string",
5319
5476
  "location": "query",
5320
5477
  "required": false,
5321
- "description": "Timestamp inicio"
5478
+ "description": "Inicio do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
5322
5479
  },
5323
5480
  {
5324
5481
  "name": "until",
5325
5482
  "type": "string",
5326
5483
  "location": "query",
5327
5484
  "required": false,
5328
- "description": "Timestamp fim"
5485
+ "description": "Fim do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
5329
5486
  },
5330
5487
  {
5331
5488
  "name": "type",
@@ -5353,7 +5510,7 @@
5353
5510
  "type": "string",
5354
5511
  "location": "query",
5355
5512
  "required": false,
5356
- "description": "Offset de timezone em horas"
5513
+ "description": "Deslocamento de fuso em horas (ex: -3). NAO altera os totais do summary — so afeta agrupamento em endpoints de serie temporal."
5357
5514
  }
5358
5515
  ],
5359
5516
  "returns": "{ conversations_count, incoming_messages_count, outgoing_messages_count, resolutions_count, avg_first_response_time (seg), avg_resolution_time (seg), previous: {...mesma estrutura...} }",
@@ -5589,7 +5746,7 @@
5589
5746
  "method": "GET",
5590
5747
  "path": "/api/v2/accounts/{account_id}/reports/conversation_traffic",
5591
5748
  "title": "Trafego de Conversas",
5592
- "description": "Exporta CSV de heatmap de trafego de conversas. Aceita timezone_offset.",
5749
+ "description": "[GET] Conversation Traffic (heatmap de volume por hora x dia, CSV). ATENCAO: janela FIXA calculada a partir de HOJE no fuso informado — NAO aceita since/until (nao adianta passar). Unico parametro: timezone_offset (ex: -3 pra Brasilia; sem ele o pico sai em UTC).",
5593
5750
  "category": "Relatorios",
5594
5751
  "params": [
5595
5752
  {
@@ -13809,9 +13966,60 @@
13809
13966
  "method": "GET",
13810
13967
  "path": "/api/v1/accounts/{account_id}/applied_slas/metrics",
13811
13968
  "title": "Metricas SLA",
13812
- "description": "Metricas agregadas de SLA. ENTERPRISE-only, Admin.",
13969
+ "description": "[GET] Agregado de SLA (ENTERPRISE-ONLY): total_applied_slas, number_of_sla_misses e hit_rate (string pronta com %). [2026-07-24] Agora com os filtros REAIS expostos: periodo since/until (unix SEGUNDOS), inbox_id, team_id, sla_policy_id, label_list[] e assigned_agent_id. Conta sem Enterprise/SLA: endpoint indisponivel.",
13813
13970
  "category": "SLA",
13814
- "params": [],
13971
+ "params": [
13972
+ {
13973
+ "name": "since",
13974
+ "type": "string",
13975
+ "location": "query",
13976
+ "required": false,
13977
+ "description": "Inicio do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
13978
+ },
13979
+ {
13980
+ "name": "until",
13981
+ "type": "string",
13982
+ "location": "query",
13983
+ "required": false,
13984
+ "description": "Fim do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
13985
+ },
13986
+ {
13987
+ "name": "inbox_id",
13988
+ "type": "integer",
13989
+ "location": "query",
13990
+ "required": false,
13991
+ "description": "Filtra por caixa de entrada"
13992
+ },
13993
+ {
13994
+ "name": "team_id",
13995
+ "type": "integer",
13996
+ "location": "query",
13997
+ "required": false,
13998
+ "description": "Filtra por time"
13999
+ },
14000
+ {
14001
+ "name": "sla_policy_id",
14002
+ "type": "integer",
14003
+ "location": "query",
14004
+ "required": false,
14005
+ "description": "Filtra por politica de SLA"
14006
+ },
14007
+ {
14008
+ "name": "label_list",
14009
+ "query_name": "label_list[]",
14010
+ "type": "array",
14011
+ "location": "query",
14012
+ "required": false,
14013
+ "description": "Filtra por etiquetas da conversa (titulos)"
14014
+ },
14015
+ {
14016
+ "name": "assigned_agent_id",
14017
+ "type": "integer",
14018
+ "location": "query",
14019
+ "required": false,
14020
+ "description": "Filtra por atendente responsavel (admin; agente comum ve so o proprio)"
14021
+ }
14022
+ ],
13815
14023
  "returns": "{ total_applied_slas, number_of_sla_misses, hit_rate } — hit_rate e STRING tipo '95.5%'",
13816
14024
  "common_use_cases": [
13817
14025
  "Dashboard: contar/exibir políticas SLA",
@@ -20697,7 +20905,7 @@
20697
20905
  "method": "GET",
20698
20906
  "path": "/api/v1/accounts/{account_id}/csat_survey_responses/metrics",
20699
20907
  "title": "Metricas CSAT",
20700
- "description": "Metricas de CSAT do periodo. Filtros: user_ids, inbox_id, team_id, rating. A MEDIA e a taxa NAO vem prontas — calcule de ratings_count.",
20908
+ "description": "[GET] Agregado de CSAT: total de respostas, distribuicao por nota (ratings_count) e pesquisas enviadas (total_sent_messages_count). [2026-07-24] Agora com os filtros REAIS expostos: user_ids[] (atendentes), inbox_id (caixa), team_id, rating e periodo since/until (unix SEGUNDOS). Nota media = soma(nota x qtd)/total; taxa de resposta = total_count/total_sent_messages_count (calcule — nao vem prontas).",
20701
20909
  "category": "CSAT",
20702
20910
  "params": [
20703
20911
  {
@@ -20705,14 +20913,43 @@
20705
20913
  "type": "string",
20706
20914
  "location": "query",
20707
20915
  "required": false,
20708
- "description": "Data inicio"
20916
+ "description": "Inicio do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
20709
20917
  },
20710
20918
  {
20711
20919
  "name": "until",
20712
20920
  "type": "string",
20713
20921
  "location": "query",
20714
20922
  "required": false,
20715
- "description": "Data fim"
20923
+ "description": "Fim do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
20924
+ },
20925
+ {
20926
+ "name": "user_ids",
20927
+ "query_name": "user_ids[]",
20928
+ "type": "array",
20929
+ "location": "query",
20930
+ "required": false,
20931
+ "description": "IDs de atendentes — CSAT so das conversas atribuidas a eles (admin; agente comum ve so o proprio)"
20932
+ },
20933
+ {
20934
+ "name": "inbox_id",
20935
+ "type": "integer",
20936
+ "location": "query",
20937
+ "required": false,
20938
+ "description": "Filtra por caixa de entrada"
20939
+ },
20940
+ {
20941
+ "name": "team_id",
20942
+ "type": "integer",
20943
+ "location": "query",
20944
+ "required": false,
20945
+ "description": "Filtra por time"
20946
+ },
20947
+ {
20948
+ "name": "rating",
20949
+ "type": "integer",
20950
+ "location": "query",
20951
+ "required": false,
20952
+ "description": "Filtra por nota (1-5)"
20716
20953
  }
20717
20954
  ],
20718
20955
  "returns": "{ total_count, ratings_count (hash rating=>qtd), total_sent_messages_count }",
@@ -21037,7 +21274,7 @@
21037
21274
  {
21038
21275
  "name": "exclusion",
21039
21276
  "type": "array",
21040
- "location": "query",
21277
+ "location": "body",
21041
21278
  "required": false,
21042
21279
  "description": "Publico a EXCLUIR/negativar antes de estimar (mesmo formato do 'audience': lista de secoes por tipo). O contador desconta quem cair na exclusao. Tipos aceitos iguais aos do audience (Label, Funnel, ConversationAttribute, ContactLabel, ContactAttribute, CardAttribute, AgentTeam)."
21043
21280
  }
@@ -22174,6 +22411,67 @@
22174
22411
  ],
22175
22412
  "related_tools": []
22176
22413
  },
22414
+ {
22415
+ "id": "lionchat_inboxes_failed_messages_summary",
22416
+ "method": "GET",
22417
+ "path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/failed_messages/summary",
22418
+ "title": "Falhas de Envio da Caixa (painel)",
22419
+ "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).",
22420
+ "category": "Caixas de Entrada",
22421
+ "params": [
22422
+ {
22423
+ "name": "inbox_id",
22424
+ "type": "integer",
22425
+ "location": "path",
22426
+ "required": true,
22427
+ "description": "ID da caixa de entrada"
22428
+ }
22429
+ ],
22430
+ "returns": "{ window_hours, eligible_channel, bulk_retry_running, groups:{billing,transient,window_expired,permanent}, group_details, campaign_count, partial_count, retryable_count, total }",
22431
+ "common_use_cases": [
22432
+ "Diagnosticar por que mensagens nao chegaram (agrupado por motivo, com erro real)",
22433
+ "Ver quantas falhas sao reenviaveis antes de disparar o reenvio em massa",
22434
+ "Auditoria pos-incidente de envio (saldo Meta, sessao WAHA caida)"
22435
+ ],
22436
+ "related_tools": [
22437
+ "lionchat_inboxes_failed_messages_bulk_retry",
22438
+ "lionchat_conversations_messages_create_1",
22439
+ "lionchat_inboxes_waha_status"
22440
+ ]
22441
+ },
22442
+ {
22443
+ "id": "lionchat_inboxes_failed_messages_bulk_retry",
22444
+ "method": "POST",
22445
+ "path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/failed_messages/bulk_retry",
22446
+ "title": "Reenvio em Massa das Falhadas",
22447
+ "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).",
22448
+ "category": "Caixas de Entrada",
22449
+ "params": [
22450
+ {
22451
+ "name": "inbox_id",
22452
+ "type": "integer",
22453
+ "location": "path",
22454
+ "required": true,
22455
+ "description": "ID da caixa de entrada"
22456
+ },
22457
+ {
22458
+ "name": "classification",
22459
+ "type": "string",
22460
+ "location": "body",
22461
+ "required": false,
22462
+ "description": "Opcional: restringe o lote a UM grupo — 'billing' (so as de falta de saldo, ex: apos pagar a Meta) ou 'transient' (so erro comum). Ausente = todos os reenviaveis."
22463
+ }
22464
+ ],
22465
+ "returns": "{ scheduled: <agendadas agora>, remaining: <elegiveis que ficaram alem do teto de 500> } | 409 {error:'bulk_retry_running'} | 422 {error:'inbox_not_eligible'|'invalid_classification'}",
22466
+ "common_use_cases": [
22467
+ "Pos-incidente: reenviar tudo que falhou nas ultimas 24h da caixa",
22468
+ "Pagou o saldo da Meta: reenviar SO o grupo billing (classification='billing')"
22469
+ ],
22470
+ "related_tools": [
22471
+ "lionchat_inboxes_failed_messages_summary",
22472
+ "lionchat_conversations_messages_create_1"
22473
+ ]
22474
+ },
22177
22475
  {
22178
22476
  "id": "lionchat_internal_chat_rooms_list",
22179
22477
  "method": "GET",