@lionchat/mcp-server 1.20.0 → 1.22.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
@@ -7862,7 +7862,7 @@
7862
7862
  "method": "POST",
7863
7863
  "path": "/api/v1/accounts/{account_id}/macros",
7864
7864
  "title": "Criar Macro",
7865
- "description": "Cria uma nova macro com ações. Cria novo macro. Obrigatórios: name, actions. Valida unicidade quando aplicável. Retorna o macro criado com ID atribuído. 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). NOVO 23/07 — cardápio equiparado ao das automações, 13 ações novas aceitas em action_name: add_sla (params [sla_policy_id]), open_conversation, pending_conversation (sem params), send_canned_response ([canned_response_id] — na MACRO a mensagem sai assinada pelo EXECUTOR da macro; na automação sai como robô), send_email_to_team ([{team_ids, message}]), assign_captain_assistant ([assistant_id]), e 7 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 (params espelham os das automações: funil/etapa/nota/status). Fora do cardápio: send_whatsapp_template (exige caixa oficial específica).",
7865
+ "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 (10/09/2026, 40 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 7 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 (todas exigem card já existente no funil informado, exceto create). 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.",
7866
7866
  "category": "Macros",
7867
7867
  "params": [
7868
7868
  {
@@ -7884,7 +7884,7 @@
7884
7884
  "type": "array",
7885
7885
  "location": "body",
7886
7886
  "required": true,
7887
- "description": "Array de {action_name, action_params[]}"
7887
+ "description": "Array de {action_name, action_params[]} — 40 nomes aceitos, listados na descrição da tool; formatos iguais aos das automações"
7888
7888
  }
7889
7889
  ],
7890
7890
  "returns": "macro criado (com novo ID)",
@@ -7924,7 +7924,7 @@
7924
7924
  "method": "PATCH",
7925
7925
  "path": "/api/v1/accounts/{account_id}/macros/{id}",
7926
7926
  "title": "Atualizar Macro",
7927
- "description": "Atualiza macro. Atualiza campos do macro existente. Suporta atualização parcial (PATCH) — só campos enviados são alterados. Campos suportados: name, actions. 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). NOVO 23/07 — cardápio equiparado ao das automações, 13 ações novas aceitas em action_name: add_sla (params [sla_policy_id]), open_conversation, pending_conversation (sem params), send_canned_response ([canned_response_id] — na MACRO a mensagem sai assinada pelo EXECUTOR da macro; na automação sai como robô), send_email_to_team ([{team_ids, message}]), assign_captain_assistant ([assistant_id]), e 7 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 (params espelham os das automações: funil/etapa/nota/status). Fora do cardápio: send_whatsapp_template (exige caixa oficial específica).",
7927
+ "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 (10/09/2026, 40 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 7 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 (todas exigem card já existente no funil informado, exceto create). 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.",
7928
7928
  "category": "Macros",
7929
7929
  "params": [
7930
7930
  {
@@ -7946,7 +7946,7 @@
7946
7946
  "type": "array",
7947
7947
  "location": "body",
7948
7948
  "required": false,
7949
- "description": "Ações"
7949
+ "description": "Array de {action_name, action_params[]} — 40 nomes aceitos, listados na descrição da tool; formatos iguais aos das automações"
7950
7950
  },
7951
7951
  {
7952
7952
  "name": "visibility",
@@ -7993,7 +7993,7 @@
7993
7993
  "method": "POST",
7994
7994
  "path": "/api/v1/accounts/{account_id}/macros/{id}/execute",
7995
7995
  "title": "Executar Macro",
7996
- "description": "Executa uma macro numa conversa (job async). Obrigatorio: conversation_id.",
7996
+ "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.",
7997
7997
  "category": "Macros",
7998
7998
  "params": [
7999
7999
  {
@@ -8008,14 +8008,13 @@
8008
8008
  "type": "array",
8009
8009
  "location": "body",
8010
8010
  "required": true,
8011
- "description": "IDs das conversas"
8011
+ "description": "IDs das conversas (1 a 100 por chamada; ids repetidos e vazios são ignorados)"
8012
8012
  }
8013
8013
  ],
8014
8014
  "returns": "200 OK (sem corpo)",
8015
8015
  "common_use_cases": [
8016
- "Cadastro inicial de macro",
8017
- "Automação a partir de evento externo",
8018
- "Importação manual via API"
8016
+ "Aplicar uma sequência de ações em lote numa lista de conversas",
8017
+ "Rodar por API a macro que o atendente escolheu"
8019
8018
  ],
8020
8019
  "related_tools": []
8021
8020
  },
@@ -8290,7 +8289,7 @@
8290
8289
  "method": "GET",
8291
8290
  "path": "/api/v1/accounts/{account_id}/account_tasks",
8292
8291
  "title": "Listar Tarefas",
8293
- "description": "Lista tarefas com filtros avançados. Lista tarefas/agenda paginados (per_page padrão 25, máximo 100). Filtros disponíveis: page, per_page, task_type, status, user_id. Retorna meta (contadores) + payload (array de tarefa/agenda).",
8292
+ "description": "Lista tarefas com filtros avançados. Lista tarefas/agenda paginados (per_page padrão 25, máximo 100). Filtros disponíveis: page, per_page, task_type, status, user_id. Retorna meta (contadores) + payload (array de tarefa/agenda). Cada tarefa traz `tratamento` {id, sessao, total, titulo} quando e sessao de um tratamento em sessoes (15/09); nulo em compromisso comum.",
8294
8293
  "category": "Agenda / Tarefas",
8295
8294
  "params": [
8296
8295
  {
@@ -8355,6 +8354,13 @@
8355
8354
  "location": "query",
8356
8355
  "required": false,
8357
8356
  "description": "Data fim"
8357
+ },
8358
+ {
8359
+ "name": "agenda_id",
8360
+ "type": "integer",
8361
+ "location": "query",
8362
+ "required": false,
8363
+ "description": "Recorta por AGENDA (unidade). SEM este parametro a listagem ja vem recortada pelas agendas que o usuario enxerga. Na agenda PRINCIPAL entram tambem os compromissos com agenda nula."
8358
8364
  }
8359
8365
  ],
8360
8366
  "returns": "LISTA PURA (array no topo, SEM embrulho meta/payload) — a resposta JA E a lista de tarefas da agenda. Cada tarefa traz todos os campos da tarefa (id, title, description, task_type, status, scheduled_at, completed, recurrence_*), mais assignees [{id, name, agenda_color}], assignee_ids, conversation_display_id, conversation_contact_name, contact_name/contact_phone/contact_email, meeting_url, calendar_color, is_readonly, is_private, guest_emails, attendee_rsvp e booking_id. Lista vazia = []. Com filtro de data (date_start/date_end) devolve TUDO do periodo sem paginar (teto de 10.000). Sem filtro de data, pagina por `page`/`per_page` — mas a resposta NAO traz numero de paginas nem total: pagina cheia sugere que ha mais.",
@@ -8373,7 +8379,7 @@
8373
8379
  "method": "POST",
8374
8380
  "path": "/api/v1/accounts/{account_id}/account_tasks",
8375
8381
  "title": "Criar Tarefa",
8376
- "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.",
8382
+ "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.",
8377
8383
  "category": "Agenda / Tarefas",
8378
8384
  "params": [
8379
8385
  {
@@ -8494,6 +8500,48 @@
8494
8500
  "location": "body",
8495
8501
  "required": false,
8496
8502
  "description": "IGNORADO — não é consumido pelo endpoint"
8503
+ },
8504
+ {
8505
+ "name": "agenda_id",
8506
+ "type": "integer",
8507
+ "location": "body",
8508
+ "required": false,
8509
+ "description": "AGENDA (unidade) em que o compromisso nasce. NULO = agenda principal, que e onde moram os compromissos de quem nao usa multiplas agendas. So aceita agenda que o usuario ENXERGA; agenda de outra conta e recusada."
8510
+ },
8511
+ {
8512
+ "name": "treatment.sessions",
8513
+ "type": "integer",
8514
+ "location": "body",
8515
+ "required": false,
8516
+ "description": "Modo booking, tipo com sessoes: quantidade de sessoes do programa NOVO (2 a 60). Sem isto vale o padrao do tipo. Validado antes da reserva (422)"
8517
+ },
8518
+ {
8519
+ "name": "treatment.interval_value",
8520
+ "type": "integer",
8521
+ "location": "body",
8522
+ "required": false,
8523
+ "description": "Modo booking: intervalo entre sessoes (1 a 365)"
8524
+ },
8525
+ {
8526
+ "name": "treatment.interval_unit",
8527
+ "type": "string",
8528
+ "location": "body",
8529
+ "required": false,
8530
+ "description": "Modo booking: days, weeks ou months"
8531
+ },
8532
+ {
8533
+ "name": "agenda_treatment_id",
8534
+ "type": "integer",
8535
+ "location": "body",
8536
+ "required": false,
8537
+ "description": "'Marcar proxima': ID do programa do CONTATO ao qual esta sessao pertence (programa de outra ficha = 422)"
8538
+ },
8539
+ {
8540
+ "name": "treatment_session_number",
8541
+ "type": "integer",
8542
+ "location": "body",
8543
+ "required": false,
8544
+ "description": "'Marcar proxima': numero da sessao pedida (1..N); sessao ja marcada = 422 'Essa sessao ja foi marcada'"
8497
8545
  }
8498
8546
  ],
8499
8547
  "returns": "tarefa/agenda criado (com novo ID)",
@@ -8512,7 +8560,7 @@
8512
8560
  "method": "GET",
8513
8561
  "path": "/api/v1/accounts/{account_id}/account_tasks/{id}",
8514
8562
  "title": "Detalhe da Tarefa",
8515
- "description": "Retorna detalhes de uma tarefa. Retorna detalhes completos de UM tarefa/agenda específico pelo ID. Inclui campos relacionais quando aplicável.",
8563
+ "description": "Retorna detalhes de uma tarefa. Retorna detalhes completos de UM tarefa/agenda específico pelo ID. Inclui campos relacionais quando aplicável. Cada tarefa traz `tratamento` {id, sessao, total, titulo} quando e sessao de um tratamento em sessoes (15/09); nulo em compromisso comum.",
8516
8564
  "category": "Agenda / Tarefas",
8517
8565
  "params": [
8518
8566
  {
@@ -8536,7 +8584,7 @@
8536
8584
  "method": "PATCH",
8537
8585
  "path": "/api/v1/accounts/{account_id}/account_tasks/{id}",
8538
8586
  "title": "Atualizar Tarefa",
8539
- "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.",
8587
+ "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.",
8540
8588
  "category": "Agenda / Tarefas",
8541
8589
  "params": [
8542
8590
  {
@@ -8657,6 +8705,55 @@
8657
8705
  "location": "body",
8658
8706
  "required": false,
8659
8707
  "description": "Incluir email do contato como convidado"
8708
+ },
8709
+ {
8710
+ "name": "agenda_id",
8711
+ "type": "integer",
8712
+ "location": "body",
8713
+ "required": false,
8714
+ "description": "AGENDA (unidade) em que o compromisso nasce. NULO = agenda principal, que e onde moram os compromissos de quem nao usa multiplas agendas. So aceita agenda que o usuario ENXERGA; agenda de outra conta e recusada."
8715
+ },
8716
+ {
8717
+ "name": "attendance",
8718
+ "type": "string",
8719
+ "location": "body",
8720
+ "required": false,
8721
+ "description": "Presenca: attended (compareceu) ou no_show (faltou). E um CARIMBO, nao um status — nao substitui `status`, e marcar falta NAO devolve o horario para a agenda."
8722
+ },
8723
+ {
8724
+ "name": "treatment.sessions",
8725
+ "type": "integer",
8726
+ "location": "body",
8727
+ "required": false,
8728
+ "description": "Modo booking, tipo com sessoes: quantidade de sessoes do programa NOVO (2 a 60). Sem isto vale o padrao do tipo. Validado antes da reserva (422)"
8729
+ },
8730
+ {
8731
+ "name": "treatment.interval_value",
8732
+ "type": "integer",
8733
+ "location": "body",
8734
+ "required": false,
8735
+ "description": "Modo booking: intervalo entre sessoes (1 a 365)"
8736
+ },
8737
+ {
8738
+ "name": "treatment.interval_unit",
8739
+ "type": "string",
8740
+ "location": "body",
8741
+ "required": false,
8742
+ "description": "Modo booking: days, weeks ou months"
8743
+ },
8744
+ {
8745
+ "name": "agenda_treatment_id",
8746
+ "type": "integer",
8747
+ "location": "body",
8748
+ "required": false,
8749
+ "description": "'Marcar proxima': ID do programa do CONTATO ao qual esta sessao pertence (programa de outra ficha = 422)"
8750
+ },
8751
+ {
8752
+ "name": "treatment_session_number",
8753
+ "type": "integer",
8754
+ "location": "body",
8755
+ "required": false,
8756
+ "description": "'Marcar proxima': numero da sessao pedida (1..N); sessao ja marcada = 422 'Essa sessao ja foi marcada'"
8660
8757
  }
8661
8758
  ],
8662
8759
  "returns": "tarefa/agenda atualizado",
@@ -8734,6 +8831,13 @@
8734
8831
  "location": "path",
8735
8832
  "required": true,
8736
8833
  "description": "ID"
8834
+ },
8835
+ {
8836
+ "name": "agenda_id",
8837
+ "type": "integer",
8838
+ "location": "body",
8839
+ "required": false,
8840
+ "description": "AGENDA (unidade) em que o compromisso nasce. NULO = agenda principal, que e onde moram os compromissos de quem nao usa multiplas agendas. So aceita agenda que o usuario ENXERGA; agenda de outra conta e recusada."
8737
8841
  }
8738
8842
  ],
8739
8843
  "returns": "tarefa atualizada",
@@ -8805,6 +8909,20 @@
8805
8909
  "location": "body",
8806
8910
  "required": false,
8807
8911
  "description": "Data"
8912
+ },
8913
+ {
8914
+ "name": "agenda_id",
8915
+ "type": "integer",
8916
+ "location": "body",
8917
+ "required": false,
8918
+ "description": "AGENDA (unidade) em que o compromisso nasce. NULO = agenda principal, que e onde moram os compromissos de quem nao usa multiplas agendas. So aceita agenda que o usuario ENXERGA; agenda de outra conta e recusada."
8919
+ },
8920
+ {
8921
+ "name": "attendance",
8922
+ "type": "string",
8923
+ "location": "body",
8924
+ "required": false,
8925
+ "description": "Presenca: attended (compareceu) ou no_show (faltou). E um CARIMBO, nao um status — nao substitui `status`, e marcar falta NAO devolve o horario para a agenda."
8808
8926
  }
