@lionchat/mcp-server 1.19.2 → 1.21.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
@@ -173,7 +173,7 @@
173
173
  "method": "POST",
174
174
  "path": "/api/v1/accounts/{account_id}/contacts",
175
175
  "title": "Criar Contato",
176
- "description": "Cria um contato. Nenhum campo e estritamente obrigatorio (recomendado phone_number ou email). Aceita name, email, phone_number, identifier, additional_attributes, custom_attributes, blocked. TELEFONE UNICO POR CONTA (trava no BANCO desde 01/09/2026, como e-mail e identifier): phone_number ja cadastrado em outro contato da conta = 422 'phone_number has already been taken' — inclusive em chamadas paralelas. Procure antes com contacts_search (acha com e sem o 9o digito) e use contacts_update no que existe.",
176
+ "description": "Cria um contato. Nenhum campo e estritamente obrigatorio (recomendado phone_number ou email). Aceita name, email, phone_number, identifier, additional_attributes, custom_attributes, blocked. TELEFONE UNICO POR CONTA (trava no BANCO desde 01/09/2026, como e-mail e identifier): phone_number ja cadastrado em outro contato da conta = 422 'phone_number has already been taken' — inclusive em chamadas paralelas. Procure antes com contacts_search (acha com e sem o 9o digito) e use contacts_update no que existe.\n\nSE VOLTAR 422 com attributes:['phone_number']: o contato JA EXISTE — na forma exata OU na outra forma do nono digito. Nao tente criar de novo trocando a forma do numero (a recusa protege contra ficha em dobro): busque com lionchat_contacts_search e use contacts_update. Case os 'attributes' da resposta, nunca o texto da mensagem (ela sai no idioma padrao da instalacao, em ingles).",
177
177
  "category": "Contatos",
