@lionchat/mcp-server 1.21.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
@@ -8289,7 +8289,7 @@
8289
8289
  "method": "GET",
8290
8290
  "path": "/api/v1/accounts/{account_id}/account_tasks",
8291
8291
  "title": "Listar Tarefas",
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).",
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.",
8293
8293
  "category": "Agenda / Tarefas",
8294
8294
  "params": [
8295
8295
  {
@@ -8354,6 +8354,13 @@
8354
8354
  "location": "query",
8355
8355
  "required": false,
8356
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."
8357
8364
  }
8358
8365
  ],
8359
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.",
@@ -8372,7 +8379,7 @@
8372
8379
  "method": "POST",
8373
8380
  "path": "/api/v1/accounts/{account_id}/account_tasks",
8374
8381
  "title": "Criar Tarefa",
8375
- "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.",
8376
8383
  "category": "Agenda / Tarefas",
8377
8384
  "params": [
8378
8385
  {
@@ -8493,6 +8500,48 @@
8493
8500
  "location": "body",
8494
8501
  "required": false,
8495
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'"
8496
8545
  }
8497
8546
  ],
8498
8547
  "returns": "tarefa/agenda criado (com novo ID)",
@@ -8511,7 +8560,7 @@
8511
8560
  "method": "GET",
8512
8561
  "path": "/api/v1/accounts/{account_id}/account_tasks/{id}",
8513
8562
  "title": "Detalhe da Tarefa",
8514
- "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.",
8515
8564
  "category": "Agenda / Tarefas",
8516
8565
  "params": [
8517
8566
  {
@@ -8535,7 +8584,7 @@
8535
8584
  "method": "PATCH",
8536
8585
  "path": "/api/v1/accounts/{account_id}/account_tasks/{id}",
8537
8586
  "title": "Atualizar Tarefa",
8538
- "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.",
8539
8588
  "category": "Agenda / Tarefas",
8540
8589
  "params": [
8541
8590
  {
@@ -8656,6 +8705,55 @@
8656
8705
  "location": "body",
8657
8706
  "required": false,
8658
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'"
8659
8757
  }
8660
8758
  ],
8661
8759
  "returns": "tarefa/agenda atualizado",
@@ -8733,6 +8831,13 @@
8733
8831
  "location": "path",
8734
8832
  "required": true,
8735
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."
8736
8841
  }
8737
8842
  ],
8738
8843
  "returns": "tarefa atualizada",
@@ -8804,6 +8909,20 @@
8804
8909
  "location": "body",
8805
8910
  "required": false,
8806
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."
8807
8926
  }
8808
8927
  ],
8809
8928
  "returns": "tarefa/agenda atualizado",
@@ -8849,7 +8968,15 @@
8849
8968
  "title": "Meu Dia",
8850
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).",
8851
8970
  "category": "Agenda / Tarefas",
8852
- "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
+ ],
8853
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).",
8854
8981
  "common_use_cases": [
8855
8982
  "Dashboard: contar/exibir tarefas/agenda",
@@ -8868,7 +8995,15 @@
8868
8995
  "title": "Contagem Badge",
8869
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).",
8870
8997
  "category": "Agenda / Tarefas",
8871
- "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
+ ],
8872
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.",
8873
9008
  "common_use_cases": [
8874
9009
  "Dashboard: contar/exibir tarefas/agenda",
@@ -9933,6 +10068,97 @@
9933
10068
  "location": "body",
9934
10069
  "required": false,
9935
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)"
9936
10162
  }
9937
10163
  ],
9938
10164
  "returns": "tipo de evento criado (com novo ID)",
@@ -10038,6 +10264,97 @@
10038
10264
  "location": "body",
10039
10265
  "required": false,
10040
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)"
10041
10358
  }
10042
10359
  ],
10043
10360
  "returns": "tipo de evento atualizado",
@@ -10653,32 +10970,95 @@
10653
10970
  "location": "body",