8809
8927
  ],
8810
8928
  "returns": "tarefa/agenda atualizado",
@@ -8850,7 +8968,15 @@
8850
8968
  "title": "Meu Dia",
8851
8969
  "description": "Retorna tarefas agrupadas: atrasadas, hoje, amanhã, próximos 7 dias. Lista tarefas/agenda paginados (per_page padrão 25, máximo 100). Retorna meta (contadores) + payload (array de tarefa/agenda).",
8852
8970
  "category": "Agenda / Tarefas",
8853
- "params": [],
8971
+ "params": [
8972
+ {
8973
+ "name": "agenda_id",
8974
+ "type": "integer",
8975
+ "location": "query",
8976
+ "required": false,
8977
+ "description": "Recorta por AGENDA (unidade). SEM este parametro a listagem ja vem recortada pelas agendas que o usuario enxerga. Na agenda PRINCIPAL entram tambem os compromissos com agenda nula."
8978
+ }
8979
+ ],
8854
8980
  "returns": "Objeto com QUATRO listas separadas, sem meta e sem payload: { overdue: [...], today: [...], tomorrow: [...], next_7_days: [...] }. Traz APENAS tarefas em aberto (status pendente ou adiada — concluida/cancelada nao aparece) e nao ocultas, ja filtradas pela permissao de quem chama (administrador ve todas; agente ve so as que criou ou em que e responsavel). Agrupamento pela data agendada: overdue = antes de hoje 00:00 (ordenado da mais recente para a mais antiga), today = hoje, tomorrow = amanha, next_7_days = ate 7 dias a frente. Cada item e a tarefa completa (serializacao do modelo AccountTask, ja com assignees/assignee_ids, completed, dados de recorrencia, conversation_display_id, nome/telefone/email do contato, meeting_url e links de booking). Sem paginacao (teto de 10 mil por grupo).",
8855
8981
  "common_use_cases": [
8856
8982
  "Dashboard: contar/exibir tarefas/agenda",
@@ -8869,7 +8995,15 @@
8869
8995
  "title": "Contagem Badge",
8870
8996
  "description": "Retorna contagem para badge de tarefas pendentes. Lista tarefas/agenda paginados (per_page padrão 25, máximo 100). Retorna meta (contadores) + payload (array de tarefa/agenda).",
8871
8997
  "category": "Agenda / Tarefas",
8872
- "params": [],
8998
+ "params": [
8999
+ {
9000
+ "name": "agenda_id",
9001
+ "type": "integer",
9002
+ "location": "query",
9003
+ "required": false,
9004
+ "description": "Recorta por AGENDA (unidade). SEM este parametro a listagem ja vem recortada pelas agendas que o usuario enxerga. Na agenda PRINCIPAL entram tambem os compromissos com agenda nula."
9005
+ }
9006
+ ],
8873
9007
  "returns": "Objeto simples, NAO e lista: { overdue_count, today_count }. `today_count` = quantas tarefas pendentes ou adiadas estao marcadas para HOJE. `overdue_count` vem SEMPRE 0 — de proposito, o contador do badge nao inclui atrasadas. Para ver as tarefas em si, use a listagem de tarefas.",
8874
9008
  "common_use_cases": [
8875
9009
  "Dashboard: contar/exibir tarefas/agenda",
@@ -9934,6 +10068,97 @@
9934
10068
  "location": "body",
9935
10069
  "required": false,
9936
10070
  "description": "Lembretes do agendamento (o bloco '1d antes do evento' da tela). Array de objetos: {id (obrigatorio para EDITAR o existente — sem id CRIA outro), offset_direction ('before'/'after'), offset_days, offset_hours, offset_minutes, message_body, blocks, active, position, _destroy}. IMPORTANTE: message_body E blocks[0].content precisam do MESMO texto — a tela le blocks e o envio usa message_body; gravar so um deixa a tela e a mensagem entregue diferentes. blocks = [{type:'text', content:'...'}]. Aceita variaveis {{titulo}}, {{data}}, {{horario}} e quebra de linha (\\n)."
10071
+ },
10072
+ {
10073
+ "name": "agenda_id",
10074
+ "type": "integer",
10075
+ "location": "body",
10076
+ "required": false,
10077
+ "description": "AGENDA (unidade) em que o agendamento feito por este Booking vai nascer. NULO = agenda principal, que e o que todo Booking de hoje herda."
10078
+ },
10079
+ {
10080
+ "name": "allow_reschedule",
10081
+ "type": "boolean",
10082
+ "location": "body",
10083
+ "required": false,
10084
+ "description": "O cliente pode remarcar pela pagina publica. Padrao true."
10085
+ },
10086
+ {
10087
+ "name": "allow_cancel",
10088
+ "type": "boolean",
10089
+ "location": "body",
10090
+ "required": false,
10091
+ "description": "O cliente pode cancelar pela pagina publica. Padrao true."
10092
+ },
10093
+ {
10094
+ "name": "ask_attendance_confirmation",
10095
+ "type": "boolean",
10096
+ "location": "body",
10097
+ "required": false,
10098
+ "description": "Mostra o botao 'Sim, vou comparecer' na pagina publica. Padrao FALSE. Ligado, use a variavel {{link_confirmar}} na mensagem para entregar o link ao cliente."
10099
+ },
10100
+ {
10101
+ "name": "reschedule_min_notice_hours",
10102
+ "type": "integer",
10103
+ "location": "body",
10104
+ "required": false,
10105
+ "description": "Horas minimas de antecedencia para remarcar. Vazio/zero = sem limite."
10106
+ },
10107
+ {
10108
+ "name": "cancel_min_notice_hours",
10109
+ "type": "integer",
10110
+ "location": "body",
10111
+ "required": false,
10112
+ "description": "Horas minimas de antecedencia para cancelar. Vazio/zero = sem limite."
10113
+ },
10114
+ {
10115
+ "name": "reschedule_max_advance_days",
10116
+ "type": "integer",
10117
+ "location": "body",
10118
+ "required": false,
10119
+ "description": "Ate quantos dias a frente o cliente pode remarcar. Vazio usa o max_advance_days do tipo."
10120
+ },
10121
+ {
10122
+ "name": "max_reschedules",
10123
+ "type": "integer",
10124
+ "location": "body",
10125
+ "required": false,
10126
+ "description": "Quantas vezes o mesmo agendamento pode ser remarcado. Vazio = sem teto."
10127
+ },
10128
+ {
10129
+ "name": "manage_page_message",
10130
+ "type": "string",
10131
+ "location": "body",
10132
+ "required": false,
10133
+ "description": "Texto de abertura da pagina publica. Aceita {{nome}} {{titulo}} {{tipo}} {{agente}} {{data}} {{horario}} {{dia_semana}} {{duracao}} {{telefone}} {{email}} {{link_cancelar}} {{link_remarcar}} {{link_confirmar}}. Variavel desconhecida sai CRUA para o cliente."
10134
+ },
10135
+ {
10136
+ "name": "booking_event_type.sessions_enabled",
10137
+ "type": "boolean",
10138
+ "location": "body",
10139
+ "required": false,
10140
+ "description": "Programa de sessoes: este tipo e UMA sessao de um programa com varias (15/09; tratamento, mentoria, onboarding). Ligado, todo agendamento deste tipo nasce (ou engrossa) um tratamento do contato"
10141
+ },
10142
+ {
10143
+ "name": "booking_event_type.sessions_default_count",
10144
+ "type": "integer",
10145
+ "location": "body",
10146
+ "required": false,
10147
+ "description": "Quantidade padrao de sessoes (2 a 60; obrigatorio com sessions_enabled)"
10148
+ },
10149
+ {
10150
+ "name": "booking_event_type.sessions_interval_value",
10151
+ "type": "integer",
10152
+ "location": "body",
10153
+ "required": false,
10154
+ "description": "Intervalo padrao entre sessoes (1 a 365; obrigatorio com sessions_enabled)"
10155
+ },
10156
+ {
10157
+ "name": "booking_event_type.sessions_interval_unit",
10158
+ "type": "string",
10159
+ "location": "body",
10160
+ "required": false,
10161
+ "description": "Unidade do intervalo: days, weeks ou months (obrigatorio com sessions_enabled)"
9937
10162
  }
9938
10163
  ],
9939
10164
  "returns": "tipo de evento criado (com novo ID)",
@@ -10039,6 +10264,97 @@
10039
10264
  "location": "body",
10040
10265
  "required": false,