178
178
  "params": [
179
179
  {
@@ -646,7 +646,7 @@
646
646
  "method": "GET",
647
647
  "path": "/api/v1/accounts/{account_id}/contacts/search",
648
648
  "title": "Buscar Contatos",
649
- "description": "Busca contatos por texto (insensivel a acento) em nome/email/telefone/identifier. Obrigatorio: q.\n\nNOVO (2026-06): 'q' aceita multiplos termos (espacos = E/AND, cap 5; cada termo precisa bater) e dados cadastrais (CPF/CNPJ/RG por digitos, ignora pontuacao).",
649
+ "description": "Busca contatos por texto (insensivel a acento) em nome/email/telefone/identifier. Obrigatorio: q.\n\nNOVO (2026-06): 'q' aceita multiplos termos (espacos = E/AND, cap 5; cada termo precisa bater) e dados cadastrais (CPF/CNPJ/RG por digitos, ignora pontuacao).\n\nTELEFONE COM E SEM O 9 (desde 05/09/2026): quando 'q' e um celular brasileiro completo (com ou sem o nono digito, com ou sem '+', formatado ou nao), a busca acha o contato salvo em QUALQUER das duas formas. Nao precisa buscar duas vezes. Uma pessoa com ficha duplicada pode voltar como 2 resultados — nunca pegue o primeiro as cegas para contacts_update; confira nome/e-mail. A lupa geral (lionchat_search_list) NAO tem essa tolerancia: para telefone, use esta.",
650
650
  "category": "Contatos",
651
651
  "params": [
652
652
  {
@@ -654,7 +654,7 @@
654
654
  "type": "string",
655
655
  "location": "query",
656
656
  "required": true,
657
- "description": "Termo de busca"
657
+ "description": "Termo de busca. Telefone: qualquer forma (com/sem +, com/sem o nono digito, formatado) acha a mesma ficha."
658
658
  },
659
659
  {
660
660
  "name": "page",
@@ -698,7 +698,7 @@
698
698
  "method": "POST",
699
699
  "path": "/api/v1/accounts/{account_id}/contacts/filter",
700
700
  "title": "Filtrar Contatos",
701
- "description": "Filtra contatos com condicoes avancadas (payload de condicoes). 15/pagina.\n\nCHAVES FILTRAVEIS: name, email, identifier (equal_to/not_equal_to/contains/does_not_contain — match parcial case-insensitive); phone_number (+starts_with); country_code, city, company; cpf, cnpj, rg, profession (cadastral; cpf/cnpj/rg aceitam is_present/is_not_present); labels; created_at, last_activity_at (is_greater_than/is_less_than/days_before); blocked (equal_to true/false); QUALQUER outra chave = atributo personalizado do contato.\n\nREGISTROS VINCULADOS (acha o contato pelo que aconteceu com ele): attribute_key 'conversation_search' (conversa vinculada: conversation_status/conversation_labels/conversation_inbox_id), condicoes com custom_attribute_type 'conversation_attribute' (atributo da conversa vinculada) e attribute_key 'kanban_card' (card vinculado: card_funnel_id/card_stage/card_priority/card_status). Combinaveis com E/OU.\n\nCada condicao: {attribute_key, filter_operator, values[], query_operator:'and'|'or', custom_attribute_type?}. Operador fora da lista da chave = 422. [2026-07-25] Nova chave id (id interno do contato, equal_to/not_equal_to) — serve pra exportar/checar UM contato especifico. NOTA 18/08: data FIXA com is_greater_than/is_less_than corta o dia no FUSO DA CONTA (padrao America/Sao_Paulo), nao mais em UTC — mesmo criterio das datas relativas.",
701
+ "description": "Filtra contatos com condicoes avancadas (payload de condicoes). 15/pagina.\n\nCHAVES FILTRAVEIS: name, email, identifier (equal_to/not_equal_to/contains/does_not_contain — match parcial case-insensitive); phone_number (+starts_with); country_code, city, company; cpf, cnpj, rg, profession (cadastral; cpf/cnpj/rg aceitam is_present/is_not_present); labels; created_at, last_activity_at (is_greater_than/is_less_than/days_before); blocked (equal_to true/false); QUALQUER outra chave = atributo personalizado do contato.\n\nREGISTROS VINCULADOS (acha o contato pelo que aconteceu com ele): attribute_key 'conversation_search' (conversa vinculada: conversation_status/conversation_labels/conversation_inbox_id), condicoes com custom_attribute_type 'conversation_attribute' (atributo da conversa vinculada) e attribute_key 'kanban_card' (card vinculado: card_funnel_id/card_stage/card_priority/card_status). Combinaveis com E/OU.\n\nCada condicao: {attribute_key, filter_operator, values[], query_operator:'and'|'or', custom_attribute_type?}. Operador fora da lista da chave = 422. [2026-07-25] Nova chave id (id interno do contato, equal_to/not_equal_to) — serve pra exportar/checar UM contato especifico. NOTA 18/08: data FIXA com is_greater_than/is_less_than corta o dia no FUSO DA CONTA (padrao America/Sao_Paulo), nao mais em UTC — mesmo criterio das datas relativas.\n\nTELEFONE COM E SEM O 9 (desde 05/09/2026): phone_number com equal_to/not_equal_to casa as DUAS formas do celular brasileiro (mande +5541999887766 ou +554199887766 — acham a mesma ficha; not_equal_to exclui as duas). Valor formatado ('(41) 99988-7766') tambem casa. Telefone fixo, estrangeiro ou trecho segue exato. ATENCAO: 'Selecionar todos' + excluir sobre um filtro de telefone apaga as 2 fichas da mesma pessoa (decisao do dono, 05/09).",
702
702
  "category": "Contatos",
703
703
  "params": [
704
704
  {
@@ -4347,7 +4347,7 @@
4347
4347
  "type": "string",
4348
4348
  "location": "body",
4349
4349
  "required": false,
4350
- "description": "Modelo LLM do assistente. O campo NAO E VALIDADO: qualquer texto e aceito e gravado, e o erro so aparece depois, em producao. NUNCA use a familia gpt-5.6 (gpt-5.6-luna / gpt-5.6-terra / gpt-5.6-sol): ela recusa function tools, e como a IA usa ferramenta em TODA resposta, 100% das chamadas falham e o Agente fica MUDO em silencio (removida da plataforma em 29/07). Valores validos hoje — os mesmos 16 da tela: gpt-4.1-nano, gpt-4o-mini, gpt-4.1-mini, gpt-5.4-nano, gpt-5.4-mini, gpt-4o, gpt-4.1, gpt-5-mini, gpt-5.4, o3-mini, o4-mini, gpt-5, gpt-5.2, gpt-5.5, o1, o3. Default: openai_model da conta ou LlmConstants::DEFAULT_MODEL."
4350
+ "description": "Modelo LLM do assistente. VALIDADO no servidor desde 08/09/2026: valor fora da lista devolve 422 (message 'Model is not included in the list') e nada e gravado. Valores validos — os mesmos 19 da tela: gpt-4.1-nano, gpt-4o-mini, gpt-4.1-mini, gpt-5.4-nano, gpt-5.4-mini, gpt-4o, gpt-4.1, gpt-5-mini, gpt-5.4, o3-mini, o4-mini, gpt-5, gpt-5.2, gpt-5.5, o1, o3, gpt-5.6-luna, gpt-5.6-terra, gpt-5.6-sol. Familia gpt-5.6 (luna/terra/sol) LIBERADA em 08/09/2026: o servidor fala com esses tres por um canal proprio da OpenAI (/v1/responses, so pra eles; os outros 16 seguem como sempre). Regras dela: nao aceita temperatura (o campo some na tela e e ignorado), custo premium, e o Formulario publico (bloco de IA) NAO usa esses tres — la o servidor cai no modelo padrao da conta. Nao existe 'gpt-5.6' sem sufixo. Default: openai_model da conta ou LlmConstants::DEFAULT_MODEL. Assistente antigo com modelo fora da lista continua salvando o resto do config; so a TROCA de modelo e conferida."
4351
4351
  },
4352
4352
  {
4353
4353
  "name": "config.instructions",
@@ -4572,7 +4572,7 @@
4572
4572
  "type": "string",
4573
4573
  "location": "body",
4574
4574
  "required": false,
4575
- "description": "Modelo LLM do assistente. O campo NAO E VALIDADO: qualquer texto e aceito e gravado, e o erro so aparece depois, em producao. NUNCA use a familia gpt-5.6 (gpt-5.6-luna / gpt-5.6-terra / gpt-5.6-sol): ela recusa function tools, e como a IA usa ferramenta em TODA resposta, 100% das chamadas falham e o Agente fica MUDO em silencio (removida da plataforma em 29/07). Valores validos hoje — os mesmos 16 da tela: gpt-4.1-nano, gpt-4o-mini, gpt-4.1-mini, gpt-5.4-nano, gpt-5.4-mini, gpt-4o, gpt-4.1, gpt-5-mini, gpt-5.4, o3-mini, o4-mini, gpt-5, gpt-5.2, gpt-5.5, o1, o3. Default: openai_model da conta ou LlmConstants::DEFAULT_MODEL."
4575
+ "description": "Modelo LLM do assistente. VALIDADO no servidor desde 08/09/2026: valor fora da lista devolve 422 (message 'Model is not included in the list') e nada e gravado. Valores validos — os mesmos 19 da tela: gpt-4.1-nano, gpt-4o-mini, gpt-4.1-mini, gpt-5.4-nano, gpt-5.4-mini, gpt-4o, gpt-4.1, gpt-5-mini, gpt-5.4, o3-mini, o4-mini, gpt-5, gpt-5.2, gpt-5.5, o1, o3, gpt-5.6-luna, gpt-5.6-terra, gpt-5.6-sol. Familia gpt-5.6 (luna/terra/sol) LIBERADA em 08/09/2026: o servidor fala com esses tres por um canal proprio da OpenAI (/v1/responses, so pra eles; os outros 16 seguem como sempre). Regras dela: nao aceita temperatura (o campo some na tela e e ignorado), custo premium, e o Formulario publico (bloco de IA) NAO usa esses tres — la o servidor cai no modelo padrao da conta. Nao existe 'gpt-5.6' sem sufixo. Default: openai_model da conta ou LlmConstants::DEFAULT_MODEL. Assistente antigo com modelo fora da lista continua salvando o resto do config; so a TROCA de modelo e conferida."
4576
4576
  },
4577
4577
  {
4578
4578
  "name": "config.instructions",
@@ -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
  },
@@ -8228,7 +8227,7 @@
8228
8227
  "method": "GET",
8229
8228
  "path": "/api/v1/accounts/{account_id}/search/messages",
8230
8229
  "title": "Buscar Mensagens",
8231
- "description": "RAPIDO. E uma BUSCA, nao uma listagem — o sufixo _list no id e historico, ignore. Procura o termo DENTRO DO TEXTO das mensagens.\n\nE A SUBSTITUTA CERTA do lionchat_conversations_search legado, que faz a mesma busca em 15 a 22 segundos: aqui ha indice trigram proprio e teto de tempo em duas fases (2 s na primeira tentativa, 14 s no limite absoluto), entao nao trava. Devolve payload.messages[], 15 por pagina.\n\nTermo de texto com menos de 3 caracteres e descartado (so-digitos e isento, protegido pelo limite da primeira fase); se todos os termos forem curtos a resposta vem VAZIA — isso nao significa que nao existe, significa que a busca nao rodou.\n\nNOVO (2026-06): 'q' aceita multiplos termos (espacos = E/AND, cap 5; cada termo precisa bater) e dados cadastrais (CPF/CNPJ/RG por digitos, ignora pontuacao). NOVO (2026-06-16): casa por TRECHO/substring (multi-termo AND — ex.: 'época d' acha 'época do'); e cada resultado de mensagem inclui previous_message e next_message (as mensagens anterior e seguinte da MESMA conversa, em ordem cronológica, ignorando eventos de sistema) como objeto {id, content, sender_name, message_type, private, created_at} ou null quando não há vizinha.",
8230
+ "description": "RAPIDO. E uma BUSCA, nao uma listagem — o sufixo _list no id e historico, ignore. Procura o termo DENTRO DO TEXTO das mensagens.\n\nE A SUBSTITUTA CERTA do lionchat_conversations_search legado, que faz a mesma busca em 15 a 22 segundos: aqui ha indice trigram proprio e teto de tempo em duas fases (2 s na primeira tentativa, 14 s no limite absoluto), entao nao trava. Devolve payload.messages[], 15 por pagina.\n\nTermo de texto com menos de 3 caracteres e descartado (so-digitos e isento, protegido pelo limite da primeira fase); se todos os termos forem curtos a resposta vem VAZIA — isso nao significa que nao existe, significa que a busca nao rodou.\n\nNOVO (2026-06): 'q' aceita multiplos termos (espacos = E/AND, cap 5; cada termo precisa bater) e dados cadastrais (CPF/CNPJ/RG por digitos, ignora pontuacao). NOVO (2026-06-16): casa por TRECHO/substring (multi-termo AND — ex.: 'época d' acha 'época do'); e cada resultado de mensagem inclui previous_message e next_message (as mensagens anterior e seguinte da MESMA conversa, em ordem cronológica, ignorando eventos de sistema) como objeto {id, content, sender_name, message_type, private, created_at} ou null quando não há vizinha. Leia message_search_interrupted no retorno antes de afirmar 'nao encontrado'.",
8232
8231
  "category": "Busca",
8233
8232
  "params": [
8234
8233
  {
@@ -8274,7 +8273,7 @@
8274
8273
  "description": "Página"
8275
8274
  }
8276
8275
  ],
8277
- "returns": "{ payload: { messages: [...] } } — sem meta e sem total. 15 mensagens por pagina, das MAIS RECENTES para as mais antigas; para ver o resto use `page` (a resposta NAO informa quantas paginas existem, entao vindo 15 itens assuma que pode haver mais). Cada mensagem traz contact_name, contact_thumbnail, conversation_status e previous_message/next_message (as vizinhas da MESMA conversa, ou null). O resultado de MENSAGEM nao traz `labels` — as etiquetas so vem nos cards de conversa e de contato.",
8276
+ "returns": "{ payload: { messages: [...] } } — sem meta e sem total. 15 mensagens por pagina, das MAIS RECENTES para as mais antigas; para ver o resto use `page` (a resposta NAO informa quantas paginas existem, entao vindo 15 itens assuma que pode haver mais). Cada mensagem traz contact_name, contact_thumbnail, conversation_status e previous_message/next_message (as vizinhas da MESMA conversa, ou null). O resultado de MENSAGEM nao traz `labels` — as etiquetas so vem nos cards de conversa e de contato. Desde 04/09 o payload traz tambem message_search_interrupted (boolean): true = a secao de mensagens estourou o teto de tempo (2 s + 2 s) e a lista voltou VAZIA/incompleta — NAO quer dizer que nao existe; refine o termo ou recorte por conversa.",
8278
8277
  "common_use_cases": [
8279
8278
  "Dashboard: contar/exibir resultados de busca",
8280
8279
  "Buscar com filtros antes de outra operação",
@@ -10101,7 +10100,7 @@
10101
10100
  "type": "string",
10102
10101
  "location": "body",
10103
10102
  "required": false,
10104
- "description": "Modelo LLM (gpt-4o-mini, gpt-4o, etc.)"
10103
+ "description": "Modelo LLM (gpt-4o-mini, gpt-4.1-mini, gpt-5.4, gpt-5.6-luna/terra/sol etc. — a mesma lista de 19 do assistente). A familia gpt-5.6 e aceita no bloco de IA do fluxo desde 08/09/2026 e nao usa temperatura."
10105
10104
  },
10106
10105
  {
10107
10106
  "name": "instructions",
@@ -13558,7 +13557,7 @@
13558
13557
  "type": "array",
13559
13558
  "location": "body",
13560
13559
  "required": true,
13561
- "description": "Array de permissoes"
13560
+ "description": "Array de permissoes (array de strings). Valores aceitos (22): conversation_manage, conversation_delete, conversation_unassigned_manage, conversation_participating_manage, conversation_team_manage, contact_manage, contact_export_import, report_manage, knowledge_base_manage, kanban_manage, kanban_view, kanban_delete, kanban_export_import, offer_manage, funnel_manage, campaign_manage, automation_manage, marketing_integrations_manage, captain_manage, flowbuilder_manage, lead_form_manage (Formularios publicos, 05/09), signature_manage (Assinatura eletronica, 05/09). Fora da lista = recusado. Administrador tem tudo sem cargo; agente sem cargo nao tem lead_form_manage nem signature_manage (nao ve Formularios nem Assinaturas no menu)."
13562
13561
  }
13563
13562
  ],
13564
13563
  "returns": "papel personalizado criado (com novo ID)",
@@ -13636,7 +13635,7 @@
13636
13635
  "type": "array",
13637
13636
  "location": "body",
13638
13637
  "required": false,
13639
- "description": "Permissoes"
13638
+ "description": "Permissoes (array de strings). Valores aceitos (22): conversation_manage, conversation_delete, conversation_unassigned_manage, conversation_participating_manage, conversation_team_manage, contact_manage, contact_export_import, report_manage, knowledge_base_manage, kanban_manage, kanban_view, kanban_delete, kanban_export_import, offer_manage, funnel_manage, campaign_manage, automation_manage, marketing_integrations_manage, captain_manage, flowbuilder_manage, lead_form_manage (Formularios publicos, 05/09), signature_manage (Assinatura eletronica, 05/09). Fora da lista = recusado. Administrador tem tudo sem cargo; agente sem cargo nao tem lead_form_manage nem signature_manage (nao ve Formularios nem Assinaturas no menu)."
13640
13639
  }
13641
13640
  ],
13642
13641
  "returns": "papel personalizado atualizado",
@@ -22851,7 +22850,7 @@
22851
22850
  "description": "ID da caixa de entrada WAHA"
22852
22851
  }
22853
22852
  ],
