{"openapi":"3.1.0","info":{"title":"OneSendz API","version":"1.0.0","description":"API oficial do WhatsApp (e e-mail) da OneSendz. Cada ferramenta é um POST com JSON em /api/v1/<nome>; GET com os parâmetros na query também funciona.\n\nAutenticação: Authorization: Bearer <chave>. Chaves osz_... (produção) e oszt_... (teste) são criadas em Configurações > Integrações > API e MCP.\n\nModo teste: com chave oszt_ tudo roda num ambiente separado (contatos, conversas, número fictício e cópia dos templates aprovados) e todo envio é simulado. Use para desenvolver; troque pela chave de produção no fim.\n\nResposta: { ok: true, dados } ou { ok: false, erro: { codigo, mensagem } }. Envios pedem chave_idempotencia (repetir a mesma chave não envia duas vezes).\n\nStatus das mensagens e eventos da conta chegam por webhook (ferramenta criar_webhook), assinados com HMAC-SHA256.\n\nGuia completo: https://dev.onesendz.com/docs. Resumo para IAs: https://dev.onesendz.com/llms.txt"},"servers":[{"url":"https://dev.onesendz.com/api/v1"}],"security":[{"chave":[]}],"tags":[{"name":"Leitura","description":"Precisa da permissão de leitura (todas as chaves têm)."},{"name":"Escrita","description":"Precisa da permissão de escrita."},{"name":"Envio","description":"Precisa da permissão de envio. Conta no limite de envios e no tope da chave."}],"paths":{"/resumo_do_periodo":{"post":{"operationId":"resumo_do_periodo","summary":"Resumo do período","description":"Números do negócio no período: contatos novos, conversas, quem pediu atendente, mensagens, campanhas enviadas e automações, com a evolução dia a dia. Responde perguntas como 'como foi a semana?', 'quantos contatos ontem?' ou 'como foi o dia 05/10?'. Para um dia exato (ontem, uma data), use de = ate = essa data; para um intervalo, de e ate.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"dias":{"type":"integer","enum":[1,7,30],"description":"Sem datas: 1 = hoje (o dia de hoje), 7 ou 30 = últimos dias terminando hoje. Padrão 7."},"de":{"type":"string","description":"Data inicial AAAA-MM-DD, no fuso da empresa (ex.: ontem = a data de ontem)."},"ate":{"type":"string","description":"Data final AAAA-MM-DD (inclusive). Só de = um dia só."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/buscar_contatos":{"post":{"operationId":"buscar_contatos","summary":"Buscar contatos","description":"Procura contatos por nome, telefone ou e-mail, e/ou por etiqueta. Devolve no máximo 50 por página.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"busca":{"type":"string","description":"Parte do nome, telefone ou e-mail."},"etiqueta":{"type":"string","description":"Só contatos com esta etiqueta."},"limite":{"type":"integer","minimum":1,"maximum":50,"description":"Padrão 20."},"pagina":{"type":"integer","minimum":1,"description":"Padrão 1."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/ver_contato":{"post":{"operationId":"ver_contato","summary":"Ver contato","description":"Ficha de um contato: dados, etiquetas, campos personalizados, em que etapa de cada funil ele está e conversas (com canal, status e se a janela de 24 h daquele canal está aberta).","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"id_externo":{"type":"string","description":"Ou o código do contato no seu CRM ou sistema."},"contato_id":{"type":"string","description":"Id do contato."},"telefone":{"type":"string","description":"Ou o telefone (com DDD)."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/listar_conversas":{"post":{"operationId":"listar_conversas","summary":"Listar conversas","description":"Conversas mais recentes. Filtros: pediram_atendente (precisam de alguém da equipe), nao_lidas, abertas ou todas.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"filtro":{"type":"string","enum":["pediram_atendente","nao_lidas","abertas","todas"],"description":"Padrão abertas."},"limite":{"type":"integer","minimum":1,"maximum":50,"description":"Padrão 20."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/ver_conversa":{"post":{"operationId":"ver_conversa","summary":"Ver conversa","description":"Últimas mensagens de uma conversa (diz o canal: WhatsApp, Instagram ou Messenger), da mais antiga para a mais nova.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["conversa_id"],"properties":{"conversa_id":{"type":"string","description":"Id da conversa."},"limite":{"type":"integer","minimum":1,"maximum":50,"description":"Padrão 30."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/listar_campanhas":{"post":{"operationId":"listar_campanhas","summary":"Listar campanhas","description":"Campanhas mais recentes com status e resultados (destinatários, entregues, lidas, falhas, cliques).","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"limite":{"type":"integer","minimum":1,"maximum":50,"description":"Padrão 20."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/listar_automacoes":{"post":{"operationId":"listar_automacoes","summary":"Listar automações","description":"Automações com status (ativa, pausada, rascunho), gatilho e quantas execuções tiveram (concluídas, esperando, com falha).","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/listar_templates":{"post":{"operationId":"listar_templates","summary":"Listar templates do WhatsApp","description":"Templates (modelos aprovados pela Meta) com texto, categoria e quantas variáveis pedem. Fora da janela de 24 h, só dá para mandar template.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["aprovados","pendentes","rejeitados","todos"],"description":"Padrão aprovados."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/listar_etiquetas_e_segmentos":{"post":{"operationId":"listar_etiquetas_e_segmentos","summary":"Listar etiquetas, segmentos e funis","description":"Etiquetas (cadastradas e em uso nos contatos), segmentos salvos e funis com suas colunas (nomes exatos, como aparecem no painel).","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/listar_unidades_e_numeros":{"post":{"operationId":"listar_unidades_e_numeros","summary":"Listar unidades e números","description":"Unidades e números de WhatsApp conectados. Útil para escolher por qual número enviar um template ou uma campanha.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/buscar_na_ajuda":{"post":{"operationId":"buscar_na_ajuda","summary":"Buscar na Central de Ajuda","description":"Procura nas guias oficiais da Central de Ajuda do OneSendz e devolve o passo a passo (com os nomes de menu e telas como aparecem no painel) e o link da guia. Serve para dúvidas de como fazer algo, onde fica uma opção ou como funciona um recurso. Entende a dúvida do jeito que a pessoa escreveu. Sem 'busca', lista as guias disponíveis.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"busca":{"type":"string","description":"A dúvida ou o assunto. Ex.: 'conectar Instagram', 'campanha só para quem não respondeu'."},"guia":{"type":"string","description":"Opcional: slug de uma guia para ler inteira (ex.: 'automations')."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/diagnosticar":{"post":{"operationId":"diagnosticar","summary":"Diagnosticar problemas","description":"Procura problemas e explica a causa em linguagem simples, com como resolver e onde fica no painel. Sem id: a conta inteira (números de WhatsApp, qualidade e limite, pagamento da Meta, falhas de envio e de automações nos últimos 7 dias, páginas do Instagram, templates rejeitados, limite de contatos, domínio de e-mail). Com automacao_id: por que a automação não dispara ou falha. Com campanha_id: por que a campanha falhou ou entregou pouco.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"automacao_id":{"type":"string","description":"Opcional: diagnostica só esta automação."},"campanha_id":{"type":"string","description":"Opcional: diagnostica só esta campanha."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/pedir_ajuda_ao_suporte":{"post":{"operationId":"pedir_ajuda_ao_suporte","summary":"Pedir ajuda à equipe do OneSendz","description":"Abre um pedido de ajuda para a equipe de suporte do OneSendz, com o diagnóstico da conta anexado automaticamente. Para problemas que as guias e o diagnóstico não resolveram, ou quando a pessoa pede para falar com o suporte. Devolve o número do protocolo e o link do WhatsApp do suporte para acompanhar.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["assunto","descricao"],"properties":{"assunto":{"type":"string","description":"Resumo em uma linha (até 160 caracteres)."},"descricao":{"type":"string","description":"O que está acontecendo, o que já foi tentado e o que o diagnóstico mostrou (até 4.000 caracteres)."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/resultados_de_campanhas":{"post":{"operationId":"resultados_de_campanhas","summary":"Resultados das campanhas","description":"Compara as campanhas de WhatsApp enviadas no período: taxas de entrega, leitura e clique, quantas pessoas responderam até 72 h depois e quantos pedidos pagos (lojas integradas) vieram desses destinatários até 7 dias depois. Aponta a melhor e a pior campanha e os dias e horários com mais leitura. Vendas são 'depois da campanha', não atribuição exata.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"dias":{"type":"integer","enum":[30,90,180],"description":"Período. Padrão 90."},"campanha_id":{"type":"string","description":"Opcional: só esta campanha."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/vendas_da_loja":{"post":{"operationId":"vendas_da_loja","summary":"Vendas da loja","description":"Faturamento e pedidos da loja virtual integrada à OneSendz (Tray, Bizway e outras) num período, comparando com o período anterior: faturamento (pedidos pagos, enviados e entregues), número de pedidos, ticket médio, clientes, pendentes, cancelados, produtos mais vendidos e carrinhos abandonados e recuperados. Responde 'qual foi minha receita no mês passado?', 'quanto vendi esta semana?', 'qual produto mais vendeu?'. Só conta pedidos a partir de registros_desde (quando a loja foi integrada): se o período começa antes, diga que não há dado antes dessa data e não trate como venda zero.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"periodo":{"type":"string","enum":["este_mes","mes_passado","7_dias","30_dias","90_dias"],"description":"Atalho de período no fuso da empresa. Padrão este_mes. Ignorado se vier de e ate."},"de":{"type":"string","description":"Data inicial AAAA-MM-DD (opcional, junto com ate)."},"ate":{"type":"string","description":"Data final AAAA-MM-DD, inclusive."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/ver_funil":{"post":{"operationId":"ver_funil","summary":"Ver funil","description":"Mostra um funil (Kanban) por etapa: quantos cartões, valor somado, quantos estão parados além do prazo da etapa e quantos esperam resposta da empresa, com os 5 cartões que pedem atenção primeiro em cada etapa. Sem 'funil', usa o principal.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"funil":{"type":"string","description":"Nome do funil (opcional)."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/contar_publico":{"post":{"operationId":"contar_publico","summary":"Contar público","description":"Conta quantos contatos salvos cumprem um conjunto de condições (etiquetas, compras, carrinho abandonado, funil, e-mail, resultado de campanha, campos personalizados...) e mostra alguns exemplos. Não salva nada: serve para testar um público antes de criar o segmento ou a campanha.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["condicoes"],"properties":{"condicoes":{"type":"array","items":{"type":"object"},"description":"Lista de condições no formato do OneSendz. Tipos: {type:'tag', op:'has_any'|'has_all'|'has_none', values:[etiquetas]}; {type:'created', op:'last_days', days:N} (contato criado nos últimos N dias); {type:'event', kind:'order_paid'|'order_created'|'cart_abandoned'|'order_cancelled'|'order_fulfilled'|'customer_created', op:'did'|'not_did', period_days?:N, min_count?:N} (compras e carrinho das lojas integradas); {type:'funnel', funil:'nome', etapa?:'nome'} (está no funil/etapa); {type:'email_engagement', action:'opened'|'clicked', op:'did'|'not_did', period_days?:N}; {type:'campaign_outcome', campaign_id:'id', op:'received'|'not_received'|'pending'|'undeliverable'}; {type:'custom_field', key:'campo', field_type:'text'|'number'|'date'|'boolean'|'select', op:'eq'|'neq'|'contains'|'gt'|'lt'|'is_set'|'not_set'|'last_days'|'birthday_today'|'birthday_next_days'|'birthday_month'|'is_true'|'is_false', value?} (aniversário: campo de data, compara dia e mês; birthday_next_days usa value = N dias); {type:'wa_health', op:'healthy'|'at_risk'|'opt_out'|'undeliverable'}; {type:'city'|'state', values:[...]}; {type:'has_email'|'has_phone'|'is_active', value:true|false}."},"combinar":{"type":"string","enum":["todas","qualquer"],"description":"todas = precisa cumprir todas as condições (padrão); qualquer = basta uma."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/ver_automacao":{"post":{"operationId":"ver_automacao","summary":"Ver automação","description":"Mostra uma automação passo a passo (blocos e para onde cada saída leva) e aponta pontos frágeis, como 'aguardar resposta' sem caminho para 'outra resposta'. Serve para explicar, revisar ou diagnosticar um fluxo.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["automacao_id"],"properties":{"automacao_id":{"type":"string","description":"Id da automação."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/salvar_contato":{"post":{"operationId":"salvar_contato","summary":"Criar ou atualizar contato","description":"Cria um contato pelo telefone ou atualiza o que já existe (nome, e-mail, etiquetas e campos personalizados). Etiquetas são somadas às que o contato já tem.","tags":["Escrita"],"x-permissao":"write","x-destrutiva":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["telefone"],"properties":{"telefone":{"type":"string","description":"Telefone com DDD."},"nome":{"type":"string"},"email":{"type":"string"},"etiquetas":{"type":"array","items":{"type":"string"},"description":"Etiquetas a adicionar."},"campos":{"type":"object","description":"Campos personalizados (chave: valor)."},"id_externo":{"type":"string","description":"Código do contato no seu CRM ou sistema (para achar o contato depois por ele)."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/etiquetar_contato":{"post":{"operationId":"etiquetar_contato","summary":"Adicionar ou remover etiquetas","description":"Adiciona e/ou remove etiquetas de um contato. Etiquetas podem disparar automações que dependem delas.","tags":["Escrita"],"x-permissao":"write","x-destrutiva":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"contato_id":{"type":"string"},"telefone":{"type":"string"},"id_externo":{"type":"string"},"adicionar":{"type":"array","items":{"type":"string"}},"remover":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/criar_campanha_rascunho":{"post":{"operationId":"criar_campanha_rascunho","summary":"Criar campanha (rascunho)","description":"Cria uma campanha de WhatsApp ou de e-mail como RASCUNHO, para alguém revisar e disparar no painel. Nunca dispara sozinha. Público por etiquetas ou por segmento salvo.","tags":["Escrita"],"x-permissao":"write","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["nome","template"],"properties":{"nome":{"type":"string"},"canal":{"type":"string","enum":["whatsapp","email"],"description":"Padrão whatsapp."},"template":{"type":"string","description":"WhatsApp: nome de um template APROVADO. E-mail: nome de um template de e-mail (ver_templates_email)."},"numero_id":{"type":"string","description":"Id do número que envia. Opcional se houver um só."},"etiquetas":{"type":"array","items":{"type":"string"},"description":"Público: contatos com estas etiquetas."},"todas_as_etiquetas":{"type":"boolean","description":"true = precisa ter todas; false = qualquer uma. Padrão true."},"segmento_id":{"type":"string","description":"Ou um segmento salvo."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/criar_automacao_rascunho":{"post":{"operationId":"criar_automacao_rascunho","summary":"Criar automação (rascunho)","description":"Monta uma automação a partir de passos e salva como RASCUNHO (nunca ativa: a pessoa revisa e ativa no painel). Devolve o link do editor. Integrações e cadastros citados (loja, Hotmart, webinar, áudio, funil, campo, webhook) precisam existir na conta; se não existirem, o erro diz o que falta. GATILHOS (gatilho.tipo): whatsapp (mensagem recebida; palavra_chave? várias por vírgula, ignora acento e maiúscula; evento? any|text|image|audio|video|document|button|interactive; nao_repetir_horas?; uma_vez_por_contato?; so_primeira_mensagem? (só quem nunca tinha escrito antes: use em boas-vindas para clientes novos; uma_vez_por_contato pega cliente antigo na próxima mensagem); so_com_etiqueta?; numero? (qual número da empresa); horario? {quando: dentro|fora, dias, inicio, fim}). direct (mensagem no direct; canal? instagram|messenger|any; evento? mensagem|mencao_no_story|resposta_ao_story; palavra_chave?). instagram_comentario (comentário em post; palavra_chave?; post_id? link ou ID, vazio = todos; respostas_publicas? uma sorteada; o 1o passo é a mensagem no direct). instagram_novo_seguidor (1o contato no direct de quem segue; apenas_seguidores? padrão true; botoes_boas_vindas? até 4). etiqueta (etiqueta, evento? adicionada|removida; nome igual, com maiúsculas). contato (evento criado|atualizado|excluido). email (evento entregue|aberto|clicou|respondeu|bounce|spam|descadastrou; só e-mails enviados pelo OneSendz). loja (plataforma shopify|woocommerce|yampi|tray|bizway|nuvemshop; evento carrinho_abandonado|checkout_iniciado|pedido_criado|pagamento_pendente|pedido_pago|pedido_enviado|pedido_entregue|pedido_cancelado|pedido_atualizado|cliente_novo|nota_fiscal|cashback_expirando, conforme a plataforma; cashback_expirando só na Yampi, 7 dias antes do crédito vencer). hotmart (evento compra_aprovada|compra_completa|boleto_gerado|carrinho_abandonado|compra_cancelada|reembolso|chargeback|pagamento_atrasado|assinatura_cancelada|primeiro_acesso); kiwify (evento compra_aprovada|pix_gerado|boleto_gerado|carrinho_abandonado|compra_recusada|reembolso|chargeback|assinatura_atrasada|assinatura_cancelada|assinatura_renovada). activecampaign (evento exato: subscribe, unsubscribe, update, contact_tag_added, contact_tag_removed, deal_add, deal_update, deal_task_add, deal_task_complete, open, click, bounce; etiqueta?). guru (evento: pagamento_aprovado, compra_completa, checkout_iniciado, carrinho_abandonado, aguardando_pagamento, boleto_gerado, boleto_vencido, reembolso, cancelada, chargeback, pagamento_falhou, pagamento_recusado, trial, assinatura_ativa, assinatura_cancelada, assinatura_atrasada, assinatura_suspensa, assinatura_expirada, eticket_criado, eticket_checkin; variáveis {{product_name}}, {{amount}}, {{payment_method}}, {{checkout_url}}). agendado (horario HH:MM + dias, ou cron de 5 campos; etiqueta? = só quem tem a etiqueta, senão todos os contatos ativos; aniversario? = campo extra de data com o aniversário: roda todo dia no horario e manda só para quem faz aniversário, uma vez por ano; dias_antes? 0-60). manual (sem gatilho: entra quem a pessoa escolher no botão Testar/inscrever). Variáveis que o gatilho deixa para os textos ({{context.x}}): loja = order_number, order_total, cart_url, first_product_name, customer_name (e mais por plataforma; Yampi cashback_expirando = cashback_amount (ex.: R$ 12,50, o crédito que vence), cashback_balance (saldo total), cashback_expires_at (dd/mm), cashback_days_left); hotmart = product_name, price, checkout_url; kiwify = product_name, offer_name, price, payment_url (boleto ou checkout), pix_code, access_url (acesso), plan_name, next_payment; email = link_url; whatsapp = message_text; agendado = scheduled_at (aniversário: também birthday_date dd/mm e age, a idade quando a data tem ano). Do contato, sempre: {{contact.first_name|tudo bem}} (depois do | é o que aparece sem nome), {{contact.email}} e {{contact.<campo_personalizado>}}. Da empresa (Configurações › Organização e Pix): {{empresa.nome}}, {{empresa.pix_chave}} (chave Pix oficial) e {{empresa.pix_nome}} (nome do recebedor); para Pix use sempre essas, nunca copie a chave para o texto. Em loja, payment_method diz a forma de pagamento (pix, boleto, cartao) e a condição campo 'pedido_etapa_atual' igual a 'pendente' confere se ainda não pagou. PASSOS (cada um é um objeto com 'tipo'). Mensagens: mensagem {texto, opcoes? (até 10, máx. 20 letras; até 3 viram botões, mais viram lista), botoes_link? [{titulo (máx. 20), url, etiqueta_ao_clicar?}] (até 3), caminhos? {'Opção': [passos]}, outra_resposta?, sem_resposta?, esperar_minutos? (padrão 60)}; template {nome, variaveis?, botao?, imagem?} (WhatsApp fora da janela de 24 h; botao = final do link do botão do template, para carrinho use '{{context.cart_url}}', o sistema tira o começo que já está no botão; imagem = foto do cabeçalho, ex. '{{context.first_product_image}}'); email {assunto, texto} (texto simples) ou email {template, marketing?} (marketing: true em e-mail de venda, oferta, newsletter ou sequência: leva link de descadastro; deixe sem em e-mail de acesso, pedido ou aviso) (template PREFERIDO quando o e-mail já existe em Templates › E-mail: o bloco fica ligado ao template e a pessoa revisa tudo em Disparos › Templates; assunto? troca só o assunto) ou email {assunto, previa?, modelo?, idioma?, conteudo} (e-mail bonito em blocos, com logo e cores da empresa; ver criar_template_email para o formato); sms {texto (até 640, sem emoji), categoria? marketing|utility}; audio {audio} (áudio gravado da biblioteca, pelo canal da conversa); ligacao {audio} (ligação telefônica com áudio aprovado) ou ligacao {texto} (a voz do sistema lê o texto na hora, até 500 caracteres, com variáveis como '{{contact.first_name}}' e '{{context.order_number}}'; não precisa de áudio aprovado); envio_inteligente {texto?, template?, variaveis?, texto_sms?, politica? economia|alcance} (o sistema escolhe o canal: WhatsApp na janela, fora dela template ou SMS). Esperas e respostas: esperar {minutos}; esperar_ate {modo: data_hora (data_hora 'AAAA-MM-DD HH:MM') | campo (campo, ajuste_minutos? negativo = antes; ex. campo webinar_inicio) | horario (horario HH:MM, dias?), ja_passou? [passos]}; aguardar_resposta {regras?: [{contem, passos}], outra_resposta?, sem_resposta?, esperar_minutos?, guardar_em? (variável só do fluxo), salvar_em? (campo do CONTATO: nome, email, cidade ou campo personalizado)} (sem regras e sem outra_resposta, os passos seguintes continuam quando a pessoa responder: é o 'esperar resposta e seguir'); esperar com menos de 1 minuto (pausas de segundos de outras ferramentas) é omitido; campo personalizado que ainda não existe é criado como texto (atualizar_campo, salvar_em); formulario {introducao?, perguntas: [{pergunta, tipo? texto|email|telefone|numero|data|escolha, opcoes?, obrigatoria?, salvar_em? (nome, email, cidade ou campo personalizado)}], mensagem_final?, ao_concluir? {etiqueta?, funil?, coluna?}, sem_resposta? [passos]} (perguntas uma a uma no chat); formulario_agenda {texto?, botao?} (o formulário de agendamento publicado na Agenda). Decisões: condicao {etiqueta} ou {campo, operador (equals, not_equals, contains, not_contains, exists, not_exists, gt, lt, gte, lte, has_tag, not_has_tag), valor} com sim/nao [passos]; horario_atendimento {dias (seg..dom), inicio, fim, dentro [passos], fora [passos]}; segue_no_instagram {segue [passos], nao_segue [passos]} (confere no próprio Instagram se a pessoa segue a conta; só com gatilho do Instagram; é diferente de esperar a palavra 'seguir'); resultado_webinar {nao_entrou, assistiu_pouco, viu_oferta, clicou: [passos]}. Em gatilho de loja (yampi, tray, bizway, shopify, nuvemshop ou woocommerce), condicao {campo: 'pedido_etapa_atual', operador: 'equals', valor: 'pago'|'enviado'|'entregue'|'cancelado'|'pendente'} confere a etapa do pedido NA HORA (ex.: pedido pago, esperar 16 dias, condicao etapa = pago, só então avisar que a produção atrasou). Organizar e integrar: etiquetar {etiqueta, remover?}; mover_funil {funil, coluna}; classificar_funil_ia {funil, criterios?, pontuar?, nao_encaixou? [passos]} (a IA lê a conversa e põe o card na etapa certa); atualizar_campo {campo, valor}; inscrever_webinar {webinar, sem_sessao? [passos]} (guarda webinar_link e webinar_inicio_texto para as mensagens); assistente_ia {instrucoes?, usar_catalogo?, max_turnos?, esperar_minutos?, concluiu?, pediu_atendente?, sem_resposta? [passos]} (a IA conversa até resolver); webhook {webhook (nome do cadastrado) ou url https, metodo?, corpo?, erro? [passos]}; activecampaign {acao salvar_contato|adicionar_tag|remover_tag|adicionar_lista|atualizar_campo|disparar_automacao, tag?, lista_id?, campo_id?, valor?, automacao_id?}; chamar_atendente {motivo?}; voltar_para {para} (vai a um passo já montado que tenha esse 'rotulo': um passo anterior, ou o trecho comum montado no primeiro caminho; qualquer passo aceita 'rotulo'); fim. Caminhos que se juntam: quando opções diferentes levam ao MESMO próximo passo (ex.: 5 opções de um menu que seguem para a mesma mensagem), monte o trecho comum UMA vez, dentro do PRIMEIRO caminho, com 'rotulo' no primeiro passo dele; nos outros caminhos, faça só o que é diferente (ex.: atualizar_campo) e termine com voltar_para {para: esse rotulo}. Nunca copie o resto do fluxo em cada caminho: a chamada fica enorme e falha. Janela de 24 h: em gatilhos de loja, hotmart, kiwify, guru, activecampaign, etiqueta, contato, agendado e email o cliente quase nunca falou com a empresa nas últimas 24 h, então mensagem de texto NÃO chega: use template aprovado (ex. carrinho: variaveis ['{{contact.first_name|tudo bem}}', '{{context.first_product_name}}', '{{context.cart_total}}'], botao '{{context.cart_url}}', imagem '{{context.first_product_image}}'). Se não houver template aprovado para isso, NÃO monte com mensagem de texto: explique, ofereça criar o template (criar_template_rascunho) e monte a automação depois que a Meta aprovar. Os modelos prontos ficam em Disparos › Automações › Modelos prontos. Regra: um passo com caminhos (mensagem com opções, aguardar_resposta com regras ou outra_resposta, condicao, horario_atendimento, segue_no_instagram, resultado_webinar, assistente_ia) é o ÚLTIMO da sua lista; o que vem depois vai dentro de cada caminho. Sem outra_resposta, uma resposta inesperada fica sem retorno. Exemplo de material só para seguidores (comentário no Instagram): mensagem {rotulo: 'pedir', texto: 'Me segue em @conta e toque em Já segui', opcoes: ['Já segui'], caminhos: {'Já segui': [segue_no_instagram {segue: [mensagem com o link], nao_segue: [voltar_para {para: 'pedir'}]}]}}. O botão é necessário: no Instagram, as mensagens depois da 1a só saem se a pessoa interagir. substituir_id: troca o fluxo de um rascunho já criado, no mesmo rascunho. nota (opcional, em qualquer passo e no gatilho, até 140 caracteres): lembrete para a equipe, não vai para o contato.","tags":["Escrita"],"x-permissao":"write","x-destrutiva":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["nome","gatilho","passos"],"properties":{"nome":{"type":"string","description":"Nome da automação."},"gatilho":{"type":"object","description":"Objeto com tipo e os campos do gatilho, como descrito acima. nota? em qualquer um.","properties":{"tipo":{"type":"string","enum":["whatsapp","direct","instagram_comentario","instagram_novo_seguidor","etiqueta","contato","email","loja","hotmart","kiwify","guru","activecampaign","agendado","manual"]},"evento":{"type":"string"},"plataforma":{"type":"string"},"canal":{"type":"string"},"palavra_chave":{"type":"string"},"etiqueta":{"type":"string"},"nao_repetir_horas":{"type":"integer"},"uma_vez_por_contato":{"type":"boolean"},"so_primeira_mensagem":{"type":"boolean"},"so_com_etiqueta":{"type":"string"},"numero":{"type":"string"},"horario":{"description":"whatsapp: {quando, dias, inicio, fim}; agendado: HH:MM"},"dias":{"type":"array","items":{"type":"string"}},"cron":{"type":"string"},"grupo":{"type":"string"},"aniversario":{"type":"string","description":"agendado: chave ou nome do campo extra de data com o aniversário"},"dias_antes":{"type":"integer"},"apenas_seguidores":{"type":"boolean"},"botoes_boas_vindas":{"type":"array","items":{"type":"string"}},"post_id":{"type":"string"},"respostas_publicas":{"type":"array","items":{"type":"string"}},"nota":{"type":"string"}}},"passos":{"type":"array","description":"Lista de passos, no formato descrito acima.","items":{"type":"object"}},"substituir_id":{"type":"string","description":"Opcional: id de um rascunho para corrigir no lugar (só rascunho)."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/editar_automacao":{"post":{"operationId":"editar_automacao","summary":"Editar automação","description":"Altera uma automação existente sem mudar a estrutura (não adiciona nem remove blocos ou caminhos): conteúdo de qualquer bloco, o gatilho e o nome. Blocos pelos rótulos B1, B2... (os da leitura da automação). Campos por tipo: mensagem (texto, botoes_link, nota); template (template aprovado, variaveis, botao = final do link do botão, imagem = foto do cabeçalho); esperar (minutos); aguardar resposta (minutos, regras [{numero, contem}]); etiquetar (etiqueta, remover); chamar atendente (motivo); e-mail (assunto, texto); SMS (texto sem emoji, categoria); envio inteligente (texto, template, variaveis, texto_sms, politica); esperar até (data_hora | campo + ajuste_minutos | horario + dias); formulário (introducao, mensagem_final, perguntas [{numero, pergunta?, opcoes?, salvar_em?}], minutos); assistente IA (instrucoes, max_turnos, minutos, usar_catalogo); IA no funil (criterios, pontuar); atualizar campo (campo, valor); webhook por url (url, corpo); formulário da agenda (texto, botao); inscrever no webinar (webinar); horário de atendimento (dias, inicio, fim); condição (etiqueta ou campo, operador, valor); mover no funil (funil + coluna); áudio (audio); ligação (audio ou texto); ActiveCampaign (tag, lista_id, campo_id, valor, automacao_id). Todo bloco aceita nota (vazia apaga): só anotação interna pedida pela pessoa, nunca para responder ou registrar orientação. Gatilho: campos soltos (palavra_chave, respostas_publicas, post_id, etiqueta, nao_repetir_horas, uma_vez_por_contato, so_primeira_mensagem, so_com_etiqueta, nota) ou um gatilho inteiro com 'tipo' (mesmo formato da criação: whatsapp, direct, etiqueta, contato, email, loja, hotmart, guru, activecampaign, agendado, manual...), que substitui o atual. Automação ATIVA: sem confirmar=true nada é gravado e o resultado lista as mudanças (precisa_confirmar), porque numa automação ativa elas valem na hora; com confirmar=true, grava. Não adiciona nem remove blocos: isso é feito no editor do OneSendz ou recriando o rascunho.","tags":["Escrita"],"x-permissao":"write","x-destrutiva":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["automacao_id"],"properties":{"automacao_id":{"type":"string"},"nome":{"type":"string","description":"Novo nome (opcional)."},"gatilho":{"type":"object","description":"Campos soltos do gatilho, ou um gatilho inteiro com 'tipo' (substitui o atual)."},"blocos":{"type":"array","items":{"type":"object"},"description":"[{bloco: 'B3', ...campos do tipo do bloco}]"},"confirmar":{"type":"boolean","description":"true para gravar mudanças numa automação ativa, depois de mostrar o que muda."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/pausar_ou_reativar_automacao":{"post":{"operationId":"pausar_ou_reativar_automacao","summary":"Pausar ou reativar automação","description":"Pausa uma automação ativa ou reativa uma pausada. Pausar interrompe quem estava no meio do fluxo. Automação em rascunho só se ativa pelo painel (lá o fluxo é conferido).","tags":["Escrita"],"x-permissao":"write","x-destrutiva":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["automacao_id","acao"],"properties":{"automacao_id":{"type":"string"},"acao":{"type":"string","enum":["pausar","reativar"]}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/mover_no_funil":{"post":{"operationId":"mover_no_funil","summary":"Mover contato no funil","description":"Coloca um contato numa etapa do funil (cria o cartão se ele ainda não estiver no funil). Etapas de ganho ou perda podem enviar a conversão para os anúncios do Meta, quando essa integração está ligada.","tags":["Escrita"],"x-permissao":"write","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["etapa"],"properties":{"contato_id":{"type":"string"},"telefone":{"type":"string"},"funil":{"type":"string","description":"Nome do funil (opcional: usa o principal)."},"etapa":{"type":"string","description":"Nome da etapa (coluna), como aparece no painel."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/criar_lembrete":{"post":{"operationId":"criar_lembrete","summary":"Criar lembrete para você","description":"Lembrete para a PRÓPRIA pessoa que está falando com você (ex.: 'me avisa amanhã às 10h para ligar para a Maria'). Fica no cartão do contato no funil; na hora, a pessoa recebe um aviso no celular e no painel (e no WhatsApp, se usa a IA por lá). NÃO avisa o cliente e NÃO marca horário na Agenda. Com remover = true, apaga o lembrete do contato (desfazer).","tags":["Escrita"],"x-permissao":"write","x-destrutiva":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"remover":{"type":"boolean","description":"true = apaga o lembrete desse contato em vez de criar."},"contato_id":{"type":"string"},"telefone":{"type":"string","description":"Do contato sobre quem é o lembrete."},"quando":{"type":"string","description":"Data e hora no horário de Brasília: AAAA-MM-DD HH:MM (ex.: 2026-10-13 10:00)."},"nota":{"type":"string","description":"O que lembrar, curto (ex.: Ligar para a les sobre o plano)."},"funil":{"type":"string","description":"Nome do funil (opcional: usa o principal)."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/criar_segmento":{"post":{"operationId":"criar_segmento","summary":"Criar segmento","description":"Salva um segmento dinâmico (público que se atualiza sozinho) com as condições dadas, para usar em campanhas e filtros do painel. Devolve quantos contatos ele tem agora.","tags":["Escrita"],"x-permissao":"write","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["nome","condicoes"],"properties":{"nome":{"type":"string","description":"Nome do segmento (até 80 caracteres)."},"descricao":{"type":"string","description":"Para que serve (opcional)."},"condicoes":{"type":"array","items":{"type":"object"},"description":"Lista de condições no formato do OneSendz. Tipos: {type:'tag', op:'has_any'|'has_all'|'has_none', values:[etiquetas]}; {type:'created', op:'last_days', days:N} (contato criado nos últimos N dias); {type:'event', kind:'order_paid'|'order_created'|'cart_abandoned'|'order_cancelled'|'order_fulfilled'|'customer_created', op:'did'|'not_did', period_days?:N, min_count?:N} (compras e carrinho das lojas integradas); {type:'funnel', funil:'nome', etapa?:'nome'} (está no funil/etapa); {type:'email_engagement', action:'opened'|'clicked', op:'did'|'not_did', period_days?:N}; {type:'campaign_outcome', campaign_id:'id', op:'received'|'not_received'|'pending'|'undeliverable'}; {type:'custom_field', key:'campo', field_type:'text'|'number'|'date'|'boolean'|'select', op:'eq'|'neq'|'contains'|'gt'|'lt'|'is_set'|'not_set'|'last_days'|'birthday_today'|'birthday_next_days'|'birthday_month'|'is_true'|'is_false', value?} (aniversário: campo de data, compara dia e mês; birthday_next_days usa value = N dias); {type:'wa_health', op:'healthy'|'at_risk'|'opt_out'|'undeliverable'}; {type:'city'|'state', values:[...]}; {type:'has_email'|'has_phone'|'is_active', value:true|false}."},"combinar":{"type":"string","enum":["todas","qualquer"],"description":"todas = precisa cumprir todas as condições (padrão); qualquer = basta uma."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/criar_template_rascunho":{"post":{"operationId":"criar_template_rascunho","summary":"Criar template (rascunho)","description":"Salva um template de WhatsApp como RASCUNHO no OneSendz (não vai para a Meta). A pessoa revisa em Templates e toca em 'Enviar para aprovação'. Texto com variáveis {{1}}, {{2}}... e um exemplo para cada; botões opcionais (até 3 respostas rápidas, ou até 2 links e 1 telefone). Para AJUSTAR um rascunho que você já criou (texto, botões, emojis), chame de novo com o MESMO nome: o rascunho é substituído, sem criar outro. CATEGORIA (regra da Meta, não negocie): reativar cliente, chamar de volta, convite, novidade, oferta, desconto, condição especial, Black Friday ou qualquer venda = MARKETING, por mais neutro que seja o texto; a Meta reclassifica sozinha. UTILIDADE é só sobre algo que a pessoa já fez ou já tem: pedido, entrega, pagamento, agendamento, acesso, conta. Nunca diga que um texto promocional 'pode passar como utilidade'.","tags":["Escrita"],"x-permissao":"write","x-destrutiva":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["nome","categoria","texto"],"properties":{"nome":{"type":"string","description":"Nome interno: minúsculas, números e _ (ex.: reativar_clientes_out)."},"categoria":{"type":"string","enum":["marketing","utilidade"],"description":"marketing = promoções, ofertas, novidades, convites, reativação de clientes; utilidade = só avisos sobre algo que a pessoa já fez ou tem (pedido, entrega, pagamento, agendamento, acesso)."},"idioma":{"type":"string","description":"Padrão pt_BR (es, en_US...)."},"texto":{"type":"string","description":"Corpo da mensagem (até 1.024 caracteres). Variáveis {{1}}, {{2}}... não podem abrir nem fechar o texto."},"exemplos_variaveis":{"type":"array","items":{"type":"string"},"description":"Um exemplo por variável, na ordem (a Meta exige)."},"cabecalho":{"type":"string","description":"Título curto em texto (até 60 caracteres, opcional)."},"rodape":{"type":"string","description":"Rodapé (até 60 caracteres, opcional)."},"botoes":{"type":"array","items":{"type":"object"},"description":"[{tipo:'resposta_rapida', texto}] ou [{tipo:'link', texto, url}] ou [{tipo:'telefone', texto, telefone}]. Texto até 25 caracteres."},"numero_id":{"type":"string","description":"Opcional: número cuja conta da Meta vai receber o template (com mais de uma conta)."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/criar_template_email":{"post":{"operationId":"criar_template_email","summary":"Criar template de e-mail","description":"Cria (ou ajusta) um template de E-MAIL no editor simples por blocos, com a identidade da empresa (logo, cores, rodapé). Fica em Disparos › Templates › E-mail para usar em campanhas e automações; não envia nada. Para AJUSTAR um template que você criou, chame de novo com o MESMO nome e o conteudo inteiro (substitui). Templates feitos no editor avançado não são alterados por aqui. Para um e-mail só de uma automação, use o passo 'email' com conteudo em criar_automacao_rascunho. conteudo = lista de blocos, na ordem em que aparecem: {tipo:'logo'} (logo da Identidade do e-mail); {tipo:'titulo', texto, tamanho? grande|medio}; {tipo:'texto', texto} (parágrafos separados por linha em branco; **negrito**, *itálico*, [texto](https://link) e listas com '- '); {tipo:'imagem', url (https), alt?, link?}; {tipo:'botao', texto, url}; {tipo:'produto', nome, imagem?, preco?, descricao?, botao_texto?, url?}; {tipo:'divisor'}; {tipo:'espaco', altura?}; {tipo:'redes'} (links das redes da Identidade); {tipo:'rodape', texto?, estilo? claro|escuro}. Blocos de destaque (newsletter, carta, conteúdo): {tipo:'faixa', texto} (tarja escura curta no topo, ex.: 'Conteúdo exclusivo para assinantes'); titulo aceita chapeu? (texto pequeno em cima) e subtitulo?; {tipo:'imagem', largura:'borda'} = banner de ponta a ponta; {tipo:'numeros', itens:[{valor, rotulo}]} (até 3 cartões, ex.: R$ 4,18 / Custo); {tipo:'destaque', texto} (aviso com barra colorida); {tipo:'passos', itens:[{titulo, texto}]} (01, 02...; até 6); {tipo:'citacao', texto, autor?} (frase forte em caixa escura). Cores, fonte, logo e rodapé vêm da Identidade do e-mail da empresa: não mande HTML. cor e fundo (#rrggbb) só nesses blocos de destaque, e só quando a pessoa pedir um visual próprio (ex.: preto e dourado). Variáveis valem em textos e links: {{contact.first_name|tudo bem}}, {{contact.email}}, {{empresa.nome}} e, em automações, {{context.x}} do gatilho. Comece com logo e termine com rodape; uma ideia por e-mail, um botão principal. O link de descadastro é colocado sozinho nas campanhas. Ou use modelo (boas-vindas, acesso-liberado, promocao, novidade, carrinho, pos-compra, evento, comunicado) como ponto de partida e mande conteudo só se for trocar os textos. idioma (pt, es ou en) = idioma dos CLIENTES que vão receber: escolhe o texto dos modelos e os rótulos do e-mail; escreva o conteudo nesse idioma.","tags":["Escrita"],"x-permissao":"write","x-destrutiva":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["nome","assunto"],"properties":{"nome":{"type":"string","description":"Nome interno do template (ex.: Boas-vindas alunos)."},"assunto":{"type":"string","description":"Assunto do e-mail (até 200 caracteres; curto e claro, pode ter {{contact.first_name}})."},"previa":{"type":"string","description":"Texto que aparece ao lado do assunto na caixa de entrada (até 150 caracteres)."},"modelo":{"type":"string","enum":["boas-vindas","acesso-liberado","promocao","novidade","carrinho","pos-compra","evento","comunicado"],"description":"Modelo pronto como ponto de partida."},"idioma":{"type":"string","enum":["pt","es","en"],"description":"Idioma de quem vai receber (padrão pt)."},"conteudo":{"type":"array","items":{"type":"object"},"description":"Blocos do e-mail (ver descrição da ferramenta)."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/ver_templates_email":{"post":{"operationId":"ver_templates_email","summary":"Ver templates de e-mail","description":"Lista os templates de e-mail da empresa (nome, assunto, editor). Com 'nome', devolve também os blocos (conteudo) de um template do editor simples, para ajustar com criar_template_email.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"nome":{"type":"string","description":"Nome de um template para ver os blocos."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/configurar_email_empresa":{"post":{"operationId":"configurar_email_empresa","summary":"Configurar remetente e identidade dos e-mails","description":"Muda como os e-mails da empresa saem: nome do remetente, endereço de envio (só no domínio já verificado em Configurações › Email), e a identidade visual dos e-mails do editor simples (logo, cor da marca, rodapé, nome da empresa e redes). Mande só o que for mudar. Logo: um link https de imagem PNG ou JPG (medida boa: horizontal de uns 400×120 px ou quadrado de 240×240, até 2 MB). Se a pessoa mandar a logo como arquivo, peça para subir em Disparos › Templates › E-mail › Identidade. Vale para todos os e-mails da empresa; os das automações já saem com a mudança.","tags":["Escrita"],"x-permissao":"write","x-destrutiva":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"nome_remetente":{"type":"string","description":"Nome que aparece como remetente (até 64 caracteres). Vazio volta ao nome da empresa."},"email_remetente":{"type":"string","description":"Endereço de envio no domínio verificado (ex.: contato@empresa.com.br). Vazio volta ao endereço padrão."},"logo_url":{"type":"string","description":"Link https da logo (PNG ou JPG)."},"remover_logo":{"type":"boolean","description":"true tira a logo (o topo mostra o nome da empresa)."},"cor":{"type":"string","description":"Cor da marca em #rrggbb (botões e links)."},"rodape":{"type":"string","description":"Rodapé: endereço, CNPJ, horário (até 600 caracteres)."},"nome_empresa":{"type":"string","description":"Nome da empresa no topo/rodapé quando não há logo."},"redes":{"type":"object","description":"Links https: instagram, facebook, whatsapp, tiktok, youtube, site. Vazio tira."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/ver_agenda":{"post":{"operationId":"ver_agenda","summary":"Ver a agenda","description":"Lista os agendamentos da Agenda num período (padrão: de hoje até 7 dias), com cliente, serviço, profissional, status (a confirmar, confirmado, atendido, faltou, cancelado), resposta do cliente ao lembrete e link. Filtra por status, profissional ou contato. Também diz quantos pedidos esperam confirmação.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"de":{"type":"string","description":"Data inicial: AAAA-MM-DD, DD/MM, hoje ou amanhã. Padrão: hoje."},"dias":{"type":"integer","description":"Quantos dias a partir da data inicial (1 a 31). Padrão 7."},"status":{"type":"string","enum":["todos","a_confirmar","confirmados","atendidos","faltas","cancelados"],"description":"Padrão: todos menos cancelados."},"profissional":{"type":"string","description":"Nome ou id do profissional (opcional)."},"contato_id":{"type":"string"},"telefone":{"type":"string","description":"Só os agendamentos deste contato (opcional)."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/horarios_livres":{"post":{"operationId":"horarios_livres","summary":"Horários livres na agenda","description":"Mostra os horários livres da Agenda num dia (ou os próximos dias com horário), para um serviço e/ou profissional, respeitando o expediente, a duração do serviço, os bloqueios e os horários já marcados. Com contato, usa a unidade do contato.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"AAAA-MM-DD, DD/MM, hoje ou amanhã. Padrão: hoje."},"proximos_dias":{"type":"integer","description":"Procurar nos próximos N dias (1 a 14) e devolver os dias com horário. Padrão 1 (só a data)."},"servico":{"type":"string","description":"Nome ou id do serviço (define a duração e quem faz)."},"profissional":{"type":"string","description":"Nome ou id do profissional. Sem ele, qualquer um que faça o serviço."},"contato_id":{"type":"string"},"telefone":{"type":"string","description":"Opcional: usa a unidade deste contato."},"unidade":{"type":"string","description":"Nome da unidade (só para empresas com várias unidades). Sem ela, o padrão da empresa."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/ver_configuracao_agenda":{"post":{"operationId":"ver_configuracao_agenda","summary":"Ver configuração da Agenda","description":"Mostra como a Agenda está configurada: serviços (duração e quem faz), profissionais (ativos e horário próprio), horário de atendimento da unidade, regras (intervalo entre horários, antecedência, dias abertos, confirmar sozinho, cliente remarca sozinho), lembrete automático e bloqueios dos próximos 30 dias.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"unidade":{"type":"string","description":"Nome da unidade (só para empresas com várias unidades). Sem ela, o padrão da empresa."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/agendar":{"post":{"operationId":"agendar","summary":"Agendar horário","description":"Marca um horário na Agenda para um contato: data, hora exata (ou só o período manhã/tarde/noite), serviço, profissional e observação. Confere se o horário está livre no expediente do profissional; sem profissional, escolhe um livre que faça o serviço. Nasce confirmado (ou 'a confirmar', se pedido). Não manda mensagem ao cliente.","tags":["Escrita"],"x-permissao":"write","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"contato_id":{"type":"string"},"telefone":{"type":"string","description":"Telefone do contato (se não tiver o id)."},"data":{"type":"string","description":"AAAA-MM-DD, DD/MM, hoje ou amanhã."},"hora":{"type":"string","description":"HH:MM. Sem hora, informe o período."},"periodo":{"type":"string","enum":["manha","tarde","noite"],"description":"Quando não há hora exata."},"servico":{"type":"string","description":"Nome ou id do serviço cadastrado (ou um texto livre, se não houver serviços)."},"profissional":{"type":"string","description":"Nome ou id do profissional (opcional)."},"observacao":{"type":"string"},"status":{"type":"string","enum":["confirmado","a_confirmar"],"description":"Padrão: confirmado."},"fora_do_expediente":{"type":"boolean","description":"true = marcar mesmo fora do expediente ou de bloqueio (só se a pessoa pediu). Choque com outro cliente nunca é permitido."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/alterar_agendamento":{"post":{"operationId":"alterar_agendamento","summary":"Alterar agendamento","description":"Muda um agendamento da Agenda: confirmar, cancelar, marcar como atendido ou falta, voltar para pedido, remarcar (nova data, hora ou período, conferindo se está livre) ou editar serviço, profissional, duração e observação. Remarcar zera o lembrete para sair de novo. Não manda mensagem ao cliente. Use o id que vem de ver_agenda.","tags":["Escrita"],"x-permissao":"write","x-destrutiva":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["agendamento_id","acao"],"properties":{"agendamento_id":{"type":"string"},"acao":{"type":"string","enum":["confirmar","cancelar","marcar_atendido","marcar_falta","voltar_para_pedido","remarcar","editar"]},"data":{"type":"string","description":"Remarcar: nova data (AAAA-MM-DD, DD/MM, hoje, amanhã). Sem ela, mantém o dia."},"hora":{"type":"string","description":"Remarcar: nova hora HH:MM."},"periodo":{"type":"string","enum":["manha","tarde","noite"],"description":"Remarcar sem hora exata."},"servico":{"type":"string"},"profissional":{"type":"string"},"duracao_min":{"type":"integer","description":"Editar: duração em minutos (5 a 720)."},"observacao":{"type":"string"},"fora_do_expediente":{"type":"boolean","description":"Remarcar mesmo fora do expediente ou de bloqueio (só se a pessoa pediu)."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/salvar_servico":{"post":{"operationId":"salvar_servico","summary":"Criar ou editar serviço da Agenda","description":"Cria um serviço da Agenda ou edita um existente (pelo id ou nome): nome, duração em minutos, ativo/inativo e quais profissionais fazem (substitui a lista; vazio = qualquer profissional). Desativar tira o serviço do formulário sem apagar o histórico.","tags":["Escrita"],"x-permissao":"write","x-destrutiva":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"servico":{"type":"string","description":"Id ou nome do serviço a editar. Sem ele, cria um novo."},"nome":{"type":"string","description":"Nome (até 60 caracteres). Obrigatório ao criar."},"duracao_min":{"type":"integer","description":"5 a 720. Padrão 30 ao criar."},"ativo":{"type":"boolean"},"profissionais":{"type":"array","items":{"type":"string"},"description":"Nomes ou ids de quem faz. [] = qualquer profissional."},"unidade":{"type":"string","description":"Nome da unidade (só para empresas com várias unidades). Sem ela, o padrão da empresa."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/salvar_profissional":{"post":{"operationId":"salvar_profissional","summary":"Criar ou editar profissional da Agenda","description":"Cria um profissional da Agenda ou edita um existente (pelo id ou nome): nome, ativo/inativo, horário próprio por dia da semana (ou usar o da unidade) e quais serviços faz (substitui a lista). Desativar tira dos horários livres sem apagar o histórico.","tags":["Escrita"],"x-permissao":"write","x-destrutiva":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"profissional":{"type":"string","description":"Id ou nome a editar. Sem ele, cria um novo."},"nome":{"type":"string","description":"Até 60 caracteres. Obrigatório ao criar."},"ativo":{"type":"boolean"},"horarios":{"type":"object","description":"Horário próprio, só os dias informados mudam. Ex.: {\"segunda\": \"09:00-12:00, 14:00-18:00\", \"sábado\": \"fechado\"}."},"usar_horario_da_unidade":{"type":"boolean","description":"true = apaga o horário próprio e segue o da unidade."},"servicos":{"type":"array","items":{"type":"string"},"description":"Nomes ou ids dos serviços que faz."},"unidade":{"type":"string","description":"Nome da unidade (só para empresas com várias unidades). Sem ela, o padrão da empresa."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/bloquear_agenda":{"post":{"operationId":"bloquear_agenda","summary":"Bloquear horários da Agenda","description":"Cria ou remove um bloqueio na Agenda (folga, feriado, almoço, manutenção): de um profissional ou da unidade inteira, com início, fim e motivo. O bloqueio tira o período dos horários livres; agendamentos que já existiam nele continuam e são listados para a pessoa decidir.","tags":["Escrita"],"x-permissao":"write","x-destrutiva":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["acao"],"properties":{"acao":{"type":"string","enum":["criar","remover"]},"inicio":{"type":"string","description":"Criar: \"AAAA-MM-DD HH:MM\"."},"fim":{"type":"string","description":"Criar: \"AAAA-MM-DD HH:MM\"."},"dia_inteiro":{"type":"string","description":"Criar: atalho para bloquear um dia inteiro (AAAA-MM-DD, DD/MM, hoje, amanhã)."},"profissional":{"type":"string","description":"Nome ou id. Sem ele, bloqueia a unidade inteira."},"motivo":{"type":"string"},"bloqueio_id":{"type":"string","description":"Remover: id do bloqueio (vem de ver_configuracao_agenda)."},"unidade":{"type":"string","description":"Nome da unidade (só para empresas com várias unidades). Sem ela, o padrão da empresa."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/configurar_agenda":{"post":{"operationId":"configurar_agenda","summary":"Configurar a Agenda","description":"Muda a configuração da Agenda: horário de atendimento da unidade por dia da semana, intervalo entre horários, antecedência mínima, quantos dias a agenda fica aberta, confirmar sozinho, cliente remarca e cancela sozinho (e com quantas horas de antecedência) e o lembrete automático (ligar/desligar, horas antes e template aprovado). Só muda o que for informado.","tags":["Escrita"],"x-permissao":"write","x-destrutiva":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"horarios":{"type":"object","description":"Só os dias informados mudam. Ex.: {\"segunda\": \"09:00-18:00\", \"sábado\": \"09:00-13:00\", \"domingo\": \"fechado\"}."},"intervalo_entre_horarios_min":{"type":"integer","enum":[10,15,20,30,45,60,90,120]},"antecedencia_minima_min":{"type":"integer","description":"0 a 10080 minutos."},"agenda_aberta_proximos_dias":{"type":"integer","description":"1 a 180."},"confirmar_sozinho":{"type":"boolean"},"cliente_remarca_e_cancela_sozinho":{"type":"boolean"},"antecedencia_para_cliente_mudar_h":{"type":"integer","description":"0 a 168 horas."},"lembrete_ligado":{"type":"boolean"},"lembrete_horas_antes":{"type":"integer","description":"1 a 72."},"lembrete_template":{"type":"string","description":"Nome do template aprovado (ex.: lembrete_agendamento)."},"unidade":{"type":"string","description":"Nome da unidade (só para empresas com várias unidades). Sem ela, o padrão da empresa."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/listar_webinars":{"post":{"operationId":"listar_webinars","summary":"Listar webinars","description":"Lista os webinars perpétuos da conta com status, vídeo, horários das sessões, próxima sessão, oferta, a automação de inscrição ligada e os números dos últimos 30 dias (inscritos, entraram, chegaram à oferta, clicaram na oferta, tempo médio assistido). Não conta links de teste.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"dias":{"type":"integer","enum":[7,30,90],"description":"Período dos números. Padrão 30."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/salvar_webinar":{"post":{"operationId":"salvar_webinar","summary":"Criar ou editar webinar","description":"Cria um webinar perpétuo ou edita um existente (pelo id ou nome): nome interno, título na página, link do vídeo (YouTube, Vimeo, Panda, VTurb, Bunny ou Wistia), duração, quando a oferta aparece, link de compra e texto do botão, horários das sessões, dias da semana, antecedência mínima e status (ativo ou pausado). Pausar para novas inscrições sem quebrar os links já enviados.","tags":["Escrita"],"x-permissao":"write","x-destrutiva":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"webinar":{"type":"string","description":"Id ou nome do webinar a editar. Sem ele, cria um novo."},"nome":{"type":"string","description":"Nome interno (só a equipe vê), até 120 caracteres. Obrigatório ao criar."},"titulo_na_pagina":{"type":"string","description":"Título que o inscrito vê, até 160."},"link_do_video":{"type":"string","description":"Link do vídeo. Obrigatório ao criar."},"duracao":{"type":"string","description":"Duração do vídeo: \"45:00\", \"1:05:30\" ou \"45 min\" (1 min a 6 h). Obrigatório ao criar."},"oferta_aparece_em":{"type":"string","description":"Momento do vídeo em que a oferta aparece (\"38:00\"). Vazio = sem oferta."},"link_de_compra":{"type":"string","description":"https://... (obrigatório com oferta)."},"texto_do_botao":{"type":"string","description":"Até 60 caracteres. Padrão: Quero garantir minha vaga."},"horarios":{"type":"array","items":{"type":"string"},"description":"Horários das sessões HH:MM, ex.: [\"12:00\", \"20:00\"]. Obrigatório ao criar."},"dias":{"type":"array","items":{"type":"string"},"description":"Dias da semana (ex.: [\"segunda\", \"quarta\"]). [] = todos os dias."},"antecedencia_minima_min":{"type":"integer","description":"0 a 1440. Padrão 10."},"status":{"type":"string","enum":["ativo","pausado"]}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/criar_automacao_webinar":{"post":{"operationId":"criar_automacao_webinar","summary":"Criar automação do webinar","description":"Cria, em rascunho, a automação completa de um webinar perpétuo (a mesma do botão do painel): quem manda a palavra-chave no WhatsApp é inscrito na próxima sessão e recebe o link pessoal, lembretes 1 dia antes, 10 minutos antes e na hora, e depois uma mensagem diferente para quem não entrou, assistiu pouco ou viu a oferta. Os textos podem ser revisados no painel antes de ativar.","tags":["Escrita"],"x-permissao":"write","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["webinar"],"properties":{"webinar":{"type":"string","description":"Id ou nome do webinar."},"palavra_chave":{"type":"string","description":"Palavra que inscreve (padrão \"webinar\")."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/link_de_teste_webinar":{"post":{"operationId":"link_de_teste_webinar","summary":"Link de teste do webinar","description":"Gera um link de teste da sala do webinar que começa em poucos minutos, para ver a página, a contagem regressiva, o vídeo e a oferta como o inscrito vê. Não conta nos números e não manda mensagem a ninguém.","tags":["Escrita"],"x-permissao":"write","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["webinar"],"properties":{"webinar":{"type":"string","description":"Id ou nome do webinar."},"comeca_em_minutos":{"type":"integer","description":"0 a 60. Padrão 1."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/questionario_agente_ia":{"post":{"operationId":"questionario_agente_ia","summary":"Questionário do agente de atendimento","description":"Primeiro passo para montar ou refazer o agente de IA que atende os clientes da empresa (o atendente virtual do WhatsApp, Instagram e Messenger). Lê o agente atual, o catálogo da loja conectada e perguntas recentes dos clientes, e devolve um questionário numerado pronto. Mande o questionário inteiro numa mensagem só (troque [SUGESTOES_FAQ] por 2 a 4 temas tirados de perguntas_dos_clientes, em poucas palavras, ou apague se não houver). Depois espere a resposta e chame salvar_agente_ia. Para um ajuste pontual num agente que a Sendy já montou (ex.: mudou o frete), não precisa do questionário: chame salvar_agente_ia só com o campo que mudou.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"numero":{"type":"string","description":"Número do WhatsApp (final ou nome) quando a empresa quer um agente diferente por número. Sem isso: o agente padrão da empresa."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/salvar_agente_ia":{"post":{"operationId":"salvar_agente_ia","summary":"Montar o agente de atendimento (rascunho)","description":"Monta o agente de atendimento num RASCUNHO a partir das respostas do dono ao questionário (todas juntas, em qualquer ordem ou formato). Não liga nem muda o agente que está no ar. Organize a resposta do dono nos campos; use as palavras dele, sem inventar nada que ele não disse. Campo não respondido: não envie. Chamadas seguintes juntam com o rascunho (só o que vier muda). Se 'faltando' vier com itens importantes, pergunte tudo de uma vez numa mensagem só, uma única vez; se ele não souber, siga assim mesmo. Depois ofereça testar (testar_agente_ia) e, para colocar no ar, ativar_agente_ia com a confirmação dele.","tags":["Escrita"],"x-permissao":"write","x-destrutiva":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"numero":{"type":"string","description":"Mesmo número usado no questionário (se houver)."},"nome_agente":{"type":"string"},"o_que_vende":{"type":"string"},"publico":{"type":"string","description":"Para quem vende e região."},"tom":{"type":"string","enum":["amigavel","profissional","formal"]},"emojis":{"type":"boolean"},"horario":{"type":"string"},"entrega":{"type":"string"},"pagamento":{"type":"string"},"trocas":{"type":"string"},"quando_chamar_equipe":{"type":"string"},"nunca_fazer":{"type":"string"},"promocoes":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"perguntas_frequentes":{"type":"array","items":{"type":"object","properties":{"pergunta":{"type":"string"},"resposta":{"type":"string"}},"required":["pergunta","resposta"]}},"outras_informacoes":{"type":"string"},"usar_catalogo":{"type":"boolean","description":"Usar o catálogo da loja conectada nas respostas (padrão: sim, se houver loja)."},"tamanho_resposta":{"type":"string","enum":["curta","equilibrada","detalhada"]}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/testar_agente_ia":{"post":{"operationId":"testar_agente_ia","summary":"Testar o agente de atendimento","description":"Mostra como o agente responderia mensagens de cliente, usando o rascunho (ou o agente no ar, se não houver rascunho). Não envia nada a ninguém. Mostre ao dono as perguntas e as respostas como vieram.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"numero":{"type":"string"},"perguntas":{"type":"array","items":{"type":"string"},"description":"De 1 a 4 mensagens de cliente, cada uma testada separada."}},"required":["perguntas"]}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/ativar_agente_ia":{"post":{"operationId":"ativar_agente_ia","summary":"Colocar o agente de atendimento no ar","description":"Grava o rascunho no agente de atendimento e liga (ou só grava, com ligar=false). Os clientes passam a ser atendidos por ele. Primeiro chame sem 'confirmar' para mostrar o resumo ao dono; só chame com confirmar=true depois de um sim claro dele nesta conversa. As instruções anteriores ficam guardadas para voltar. Para desligar o agente, use ligar=false sem rascunho.","tags":["Escrita"],"x-permissao":"write","x-destrutiva":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"numero":{"type":"string"},"ligar":{"type":"boolean","description":"true (padrão) liga o agente; false grava sem ligar, ou desliga se não houver rascunho."},"confirmar":{"type":"boolean","description":"true só depois do sim do dono."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/avisar_agente_ia":{"post":{"operationId":"avisar_agente_ia","summary":"Avisar o agente de atendimento","description":"Dá ao agente de atendimento um aviso passageiro que ele passa a usar na hora com os clientes (horário diferente, promoção, produto em falta, feriado), sem mexer nas instruções do agente. Escreva o texto como fato, com datas absolutas (\"Domingo 26/10 a loja fecha às 14h\", não \"amanhã\"). Em 'ate', quando o aviso deixa de valer; sem data só com sem_prazo=true. Mudança permanente (endereço novo, preço fixo) é ajuste do agente, não aviso.","tags":["Escrita"],"x-permissao":"write","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"texto":{"type":"string","description":"O aviso, de 3 a 500 caracteres."},"ate":{"type":"string","description":"AAAA-MM-DD (vale até o fim do dia) ou AAAA-MM-DDTHH:MM, horário de Brasília."},"sem_prazo":{"type":"boolean","description":"true: vale até remover."},"numero":{"type":"string","description":"Só para um número; vazio vale para todos (e Instagram/Messenger)."}},"required":["texto"]}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/avisos_do_agente_ia":{"post":{"operationId":"avisos_do_agente_ia","summary":"Ver os avisos do agente","description":"Lista os avisos passageiros em vigor no agente de atendimento, com id, para quem valem e até quando.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/remover_aviso_agente_ia":{"post":{"operationId":"remover_aviso_agente_ia","summary":"Remover aviso do agente","description":"Tira avisos do agente de atendimento antes do prazo (pelos ids de avisos_do_agente_ia, ou todos=true). O agente deixa de usá-los na hora.","tags":["Escrita"],"x-permissao":"write","x-destrutiva":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}},"todos":{"type":"boolean","description":"true remove todos os avisos em vigor."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/listar_links_whatsapp":{"post":{"operationId":"listar_links_whatsapp","summary":"Listar links do WhatsApp","description":"Links curtos de WhatsApp da empresa (app.onesendz.com/wa/...), com mensagem pronta, automação que iniciam, números e cliques. Use antes de criar um link novo para não duplicar, ou quando perguntarem quantos cliques um link teve.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/criar_link_whatsapp":{"post":{"operationId":"criar_link_whatsapp","summary":"Criar link do WhatsApp","description":"Cria um link curto de WhatsApp (app.onesendz.com/wa/...) com mensagem pronta, para bio do Instagram, anúncio, site ou QR code impresso, e conta os cliques. Com 'automacao' (gatilho Mensagem WhatsApp recebida), a mensagem sai com a palavra-chave e quem clicar e enviar já recebe o fluxo; a ferramenta confere se dispara mesmo. Sem 'mensagem', usa a sugerida. 1 número por link em qualquer plano; vários números se revezando, do Plus em diante. O QR code se baixa no painel (link 'painel').","tags":["Escrita"],"x-permissao":"write","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"automacao":{"type":"string","description":"Nome da automação que o link inicia (opcional)."},"automacao_id":{"type":"string"},"mensagem":{"type":"string","description":"Mensagem pronta que a pessoa envia ao abrir o WhatsApp (até 500). Com automação, precisa ter a palavra-chave; sem ela, usa a sugerida."},"nome":{"type":"string","description":"Nome interno do link (ex.: Bio do Instagram). Padrão: nome da automação."},"endereco":{"type":"string","description":"Final do link (letras minúsculas, números e hífen, 3 a 40). Só passe se a pessoa pediu um endereço; vazio = nome da empresa + palavra-chave (ex.: loja-da-bruna-e-book), que não colide com outras contas."},"numeros":{"type":"array","items":{"type":"string"},"description":"Números do link (final do telefone ou nome). Padrão: o do gatilho da automação ou o primeiro número conectado."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/ideias_de_conteudo":{"post":{"operationId":"ideias_de_conteudo","summary":"Ideias de conteúdo para as redes","description":"Plano Plus em diante. Ideias de posts e stories (imagem) para as redes sociais do negócio, tiradas do que os clientes falaram no WhatsApp no período (dúvidas, objeções, produtos mais pedidos). Cada ideia vem com gancho, legenda pronta e a arte para baixar (post, story ou carrossel de imagens). Não faz vídeo nem reels: não ofereça. Para a imagem pronta de uma ideia no WhatsApp, use arte_de_conteudo com o conteudo_id e o número.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"periodo_dias":{"type":"number","description":"7 a 60. Padrão 30."},"quantidade":{"type":"number","description":"3 a 8 ideias. Padrão 5."},"foco":{"type":"string","description":"Opcional: um produto, uma data ou um tema para puxar as ideias."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/arte_de_conteudo":{"post":{"operationId":"arte_de_conteudo","summary":"Arte de uma ideia de conteúdo","description":"A arte pronta (imagem) de uma ideia gerada por ideias_de_conteudo, com a logo, a cor e o nome do negócio: post (4:5) ou story (9:16). Leva a assinatura 'Feito com a Sendy da OneSendz' conforme assinatura_das_artes. Carrossel no WhatsApp: cada imagem é uma mensagem, e as imagens além da primeira contam 1 pedido da IA cada (no painel não contam).","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["conteudo_id","numero"],"properties":{"conteudo_id":{"type":"string"},"numero":{"type":"number","description":"Número da ideia (1 a 8)."},"formato":{"type":"string","enum":["post","story"],"description":"Padrão: o formato da ideia. Ideia de carrossel sai sempre com todas as imagens do carrossel."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/assinatura_das_artes":{"post":{"operationId":"assinatura_das_artes","summary":"Assinatura nas artes de conteúdo","description":"Liga ou tira a assinatura 'Feito com a Sendy da OneSendz' das artes de conteúdo da empresa (vale para as próximas artes). Vem ligada por padrão e dá para tirar; no teste grátis ela fica até a assinatura começar. Sem 'mostrar', só diz como está.","tags":["Escrita"],"x-permissao":"write","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"mostrar":{"type":"boolean","description":"true = com assinatura; false = sem assinatura."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/planos_para_crescer":{"post":{"operationId":"planos_para_crescer","summary":"Planos para crescer","description":"Mostra o plano atual, os planos acima com preço e o que cada um libera (contatos, números de WhatsApp, unidades, pedidos da IA por mês, recursos) e como mudar de plano nesta conta. Use quando a empresa bate num limite, pede mais de algo ou pergunta o que outro plano tem. Em 'precisa', diga o que falta para receber o plano mais barato que resolve.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"precisa":{"type":"object","description":"O que a empresa precisa ter (opcional).","properties":{"contatos":{"type":"number"},"numeros":{"type":"number"},"unidades":{"type":"number"},"pedidos_ia":{"type":"number"},"recurso":{"type":"string","enum":["webinar","agenda","rodizio","conteudo","call_implementacao","prioridade_suporte"]}}}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/comprar_pedidos_ia":{"post":{"operationId":"comprar_pedidos_ia","summary":"Comprar pedidos da IA Sendy","description":"Gera o link de pagamento do pacote de pedidos extras da IA Sendy (pagamento único, os pedidos acumulam e não vencem). Só gera o link: quem paga é a pessoa, na página de pagamento. Mande o link como veio.","tags":["Escrita"],"x-permissao":"write","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/preparar_mensagem":{"post":{"operationId":"preparar_mensagem","summary":"Preparar mensagem de WhatsApp","description":"Prepara uma mensagem de texto para um contato que falou com a empresa nas últimas 24 h (regra do WhatsApp). NÃO envia: devolve um resumo e um confirmacao_id. Fora das 24 h o WhatsApp só aceita template.","tags":["Envio"],"x-permissao":"send","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["texto"],"properties":{"contato_id":{"type":"string"},"telefone":{"type":"string"},"texto":{"type":"string","description":"Texto da mensagem (até 4.000 caracteres)."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/preparar_template":{"post":{"operationId":"preparar_template","summary":"Preparar template de WhatsApp","description":"Use só um template cujo texto diga o que foi pedido; se nenhum servir, NÃO chame esta ferramenta: explique e ofereça criar um. Prepara o envio de um template aprovado para um contato (serve mesmo fora das 24 h). NÃO envia: devolve um resumo e um confirmacao_id. Templates com imagem/vídeo/documento no cabeçalho ou botão com link variável: envie pelo painel.","tags":["Envio"],"x-permissao":"send","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["template"],"properties":{"contato_id":{"type":"string"},"telefone":{"type":"string"},"template":{"type":"string","description":"Nome do template aprovado."},"variaveis":{"type":"array","items":{"type":"string"},"description":"Valores de {{1}}, {{2}}... na ordem."},"numero_id":{"type":"string","description":"Por qual número (opcional se houver um só)."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/preparar_cobranca_pix":{"post":{"operationId":"preparar_cobranca_pix","summary":"Preparar cobrança Pix no WhatsApp","description":"Prepara uma cobrança por Pix para um contato que falou com a empresa nas últimas 24 h: ele recebe no WhatsApp o resumo (o que está sendo cobrado e o valor) e um botão para copiar o Pix copia e cola. NÃO envia: devolve um resumo e um confirmacao_id (depois, confirmar_envio). Precisa da chave Pix da empresa cadastrada; se não tiver, a resposta explica como cadastrar. Só existe no WhatsApp e só no Brasil (reais).","tags":["Envio"],"x-permissao":"send","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["valor","descricao"],"properties":{"contato_id":{"type":"string"},"telefone":{"type":"string"},"valor":{"type":"string","description":"Valor em reais, ex.: \"150,00\"."},"descricao":{"type":"string","description":"O que está sendo cobrado (até 60 caracteres), ex.: \"Vestido midi floral\"."},"mensagem":{"type":"string","description":"Texto que acompanha a cobrança (opcional)."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/ver_cobrancas_pix":{"post":{"operationId":"ver_cobrancas_pix","summary":"Ver cobranças Pix","description":"Mostra se a empresa já cadastrou a chave Pix (e, se não, como cadastrar) e as cobranças Pix enviadas no WhatsApp, com status: pendente (aguardando pagamento), pago, cancelado ou falhou. Filtra por status ou por contato.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["pendente","pago","cancelado","falhou"]},"contato_id":{"type":"string"},"telefone":{"type":"string"},"limite":{"type":"number","description":"Quantas mostrar (até 50, padrão 20)."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/marcar_cobranca_pix":{"post":{"operationId":"marcar_cobranca_pix","summary":"Marcar cobrança Pix como paga ou cancelada","description":"Marca uma cobrança Pix pendente como paga ou cancelada. Com a conversa aberta (24 h), o cliente recebe no WhatsApp a atualização (pago aparece com o selo de pago). SÓ chame depois que a pessoa disser com clareza que o pagamento caiu (ou que quer cancelar): o WhatsApp não confirma pagamento sozinho. Pegue o cobranca_id em ver_cobrancas_pix.","tags":["Envio"],"x-permissao":"send","x-destrutiva":true,"x-conta-no-limite-de-envios":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["cobranca_id","acao"],"properties":{"cobranca_id":{"type":"string"},"acao":{"type":"string","enum":["pago","cancelado"]}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/confirmar_envio":{"post":{"operationId":"confirmar_envio","summary":"Confirmar envio","description":"Envia de verdade a mensagem ou o template preparado identificado pelo confirmacao_id. Cada confirmacao_id vale uma vez, por 10 minutos.","tags":["Envio"],"x-permissao":"send","x-destrutiva":true,"x-conta-no-limite-de-envios":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["confirmacao_id"],"properties":{"confirmacao_id":{"type":"string"}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/quem_sou":{"post":{"operationId":"quem_sou","summary":"Conta e conexão","description":"Mostra a conta do OneSendz desta conexão (id, nome e plano), a conexão (app, permissões, unidade) e quem autorizou.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/limites_do_plano":{"post":{"operationId":"limites_do_plano","summary":"Limites do plano","description":"Mostra o plano da empresa e quanto já foi usado de cada limite: contatos guardados, usuários (com convites pendentes), unidades, números de WhatsApp conectados (com o limite do plano), pedidos da IA Sendy no mês, saldo de créditos de SMS/RCS/Voz e quais recursos o plano inclui (Webinar, Agenda, Rodízio). Use quando perguntarem quantos contatos/usuários cabem, se estão perto do limite ou o que o plano tem.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/listar_atendentes":{"post":{"operationId":"listar_atendentes","summary":"Listar atendentes","description":"Lista as pessoas da equipe que podem atender conversas: id, nome, e-mail, papel e unidades.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/atribuir_conversa":{"post":{"operationId":"atribuir_conversa","summary":"Atribuir conversa a um atendente","description":"Define quem atende a conversa (a pessoa passa a ver a conversa como dela no Inbox) ou tira o atendente. Conversa por \"conversa_id\" ou pela mais recente do contato (\"contato_id\" ou \"telefone\"); atendente por \"atendente_id\" ou \"atendente_email\". Exige chave criada por admin ou gerente.","tags":["Escrita"],"x-permissao":"write","x-destrutiva":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"conversa_id":{"type":"string"},"contato_id":{"type":"string"},"telefone":{"type":"string"},"atendente_id":{"type":"string"},"atendente_email":{"type":"string"},"remover_atendente":{"type":"boolean","description":"true para deixar a conversa sem atendente."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/criar_webhook":{"post":{"operationId":"criar_webhook","summary":"Cadastrar webhook","description":"Cadastra um endereço https que recebe um aviso (POST JSON assinado) a cada evento escolhido. Eventos: mensagem.recebida (o cliente escreveu), conversa.atribuida (a conversa ganhou um atendente), conversa.pediu_atendente (a IA ou o robô passou para humano), conversa.encerrada (marcada como resolvida), contato.criado, contato.etiqueta_adicionada, lead.qualificado (a IA levantou os dados do lead na conversa), mensagem.entregue, mensagem.lida e mensagem.falhou (status de uma mensagem enviada; a falha vem com o motivo e como resolver). Devolve o segredo de assinatura UMA vez. Cada aviso traz X-OneSendz-Event, X-OneSendz-Event-Id (use para não processar duas vezes), X-OneSendz-Timestamp e X-OneSendz-Signature = \"sha256=\" + HMAC-SHA256(segredo, timestamp + \".\" + corpo). Responda 2xx em até 10 s; sem 2xx, o aviso é reenviado em 1, 5, 15 e 60 min, 3, 6 e 12 h. Responder 410 desliga o endereço.","tags":["Escrita"],"x-permissao":"write","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["url","eventos"],"properties":{"url":{"type":"string","description":"Endereço https que recebe os avisos."},"eventos":{"type":"array","items":{"type":"string","enum":["mensagem.recebida","conversa.atribuida","conversa.pediu_atendente","conversa.encerrada","contato.criado","contato.etiqueta_adicionada","lead.qualificado","mensagem.entregue","mensagem.lida","mensagem.falhou"]},"description":"Eventos assinados."},"descricao":{"type":"string","description":"Nome para reconhecer depois (ex.: bioerp produção)."},"resumo_ia":{"type":"boolean","description":"true: o aviso conversa.encerrada leva resumo_ia, um resumo do atendimento em até 5 linhas feito pela IA."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/listar_webhooks":{"post":{"operationId":"listar_webhooks","summary":"Listar webhooks","description":"Lista os webhooks cadastrados, se estão ativos (e por que foram desligados), o último envio e as entregas das últimas 24 h.","tags":["Leitura"],"x-permissao":"read","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/testar_webhook":{"post":{"operationId":"testar_webhook","summary":"Testar webhook","description":"Manda na hora um aviso de teste (evento \"teste\") e devolve a resposta do endereço. Se o webhook foi desligado por falhas e o teste der certo, ele volta a funcionar.","tags":["Escrita"],"x-permissao":"write","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["webhook_id"],"properties":{"webhook_id":{"type":"string"}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/remover_webhook":{"post":{"operationId":"remover_webhook","summary":"Remover webhook","description":"Remove um webhook. Os avisos que ainda estavam na fila para ele são descartados.","tags":["Escrita"],"x-permissao":"write","x-destrutiva":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["webhook_id"],"properties":{"webhook_id":{"type":"string"}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/enviar_template":{"post":{"operationId":"enviar_template","summary":"Enviar template (sistema)","description":"Envia um template aprovado para um contato numa chamada só, para sistemas integrados (CRM, ERP). Mesmas regras de preparar_template. \"chave_idempotencia\" é obrigatória: repetir o pedido com a mesma chave devolve o mesmo resultado e não envia de novo.","tags":["Envio"],"x-permissao":"send","x-destrutiva":true,"x-conta-no-limite-de-envios":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["template","chave_idempotencia"],"properties":{"contato_id":{"type":"string"},"telefone":{"type":"string"},"template":{"type":"string","description":"Nome do template aprovado."},"variaveis":{"type":"array","items":{"type":"string"},"description":"Valores de {{1}}, {{2}}... na ordem."},"numero_id":{"type":"string","description":"Por qual número (opcional se houver um só)."},"id_externo":{"type":"string","description":"Contato pelo código no seu CRM (alternativa a contato_id e telefone)."},"chave_idempotencia":{"type":"string","description":"Identificador único do envio no seu sistema (8 a 200 caracteres)."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/enviar_mensagem":{"post":{"operationId":"enviar_mensagem","summary":"Enviar mensagem (sistema)","description":"Envia texto livre para um contato que falou com a empresa nas últimas 24 h (regra do WhatsApp), numa chamada só, para sistemas integrados. \"chave_idempotencia\" é obrigatória: repetir o pedido com a mesma chave devolve o mesmo resultado e não envia de novo.","tags":["Envio"],"x-permissao":"send","x-destrutiva":true,"x-conta-no-limite-de-envios":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["texto","chave_idempotencia"],"properties":{"contato_id":{"type":"string"},"telefone":{"type":"string"},"texto":{"type":"string","description":"Texto da mensagem (até 4.000 caracteres)."},"id_externo":{"type":"string","description":"Contato pelo código no seu CRM (alternativa a contato_id e telefone)."},"chave_idempotencia":{"type":"string","description":"Identificador único do envio no seu sistema (8 a 200 caracteres)."}}}}}},"responses":{"200":{"description":"Sucesso. Com chave de teste vem também modo: \"teste\" (e o cabeçalho X-OneSendz-Modo: teste).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"modo":{"type":"string","enum":["teste"]},"dados":{"type":"object"}},"required":["ok","dados"]}}}},"400":{"description":"Parâmetro faltando ou inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Chave ausente, inválida ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"403":{"description":"Sem permissão (escopo da chave, plano ou papel de quem criou a chave).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Não encontrado (contato, conversa, template...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Limite atingido: por minuto, por dia ou tope de envios da chave. A mensagem diz quando volta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}}},"components":{"securitySchemes":{"chave":{"type":"http","scheme":"bearer","description":"osz_... (produção) ou oszt_... (teste)"}},"schemas":{"Erro":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"erro":{"type":"object","properties":{"codigo":{"type":"string"},"mensagem":{"type":"string","description":"Em português, com o que fazer."}},"required":["codigo","mensagem"]}},"required":["ok","erro"]}}}}