10041
10266
  "description": "Lembretes do agendamento (o bloco '1d antes do evento' da tela). Array de objetos: {id (obrigatorio para EDITAR o existente — sem id CRIA outro), offset_direction ('before'/'after'), offset_days, offset_hours, offset_minutes, message_body, blocks, active, position, _destroy}. IMPORTANTE: message_body E blocks[0].content precisam do MESMO texto — a tela le blocks e o envio usa message_body; gravar so um deixa a tela e a mensagem entregue diferentes. blocks = [{type:'text', content:'...'}]. Aceita variaveis {{titulo}}, {{data}}, {{horario}} e quebra de linha (\\n)."
10267
+ },
10268
+ {
10269
+ "name": "agenda_id",
10270
+ "type": "integer",
10271
+ "location": "body",
10272
+ "required": false,
10273
+ "description": "AGENDA (unidade) em que o agendamento feito por este Booking vai nascer. NULO = agenda principal, que e o que todo Booking de hoje herda."
10274
+ },
10275
+ {
10276
+ "name": "allow_reschedule",
10277
+ "type": "boolean",
10278
+ "location": "body",
10279
+ "required": false,
10280
+ "description": "O cliente pode remarcar pela pagina publica. Padrao true."
10281
+ },
10282
+ {
10283
+ "name": "allow_cancel",
10284
+ "type": "boolean",
10285
+ "location": "body",
10286
+ "required": false,
10287
+ "description": "O cliente pode cancelar pela pagina publica. Padrao true."
10288
+ },
10289
+ {
10290
+ "name": "ask_attendance_confirmation",
10291
+ "type": "boolean",
10292
+ "location": "body",
10293
+ "required": false,
10294
+ "description": "Mostra o botao 'Sim, vou comparecer' na pagina publica. Padrao FALSE. Ligado, use a variavel {{link_confirmar}} na mensagem para entregar o link ao cliente."
10295
+ },
10296
+ {
10297
+ "name": "reschedule_min_notice_hours",
10298
+ "type": "integer",
10299
+ "location": "body",
10300
+ "required": false,
10301
+ "description": "Horas minimas de antecedencia para remarcar. Vazio/zero = sem limite."
10302
+ },
10303
+ {
10304
+ "name": "cancel_min_notice_hours",
10305
+ "type": "integer",
10306
+ "location": "body",
10307
+ "required": false,
10308
+ "description": "Horas minimas de antecedencia para cancelar. Vazio/zero = sem limite."
10309
+ },
10310
+ {
10311
+ "name": "reschedule_max_advance_days",
10312
+ "type": "integer",
10313
+ "location": "body",
10314
+ "required": false,
10315
+ "description": "Ate quantos dias a frente o cliente pode remarcar. Vazio usa o max_advance_days do tipo."
10316
+ },
10317
+ {
10318
+ "name": "max_reschedules",
10319
+ "type": "integer",
10320
+ "location": "body",
10321
+ "required": false,
10322
+ "description": "Quantas vezes o mesmo agendamento pode ser remarcado. Vazio = sem teto."
10323
+ },
10324
+ {
10325
+ "name": "manage_page_message",
10326
+ "type": "string",
10327
+ "location": "body",
10328
+ "required": false,
10329
+ "description": "Texto de abertura da pagina publica. Aceita {{nome}} {{titulo}} {{tipo}} {{agente}} {{data}} {{horario}} {{dia_semana}} {{duracao}} {{telefone}} {{email}} {{link_cancelar}} {{link_remarcar}} {{link_confirmar}}. Variavel desconhecida sai CRUA para o cliente."
10330
+ },
10331
+ {
10332
+ "name": "booking_event_type.sessions_enabled",
10333
+ "type": "boolean",
10334
+ "location": "body",
10335
+ "required": false,
10336
+ "description": "Programa de sessoes: este tipo e UMA sessao de um programa com varias (15/09; tratamento, mentoria, onboarding). Ligado, todo agendamento deste tipo nasce (ou engrossa) um tratamento do contato"
10337
+ },
10338
+ {
10339
+ "name": "booking_event_type.sessions_default_count",
10340
+ "type": "integer",
10341
+ "location": "body",
10342
+ "required": false,
10343
+ "description": "Quantidade padrao de sessoes (2 a 60; obrigatorio com sessions_enabled)"
10344
+ },
10345
+ {
10346
+ "name": "booking_event_type.sessions_interval_value",
10347
+ "type": "integer",
10348
+ "location": "body",
10349
+ "required": false,
10350
+ "description": "Intervalo padrao entre sessoes (1 a 365; obrigatorio com sessions_enabled)"
10351
+ },
10352
+ {
10353
+ "name": "booking_event_type.sessions_interval_unit",
10354
+ "type": "string",
10355
+ "location": "body",
10356
+ "required": false,
10357
+ "description": "Unidade do intervalo: days, weeks ou months (obrigatorio com sessions_enabled)"
10042
10358
  }
10043
10359
  ],
10044
10360
  "returns": "tipo de evento atualizado",
@@ -10654,28 +10970,91 @@
10654
10970
  "location": "body",
10655
10971
  "required": true,
10656
10972
  "description": "update, cancel ou backfill"