22854
- "returns": "{ status, connected, phone_number, qr_code_available, phone_number_changed }",
22853
+ "returns": "{ status, connected, phone_number, qr_code_available, phone_number_changed, previous_phone_number, qr_link_active, qr_link_expires_at, contacts_quota, reachout_timelock }. contacts_quota vem do WhatsApp (nao da Meta) e traz cappingStatus/totalQuota/usedQuota/cycleStart/cycleEnd; totalQuota -1 = sem limite (o caso de quase toda caixa). reachout_timelock null = pode iniciar conversas; presente = o WhatsApp bloqueou temporariamente abordagem fria por esse numero. Os dois podem vir AUSENTES (servidor WAHA que nao reporta saude) — ausencia nao significa \"sem limite\".",
22855
22854
  "common_use_cases": [
22856
22855
  "Diagnosticar 'mensagens não estão saindo' (sessão caiu?)"
22857
22856
  ],
@@ -25927,6 +25926,27 @@
25927
25926
  "location": "body",
25928
25927
  "required": false,
25929
25928
  "description": "Nome do bloco, exibido no cabecalho (ate 80 caracteres). Vazio = mostra o rotulo do tipo."
25929
+ },
25930
+ {
25931
+ "name": "direction_split",
25932
+ "type": "boolean",
25933
+ "location": "body",
25934
+ "required": false,
25935
+ "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)."
25936
+ },
25937
+ {
25938
+ "name": "no_show_over_scheduled",
25939
+ "type": "boolean",
25940
+ "location": "body",
25941
+ "required": false,
25942
+ "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)."
25943
+ },
25944
+ {
25945
+ "name": "count_retorno_as_consulta",
25946
+ "type": "boolean",
25947
+ "location": "body",
25948
+ "required": false,
25949
+ "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
25950
  }