10654
10971
  "required": true,
10655
10972
  "description": "update, cancel ou backfill"
10656
- }
10657
- ],
10658
- "returns": "tipo de evento criado (com novo ID)",
10659
- "common_use_cases": [
10660
- "Cadastro inicial de tipo de evento",
10661
- "Automação a partir de evento externo",
10662
- "Importação manual via API"
10663
- ],
10664
- "related_tools": [
10665
- "lionchat_booking_event_types_list",
10666
- "lionchat_booking_event_types_create",
10667
- "lionchat_booking_event_types_show"
10668
- ]
10669
- },
10670
- {
10671
- "id": "lionchat_booking_event_types_list_2",
10672
- "method": "GET",
10673
- "path": "/api/v1/accounts/{account_id}/bookings/{id}/follow_ups",
10674
- "title": "Follow-ups do Agendamento",
10675
- "description": "Lista as mensagens agendadas (follow-ups) de um agendamento.",
10676
- "category": "Tipos de Evento",
10677
- "params": [
10973
+ },
10678
10974
  {
10679
- "name": "id",
10975
+ "name": "agenda_id",
10680
10976
  "type": "integer",
10681
- "location": "path",
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": [
11058
+ {
11059
+ "name": "id",
11060
+ "type": "integer",
11061
+ "location": "path",
10682
11062
  "required": true,
10683
11063
  "description": "ID do agendamento"
10684
11064
  }
@@ -13550,7 +13930,7 @@
13550
13930
  "type": "string",
13551
13931
  "location": "body",
13552
13932
  "required": false,
13553
- "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)."
13554
13934
  },
13555
13935
  {
13556
13936
  "name": "permissions",
@@ -13606,7 +13986,7 @@
13606
13986
  "method": "PUT",
13607
13987
  "path": "/api/v1/accounts/{account_id}/custom_roles/{id}",
13608
13988
  "title": "Atualizar Role",
13609
- "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.",
13610
13990
  "category": "Roles Personalizados",
13611
13991
  "params": [
13612
13992
  {
@@ -13628,7 +14008,7 @@
13628
14008
  "type": "string",
13629
14009
  "location": "body",
13630
14010
  "required": false,
13631
- "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)."
13632
14012
  },
13633
14013
  {
13634
14014
  "name": "permissions",
@@ -32181,7 +32561,7 @@
32181
32561
  "path": "/api/v2/accounts/{account_id}/booking_reports",
32182
32562
  "title": "Relatorio de Agendamentos",
32183
32563
  "category": "Relatorios",
32184
- "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.",
32185
32565
  "params": [
32186
32566
  {
32187
32567
  "name": "since",
@@ -32226,7 +32606,7 @@
32226
32606
  "description": "day | week | month (agrupamento da timeline; default day)"
32227
32607
  }
32228
32608
  ],
32229
- "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}}",
32230
32610
  "common_use_cases": [
32231
32611
  "Quantos agendamentos foram marcados/concluidos/cancelados no mes",
32232
32612
  "Taxa de comparecimento por tipo de consulta ou por responsavel",
@@ -32726,7 +33106,7 @@
32726
33106
  "type": "object",
32727
33107
  "location": "body",
32728
33108
  "required": false,
32729
- "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."
32730
33110
  }
32731
33111
  ],
32732
33112
  "returns": "o modelo criado (id, name, kind, body, variables, roles_layout, progress)",
@@ -32788,7 +33168,7 @@
32788
33168
  "type": "object",
32789
33169
  "location": "body",
32790
33170
  "required": false,
32791
- "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."
32792
33172
  }
32793
33173
  ],
32794
33174
  "returns": "o modelo atualizado",
@@ -33102,5 +33482,650 @@
33102
33482
  "related_tools": [
33103
33483
  "lionchat_signature_envelopes_create"
33104
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": []
33105
34130
  }
33106
34131
  ]