10657
- }
10658
- ],
10659
- "returns": "tipo de evento criado (com novo ID)",
10660
- "common_use_cases": [
10661
- "Cadastro inicial de tipo de evento",
10662
- "Automação a partir de evento externo",
10663
- "Importação manual via API"
10664
- ],
10665
- "related_tools": [
10666
- "lionchat_booking_event_types_list",
10667
- "lionchat_booking_event_types_create",
10668
- "lionchat_booking_event_types_show"
10669
- ]
10670
- },
10671
- {
10672
- "id": "lionchat_booking_event_types_list_2",
10673
- "method": "GET",
10674
- "path": "/api/v1/accounts/{account_id}/bookings/{id}/follow_ups",
10675
- "title": "Follow-ups do Agendamento",
10676
- "description": "Lista as mensagens agendadas (follow-ups) de um agendamento.",
10677
- "category": "Tipos de Evento",
10678
- "params": [
10973
+ },
10974
+ {
10975
+ "name": "agenda_id",
10976
+ "type": "integer",
10977
+ "location": "body",
10978
+ "required": false,
10979
+ "description": "AGENDA (unidade) em que o agendamento feito por este Booking vai nascer. NULO = agenda principal, que e o que todo Booking de hoje herda."
10980
+ },
10981
+ {
10982
+ "name": "allow_reschedule",
10983
+ "type": "boolean",
10984
+ "location": "body",
10985
+ "required": false,
10986
+ "description": "O cliente pode remarcar pela pagina publica. Padrao true."
10987
+ },
10988
+ {
10989
+ "name": "allow_cancel",
10990
+ "type": "boolean",
10991
+ "location": "body",
10992
+ "required": false,
10993
+ "description": "O cliente pode cancelar pela pagina publica. Padrao true."
10994
+ },
10995
+ {
10996
+ "name": "ask_attendance_confirmation",
10997
+ "type": "boolean",
10998
+ "location": "body",
10999
+ "required": false,
11000
+ "description": "Mostra o botao 'Sim, vou comparecer' na pagina publica. Padrao FALSE. Ligado, use a variavel {{link_confirmar}} na mensagem para entregar o link ao cliente."
11001
+ },
11002
+ {
11003
+ "name": "reschedule_min_notice_hours",
11004
+ "type": "integer",
11005
+ "location": "body",
11006
+ "required": false,
11007
+ "description": "Horas minimas de antecedencia para remarcar. Vazio/zero = sem limite."
11008
+ },
11009
+ {
11010
+ "name": "cancel_min_notice_hours",
11011
+ "type": "integer",
11012
+ "location": "body",
11013
+ "required": false,
11014
+ "description": "Horas minimas de antecedencia para cancelar. Vazio/zero = sem limite."
11015
+ },
11016
+ {
11017
+ "name": "reschedule_max_advance_days",
11018
+ "type": "integer",
11019
+ "location": "body",
11020
+ "required": false,
11021
+ "description": "Ate quantos dias a frente o cliente pode remarcar. Vazio usa o max_advance_days do tipo."
11022
+ },
11023
+ {
11024
+ "name": "max_reschedules",
11025
+ "type": "integer",
11026
+ "location": "body",
11027
+ "required": false,
11028
+ "description": "Quantas vezes o mesmo agendamento pode ser remarcado. Vazio = sem teto."
11029
+ },
11030
+ {
11031
+ "name": "manage_page_message",
11032
+ "type": "string",
11033
+ "location": "body",
11034
+ "required": false,
11035
+ "description": "Texto de abertura da pagina publica. Aceita {{nome}} {{titulo}} {{tipo}} {{agente}} {{data}} {{horario}} {{dia_semana}} {{duracao}} {{telefone}} {{email}} {{link_cancelar}} {{link_remarcar}} {{link_confirmar}}. Variavel desconhecida sai CRUA para o cliente."
11036
+ }
11037
+ ],
11038
+ "returns": "tipo de evento criado (com novo ID)",
11039
+ "common_use_cases": [
11040
+ "Cadastro inicial de tipo de evento",
11041
+ "Automação a partir de evento externo",
11042
+ "Importação manual via API"
11043
+ ],
11044
+ "related_tools": [
11045
+ "lionchat_booking_event_types_list",
11046
+ "lionchat_booking_event_types_create",
11047
+ "lionchat_booking_event_types_show"
11048
+ ]
11049
+ },
11050
+ {
11051
+ "id": "lionchat_booking_event_types_list_2",
11052
+ "method": "GET",
11053
+ "path": "/api/v1/accounts/{account_id}/bookings/{id}/follow_ups",
11054
+ "title": "Follow-ups do Agendamento",
11055
+ "description": "Lista as mensagens agendadas (follow-ups) de um agendamento.",
11056
+ "category": "Tipos de Evento",
11057
+ "params": [
10679
11058
  {
10680
11059
  "name": "id",
10681
11060
  "type": "integer",
@@ -13551,7 +13930,7 @@
13551
13930
  "type": "string",
13552
13931
  "location": "body",
13553
13932
  "required": false,
13554
- "description": "Descricao"
13933
+ "description": "Descricao CURTA do cargo: uma frase de ate 60 caracteres (ex.: 'Tudo, menos conversas das caixas em que nao foi adicionado.'). NAO repetir as permissoes aqui — a tela ja mostra na coluna Permissoes. Texto longo e cortado com reticencias na lista de Funcoes personalizadas (16/09/2026)."
13555
13934
  },
13556
13935
  {
13557
13936
  "name": "permissions",
@@ -13607,7 +13986,7 @@
13607
13986
  "method": "PUT",
13608
13987
  "path": "/api/v1/accounts/{account_id}/custom_roles/{id}",
13609
13988
  "title": "Atualizar Role",
13610
- "description": "Atualiza um role personalizado. Atualiza campos do papel personalizado existente. Suporta atualização parcial (PATCH) — só campos enviados são alterados. Campos suportados: name, permissions.",
13989
+ "description": "Atualiza um role personalizado. Atualiza campos do papel personalizado existente. Suporta atualização parcial (PATCH) — só campos enviados são alterados. Campos suportados: name, description, permissions.",
13611
13990
  "category": "Roles Personalizados",
13612
13991
  "params": [
13613
13992
  {
@@ -13629,7 +14008,7 @@
13629
14008
  "type": "string",
13630
14009
  "location": "body",
13631
14010
  "required": false,
13632
- "description": "Nova descricao do cargo"
14011
+ "description": "Descricao CURTA do cargo: uma frase de ate 60 caracteres (ex.: 'Tudo, menos conversas das caixas em que nao foi adicionado.'). NAO repetir as permissoes aqui — a tela ja mostra na coluna Permissoes. Texto longo e cortado com reticencias na lista de Funcoes personalizadas (16/09/2026)."
13633
14012
  },
13634
14013
  {
13635
14014
  "name": "permissions",
@@ -25927,6 +26306,27 @@
25927
26306
  "location": "body",
25928
26307
  "required": false,
25929
26308
  "description": "Nome do bloco, exibido no cabecalho (ate 80 caracteres). Vazio = mostra o rotulo do tipo."
26309
+ },
26310
+ {
26311
+ "name": "direction_split",
26312
+ "type": "boolean",
26313
+ "location": "body",
26314
+ "required": false,
26315
+ "description": "true/false (padrao false). SO no bloco `calls_report`: troca as colunas fixas por Feitas x Recebidas, com quem atendeu na recebida. Opt-in de proposito (novo 28/08/2026)."
26316
+ },
26317
+ {
26318
+ "name": "no_show_over_scheduled",
26319
+ "type": "boolean",
26320
+ "location": "body",
26321
+ "required": false,
26322
+ "description": "true/false (padrao false). SO no bloco `eclinica_no_show`: a % de falta passa a ser faltaram/agendados em vez de faltaram/(compareceram+faltaram). Ligado, a unidade que nao anota desfecho parece a melhor da rede — o rotulo da coluna declara a base. Aceita as strings 'true'/'false' (novo 10/09/2026)."
26323
+ },
26324
+ {
26325
+ "name": "count_retorno_as_consulta",
26326
+ "type": "boolean",
26327
+ "location": "body",
26328
+ "required": false,
26329
+ "description": "true/false (padrao true). SO no bloco `eclinica_conversion`: retorno conta como consulta na base ('de toda consulta atendida, quantas viraram tratamento'); desligado, responde 'do paciente NOVO, quantos fecham' e o retorno vai para 'Nao classificado', nunca para procedimento. Aceita as strings 'true'/'false' (novo 10/09/2026)."
25930
26330
  }
25931
26331
  ],
25932
26332
  "returns": "Um dos 4 formatos normalizados (series | categories | scalar | table), com o campo `shape` dizendo qual",
@@ -25969,7 +26369,7 @@
25969
26369
  "type": "array",
25970
26370
  "location": "body",
25971
26371
  "required": false,
25972
- "description": "Lista de blocos. Cada item: {id, widget_type, chart_type, ...} com os mesmos campos do custom_dashboards_preview_widget. Maximo 12. DOIS campos de bloco que faltavam aqui: `follow_report_period` (true/false, tambem aceita as strings; AUSENTE = true) diz se o bloco obedece o calendario do TOPO do relatorio ou usa o periodo proprio — vale pra qualquer bloco, novo em 22/08/2026; e `direction_split` (true/false, padrao false) que SO faz efeito no bloco `calls_report` e troca as colunas fixas por Feitas x Recebidas, com quem atendeu na recebida — OPT-IN de proposito pra nao mexer no relatorio de quem ja usa o bloco, novo em 28/08/2026."
26372
+ "description": "Lista de blocos. Cada item: {id, widget_type, chart_type, ...} com os mesmos campos do custom_dashboards_preview_widget. Maximo 12. DOIS campos de bloco que faltavam aqui: `follow_report_period` (true/false, tambem aceita as strings; AUSENTE = true) diz se o bloco obedece o calendario do TOPO do relatorio ou usa o periodo proprio — vale pra qualquer bloco, novo em 22/08/2026; e `direction_split` (true/false, padrao false) que SO faz efeito no bloco `calls_report` e troca as colunas fixas por Feitas x Recebidas, com quem atendeu na recebida — OPT-IN de proposito pra nao mexer no relatorio de quem ja usa o bloco, novo em 28/08/2026. Desde 10/09/2026, dois campos SO dos blocos da e-Clinica: `no_show_over_scheduled` (true/false, padrao false — a % de falta passa a ser faltaram/agendados em vez de sobre os desfechos conhecidos; so faz efeito em `eclinica_no_show`) e `count_retorno_as_consulta` (true/false, padrao true — retorno conta como consulta na base da conversao; desligado, o retorno vai para 'Nao classificado'; so faz efeito em `eclinica_conversion`). Aceitam as strings 'true'/'false'; qualquer outro valor = 422 com o motivo."
25973
26373
  }
25974
26374
  ],
25975
26375
  "returns": "{ id, name, position, widgets, created_at }",
@@ -26018,7 +26418,7 @@
26018
26418
  "type": "array",
26019
26419
  "location": "body",
26020
26420
  "required": false,
26021
- "description": "Lista COMPLETA de blocos — substitui a atual. Preserve o `id` de cada bloco que ja existia, senao a tela perde o vinculo. Maximo 12. DOIS campos de bloco que faltavam aqui: `follow_report_period` (true/false, tambem aceita as strings; AUSENTE = true) diz se o bloco obedece o calendario do TOPO do relatorio ou usa o periodo proprio — vale pra qualquer bloco, novo em 22/08/2026; e `direction_split` (true/false, padrao false) que SO faz efeito no bloco `calls_report` e troca as colunas fixas por Feitas x Recebidas, com quem atendeu na recebida — OPT-IN de proposito pra nao mexer no relatorio de quem ja usa o bloco, novo em 28/08/2026."
26421
+ "description": "Lista COMPLETA de blocos — substitui a atual. Preserve o `id` de cada bloco que ja existia, senao a tela perde o vinculo. Maximo 12. DOIS campos de bloco que faltavam aqui: `follow_report_period` (true/false, tambem aceita as strings; AUSENTE = true) diz se o bloco obedece o calendario do TOPO do relatorio ou usa o periodo proprio — vale pra qualquer bloco, novo em 22/08/2026; e `direction_split` (true/false, padrao false) que SO faz efeito no bloco `calls_report` e troca as colunas fixas por Feitas x Recebidas, com quem atendeu na recebida — OPT-IN de proposito pra nao mexer no relatorio de quem ja usa o bloco, novo em 28/08/2026. Desde 10/09/2026, dois campos SO dos blocos da e-Clinica: `no_show_over_scheduled` (true/false, padrao false — a % de falta passa a ser faltaram/agendados em vez de sobre os desfechos conhecidos; so faz efeito em `eclinica_no_show`) e `count_retorno_as_consulta` (true/false, padrao true — retorno conta como consulta na base da conversao; desligado, o retorno vai para 'Nao classificado'; so faz efeito em `eclinica_conversion`). Aceitam as strings 'true'/'false'; qualquer outro valor = 422 com o motivo."
26022
26422
  }
26023
26423
  ],
26024
26424
  "returns": "{ id, name, position, widgets, created_at }",
@@ -30262,7 +30662,7 @@
30262
30662
  "method": "PATCH",
30263
30663
  "path": "/api/v1/accounts/{account_id}/funnels/{id}/meta_events_config",
30264
30664
  "title": "Configurar Eventos de Conversão do Funil (Meta/GA4/Ads)",
30265
- "description": "AÇÃO DE ESCRITA — confirme com o usuário. Define quais eventos de conversão o funil dispara automaticamente: por ETAPA (stages.<id da etapa>) e nos desfechos won/lost. Cada bloco aceita SÓ: enabled, name (nome do evento, ex. Lead, Purchase), is_standard, value_strategy, value_fixed, currency — qualquer outra chave é descartada em silêncio. O merge é PROFUNDO e atômico: mande só o que muda; etapas não citadas ficam como estão. Administrador ou cargo com marketing_integrations_manage (403). Devolve a configuração inteira depois do merge.",
30665
+ "description": "AÇÃO DE ESCRITA — confirme com o usuário. Define quais eventos de conversão o funil dispara automaticamente: por ETAPA (stages.<id da etapa>) e nos desfechos won/lost. Cada bloco aceita SÓ: enabled, name (nome do evento de SITE, ex. Lead, Purchase ou personalizado), is_standard, value_strategy, value_fixed, currency e messaging_name — qualquer outra chave é descartada em silêncio. messaging_name = evento de ANÚNCIO DE WHATSAPP (só etapas e won; lost é sempre site). A Meta só aceita 14 nomes em anúncio de WhatsApp: LeadSubmitted | QualifiedLead | ViewContent | AddToCart | InitiateCheckout | Purchase | OrderCreated | OrderShipped | OrderDelivered | OrderCanceled | OrderReturned | CartAbandoned | RatingProvided | ReviewProvided. Tri-estado: chave AUSENTE = automático (sugestão pelo nome do site: Lead/Contact → LeadSubmitted, Purchase → Purchase, InitiateCheckout → InitiateCheckout; sem sugestão o lead de anúncio sai como site com motivo); '' = não enviar como WhatsApp (sai como site); um dos 14 = escolha. Valor fora disso é descartado e vira 'ausente'. O merge é PROFUNDO e atômico: mande só o que muda; etapas não citadas ficam como estão. Administrador ou cargo com marketing_integrations_manage (403). Devolve a configuração inteira depois do merge.",
30266
30666
  "category": "Funis",
30267
30667
  "params": [
30268
30668
  {
@@ -30277,13 +30677,14 @@
30277
30677
  "type": "object",
30278
30678
  "location": "body",
30279
30679
  "required": true,
30280
- "description": "{stages: {<stage_id>: {enabled, name, is_standard, value_strategy, value_fixed, currency}}, won: {...}, lost: {...}} — parcial"
30680
+ "description": "{stages: {<stage_id>: {enabled, name, is_standard, value_strategy, value_fixed, currency, messaging_name}}, won: {...}, lost: {...}} — parcial. messaging_name: um dos 14 nomes de anúncio de WhatsApp da Meta, '' (não enviar como WhatsApp) ou ausente (automático)"
30281
30681
  }
30282
30682
  ],
30283
30683
  "returns": "200 meta_events_config completo do funil após o merge | 403",
30284
30684
  "common_use_cases": [
30285
30685
  "Disparar 'Purchase' quando o card for ganho",
30286
- "Ligar o evento 'Lead' na etapa de qualificação"
30686
+ "Ligar o evento 'Lead' na etapa de qualificação",
30687
+ "Escolher o evento de anúncio de WhatsApp de uma etapa (messaging_name: 'QualifiedLead')"
30287
30688
  ],