25931
25951
  ],
25932
25952
  "returns": "Um dos 4 formatos normalizados (series | categories | scalar | table), com o campo `shape` dizendo qual",
@@ -25969,7 +25989,7 @@
25969
25989
  "type": "array",
25970
25990
  "location": "body",
25971
25991
  "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."
25992
+ "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
25993
  }
25974
25994
  ],
25975
25995
  "returns": "{ id, name, position, widgets, created_at }",
@@ -26018,7 +26038,7 @@
26018
26038
  "type": "array",
26019
26039
  "location": "body",
26020
26040
  "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."
26041
+ "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
26042
  }
26023
26043
  ],
26024
26044
  "returns": "{ id, name, position, widgets, created_at }",
@@ -30262,7 +30282,7 @@
30262
30282
  "method": "PATCH",
30263
30283
  "path": "/api/v1/accounts/{account_id}/funnels/{id}/meta_events_config",
30264
30284
  "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.",
30285
+ "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
30286
  "category": "Funis",
30267
30287
  "params": [
30268
30288
  {
@@ -30277,13 +30297,14 @@
30277
30297
  "type": "object",
30278
30298
  "location": "body",
30279
30299
  "required": true,
30280
- "description": "{stages: {<stage_id>: {enabled, name, is_standard, value_strategy, value_fixed, currency}}, won: {...}, lost: {...}} — parcial"
30300
+ "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
30301
  }
30282
30302
  ],
30283
30303
  "returns": "200 meta_events_config completo do funil após o merge | 403",
30284
30304
  "common_use_cases": [
30285
30305
  "Disparar 'Purchase' quando o card for ganho",
30286
- "Ligar o evento 'Lead' na etapa de qualificação"
30306
+ "Ligar o evento 'Lead' na etapa de qualificação",
30307
+ "Escolher o evento de anúncio de WhatsApp de uma etapa (messaging_name: 'QualifiedLead')"
30287
30308
  ],
30288
30309
  "related_tools": [
30289
30310
  "lionchat_funnels_show",
@@ -30297,7 +30318,7 @@
30297
30318
  "method": "GET",
30298
30319
  "path": "/api/v1/accounts/{account_id}/funnels/{funnel_id}/meta_capi_events",
30299
30320
  "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).",
30321
+ "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
30322
  "category": "Integracoes",
30302
30323
  "params": [
30303
30324
  {
@@ -30335,6 +30356,13 @@
30335
30356
  "required": false,
30336
30357
  "description": "Só eventos deste card"
30337
30358
  },
30359
+ {
30360
+ "name": "degraded",
30361
+ "type": "boolean",
30362
+ "location": "query",
30363
+ "required": false,
30364
+ "description": "true = só os eventos de anúncio de WhatsApp que saíram como site (plano B), isto é, com fallback_reason preenchido"
30365
+ },
30338
30366
  {
30339
30367
  "name": "since",
30340
30368
  "type": "string",
@@ -30357,10 +30385,11 @@
30357
30385
  "description": "Página (50 por página)"
30358
30386
  }
30359
30387
  ],
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}}",
30388
+ "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
30389
  "common_use_cases": [
30362
30390
  "Ver se o evento de conversão chegou no Meta CAPI",
30363
- "Listar os disparos falhados pra reenviar"
30391
+ "Listar os disparos falhados pra reenviar",
30392
+ "Descobrir por que os leads de anúncio de WhatsApp estão saindo como site (degraded=true e ler fallback_reason)"
30364
30393
  ],
30365
30394
  "related_tools": [
30366
30395
  "lionchat_funnels_meta_capi_events_show",
@@ -30723,7 +30752,7 @@
30723
30752
  "method": "POST",
30724
30753
  "path": "/api/v1/accounts/{account_id}/kanban_items/{id}/meta_capi/fire",
30725
30754
  "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.",
30755
+ "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
30756
  "category": "Itens",
30728
30757
  "params": [
30729
30758
  {
@@ -30740,6 +30769,13 @@
30740
30769
  "required": true,
30741
30770
  "description": "Nome do evento (ex.: Lead, Purchase, Schedule)"
30742
30771
  },
30772
+ {
30773
+ "name": "messaging_event_name",
30774
+ "type": "string",
30775
+ "location": "body",
30776
+ "required": false,
30777
+ "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'"
30778
+ },
30743
30779
  {
30744
30780
  "name": "value",
30745
30781
  "type": "number",
@@ -31369,6 +31405,35 @@
31369
31405
  "lionchat_inboxes_show"
31370
31406
  ]
31371
31407
  },
31408
+ {
31409
+ "id": "lionchat_inboxes_capi_dataset_link",
31410
+ "method": "POST",
31411
+ "path": "/api/v1/accounts/{account_id}/inboxes/{id}/capi_dataset",
31412
+ "title": "Vincular a caixa WhatsApp Oficial à Meta (dataset de anúncio de WhatsApp)",
31413
+ "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.",
31414
+ "category": "Caixas de Entrada",
31415
+ "params": [
31416
+ {
31417
+ "name": "id",
31418
+ "type": "integer",
31419
+ "location": "path",
31420
+ "required": true,
31421
+ "description": "ID da caixa WhatsApp Cloud"
31422
+ }
31423
+ ],
31424
+ "returns": "200 a caixa inteira (inbox) já com provider_config.capi_dataset_id | 400 | 422 {error, subcode}",
31425
+ "common_use_cases": [
31426
+ "Fazer os leads de anúncio de WhatsApp contarem como conversão de WhatsApp na Meta",
31427
+ "Resolver eventos com fallback_reason lionchat:dataset_nao_configurado"
31428
+ ],
31429
+ "related_tools": [
31430
+ "lionchat_inboxes_show",
31431
+ "lionchat_funnels_meta_capi_events_list",
31432
+ "lionchat_funnels_meta_events_config",
31433
+ "lionchat_meta_pixel_integrations_list"
31434
+ ],
31435
+ "confirm_required": true
31436
+ },
31372
31437
  {
31373
31438
  "id": "lionchat_inboxes_waha_connect",
31374
31439
  "method": "POST",
@@ -32564,5 +32629,478 @@
32564
32629
  "related_tools": [
32565
32630
  "lionchat_report_alerts_preview"
32566
32631
  ]
32632
+ },
32633
+ {
32634
+ "id": "lionchat_signature_documents_list",
32635
+ "method": "GET",
32636
+ "path": "/api/v1/accounts/{account_id}/signature_documents",
32637
+ "title": "Listar Modelos de Contrato",
32638
+ "description": "Lista os MODELOS de documento para assinatura eletronica da conta (o 'contrato padrao' escrito uma vez com {{variaveis}} e reaproveitado), com o andamento agregado dos contratos de cada um (progress: aguardando/visualizado/assinado/encerrado). Exige a feature document_signing ligada na conta (403 feature_disabled). Guia: resource lionchat://docs/assinatura-eletronica.",
32639
+ "category": "Assinatura eletronica",
32640
+ "params": [
32641
+ {
32642
+ "name": "archived",
32643
+ "type": "boolean",
32644
+ "location": "query",
32645
+ "required": false,
32646
+ "description": "true = inclui os modelos arquivados"
32647
+ }
32648
+ ],
32649
+ "returns": "payload: [{id, name, kind (text|file|word), body, variables, tags, archived, roles_layout, progress, envelopes_count, has_source_file, source_file_name}]",
32650
+ "common_use_cases": [
32651
+ "Ver quais modelos existem antes de mandar um contrato",
32652
+ "Acompanhar quantos contratos de cada modelo estao aguardando/assinados",
32653
+ "Achar o id do modelo pra usar em signature_envelopes_create, na acao de fluxo ou no bloco do formulario"
32654
+ ],
32655
+ "related_tools": [
32656
+ "lionchat_signature_documents_show",
32657
+ "lionchat_signature_documents_create",
32658
+ "lionchat_signature_envelopes_list"
32659
+ ]
32660
+ },
32661
+ {
32662
+ "id": "lionchat_signature_documents_show",
32663
+ "method": "GET",
32664
+ "path": "/api/v1/accounts/{account_id}/signature_documents/{id}",
32665
+ "title": "Detalhes do Modelo de Contrato",
32666
+ "description": "Um modelo de contrato com as variaveis que ele usa, a configuracao (roles_layout) e os contratos ja mandados a partir dele (envelopes, ate 200 — pra listar com filtro/busca/pagina use signature_envelopes_list com signature_document_id).",
32667
+ "category": "Assinatura eletronica",
32668
+ "params": [
32669
+ {
32670
+ "name": "id",
32671
+ "type": "integer",
32672
+ "location": "path",
32673
+ "required": true,
32674
+ "description": "ID do modelo"
32675
+ }
32676
+ ],
32677
+ "returns": "modelo + envelopes: [{id, title, status, contact_id, contact_name, sent_at, completed_at, expires_at, participants[]}]",
32678
+ "common_use_cases": [
32679
+ "Ver o texto e as variaveis do modelo antes de editar",
32680
+ "Conferir quem ja recebeu este contrato"
32681
+ ],
32682
+ "related_tools": [
32683
+ "lionchat_signature_documents_list",
32684
+ "lionchat_signature_documents_update",
32685
+ "lionchat_signature_envelopes_list"
32686
+ ]
32687
+ },
32688
+ {
32689
+ "id": "lionchat_signature_documents_create",
32690
+ "method": "POST",
32691
+ "path": "/api/v1/accounts/{account_id}/signature_documents",
32692
+ "title": "Criar Modelo de Contrato (texto)",
32693
+ "description": "Cria um MODELO de contrato ESCRITO (kind=text) usando o editor de texto do LionChat: o corpo e texto/markdown simples (**negrito**, listas, paragrafos) com {{variaveis}} da ficha — {{contact.name}}, {{contact.cpf}}, {{contact.phone_number}}, {{contact.email}}, {{contact.address.street}}, {{contact.marital_status}}, {{contact.profession}}, {{account.name}}, {{document.deadline}} (data-limite) e {{document.validity_days}} — veja o catalogo em signature_documents_field_catalog. Cada pessoa recebe o PDF com os dados DELA; campo mapeado sem valor na ficha BLOQUEIA o envio (trava). NAO da pra subir arquivo (PDF/Word) por aqui — isso e so pela tela (kind file/word); aqui e so escrever o contrato.",
32694
+ "category": "Assinatura eletronica",
32695
+ "params": [
32696
+ {
32697
+ "name": "name",
32698
+ "type": "string",
32699
+ "location": "body",
32700
+ "required": true,
32701
+ "description": "Nome do modelo (ex.: Contrato de prestacao de servicos)"
32702
+ },
32703
+ {
32704
+ "name": "body",
32705
+ "type": "string",
32706
+ "location": "body",
32707
+ "required": true,
32708
+ "description": "Texto do contrato com {{variaveis}}. Blocos de assinatura de cada pessoa sao desenhados automaticamente no fim."
32709
+ },
32710
+ {
32711
+ "name": "kind",
32712
+ "type": "string",
32713
+ "location": "body",
32714
+ "required": false,
32715
+ "description": "Sempre 'text' pela API (padrao). file/word exigem upload pela tela."
32716
+ },
32717
+ {
32718
+ "name": "tags",
32719
+ "type": "array",
32720
+ "location": "body",
32721
+ "required": false,
32722
+ "description": "Etiquetas do modelo (strings) — organizam e filtram a lista"
32723
+ },
32724
+ {
32725
+ "name": "roles_layout",
32726
+ "type": "object",
32727
+ "location": "body",
32728
+ "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)."
32730
+ }
32731
+ ],
32732
+ "returns": "o modelo criado (id, name, kind, body, variables, roles_layout, progress)",
32733
+ "common_use_cases": [
32734
+ "Escrever um contrato padrao com variaveis da ficha pra mandar depois",
32735
+ "Criar o modelo que um fluxo, uma macro ou um formulario vai usar"
32736
+ ],
32737
+ "related_tools": [
32738
+ "lionchat_signature_documents_field_catalog",
32739
+ "lionchat_signature_documents_update",
32740
+ "lionchat_signature_envelopes_create"
32741
+ ]
32742
+ },
32743
+ {
32744
+ "id": "lionchat_signature_documents_update",
32745
+ "method": "PATCH",
32746
+ "path": "/api/v1/accounts/{account_id}/signature_documents/{id}",
32747
+ "title": "Editar Modelo de Contrato",
32748
+ "description": "Edita nome, texto, etiquetas, arquivamento ou configuracao do modelo. roles_layout e MESCLADO (mande so as chaves que mudam; as posicoes de assinatura e o mapeamento do Word gravados pela tela ficam intactos). Contratos JA mandados nao mudam (o PDF de cada um e fixo).",
32749
+ "category": "Assinatura eletronica",
32750
+ "params": [
32751
+ {
32752
+ "name": "id",
32753
+ "type": "integer",
32754
+ "location": "path",
32755
+ "required": true,
32756
+ "description": "ID do modelo"
32757
+ },
32758
+ {
32759
+ "name": "name",
32760
+ "type": "string",
32761
+ "location": "body",
32762
+ "required": false,
32763
+ "description": "Novo nome"
32764
+ },
32765
+ {
32766
+ "name": "body",
32767
+ "type": "string",
32768
+ "location": "body",
32769
+ "required": false,
32770
+ "description": "Novo texto (so modelo kind=text)"
32771
+ },
32772
+ {
32773
+ "name": "tags",
32774
+ "type": "array",
32775
+ "location": "body",
32776
+ "required": false,
32777
+ "description": "Etiquetas (substitui a lista)"
32778
+ },
32779
+ {
32780
+ "name": "archived",
32781
+ "type": "boolean",
32782
+ "location": "body",
32783
+ "required": false,
32784
+ "description": "true = arquiva (some da lista padrao, sem apagar); false = desarquiva"
32785
+ },
32786
+ {
32787
+ "name": "roles_layout",
32788
+ "type": "object",
32789
+ "location": "body",
32790
+ "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)."
32792
+ }
32793
+ ],
32794
+ "returns": "o modelo atualizado",
32795
+ "common_use_cases": [
32796
+ "Trocar o nome ou corrigir o texto do contrato",
32797
+ "Mudar validade, lembrete, testemunhas ou 'eu tambem assino'",
32798
+ "Arquivar um modelo antigo"
32799
+ ],
32800
+ "related_tools": [
32801
+ "lionchat_signature_documents_show",
32802
+ "lionchat_signature_documents_list"
32803
+ ]
32804
+ },
32805
+ {
32806
+ "id": "lionchat_signature_documents_destroy",
32807
+ "method": "DELETE",
32808
+ "path": "/api/v1/accounts/{account_id}/signature_documents/{id}",
32809
+ "title": "Apagar Modelo de Contrato",
32810
+ "description": "Apaga o modelo (so ADMINISTRADOR). Os contratos ja mandados NAO sao apagados (ficam sem o nome do modelo). Prefira arquivar (update archived=true).",
32811
+ "category": "Assinatura eletronica",
32812
+ "params": [
32813
+ {
32814
+ "name": "id",
32815
+ "type": "integer",
32816
+ "location": "path",
32817
+ "required": true,
32818
+ "description": "ID do modelo"
32819
+ }
32820
+ ],
32821
+ "returns": "204 sem corpo",
32822
+ "common_use_cases": [
32823
+ "Remover um modelo criado por engano"
32824
+ ],
32825
+ "related_tools": [
32826
+ "lionchat_signature_documents_update"
32827
+ ]
32828
+ },
32829
+ {
32830
+ "id": "lionchat_signature_documents_field_catalog",
32831
+ "method": "GET",
32832
+ "path": "/api/v1/accounts/{account_id}/signature_documents/field_catalog",
32833
+ "title": "Catalogo de Variaveis do Contrato",
32834
+ "description": "As variaveis que o contrato consegue preencher a partir da ficha do contato e da conta (value + label), pra escrever o texto do modelo ou mapear campos de um Word.",
32835
+ "category": "Assinatura eletronica",
32836
+ "params": [],
32837
+ "returns": "catalog: [{value: 'contact.name', label: 'Nome do contato'}, ...] (inclui document.deadline)",
32838
+ "common_use_cases": [
32839
+ "Saber quais {{variaveis}} existem antes de escrever um modelo"
32840
+ ],
32841
+ "related_tools": [
32842
+ "lionchat_signature_documents_create"
32843
+ ]
32844
+ },
32845
+ {
32846
+ "id": "lionchat_signature_envelopes_list",
32847
+ "method": "GET",
32848
+ "path": "/api/v1/accounts/{account_id}/signature_envelopes",
32849
+ "title": "Listar Contratos Enviados",
32850
+ "description": "Lista os CONTRATOS (cada envio a uma pessoa e um contrato, com PDF proprio e linha do tempo), paginada (25 por pagina) com filtro e busca no servidor. Recortes: por modelo (signature_document_id), por contato (contact_id — o que aparece na aba Contratos da ficha) ou por conversa (conversation_id). status aceita os baldes aguardando (draft/sent), visualizado (viewed/partially_signed), assinado (signed_pending_seal/signed), encerrado (refused/cancelled/expired) ou falta_eu (contratos em que o usuario do token e o remetente e ainda nao assinou). Resposta traz meta.counts com a contagem por balde.",
32851
+ "category": "Assinatura eletronica",
32852
+ "params": [
32853
+ {
32854
+ "name": "signature_document_id",
32855
+ "type": "integer",
32856
+ "location": "query",
32857
+ "required": false,
32858
+ "description": "So contratos deste modelo"
32859
+ },
32860
+ {
32861
+ "name": "contact_id",
32862
+ "type": "integer",
32863
+ "location": "query",
32864
+ "required": false,
32865
+ "description": "So contratos desta pessoa"
32866
+ },
32867
+ {
32868
+ "name": "conversation_id",
32869
+ "type": "integer",
32870
+ "location": "query",
32871
+ "required": false,
32872
+ "description": "So contratos desta conversa (display_id)"
32873
+ },
32874
+ {
32875
+ "name": "status",
32876
+ "type": "string",
32877
+ "location": "query",
32878
+ "required": false,
32879
+ "description": "Balde: aguardando | visualizado | assinado | encerrado | falta_eu"
32880
+ },
32881
+ {
32882
+ "name": "q",
32883
+ "type": "string",
32884
+ "location": "query",
32885
+ "required": false,
32886
+ "description": "Busca por nome, telefone ou e-mail de quem assina"
32887
+ },
32888
+ {
32889
+ "name": "page",
32890
+ "type": "integer",
32891
+ "location": "query",
32892
+ "required": false,
32893
+ "description": "Pagina (padrao 1, 25 por pagina)"
32894
+ }
32895
+ ],
32896
+ "returns": "payload: [{id, title, status, signature_document_id, document_name, contact_id, contact_name, conversation_id, sent_at, completed_at, expires_at, participants[{id, name, role, status, delivery_channel, phone, email, signed_at, viewed_at, public_url, signs_in_panel}], delivery: {failed[], delivered_participant_ids[]}, has_signed_document, pending_for_me}], meta: {page, per_page, has_more, counts}",
32897
+ "common_use_cases": [
32898
+ "Ver o status dos contratos de um cliente (assinou? abriu? expirou?)",
32899
+ "Relatorio de um modelo: quantos aguardando/assinados, quem falta",
32900
+ "Achar contratos nao entregues (delivery.failed) pra reenviar"
32901
+ ],
32902
+ "related_tools": [
32903
+ "lionchat_signature_envelopes_show",
32904
+ "lionchat_signature_envelopes_resend",
32905
+ "lionchat_signature_envelopes_create"
32906
+ ]
32907
+ },
32908
+ {
32909
+ "id": "lionchat_signature_envelopes_show",
32910
+ "method": "GET",
32911
+ "path": "/api/v1/accounts/{account_id}/signature_envelopes/{id}",
32912
+ "title": "Detalhes do Contrato (linha do tempo)",
32913
+ "description": "Um contrato com quem assina e a LINHA DO TEMPO completa (events): created, delivered, sent, opened, code_requested, code_verified, signed (com ip, device, location e panel=true quando foi assinado no painel), all_signed, sealed (documento final gerado, com hash), refused, expired, cancelled, delivery_failed, reminded, resent. E o relatorio de evidencias em dados; os PDFs (original, assinado, evidencias) so saem pela tela/API de download.",
32914
+ "category": "Assinatura eletronica",
32915
+ "params": [
32916
+ {
32917
+ "name": "id",
32918
+ "type": "integer",
32919
+ "location": "path",
32920
+ "required": true,
32921
+ "description": "ID do contrato"
32922
+ }
32923
+ ],
32924
+ "returns": "contrato + events: [{kind, occurred_at, ip, device, location, participant_id, panel}] + original_sha256/sealed_sha256",
32925
+ "common_use_cases": [
32926
+ "Conferir quando e de onde a pessoa abriu e assinou",
32927
+ "Ver por que um contrato nao foi entregue (delivery.failed) ou foi recusado"
32928
+ ],
32929
+ "related_tools": [
32930
+ "lionchat_signature_envelopes_list",
32931
+ "lionchat_signature_envelopes_resend",
32932
+ "lionchat_signature_envelopes_cancel"
32933
+ ]
32934
+ },
32935
+ {
32936
+ "id": "lionchat_signature_envelopes_create",
32937
+ "method": "POST",
32938
+ "path": "/api/v1/accounts/{account_id}/signature_envelopes",
32939
+ "title": "Enviar Contrato para Assinar",
32940
+ "description": "Cria o contrato DAQUELA pessoa a partir de um modelo e ENTREGA o link (na conversa de WhatsApp da pessoa — uma conversa POR assinante — ou por e-mail). O PDF e gerado com os dados da ficha; variavel do modelo sem valor na ficha = 422 variaveis_sem_valor com a lista do que falta (preencha a ficha e tente de novo). Sem inbox_id e com o contato conversando em MAIS de uma caixa de WhatsApp = 422 escolher_caixa com inboxes[] — repita mandando inbox_id. Ninguem recebeu = 422 entrega_falhou (o contrato fica como rascunho; use resend). Recebeu parcialmente = 201 com delivery_failures[]. Consome 1 vaga do limite mensal (veja signature_envelopes_limits). Modelo com sender_signs cria sozinho o participante do remetente (o usuario do token), que assina NO PAINEL (nao ha ferramenta pra assinar por ele).",
32941
+ "category": "Assinatura eletronica",
32942
+ "params": [
32943
+ {
32944
+ "name": "signature_document_id",
32945
+ "type": "integer",
32946
+ "location": "body",
32947
+ "required": true,
32948
+ "description": "ID do modelo"
32949
+ },
32950
+ {
32951
+ "name": "contact_id",
32952
+ "type": "integer",
32953
+ "location": "body",
32954
+ "required": false,
32955
+ "description": "Ficha do titular (recomendado — preenche as variaveis e a conversa)"
32956
+ },
32957
+ {
32958
+ "name": "conversation_id",
32959
+ "type": "integer",
32960
+ "location": "body",
32961
+ "required": false,
32962
+ "description": "Conversa (display_id) por onde o link sai, quando ja se sabe qual"
32963
+ },
32964
+ {
32965
+ "name": "inbox_id",
32966
+ "type": "integer",
32967
+ "location": "body",
32968
+ "required": false,
32969
+ "description": "Caixa de WhatsApp por onde entregar (obrigatorio quando a resposta anterior foi escolher_caixa)"
32970
+ },
32971
+ {
32972
+ "name": "participants",
32973
+ "type": "array",
32974
+ "location": "body",
32975
+ "required": true,
32976
+ "description": "Quem assina (array). Cada item: {name (obrigatorio), role: signer|witness (titular|testemunha; NAO mande sender — o remetente e criado sozinho quando o modelo tem sender_signs), phone (+55DDDNUMERO, quando delivery_channel=whatsapp), email (quando delivery_channel=email), delivery_channel: whatsapp|email (padrao whatsapp), cpf (opcional; invalido = 422 cpf_invalido), contact_id (ficha da pessoa; recomendado no titular)}. Cada pessoa recebe o proprio link e assina com codigo de uso unico."
32977
+ }
32978
+ ],
32979
+ "returns": "201: o contrato (status sent) com participants[] (public_url de cada um), events[] e delivery_failures[]; 422: {error, detail, missing, inboxes, envelope}",
32980
+ "common_use_cases": [
32981
+ "Mandar o contrato padrao pra um cliente assinar pelo WhatsApp",
32982
+ "Mandar com testemunha (participants com role witness e o telefone dela)",
32983
+ "Reenviar um contrato que ficou como rascunho por falha de entrega (use resend)"
32984
+ ],
32985
+ "related_tools": [
32986
+ "lionchat_signature_documents_list",
32987
+ "lionchat_signature_envelopes_limits",
32988
+ "lionchat_signature_envelopes_show",
32989
+ "lionchat_signature_envelopes_resend"
32990
+ ]
32991
+ },
32992
+ {
32993
+ "id": "lionchat_signature_envelopes_resend",
32994
+ "method": "POST",
32995
+ "path": "/api/v1/accounts/{account_id}/signature_envelopes/{id}/resend",
32996
+ "title": "Reenviar Link do Contrato",
32997
+ "description": "Reenvia o link a quem ainda nao assinou (nao cria contrato novo, nao consome vaga). Le o resultado: {ok, resent, failures[{participant_id, name, motivo}]}. Contrato que nasceu sem entrega vira 'sent' no primeiro link que sai.",
32998
+ "category": "Assinatura eletronica",
32999
+ "params": [
33000
+ {
33001
+ "name": "id",
33002
+ "type": "integer",
33003
+ "location": "path",
33004
+ "required": true,
33005
+ "description": "ID do contrato"
33006
+ }
33007
+ ],
33008
+ "returns": "{ok, resent, failures[]}",
33009
+ "common_use_cases": [
33010
+ "Cliente diz que nao recebeu o link",
33011
+ "Contrato marcado como 'nao entregue'"
33012
+ ],
33013
+ "related_tools": [
33014
+ "lionchat_signature_envelopes_show"
33015
+ ]
33016
+ },
33017
+ {
33018
+ "id": "lionchat_signature_envelopes_sign_as_sender",
33019
+ "method": "POST",
33020
+ "path": "/api/v1/accounts/{account_id}/signature_envelopes/{id}/sign_as_sender",
33021
+ "title": "Remetente Assina o Contrato pelo Painel",
33022
+ "description": "A assinatura do REMETENTE (a pessoa do token), quando o modelo tem 'eu tambem assino' (roles_layout.sender_signs). Nao serve pra assinar no lugar do cliente: titular e testemunha assinam pelo link publico deles. Manda o desenho da assinatura como PNG em base64 com o prefixo data:image/png;base64,... (o mesmo rabisco da tela; remember_drawing guarda pra proxima vez). Recusas 422: nao_e_sua (o usuario do token nao e o remetente deste contrato), ja_assinado, sem_desenho. Quando era a ultima assinatura que faltava, o contrato fecha e o PDF final e gerado em seguida (status signed_pending_seal -> signed). Ache os contratos que esperam a sua assinatura com status=falta_eu em lionchat_signature_envelopes_list.",
33023
+ "category": "Assinatura eletronica",
33024
+ "params": [
33025
+ {
33026
+ "name": "id",
33027
+ "type": "integer",
33028
+ "location": "path",
33029
+ "required": true,
33030
+ "description": "ID do contrato"
33031
+ },
33032
+ {
33033
+ "name": "signature_image",
33034
+ "type": "string",
33035
+ "location": "body",
33036
+ "required": true,
33037
+ "description": "Desenho da assinatura em base64, com prefixo data URL (data:image/png;base64,...). Obrigatorio — sem ele 422 sem_desenho"
33038
+ },
33039
+ {
33040
+ "name": "location",
33041
+ "type": "object",
33042
+ "location": "body",
33043
+ "required": false,
33044
+ "description": "Onde o remetente assinou, se souber: {latitude, longitude, accuracy} (graus decimais; fora da faixa e ignorado). Vai pra prova (evidencias)"
33045
+ },
33046
+ {
33047
+ "name": "remember_drawing",
33048
+ "type": "boolean",
33049
+ "location": "body",
33050
+ "required": false,
33051
+ "description": "true = guarda o desenho nas preferencias do usuario pra reaproveitar no proximo contrato"
33052
+ }
33053
+ ],
33054
+ "returns": "o contrato atualizado com participants[] e events[] (o seu participante vira signed); 422: {error: nao_e_sua | ja_assinado | sem_desenho}",
33055
+ "common_use_cases": [
33056
+ "Fechar um contrato em que so falta a assinatura do remetente",
33057
+ "Assinar em lote os contratos listados com status=falta_eu"
33058
+ ],
33059
+ "related_tools": [
33060
+ "lionchat_signature_envelopes_list",
33061
+ "lionchat_signature_envelopes_show",
33062
+ "lionchat_signature_envelopes_create"
33063
+ ]
33064
+ },
33065
+ {
33066
+ "id": "lionchat_signature_envelopes_cancel",
33067
+ "method": "POST",
33068
+ "path": "/api/v1/accounts/{account_id}/signature_envelopes/{id}/cancel",
33069
+ "title": "Cancelar Contrato",
33070
+ "description": "Cancela um contrato ainda aberto (so ADMINISTRADOR). O link para de funcionar; a linha do tempo guarda o cancelamento. Contrato assinado/recusado/expirado nao cancela (422 ja_concluido).",
33071
+ "category": "Assinatura eletronica",
33072
+ "params": [
33073
+ {
33074
+ "name": "id",
33075
+ "type": "integer",
33076
+ "location": "path",
33077
+ "required": true,
33078
+ "description": "ID do contrato"
33079
+ }
33080
+ ],
33081
+ "returns": "o contrato com status cancelled",
33082
+ "common_use_cases": [
33083
+ "Mandou pro cliente errado",
33084
+ "O negocio nao vai acontecer"
33085
+ ],
33086
+ "related_tools": [
33087
+ "lionchat_signature_envelopes_show"
33088
+ ]
33089
+ },
33090
+ {
33091
+ "id": "lionchat_signature_envelopes_limits",
33092
+ "method": "GET",
33093
+ "path": "/api/v1/accounts/{account_id}/signature_envelopes/limits",
33094
+ "title": "Limite Mensal de Contratos",
33095
+ "description": "Quantos contratos a conta ja mandou no mes e o teto do plano ({used, limit, unlimited}). Contrato cancelado/expirado NAO devolve a vaga.",
33096
+ "category": "Assinatura eletronica",
33097
+ "params": [],
33098
+ "returns": "{used, limit, unlimited}",
33099
+ "common_use_cases": [
33100
+ "Avisar antes de um disparo em lote que o teto vai estourar"
33101
+ ],
33102
+ "related_tools": [
33103
+ "lionchat_signature_envelopes_create"
33104
+ ]
32567
33105
  }
32568
33106
  ]