30288
30689
  "related_tools": [
30289
30690
  "lionchat_funnels_show",
@@ -30297,7 +30698,7 @@
30297
30698
  "method": "GET",
30298
30699
  "path": "/api/v1/accounts/{account_id}/funnels/{funnel_id}/meta_capi_events",
30299
30700
  "title": "Histórico de Eventos Meta CAPI do Funil",
30300
- "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 e o card de origem (kanban_item_title). Responde 'por que a venda não apareceu no Meta CAPI?'. Administrador ou cargo com marketing_integrations_manage (403).",
30701
+ "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).",
30301
30702
  "category": "Integracoes",
30302
30703
  "params": [
30303
30704
  {
@@ -30335,6 +30736,13 @@
30335
30736
  "required": false,
30336
30737
  "description": "Só eventos deste card"
30337
30738
  },
30739
+ {
30740
+ "name": "degraded",
30741
+ "type": "boolean",
30742
+ "location": "query",
30743
+ "required": false,
30744
+ "description": "true = só os eventos de anúncio de WhatsApp que saíram como site (plano B), isto é, com fallback_reason preenchido"
30745
+ },
30338
30746
  {
30339
30747
  "name": "since",
30340
30748
  "type": "string",
@@ -30357,10 +30765,11 @@
30357
30765
  "description": "Página (50 por página)"
30358
30766
  }
30359
30767
  ],
30360
- "returns": "{data: [{id, event_name, event_id, status, trigger_type, failure_reason, created_at, sent_at, kanban_item_id, kanban_item_title, fbtrace_id}], meta: {total, page}}",
30768
+ "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}}",
30361
30769
  "common_use_cases": [
30362
30770
  "Ver se o evento de conversão chegou no Meta CAPI",
30363
- "Listar os disparos falhados pra reenviar"
30771
+ "Listar os disparos falhados pra reenviar",
30772
+ "Descobrir por que os leads de anúncio de WhatsApp estão saindo como site (degraded=true e ler fallback_reason)"
30364
30773
  ],
30365
30774
  "related_tools": [
30366
30775
  "lionchat_funnels_meta_capi_events_show",
@@ -30723,7 +31132,7 @@
30723
31132
  "method": "POST",
30724
31133
  "path": "/api/v1/accounts/{account_id}/kanban_items/{id}/meta_capi/fire",
30725
31134
  "title": "Disparo manual de Conversão a partir do Card (Meta + GA4 + Google Ads)",
30726
- "description": "AÇÃO DE ESCRITA com efeito externo — confirme com o usuário. Dispara MANUALMENTE um evento de conversão a partir de um card do Kanban nos TRÊS destinos de uma vez (Meta CAPI, GA4 e Google Ads); cada destino decide sozinho se está configurado/permitido e falhas individuais não derrubam os outros (destino sem integração volta null). O contato vem do card (item_details.contact_id), do contact_id informado, ou da 1ª conversa não-grupo vinculada — sem contato: 422 'contact not found'. event_name: letras/números/_ até 40 caracteres (422 'invalid event_name'). currency vale só pro Meta. Rate limit: 10/min por usuário e 100/hora por conta (429). Administrador ou cargo com marketing_integrations_manage.",
31135
+ "description": "AÇÃO DE ESCRITA com efeito externo — confirme com o usuário. Dispara MANUALMENTE um evento de conversão a partir de um card do Kanban nos TRÊS destinos de uma vez (Meta CAPI, GA4 e Google Ads); cada destino decide sozinho se está configurado/permitido e falhas individuais não derrubam os outros (destino sem integração volta null). O contato vem do card (item_details.contact_id), do contact_id informado, ou da 1ª conversa não-grupo vinculada — sem contato: 422 'contact not found'. event_name: letras/números/_ até 40 caracteres (422 'invalid event_name'). currency e messaging_event_name valem só pro Meta. Lead que chegou por anúncio de WhatsApp (ctwa_clid + caixa oficial vinculada à Meta) sai como business_messaging com o messaging_event_name (ou a sugestão automática); sem nome possível sai como site com fallback_reason. Rate limit: 10/min por usuário e 100/hora por conta (429). Administrador ou cargo com marketing_integrations_manage.",
30727
31136
  "category": "Itens",
30728
31137
  "params": [
30729
31138
  {
@@ -30740,6 +31149,13 @@
30740
31149
  "required": true,
30741
31150
  "description": "Nome do evento (ex.: Lead, Purchase, Schedule)"
30742
31151
  },
31152
+ {
31153
+ "name": "messaging_event_name",
31154
+ "type": "string",
31155
+ "location": "body",
31156
+ "required": false,
31157
+ "description": "Evento de ANÚNCIO DE WHATSAPP (só o Meta usa). Um dos 14: LeadSubmitted | QualifiedLead | ViewContent | AddToCart | InitiateCheckout | Purchase | OrderCreated | OrderShipped | OrderDelivered | OrderCanceled | OrderReturned | CartAbandoned | RatingProvided | ReviewProvided; '' = não enviar como WhatsApp (sai como site); ausente = automático (sugestão pelo event_name). Fora disso: 422 'invalid messaging_event_name'"
31158
+ },
30743
31159
  {
30744
31160
  "name": "value",
30745
31161
  "type": "number",
@@ -31369,6 +31785,35 @@
31369
31785
  "lionchat_inboxes_show"
31370
31786
  ]
31371
31787
  },
31788
+ {
31789
+ "id": "lionchat_inboxes_capi_dataset_link",
31790
+ "method": "POST",
31791
+ "path": "/api/v1/accounts/{account_id}/inboxes/{id}/capi_dataset",
31792
+ "title": "Vincular a caixa WhatsApp Oficial à Meta (dataset de anúncio de WhatsApp)",
31793
+ "description": "AÇÃO DE ESCRITA — confirme com o usuário. Cria (ou recupera, é idempotente) na Meta o dataset da Conversions API ligado à conta do WhatsApp Business (WABA) desta caixa WhatsApp Cloud e grava o id em provider_config.capi_dataset_id. É para esse dataset que a Meta aceita evento de ANÚNCIO DE WHATSAPP (action_source business_messaging); no pixel do site ela recusa (subcode 2804132). Sem o vínculo, os leads de anúncio saem como evento de site (plano B, fallback_reason = lionchat:dataset_nao_configurado). O vínculo vale para todas as caixas da mesma WABA. Usa o token da própria caixa (precisa da permissão whatsapp_business_manage_events). 400 em caixa que não é Cloud; 422 {error (mensagem da Meta), subcode} quando a Meta recusa. Rate limit 10/hora por caixa. Somente administrador.",
31794
+ "category": "Caixas de Entrada",
31795
+ "params": [
31796
+ {
31797
+ "name": "id",
31798
+ "type": "integer",
31799
+ "location": "path",
31800
+ "required": true,
31801
+ "description": "ID da caixa WhatsApp Cloud"
31802
+ }
31803
+ ],
31804
+ "returns": "200 a caixa inteira (inbox) já com provider_config.capi_dataset_id | 400 | 422 {error, subcode}",
31805
+ "common_use_cases": [
31806
+ "Fazer os leads de anúncio de WhatsApp contarem como conversão de WhatsApp na Meta",
31807
+ "Resolver eventos com fallback_reason lionchat:dataset_nao_configurado"
31808
+ ],
31809
+ "related_tools": [
31810
+ "lionchat_inboxes_show",
31811
+ "lionchat_funnels_meta_capi_events_list",
31812
+ "lionchat_funnels_meta_events_config",
31813
+ "lionchat_meta_pixel_integrations_list"
31814
+ ],
31815
+ "confirm_required": true
31816
+ },
31372
31817
  {
31373
31818
  "id": "lionchat_inboxes_waha_connect",
31374
31819
  "method": "POST",
@@ -32116,7 +32561,7 @@
32116
32561
  "path": "/api/v2/accounts/{account_id}/booking_reports",
32117
32562
  "title": "Relatorio de Agendamentos",
32118
32563
  "category": "Relatorios",
32119
- "description": "[GET] A aba Relatorios > Agendamentos (2026-08-19). Unidade = o AGENDAMENTO (Booking nativo: link publico, IA e Agenda do painel — NAO e e-Clinica). Padrao de periodo: 30 dias pra TRAS e 30 pra FRENTE (agenda tem futuro). A SITUACAO vem da TAREFA da Agenda (account_tasks.status), nao de bookings.status — quem conclui/cancela pela Agenda deixa o booking parado em 'confirmado'; ler bookings direto pra contar concluidos da zero. attendance_rate = concluidos / (concluidos + cancelados), em % — pendentes ficam FORA do denominador (ainda nao aconteceram); nao recalcule com o total. snoozed (adiado) sai separado de pending. Admin ou agente.",
32564
+ "description": "[GET] A aba Relatorios > Agendamentos (2026-08-19). Unidade = o AGENDAMENTO (Booking nativo: link publico, IA e Agenda do painel — NAO e e-Clinica). Padrao de periodo: 30 dias pra TRAS e 30 pra FRENTE (agenda tem futuro). A SITUACAO vem da TAREFA da Agenda (account_tasks.status), nao de bookings.status — quem conclui/cancela pela Agenda deixa o booking parado em 'confirmado'; ler bookings direto pra contar concluidos da zero. attendance_rate (15/09) = attended / (attended + no_show), em %, pelas marcas Compareceu/Faltou; periodo SEM marca nenhuma cai na regra antiga concluidos / (concluidos + cancelados) — pendentes FORA do denominador (ainda nao aconteceram) — e attendance_basis diz qual valeu ('attendance' ou 'status'); nao recalcule com o total. snoozed (adiado) sai separado de pending. [15/09] totals traz tambem attended/no_show (marcas Compareceu/Faltou da tarefa — eixo proprio, NAO mexem no status nem na taxa) e a resposta ganha `treatments` (bloco Programas, refeito 15/09 a noite): o PERIODO since/until VALE; event_type_id recorta; user_id e status NAO. Programas: em_andamento e atrasados (medidos no FIM do periodo), comecaram/concluidos/encerrados (so se a data cair no periodo), sessoes_planejadas/sessoes_usadas/percentual (so dos em andamento). Sessoes do periodo: previstas = marcadas + nao_marcadas (nao_marcadas e PREVISAO), aconteceram, faltaram, taxa. Mais parados {programas, sessoes_restantes}, duracao {programas, dias_reais, dias_previstos}, linha[] {period, previstas, aconteceram, faltaram, aguardando (16/09), nao_marcadas} e por_tipo[] (mesmos campos + tipo). Sem valor em reais. Detalhe em lionchat://docs/reports-guide. Admin ou agente.",
32120
32565
  "params": [
32121
32566
  {
32122
32567
  "name": "since",
@@ -32161,7 +32606,7 @@
32161
32606
  "description": "day | week | month (agrupamento da timeline; default day)"
32162
32607
  }
32163
32608
  ],
32164
- "returns": "{period: {since, until, group_by}, totals: {total, pending, completed, cancelled, snoozed, attendance_rate}, timeline: [{period, count}], by_event_type, by_agent, by_origin}",
32609
+ "returns": "{period: {since, until, group_by}, totals: {total, pending, completed, cancelled, snoozed, attended, no_show, attendance_rate, attendance_basis}, timeline: [{period, count}], by_event_type, by_agent, by_origin, treatments: {em_andamento, atrasados, comecaram, concluidos, encerrados, previstas, marcadas, aconteceram, faltaram, nao_marcadas, taxa, percentual, parados, duracao, linha, por_tipo}}",
32165
32610
  "common_use_cases": [
32166
32611
  "Quantos agendamentos foram marcados/concluidos/cancelados no mes",
32167
32612
  "Taxa de comparecimento por tipo de consulta ou por responsavel",
@@ -32661,7 +33106,7 @@
32661
33106
  "type": "object",
32662
33107
  "location": "body",
32663
33108
  "required": false,
32664
- "description": "Configuracao do modelo (objeto, MESCLADO no update — mande so o que muda): signers (quantos titulares assinam, 1..), witnesses (testemunhas, 0..), sender_signs (bool: quem envia tambem assina, NO PAINEL), require_id_photo (bool: exige foto do documento na assinatura), validity_days (validade em dias contada do ENVIO; padrao 7; 1..365 — vira {{document.deadline}} no texto), reminder_days (lembrete a cada N dias a quem nao assinou; 0 desliga; padrao 2)."
33109
+ "description": "Configuracao do modelo (objeto, MESCLADO no update — mande so o que muda): signers (quantos titulares assinam, 1..), witnesses (testemunhas, 0..), sender_signs (bool: quem envia tambem assina, NO PAINEL), require_id_photo (bool: exige foto do documento na assinatura), validity_days (validade em dias contada do ENVIO; padrao 7; 1..365 — vira {{document.deadline}} no texto). O LEMBRETE NAO E MAIS CAMPO DO MODELO (2026-09-14): o reminder_days e a tarefa diaria das 10h foram REMOVIDOS. Quem lembra e um fluxo do cliente, com o texto e a caixa dele — gatilho signature_delivered (dispara por PESSOA), bloco Esperar em dias e condicao signature_status (person_not_signed + pending, logic and). NUNCA sugerir reminder_days."
32665
33110
  }
32666
33111
  ],
32667
33112
  "returns": "o modelo criado (id, name, kind, body, variables, roles_layout, progress)",
@@ -32723,7 +33168,7 @@
32723
33168
  "type": "object",
32724
33169
  "location": "body",
32725
33170
  "required": false,
32726
- "description": "Configuracao do modelo (objeto, MESCLADO no update — mande so o que muda): signers (quantos titulares assinam, 1..), witnesses (testemunhas, 0..), sender_signs (bool: quem envia tambem assina, NO PAINEL), require_id_photo (bool: exige foto do documento na assinatura), validity_days (validade em dias contada do ENVIO; padrao 7; 1..365 — vira {{document.deadline}} no texto), reminder_days (lembrete a cada N dias a quem nao assinou; 0 desliga; padrao 2)."
33171
+ "description": "Configuracao do modelo (objeto, MESCLADO no update — mande so o que muda): signers (quantos titulares assinam, 1..), witnesses (testemunhas, 0..), sender_signs (bool: quem envia tambem assina, NO PAINEL), require_id_photo (bool: exige foto do documento na assinatura), validity_days (validade em dias contada do ENVIO; padrao 7; 1..365 — vira {{document.deadline}} no texto). O LEMBRETE NAO E MAIS CAMPO DO MODELO (2026-09-14): o reminder_days e a tarefa diaria das 10h foram REMOVIDOS. Quem lembra e um fluxo do cliente, com o texto e a caixa dele — gatilho signature_delivered (dispara por PESSOA), bloco Esperar em dias e condicao signature_status (person_not_signed + pending, logic and). NUNCA sugerir reminder_days."
32727
33172
  }
32728
33173
  ],
32729
33174
  "returns": "o modelo atualizado",
@@ -33037,5 +33482,650 @@
33037
33482
  "related_tools": [
33038
33483
  "lionchat_signature_envelopes_create"
33039
33484
  ]
33485
+ },
33486
+ {
33487
+ "id": "lionchat_agendas_list",
33488
+ "method": "GET",
33489
+ "path": "/api/v1/accounts/{account_id}/agendas",
33490
+ "title": "Listar agendas (unidades)",
33491
+ "description": "Lista as AGENDAS da conta. Uma agenda e um LUGAR — uma unidade, uma filial, um consultorio —, nunca uma pessoa: tem fuso, cor, quem enxerga e conta Google proprios. Devolve so as que o usuario enxerga (admin ve todas). `meta` traz a cota: `liberada` (o recurso 'multiple_agendas' esta ligado na conta), `limite` (nulo = ilimitado), `usadas` e `pode_criar`. SEM o recurso a conta tem UMA agenda; compromissos com agenda_id nulo pertencem a ela. Cada agenda traz `google: { connected, email, state }` — a conta Google ligada a ela e o estado da sincronizacao (healthy / needs_reconnect / needs_calendar_selection / reactivatable; nulos sem conexao). [13/09]",
33492
+ "category": "Agenda / Tarefas",
33493
+ "params": []
33494
+ },
33495
+ {
33496
+ "id": "lionchat_agendas_show",
33497
+ "method": "GET",
33498
+ "path": "/api/v1/accounts/{account_id}/agendas/{id}",
33499
+ "title": "Ver agenda",
33500
+ "description": "Detalhe de uma agenda (unidade): nome, fuso, cor, se e a principal e quem enxerga. Cada agenda traz `google: { connected, email, state }` — a conta Google ligada a ela e o estado da sincronizacao (healthy / needs_reconnect / needs_calendar_selection / reactivatable; nulos sem conexao). [13/09]",
33501
+ "category": "Agenda / Tarefas",
33502
+ "params": [
33503
+ {
33504
+ "name": "id",
33505
+ "type": "integer",
33506
+ "location": "path",
33507
+ "required": true,
33508
+ "description": "ID da agenda"
33509
+ }
33510
+ ]
33511
+ },
33512
+ {
33513
+ "id": "lionchat_agendas_create",
33514
+ "method": "POST",
33515
+ "path": "/api/v1/accounts/{account_id}/agendas",
33516
+ "title": "Criar agenda (unidade)",
33517
+ "description": "Cria uma agenda. SO ADMINISTRADOR. Exige o recurso 'multiple_agendas' ligado na conta (Super Admin) e respeita o numero de Extras Manuais — ZERO ali significa ILIMITADO. Sem o recurso, a conta fica com a agenda principal e a criacao e recusada.",
33518
+ "category": "Agenda / Tarefas",
33519
+ "params": [
33520
+ {
33521
+ "name": "name",
33522
+ "type": "string",
33523
+ "location": "body",
33524
+ "required": true,
33525
+ "description": "Nome da unidade (ex.: Matriz, Consultorio Boa Vista). Obrigatorio, unico na conta."
33526
+ },
33527
+ {
33528
+ "name": "timezone",
33529
+ "type": "string",
33530
+ "location": "body",
33531
+ "required": false,
33532
+ "description": "Fuso IANA (ex.: America/Sao_Paulo). VAZIO usa o fuso da conta. E o horario que aparece na tela e que vai escrito para o cliente."
33533
+ },
33534
+ {
33535
+ "name": "color",
33536
+ "type": "string",
33537
+ "location": "body",
33538
+ "required": false,
33539
+ "description": "Cor hex (#RRGGBB). Pinta o compromisso no calendario quando o tipo de Booking e o atendente nao tem cor propria."
33540
+ },
33541
+ {
33542
+ "name": "active",
33543
+ "type": "boolean",
33544
+ "location": "body",
33545
+ "required": false,
33546
+ "description": "Agenda ativa. Padrao true."
33547
+ },
33548
+ {
33549
+ "name": "position",
33550
+ "type": "integer",
33551
+ "location": "body",
33552
+ "required": false,
33553
+ "description": "Ordem na lista."
33554
+ },
33555
+ {
33556
+ "name": "member_user_ids",
33557
+ "type": "array",
33558
+ "location": "body",
33559
+ "required": false,
33560
+ "description": "IDs dos usuarios que enxergam. SUBSTITUI a lista inteira. Vazio em pessoas E equipes = todo mundo da conta enxerga."
33561
+ },
33562
+ {
33563
+ "name": "member_team_ids",
33564
+ "type": "array",
33565
+ "location": "body",
33566
+ "required": false,
33567
+ "description": "IDs das equipes que enxergam. SUBSTITUI a lista inteira. Quem entrar na equipe ganha acesso sozinho."
33568
+ }
33569
+ ]
33570
+ },
33571
+ {
33572
+ "id": "lionchat_agendas_update",
33573
+ "method": "PATCH",
33574
+ "path": "/api/v1/accounts/{account_id}/agendas/{id}",
33575
+ "title": "Editar agenda",
33576
+ "description": "Edita a agenda. SO ADMINISTRADOR. `member_user_ids`/`member_team_ids` SUBSTITUEM a lista inteira.",
33577
+ "category": "Agenda / Tarefas",
33578
+ "params": [
33579
+ {
33580
+ "name": "id",
33581
+ "type": "integer",
33582
+ "location": "path",
33583
+ "required": true,
33584
+ "description": "ID da agenda"
33585
+ },
33586
+ {
33587
+ "name": "name",
33588
+ "type": "string",
33589
+ "location": "body",
33590
+ "required": false,
33591
+ "description": "Nome da unidade (ex.: Matriz, Consultorio Boa Vista). Obrigatorio, unico na conta."
33592
+ },
33593
+ {
33594
+ "name": "timezone",
33595
+ "type": "string",
33596
+ "location": "body",
33597
+ "required": false,
33598
+ "description": "Fuso IANA (ex.: America/Sao_Paulo). VAZIO usa o fuso da conta. E o horario que aparece na tela e que vai escrito para o cliente."
33599
+ },
33600
+ {
33601
+ "name": "color",
33602
+ "type": "string",
33603
+ "location": "body",
33604
+ "required": false,
33605
+ "description": "Cor hex (#RRGGBB). Pinta o compromisso no calendario quando o tipo de Booking e o atendente nao tem cor propria."
33606
+ },
33607
+ {
33608
+ "name": "active",
33609
+ "type": "boolean",
33610
+ "location": "body",
33611
+ "required": false,
33612
+ "description": "Agenda ativa. Padrao true."
33613
+ },
33614
+ {
33615
+ "name": "position",
33616
+ "type": "integer",
33617
+ "location": "body",
33618
+ "required": false,
33619
+ "description": "Ordem na lista."
33620
+ },
33621
+ {
33622
+ "name": "member_user_ids",
33623
+ "type": "array",
33624
+ "location": "body",
33625
+ "required": false,
33626
+ "description": "IDs dos usuarios que enxergam. SUBSTITUI a lista inteira. Vazio em pessoas E equipes = todo mundo da conta enxerga."
33627
+ },
33628
+ {
33629
+ "name": "member_team_ids",
33630
+ "type": "array",
33631
+ "location": "body",
33632
+ "required": false,
33633
+ "description": "IDs das equipes que enxergam. SUBSTITUI a lista inteira. Quem entrar na equipe ganha acesso sozinho."
33634
+ }
33635
+ ]
33636
+ },
33637
+ {
33638
+ "id": "lionchat_agendas_destroy",
33639
+ "method": "DELETE",
33640
+ "path": "/api/v1/accounts/{account_id}/agendas/{id}",
33641
+ "title": "Excluir agenda",
33642
+ "description": "Exclui a agenda. SO ADMINISTRADOR. A agenda PRINCIPAL nao pode ser excluida. Os compromissos dela NAO sao apagados — ficam sem agenda e passam a aparecer na principal.",
33643
+ "category": "Agenda / Tarefas",
33644
+ "params": [
33645
+ {
33646
+ "name": "id",
33647
+ "type": "integer",
33648
+ "location": "path",
33649
+ "required": true,
33650
+ "description": "ID da agenda"
33651
+ }
33652
+ ]
33653
+ },
33654
+ {
33655
+ "id": "lionchat_account_task_types_list",
33656
+ "method": "GET",
33657
+ "path": "/api/v1/accounts/{account_id}/account_task_types",
33658
+ "title": "Listar tipos de compromisso da conta",
33659
+ "description": "Tipos de compromisso CRIADOS PELA EMPRESA, alem dos 7 de fabrica (task, follow_up, call, meeting, video_call, deadline, custom). Cada um tem `key` (o que fica gravado em account_tasks.task_type), `name` (o que aparece na tela) e `icon`. Leitura liberada a todos; criar/editar/excluir e so de administrador.",
33660
+ "category": "Agenda / Tarefas",
33661
+ "params": []
33662
+ },
33663
+ {
33664
+ "id": "lionchat_account_task_types_create",
33665
+ "method": "POST",
33666
+ "path": "/api/v1/accounts/{account_id}/account_task_types",
33667
+ "title": "Criar tipo de compromisso",
33668
+ "description": "Cria um tipo com o nome da empresa (ex.: Consulta, Ondas de Choque, Visita ao imovel). SO ADMINISTRADOR. A `key` e derivada do nome e NUNCA muda depois — renomear troca so o que aparece na tela, o historico fica inteiro. O nome nao pode gerar uma key de fabrica. O tipo fica disponivel na lista Tipo do Booking e no Novo compromisso.",
33669
+ "category": "Agenda / Tarefas",
33670
+ "params": [
33671
+ {
33672
+ "name": "name",
33673
+ "type": "string",
33674
+ "location": "body",
33675
+ "required": true,
33676
+ "description": "Nome do tipo. Obrigatorio, unico na conta, ate 60 caracteres."
33677
+ },
33678
+ {
33679
+ "name": "icon",
33680
+ "type": "string",
33681
+ "location": "body",
33682
+ "required": false,
33683
+ "description": "Icone. LISTA FECHADA — qualquer outro valor e RECUSADO (nome fora da lista vira icone invisivel na tela). Valores: i-lucide-calendar-check, i-lucide-stethoscope, i-lucide-syringe, i-lucide-heart-pulse, i-lucide-smile, i-lucide-sparkles, i-lucide-utensils, i-lucide-dumbbell, i-lucide-home, i-lucide-scale, i-lucide-wrench, i-lucide-graduation-cap"
33684
+ },
33685
+ {
33686
+ "name": "color",
33687
+ "type": "string",
33688
+ "location": "body",
33689
+ "required": false,
33690
+ "description": "Cor hex (#RRGGBB), opcional."
33691
+ },
33692
+ {
33693
+ "name": "active",
33694
+ "type": "boolean",
33695
+ "location": "body",
33696
+ "required": false,
33697
+ "description": "Padrao true."
33698
+ },
33699
+ {
33700
+ "name": "position",
33701
+ "type": "integer",
33702
+ "location": "body",
33703
+ "required": false,
33704
+ "description": "Ordem na lista."
33705
+ }
33706
+ ]
33707
+ },
33708
+ {
33709
+ "id": "lionchat_account_task_types_update",
33710
+ "method": "PATCH",
33711
+ "path": "/api/v1/accounts/{account_id}/account_task_types/{id}",
33712
+ "title": "Editar tipo de compromisso",
33713
+ "description": "Edita o tipo. SO ADMINISTRADOR. A `key` e IMUTAVEL: renomear muda so o nome exibido.",
33714
+ "category": "Agenda / Tarefas",
33715
+ "params": [
33716
+ {
33717
+ "name": "id",
33718
+ "type": "integer",
33719
+ "location": "path",
33720
+ "required": true,
33721
+ "description": "ID do tipo"
33722
+ },
33723
+ {
33724
+ "name": "name",
33725
+ "type": "string",
33726
+ "location": "body",
33727
+ "required": false,
33728
+ "description": "Novo nome."
33729
+ },
33730
+ {
33731
+ "name": "icon",
33732
+ "type": "string",
33733
+ "location": "body",
33734
+ "required": false,
33735
+ "description": "Icone (lista fechada): i-lucide-calendar-check, i-lucide-stethoscope, i-lucide-syringe, i-lucide-heart-pulse, i-lucide-smile, i-lucide-sparkles, i-lucide-utensils, i-lucide-dumbbell, i-lucide-home, i-lucide-scale, i-lucide-wrench, i-lucide-graduation-cap"
33736
+ },
33737
+ {
33738
+ "name": "color",
33739
+ "type": "string",
33740
+ "location": "body",
33741
+ "required": false,
33742
+ "description": "Cor hex."
33743
+ },
33744
+ {
33745
+ "name": "active",
33746
+ "type": "boolean",
33747
+ "location": "body",
33748
+ "required": false,
33749
+ "description": "Ativo."
33750
+ },
33751
+ {
33752
+ "name": "position",
33753
+ "type": "integer",
33754
+ "location": "body",
33755
+ "required": false,
33756
+ "description": "Ordem."
33757
+ }
33758
+ ]
33759
+ },
33760
+ {
33761
+ "id": "lionchat_account_task_types_destroy",
33762
+ "method": "DELETE",
33763
+ "path": "/api/v1/accounts/{account_id}/account_task_types/{id}",
33764
+ "title": "Excluir tipo de compromisso",
33765
+ "description": "SO ADMINISTRADOR. Tipo EM USO nao e apagado: e DESATIVADO (some das listas de escolha, mas os compromissos antigos continuam com nome e icone). A resposta traz `deactivated: true` nesse caso. So o que nunca foi usado e apagado de vez.",
33766
+ "category": "Agenda / Tarefas",
33767
+ "params": [
33768
+ {
33769
+ "name": "id",
33770
+ "type": "integer",
33771
+ "location": "path",
33772
+ "required": true,
33773
+ "description": "ID do tipo"
33774
+ }
33775
+ ]
33776
+ },
33777
+ {
33778
+ "id": "lionchat_agenda_treatments_list",
33779
+ "method": "GET",
33780
+ "path": "/api/v1/accounts/{account_id}/agenda_treatments",
33781
+ "title": "Listar tratamentos em sessoes de um contato",
33782
+ "description": "Programas de sessoes do CONTATO (ficha; na tela o nome e PROGRAMA — pode ser tratamento, mentoria, onboarding): cada um e N sessoes de um tipo de agendamento com `sessions_enabled`. Devolve o RESUMO pronto por tratamento: `planejadas`, `usadas` (compareceu + faltou), `percentual`, `compareceu`, `faltou`, `marcadas`, `concluido`, `cheio` (tudo marcado, nada usado), `atrasado`, `proxima` ({numero, prevista_em}), `intervalo` e `sessoes` (uma linha por sessao: `numero`, `situacao` a_marcar|marcada|compareceu|faltou, `prevista_em`, `data_passou`, `tarefa` {id, title, scheduled_at, status, attendance} ou null, `oculta` quando o compromisso e de agenda/privado que o usuario nao enxerga). Em andamento primeiro, depois concluidos e encerrados. O programa NASCE junto do agendamento (tasks_create no modo booking ou link publico) — nao existe create aqui. Exige a Agenda ligada na conta.",
33783
+ "category": "Agenda / Tarefas",
33784
+ "params": [
33785
+ {
33786
+ "name": "contact_id",
33787
+ "type": "integer",
33788
+ "location": "query",
33789
+ "required": true,
33790
+ "description": "ID do contato (obrigatorio)"
33791
+ }
33792
+ ],
33793
+ "returns": "Array de resumos de tratamento (em andamento primeiro).",
33794
+ "common_use_cases": [
33795
+ "Ver quantas sessoes o paciente ja usou e qual e a proxima a marcar",
33796
+ "Descobrir se o tratamento esta atrasado e a data prevista da proxima sessao",
33797
+ "Conferir compareceu/faltou por sessao antes de ligar para o paciente"
33798
+ ],
33799
+ "related_tools": [
33800
+ "lionchat_agenda_treatments_show",
33801
+ "lionchat_agenda_treatments_update",
33802
+ "lionchat_tasks_create",
33803
+ "lionchat_booking_event_types_update"
33804
+ ]
33805
+ },
33806
+ {
33807
+ "id": "lionchat_agenda_treatments_show",
33808
+ "method": "GET",
33809
+ "path": "/api/v1/accounts/{account_id}/agenda_treatments/{id}",
33810
+ "title": "Ver um tratamento em sessoes",
33811
+ "description": "O resumo de UM programa (mesmo formato da listagem). 404 fora da conta.",
33812
+ "category": "Agenda / Tarefas",
33813
+ "params": [
33814
+ {
33815
+ "name": "id",
33816
+ "type": "integer",
33817
+ "location": "path",
33818
+ "required": true,
33819
+ "description": "ID do tratamento"
33820
+ }
33821
+ ],
33822
+ "returns": "Resumo do tratamento.",
33823
+ "common_use_cases": [
33824
+ "Reler o tratamento depois de marcar ou desmarcar uma sessao"
33825
+ ],
33826
+ "related_tools": [
33827
+ "lionchat_agenda_treatments_list",
33828
+ "lionchat_agenda_treatments_update"
33829
+ ]
33830
+ },
33831
+ {
33832
+ "id": "lionchat_agenda_treatments_update",
33833
+ "method": "PATCH",
33834
+ "path": "/api/v1/accounts/{account_id}/agenda_treatments/{id}",
33835
+ "title": "Ajustar um tratamento em sessoes (quantidade, encerrar, reabrir)",
33836
+ "description": "Muda a quantidade de sessoes (`planned_sessions`, 2..60, NUNCA abaixo da maior sessao ja marcada — 422 'Ha sessoes marcadas alem dessa quantidade') e encerra/reabre (`status`: `closed` grava motivo `manual`; `active` reabre). Reabrir com OUTRO tratamento em andamento do mesmo tipo para o contato e recusado com 422 ('Ja existe um programa em andamento deste tipo para este contato'). Programa encerrado por mesclagem de fichas (`close_reason: mesclagem`) fica so como historico. Qualquer usuario da conta pode ajustar. O ajuste roda sob a MESMA trava do agendamento (conta, contato, tipo).",
33837
+ "category": "Agenda / Tarefas",
33838
+ "params": [
33839
+ {
33840
+ "name": "id",
33841
+ "type": "integer",
33842
+ "location": "path",
33843
+ "required": true,
33844
+ "description": "ID do tratamento"
33845
+ },
33846
+ {
33847
+ "name": "agenda_treatment.planned_sessions",
33848
+ "type": "integer",
33849
+ "location": "body",
33850
+ "required": false,
33851
+ "description": "Quantidade de sessoes (2 a 60; nunca abaixo da maior sessao marcada)"
33852
+ },
33853
+ {
33854
+ "name": "agenda_treatment.status",
33855
+ "type": "string",
33856
+ "location": "body",
33857
+ "required": false,
33858
+ "description": "`closed` para encerrar, `active` para reabrir"
33859
+ }
33860
+ ],
33861
+ "returns": "Resumo do tratamento ja atualizado.",
33862
+ "common_use_cases": [
33863
+ "Aumentar de 5 para 8 sessoes o pacote de um paciente",
33864
+ "Encerrar um tratamento abandonado",
33865
+ "Reabrir um tratamento encerrado por engano"
33866
+ ],
33867
+ "related_tools": [
33868
+ "lionchat_agenda_treatments_list",
33869
+ "lionchat_agenda_treatments_show"
33870
+ ]
33871
+ },
33872
+ {
33873
+ "id": "lionchat_agenda_treatments_plano_sugerido",
33874
+ "method": "GET",
33875
+ "path": "/api/v1/accounts/{account_id}/agenda_treatments/{id}/plano_sugerido",
33876
+ "title": "Programa: sugestao de datas para marcar todas",
33877
+ "category": "Agenda / Tarefas",
33878
+ "description": "[GET] (15/09) O que a tela de conferencia do \"Marcar todas as sessoes\" mostra ANTES de marcar nada. Devolve, por sessao que ainda falta: `numero`, `prevista_em` (a data pela regra do programa), `data`/`slot` sugeridos, `slots` (os horarios livres daquele dia) e `deslocada` (true = o dia previsto nao tinha vaga e a sugestao andou para a frente). Traz tambem `timezone` e `tipo` (dias da semana configurados e janela de antecedencia) para o calendario de vagas acender os dias certos. LEITURA PURA: nada e gravado. 422 quando o programa perdeu o tipo de agendamento. Exige a Agenda ligada na conta.",
33879
+ "params": [
33880
+ {
33881
+ "name": "id",
33882
+ "type": "integer",
33883
+ "location": "path",
33884
+ "required": true,
33885
+ "description": "ID do programa (agenda_treatment)"
33886
+ }
33887
+ ],
33888
+ "returns": "{ timezone, tipo: {booking_availabilities, max_advance_days, available_from, available_until, duration_minutes}, sessoes: [{numero, prevista_em, data, slot, slots, deslocada}] }",
33889
+ "common_use_cases": [
33890
+ "Mostrar as datas sugeridas antes de marcar todas as sessoes que faltam",
33891
+ "Saber quais sessoes nao tem vaga na janela de procura (data nula)"
33892
+ ],
33893
+ "related_tools": [
33894
+ "lionchat_agenda_treatments_marcar_todas",
33895
+ "lionchat_agenda_treatments_show",
33896
+ "lionchat_booking_event_types_slots"
33897
+ ]
33898
+ },
33899
+ {
33900
+ "id": "lionchat_agenda_treatments_marcar_todas",
33901
+ "method": "POST",
33902
+ "path": "/api/v1/accounts/{account_id}/agenda_treatments/{id}/marcar_todas",
33903
+ "title": "Programa: marcar varias sessoes de uma vez",
33904
+ "category": "Agenda / Tarefas",
33905
+ "description": "[POST] (15/09) Marca de uma vez as sessoes confirmadas do programa. Body: `sessoes: [{numero, date, slot}]` — o numero da sessao, o dia (YYYY-MM-DD) e o horario (HH:MM). NAO e transacao unica de proposito: cada sessao e uma reserva DE VERDADE (cria a tarefa, dispara confirmacao, lembrete e Google como qualquer agendamento), entao uma falha no meio NAO desfaz as que ja entraram na agenda — a resposta e 200 com `marcadas` e `falhas: [{numero, erro}]`. ATENCAO: com confirmacao ligada no tipo, o cliente recebe UMA mensagem por sessao. Teto de 60 sessoes por chamada. 422 se o programa estiver encerrado/concluido ou sem tipo de agendamento. Sessao que ja tem compromisso vivo volta em `falhas` ('Essa sessao ja foi marcada').",
33906
+ "params": [
33907
+ {
33908
+ "name": "id",
33909
+ "type": "integer",
33910
+ "location": "path",
33911
+ "required": true,
33912
+ "description": "ID do programa (agenda_treatment)"
33913
+ },
33914
+ {
33915
+ "name": "sessoes",
33916
+ "type": "array",
33917
+ "location": "body",
33918
+ "required": true,
33919
+ "description": "Lista [{numero, date, slot}] — use o `plano_sugerido` para montar"
33920
+ }
33921
+ ],
33922
+ "returns": "{ marcadas: [numeros], falhas: [{numero, erro}], tratamento: resumo atualizado }",
33923
+ "common_use_cases": [
33924
+ "Marcar todas as sessoes que faltam num pacote de fisioterapia/mentoria/onboarding",
33925
+ "Reagendar em lote as sessoes que ainda nao aconteceram"
33926
+ ],
33927
+ "related_tools": [
33928
+ "lionchat_agenda_treatments_plano_sugerido",
33929
+ "lionchat_tasks_create",
33930
+ "lionchat_agenda_treatments_update"
33931
+ ]
33932
+ },
33933
+ {
33934
+ "id": "lionchat_agenda_holidays_list",
33935
+ "method": "GET",
33936
+ "path": "/api/v1/accounts/{account_id}/agenda_holidays",
33937
+ "title": "Listar feriados da agenda",
33938
+ "description": "Feriados cadastrados pela conta (aparecem como faixa na Agenda; NAO bloqueiam horario — decisao do dono 14/09). COM `from`/`to` devolve o periodo pedido (passado inclusive); SEM periodo devolve so os que ainda estao por vir, do mais proximo ao mais distante. Cada item: `id`, `name`, `date`, `start_time`, `end_time`, `all_agendas`, `dia_inteiro`, `agenda_ids`, `agenda_names`. Leitura liberada a todos.",
33939
+ "category": "Agenda / Tarefas",
33940
+ "params": [
33941
+ {
33942
+ "name": "from",
33943
+ "type": "string",
33944
+ "location": "query",
33945
+ "required": false,
33946
+ "description": "Inicio do periodo (YYYY-MM-DD) — junto com `to`"
33947
+ },
33948
+ {
33949
+ "name": "to",
33950
+ "type": "string",
33951
+ "location": "query",
33952
+ "required": false,
33953
+ "description": "Fim do periodo (YYYY-MM-DD) — junto com `from`"
33954
+ }
33955
+ ],
33956
+ "returns": "Array de feriados.",
33957
+ "common_use_cases": [
33958
+ "Ver os feriados do mes antes de sugerir horario",
33959
+ "Conferir se um feriado vale para todas as agendas ou so para uma unidade"
33960
+ ],
33961
+ "related_tools": [
33962
+ "lionchat_agenda_holidays_create",
33963
+ "lionchat_agenda_holidays_update",
33964
+ "lionchat_agenda_holidays_destroy",
33965
+ "lionchat_agendas_list"
33966
+ ]
33967
+ },
33968
+ {
33969
+ "id": "lionchat_agenda_holidays_create",
33970
+ "method": "POST",
33971
+ "path": "/api/v1/accounts/{account_id}/agenda_holidays",
33972
+ "title": "Cadastrar feriado da agenda",
33973
+ "description": "Cria um feriado. SO ADMINISTRADOR. Ou vale para TODAS as agendas (`all_agendas: true`) ou aponta agendas especificas (`agenda_ids`, so ids DESTA conta) — sem uma coisa nem outra e recusado com 422 (feriado que nao vale para ninguem). Sem `start_time`/`end_time` e dia inteiro.",
33974
+ "category": "Agenda / Tarefas",
33975
+ "params": [
33976
+ {
33977
+ "name": "agenda_holiday.name",
33978
+ "type": "string",
33979
+ "location": "body",
33980
+ "required": true,
33981
+ "description": "Nome do feriado"
33982
+ },
33983
+ {
33984
+ "name": "agenda_holiday.date",
33985
+ "type": "string",
33986
+ "location": "body",
33987
+ "required": true,
33988
+ "description": "Data (YYYY-MM-DD)"
33989
+ },
33990
+ {
33991
+ "name": "agenda_holiday.start_time",
33992
+ "type": "string",
33993
+ "location": "body",
33994
+ "required": false,
33995
+ "description": "Hora inicial (HH:MM) — vazio = dia inteiro"
33996
+ },
33997
+ {
33998
+ "name": "agenda_holiday.end_time",
33999
+ "type": "string",
34000
+ "location": "body",
34001
+ "required": false,
34002
+ "description": "Hora final (HH:MM)"
34003
+ },
34004
+ {
34005
+ "name": "agenda_holiday.all_agendas",
34006
+ "type": "boolean",
34007
+ "location": "body",
34008
+ "required": false,
34009
+ "description": "Vale para todas as agendas (unidades) da conta"
34010
+ },
34011
+ {
34012
+ "name": "agenda_holiday.agenda_ids",
34013
+ "type": "array",
34014
+ "location": "body",
34015
+ "required": false,
34016
+ "description": "IDs das agendas em que vale (ignorado com all_agendas)"
34017
+ }
34018
+ ],
34019
+ "returns": "Feriado criado (201).",
34020
+ "common_use_cases": [
34021
+ "Cadastrar o feriado municipal so da unidade da filial",
34022
+ "Marcar o recesso de fim de ano para todas as agendas"
34023
+ ],
34024
+ "related_tools": [
34025
+ "lionchat_agenda_holidays_list",
34026
+ "lionchat_agenda_holidays_update",
34027
+ "lionchat_agendas_list"
34028
+ ]
34029
+ },
34030
+ {
34031
+ "id": "lionchat_agenda_holidays_update",
34032
+ "method": "PATCH",
34033
+ "path": "/api/v1/accounts/{account_id}/agenda_holidays/{id}",
34034
+ "title": "Editar feriado da agenda",
34035
+ "description": "Edita nome, data, horario e alcance (todas as agendas ou lista de agendas). SO ADMINISTRADOR. Mesma regra do create: sem alcance nenhum e recusado com 422.",
34036
+ "category": "Agenda / Tarefas",
34037
+ "params": [
34038
+ {
34039
+ "name": "id",
34040
+ "type": "integer",
34041
+ "location": "path",
34042
+ "required": true,
34043
+ "description": "ID do feriado"
34044
+ },
34045
+ {
34046
+ "name": "agenda_holiday.name",
34047
+ "type": "string",
34048
+ "location": "body",
34049
+ "required": false,
34050
+ "description": "Nome"
34051
+ },
34052
+ {
34053
+ "name": "agenda_holiday.date",
34054
+ "type": "string",
34055
+ "location": "body",
34056
+ "required": false,
34057
+ "description": "Data (YYYY-MM-DD)"
34058
+ },
34059
+ {
34060
+ "name": "agenda_holiday.start_time",
34061
+ "type": "string",
34062
+ "location": "body",
34063
+ "required": false,
34064
+ "description": "Hora inicial (HH:MM)"
34065
+ },
34066
+ {
34067
+ "name": "agenda_holiday.end_time",
34068
+ "type": "string",
34069
+ "location": "body",
34070
+ "required": false,
34071
+ "description": "Hora final (HH:MM)"
34072
+ },
34073
+ {
34074
+ "name": "agenda_holiday.all_agendas",
34075
+ "type": "boolean",
34076
+ "location": "body",
34077
+ "required": false,
34078
+ "description": "Vale para todas as agendas"
34079
+ },
34080
+ {
34081
+ "name": "agenda_holiday.agenda_ids",
34082
+ "type": "array",
34083
+ "location": "body",
34084
+ "required": false,
34085
+ "description": "IDs das agendas em que vale"
34086
+ }
34087
+ ],
34088
+ "returns": "Feriado atualizado.",
34089
+ "common_use_cases": [
34090
+ "Trocar a data de um feriado cadastrado errado",
34091
+ "Estender um feriado da matriz para todas as unidades"
34092
+ ],
34093
+ "related_tools": [
34094
+ "lionchat_agenda_holidays_list",
34095
+ "lionchat_agenda_holidays_create"
34096
+ ]
34097
+ },
34098
+ {
34099
+ "id": "lionchat_agenda_holidays_destroy",
34100
+ "method": "DELETE",
34101
+ "path": "/api/v1/accounts/{account_id}/agenda_holidays/{id}",
34102
+ "title": "Excluir feriado da agenda",
34103
+ "description": "Apaga o feriado. SO ADMINISTRADOR.",
34104
+ "category": "Agenda / Tarefas",
34105
+ "params": [
34106
+ {
34107
+ "name": "id",
34108
+ "type": "integer",
34109
+ "location": "path",
34110
+ "required": true,
34111
+ "description": "ID do feriado"
34112
+ }
34113
+ ],
34114
+ "returns": "200 sem corpo.",
34115
+ "common_use_cases": [
34116
+ "Remover um feriado cadastrado por engano"
34117
+ ],
34118
+ "related_tools": [
34119
+ "lionchat_agenda_holidays_list"
34120
+ ]
34121
+ },
34122
+ {
34123
+ "id": "lionchat_google_calendar_agendas",
34124
+ "method": "GET",
34125
+ "path": "/api/v1/accounts/{account_id}/google_calendar/agendas",
34126
+ "title": "Google Calendar por agenda (unidade)",
34127
+ "description": "Uma linha por AGENDA com o estado do Google de cada uma: `connected`, `state`, `calendar_id`, `connected_by`. A conexao Google e UMA POR AGENDA — cada unidade liga a conta Google dela, inclusive a mesma pessoa com contas diferentes. SO ADMINISTRADOR. Conta sem agendas devolve uma linha com agenda_id nulo (a principal).",
34128
+ "category": "Integracoes / Google Calendar",
34129
+ "params": []
33040
34130
  }
33041
34131
  ]