{"openapi":"3.0.0","paths":{"/v1/entrypoints":{"get":{"operationId":"entrypoints_getAll_v1","parameters":[{"name":"platform","required":false,"in":"query","description":"Filtrar por plataforma","schema":{"enum":["whatsapp","whatsapp_lite","instagram","telegram"],"type":"string"}}],"responses":{"200":{"description":"Lista de entrypoints retornada com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetAllEntrypointsResponseSchema_Output"}}}},"400":{"description":"- `VALIDATION_ERROR` (400): Corpo, query ou parâmetros não passaram na validação de schema.\n- `PLATFORM_UNSUPPORTED` (400): Valor de filtro `platform` inválido ou não suportado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"VALIDATION_ERROR":{"value":{"statusCode":400,"code":"VALIDATION_ERROR","message":"Dados da requisição inválidos."}},"PLATFORM_UNSUPPORTED":{"value":{"statusCode":400,"code":"PLATFORM_UNSUPPORTED","message":"Plataforma não suportada."}}}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Lista todos os entrypoints configurados.","tags":["Entrypoints"]}},"/v1/entrypoints/{id}":{"get":{"operationId":"entrypoints_getById_v1","parameters":[{"name":"id","required":true,"in":"path","description":"ID do entrypoint","schema":{"type":"string"}}],"responses":{"200":{"description":"Entrypoint retornado com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetEntrypointByIdResponseSchema_Output"}}}},"400":{"description":"- `VALIDATION_ERROR` (400): Corpo, query ou parâmetros não passaram na validação de schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"VALIDATION_ERROR":{"value":{"statusCode":400,"code":"VALIDATION_ERROR","message":"Dados da requisição inválidos."}}}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.\n- `RESOURCE_ACCESS_DENIED` (403): O recurso pertence a outro tenant ou a chave não tem escopo para lê-lo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}},"RESOURCE_ACCESS_DENIED":{"value":{"statusCode":403,"code":"RESOURCE_ACCESS_DENIED","message":"Você não tem permissão para acessar este recurso."}}}}}},"404":{"description":"- `ENTRYPOINT_NOT_FOUND` (404): Nenhum entrypoint com o ID informado foi encontrado para o tenant autenticado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"ENTRYPOINT_NOT_FOUND":{"value":{"statusCode":404,"code":"ENTRYPOINT_NOT_FOUND","message":"Ponto de entrada não encontrado."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Obtém um entrypoint por ID.","tags":["Entrypoints"]}},"/v1/forms/{id}/embed-frame-policy":{"get":{"description":"Consulta independente da definição completa: retorna apenas origens HTTPS permitidas para incorporar o formulário (e telas de erro) em iframe. Não exige formulário ativo.","operationId":"forms_getEmbedFramePolicy_v1","parameters":[{"name":"id","required":true,"in":"path","description":"ID público do formulário (16 caracteres)","schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de origens HTTPS permitidas (vazia = sem restrição por origem).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetFormEmbedFramePolicyResponseSchema_Output"}}}},"400":{"description":"- `VALIDATION_ERROR` (400): Corpo, query ou parâmetros não passaram na validação de schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"VALIDATION_ERROR":{"value":{"statusCode":400,"code":"VALIDATION_ERROR","message":"Dados da requisição inválidos."}}}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"API Key não autorizada a acessar este recurso."},"404":{"description":"- `FORM_NOT_FOUND` (404): Nenhum formulário com o ID público informado foi encontrado para o tenant autenticado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"FORM_NOT_FOUND":{"value":{"statusCode":404,"code":"FORM_NOT_FOUND","message":"Formulário não encontrado."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Obtém política de iframe do formulário","tags":["Forms"]}},"/v1/forms/{id}":{"get":{"operationId":"forms_getById_v1","parameters":[{"name":"id","required":true,"in":"path","description":"ID público do formulário (16 caracteres)","schema":{"type":"string"}}],"responses":{"200":{"description":"Definição do formulário","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetFormByIdResponseSchema_Output"}}}},"400":{"description":"- `VALIDATION_ERROR` (400): Corpo, query ou parâmetros não passaram na validação de schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"VALIDATION_ERROR":{"value":{"statusCode":400,"code":"VALIDATION_ERROR","message":"Dados da requisição inválidos."}}}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `FORM_INACTIVE` (403): O formulário existe, mas está desativado e não pode ser exibido nem receber envios.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"FORM_INACTIVE":{"value":{"statusCode":403,"code":"FORM_INACTIVE","message":"Este formulário está desativado."}}}}}},"404":{"description":"- `FORM_NOT_FOUND` (404): Nenhum formulário com o ID público informado foi encontrado para o tenant autenticado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"FORM_NOT_FOUND":{"value":{"statusCode":404,"code":"FORM_NOT_FOUND","message":"Formulário não encontrado."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Obtém definição de um formulário","tags":["Forms"]}},"/v1/forms/{id}/submit":{"post":{"operationId":"forms_submit_v1","parameters":[{"name":"id","required":true,"in":"path","description":"ID público do formulário (16 caracteres)","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitFormBodySchema"}}}},"responses":{"201":{"description":"Submissão registrada; retorna IDs de submissão e chats criados/reutilizados.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitFormResponseSchema_Output"}}}},"400":{"description":"- `VALIDATION_ERROR` (400): Corpo, query ou parâmetros não passaram na validação de schema.\n- `INVALID_PHONE` (400): O telefone informado não pôde ser normalizado para E.164.\n- `FORM_MISSING_ENTRYPOINTS` (400): O formulário não possui entrypoints de destino configurados para receber leads.\n- `FORM_INVALID_ANSWERS` (400): Perguntas ausentes, duplicadas, desconhecidas ou com opções inválidas.\n- `FORM_INVALID_DESTINATION` (400): Um ou mais entrypoints configurados no formulário são inválidos ou inacessíveis.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"VALIDATION_ERROR":{"value":{"statusCode":400,"code":"VALIDATION_ERROR","message":"Dados da requisição inválidos."}},"INVALID_PHONE":{"value":{"statusCode":400,"code":"INVALID_PHONE","message":"Telefone inválido. Informe um número com DDI e DDD válidos."}},"FORM_MISSING_ENTRYPOINTS":{"value":{"statusCode":400,"code":"FORM_MISSING_ENTRYPOINTS","message":"Formulário sem pontos de entrada configurados."}},"FORM_INVALID_ANSWERS":{"value":{"statusCode":400,"code":"FORM_INVALID_ANSWERS","message":"Respostas do formulário inválidas."}},"FORM_INVALID_DESTINATION":{"value":{"statusCode":400,"code":"FORM_INVALID_DESTINATION","message":"Configuração de destino do formulário inválida."}}}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `FORM_INACTIVE` (403): O formulário existe, mas está desativado e não pode ser exibido nem receber envios.\n- `LEAD_LIMIT_EXCEEDED` (403): A operação criaria leads além do limite do plano atual. Faça upgrade ou remova leads.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"FORM_INACTIVE":{"value":{"statusCode":403,"code":"FORM_INACTIVE","message":"Este formulário está desativado."}},"LEAD_LIMIT_EXCEEDED":{"value":{"statusCode":403,"code":"LEAD_LIMIT_EXCEEDED","message":"Limite de leads excedido."}}}}}},"404":{"description":"- `FORM_NOT_FOUND` (404): Nenhum formulário com o ID público informado foi encontrado para o tenant autenticado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"FORM_NOT_FOUND":{"value":{"statusCode":404,"code":"FORM_NOT_FOUND","message":"Formulário não encontrado."}}}}}},"409":{"description":"- `FORM_ALREADY_SUBMITTED` (409): Cada telefone pode enviar apenas uma resposta por formulário.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"FORM_ALREADY_SUBMITTED":{"value":{"statusCode":409,"code":"FORM_ALREADY_SUBMITTED","message":"Este número já enviou uma resposta para este formulário."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Envia resposta a um formulário","tags":["Forms"]}},"/v1/chats/batch":{"post":{"description":"Recebe vários contatos para o mesmo ponto de entrada e enfileira a criação ou atualização em background. Diferente do upsert individual, esta operação não retorna IDs de chat ou lead. A plataforma é inferida pelo entrypointId (apenas WhatsApp e WhatsApp Lite). Telefones inválidos e limites de plano são tratados item a item durante o processamento.","operationId":"chats_upsertBatch_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateChatsBatchBodyDto"}}}},"responses":{"202":{"description":"Quantidade de itens enfileirados.\n\nLote aceito e enfileirado. O campo queued indica quantos itens serão processados em background.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateChatsBatchResponseSchema"}}}},"400":{"description":"- `VALIDATION_ERROR` (400): Corpo, query ou parâmetros não passaram na validação de schema.\n- `ENTRYPOINT_PLATFORM_UNSUPPORTED` (400): O entrypoint informado pertence a uma plataforma não suportada pela operação.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"VALIDATION_ERROR":{"value":{"statusCode":400,"code":"VALIDATION_ERROR","message":"Dados da requisição inválidos."}},"ENTRYPOINT_PLATFORM_UNSUPPORTED":{"value":{"statusCode":400,"code":"ENTRYPOINT_PLATFORM_UNSUPPORTED","message":"Este endpoint suporta apenas pontos de entrada do WhatsApp e WhatsApp Lite."}}}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}}}}}},"404":{"description":"- `ENTRYPOINT_NOT_FOUND` (404): Nenhum entrypoint com o ID informado foi encontrado para o tenant autenticado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"ENTRYPOINT_NOT_FOUND":{"value":{"statusCode":404,"code":"ENTRYPOINT_NOT_FOUND","message":"Ponto de entrada não encontrado."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Enfileira upsert em lote de chats DM","tags":["Chats"]}},"/v1/chats":{"post":{"description":"Cria ou atualiza uma conversa direta (DM) com um contato. A plataforma é inferida pelo entrypointId (apenas WhatsApp e WhatsApp Lite). O telefone é normalizado automaticamente para o padrão E.164. Se o lead ainda não existir, ele é criado nesta requisição. Se o chat já existir para o mesmo entrypoint e telefone, atualiza o nome do chat quando informado.","operationId":"chats_upsert_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateChatBodyDto"}}}},"responses":{"200":{"description":"Chat já existia para este entrypoint e telefone; IDs retornados sem criar duplicata. O nome do chat é atualizado quando informado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateChatResponseSchema"}}}},"201":{"description":"IDs do chat e do lead.\n\nChat criado com sucesso.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateChatResponseSchema"}}}},"400":{"description":"- `VALIDATION_ERROR` (400): Corpo, query ou parâmetros não passaram na validação de schema.\n- `INVALID_PHONE` (400): O telefone informado não pôde ser normalizado para E.164.\n- `ENTRYPOINT_PLATFORM_UNSUPPORTED` (400): O entrypoint informado pertence a uma plataforma não suportada pela operação.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"VALIDATION_ERROR":{"value":{"statusCode":400,"code":"VALIDATION_ERROR","message":"Dados da requisição inválidos."}},"INVALID_PHONE":{"value":{"statusCode":400,"code":"INVALID_PHONE","message":"Telefone inválido. Informe um número com DDI e DDD válidos."}},"ENTRYPOINT_PLATFORM_UNSUPPORTED":{"value":{"statusCode":400,"code":"ENTRYPOINT_PLATFORM_UNSUPPORTED","message":"Este endpoint suporta apenas pontos de entrada do WhatsApp e WhatsApp Lite."}}}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.\n- `LEAD_LIMIT_EXCEEDED` (403): A operação criaria leads além do limite do plano atual. Faça upgrade ou remova leads.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}},"LEAD_LIMIT_EXCEEDED":{"value":{"statusCode":403,"code":"LEAD_LIMIT_EXCEEDED","message":"Limite de leads excedido."}}}}}},"404":{"description":"- `ENTRYPOINT_NOT_FOUND` (404): Nenhum entrypoint com o ID informado foi encontrado para o tenant autenticado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"ENTRYPOINT_NOT_FOUND":{"value":{"statusCode":404,"code":"ENTRYPOINT_NOT_FOUND","message":"Ponto de entrada não encontrado."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Cria ou atualiza um chat DM","tags":["Chats"]}},"/v1/campaigns/filters/schema":{"get":{"description":"Retorna campos, operadores e formatos de valor aceitos nos filtros de campanha.","operationId":"campaigns_getFilterSchema_v1","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignFilterSchemaResponse"}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Catálogo de filtros de público-alvo","tags":["Campaigns"]}},"/v1/campaigns/audience-preview":{"post":{"description":"Calcula quantos chats corresponderiam aos filtros informados, sem criar campanha.","operationId":"campaigns_previewAudience_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudiencePreviewBodyDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudiencePreviewResponseSchema"}}}},"400":{"description":"- `CAMPAIGN_NAME_ALREADY_EXISTS` (400): O nome da campanha deve ser único dentro da organização.\n- `CAMPAIGN_TEMPLATE_PLATFORM_MISMATCH` (400): Templates oficiais só podem ser usados em WhatsApp Business ou Instagram.\n- `CAMPAIGN_MISSING_COMMON_VARIABLES` (400): Informe commonVariables com as chaves var1, var2, etc. exigidas pelo template.\n- `VALIDATION_ERROR` (400): Corpo, query ou parâmetros não passaram na validação de schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"CAMPAIGN_NAME_ALREADY_EXISTS":{"value":{"statusCode":400,"code":"CAMPAIGN_NAME_ALREADY_EXISTS","message":"Já existe uma campanha com esse nome."}},"CAMPAIGN_TEMPLATE_PLATFORM_MISMATCH":{"value":{"statusCode":400,"code":"CAMPAIGN_TEMPLATE_PLATFORM_MISMATCH","message":"Template incompatível com a plataforma selecionada."}},"CAMPAIGN_MISSING_COMMON_VARIABLES":{"value":{"statusCode":400,"code":"CAMPAIGN_MISSING_COMMON_VARIABLES","message":"Variáveis manuais do template não foram preenchidas."}},"VALIDATION_ERROR":{"value":{"statusCode":400,"code":"VALIDATION_ERROR","message":"Dados da requisição inválidos."}}}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}}}}}},"404":{"description":"- `CAMPAIGN_NOT_FOUND` (404): Nenhuma campanha com o ID informado foi encontrada para o tenant autenticado.\n- `MESSAGE_TEMPLATE_NOT_FOUND` (404): Nenhum modelo de mensagem com o ID informado foi encontrado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"CAMPAIGN_NOT_FOUND":{"value":{"statusCode":404,"code":"CAMPAIGN_NOT_FOUND","message":"Campanha não encontrada."}},"MESSAGE_TEMPLATE_NOT_FOUND":{"value":{"statusCode":404,"code":"MESSAGE_TEMPLATE_NOT_FOUND","message":"Template não encontrado."}}}}}},"422":{"description":"- `CAMPAIGN_INVALID_FILTERS` (422): Um ou mais filtros possuem campo, operador ou valor incompatível.\n- `CAMPAIGN_NOT_DRAFT` (422): A campanha já foi iniciada, concluída ou cancelada.\n- `CAMPAIGN_ALREADY_PROCESSING` (422): Aguarde a conclusão ou cancele a execução atual antes de iniciar novamente.\n- `CAMPAIGN_SIZE_LIMIT_EXCEEDED` (422): Reduza o público-alvo ou ajuste os filtros antes de iniciar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"CAMPAIGN_INVALID_FILTERS":{"value":{"statusCode":422,"code":"CAMPAIGN_INVALID_FILTERS","message":"Filtros de público-alvo inválidos."}},"CAMPAIGN_NOT_DRAFT":{"value":{"statusCode":422,"code":"CAMPAIGN_NOT_DRAFT","message":"Apenas campanhas em rascunho podem ser iniciadas."}},"CAMPAIGN_ALREADY_PROCESSING":{"value":{"statusCode":422,"code":"CAMPAIGN_ALREADY_PROCESSING","message":"Campanha já possui uma execução em andamento."}},"CAMPAIGN_SIZE_LIMIT_EXCEEDED":{"value":{"statusCode":422,"code":"CAMPAIGN_SIZE_LIMIT_EXCEEDED","message":"Campanha excede o limite de destinatários para a plataforma."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Estimar tamanho do público-alvo","tags":["Campaigns"]}},"/v1/campaigns":{"post":{"description":"Cria uma campanha em rascunho. Use POST /v1/campaigns/{id}/start para iniciar o disparo.","operationId":"campaigns_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCampaignBodyDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCampaignResponseSchema"}}}},"400":{"description":"- `CAMPAIGN_NAME_ALREADY_EXISTS` (400): O nome da campanha deve ser único dentro da organização.\n- `CAMPAIGN_TEMPLATE_PLATFORM_MISMATCH` (400): Templates oficiais só podem ser usados em WhatsApp Business ou Instagram.\n- `CAMPAIGN_MISSING_COMMON_VARIABLES` (400): Informe commonVariables com as chaves var1, var2, etc. exigidas pelo template.\n- `VALIDATION_ERROR` (400): Corpo, query ou parâmetros não passaram na validação de schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"CAMPAIGN_NAME_ALREADY_EXISTS":{"value":{"statusCode":400,"code":"CAMPAIGN_NAME_ALREADY_EXISTS","message":"Já existe uma campanha com esse nome."}},"CAMPAIGN_TEMPLATE_PLATFORM_MISMATCH":{"value":{"statusCode":400,"code":"CAMPAIGN_TEMPLATE_PLATFORM_MISMATCH","message":"Template incompatível com a plataforma selecionada."}},"CAMPAIGN_MISSING_COMMON_VARIABLES":{"value":{"statusCode":400,"code":"CAMPAIGN_MISSING_COMMON_VARIABLES","message":"Variáveis manuais do template não foram preenchidas."}},"VALIDATION_ERROR":{"value":{"statusCode":400,"code":"VALIDATION_ERROR","message":"Dados da requisição inválidos."}}}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}}}}}},"404":{"description":"- `CAMPAIGN_NOT_FOUND` (404): Nenhuma campanha com o ID informado foi encontrada para o tenant autenticado.\n- `MESSAGE_TEMPLATE_NOT_FOUND` (404): Nenhum modelo de mensagem com o ID informado foi encontrado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"CAMPAIGN_NOT_FOUND":{"value":{"statusCode":404,"code":"CAMPAIGN_NOT_FOUND","message":"Campanha não encontrada."}},"MESSAGE_TEMPLATE_NOT_FOUND":{"value":{"statusCode":404,"code":"MESSAGE_TEMPLATE_NOT_FOUND","message":"Template não encontrado."}}}}}},"422":{"description":"- `CAMPAIGN_INVALID_FILTERS` (422): Um ou mais filtros possuem campo, operador ou valor incompatível.\n- `CAMPAIGN_NOT_DRAFT` (422): A campanha já foi iniciada, concluída ou cancelada.\n- `CAMPAIGN_ALREADY_PROCESSING` (422): Aguarde a conclusão ou cancele a execução atual antes de iniciar novamente.\n- `CAMPAIGN_SIZE_LIMIT_EXCEEDED` (422): Reduza o público-alvo ou ajuste os filtros antes de iniciar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"CAMPAIGN_INVALID_FILTERS":{"value":{"statusCode":422,"code":"CAMPAIGN_INVALID_FILTERS","message":"Filtros de público-alvo inválidos."}},"CAMPAIGN_NOT_DRAFT":{"value":{"statusCode":422,"code":"CAMPAIGN_NOT_DRAFT","message":"Apenas campanhas em rascunho podem ser iniciadas."}},"CAMPAIGN_ALREADY_PROCESSING":{"value":{"statusCode":422,"code":"CAMPAIGN_ALREADY_PROCESSING","message":"Campanha já possui uma execução em andamento."}},"CAMPAIGN_SIZE_LIMIT_EXCEEDED":{"value":{"statusCode":422,"code":"CAMPAIGN_SIZE_LIMIT_EXCEEDED","message":"Campanha excede o limite de destinatários para a plataforma."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Criar campanha","tags":["Campaigns"]},"get":{"operationId":"campaigns_list_v1","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListCampaignsResponseSchema"}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Listar campanhas","tags":["Campaigns"]}},"/v1/campaigns/{id}":{"get":{"operationId":"campaigns_getById_v1","parameters":[{"name":"id","required":true,"in":"path","description":"ID da campanha","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetCampaignResponseSchema"}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}}}}}},"404":{"description":"- `CAMPAIGN_NOT_FOUND` (404): Nenhuma campanha com o ID informado foi encontrada para o tenant autenticado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"CAMPAIGN_NOT_FOUND":{"value":{"statusCode":404,"code":"CAMPAIGN_NOT_FOUND","message":"Campanha não encontrada."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Detalhes da campanha","tags":["Campaigns"]}},"/v1/campaigns/{id}/executions/{executionId}":{"get":{"operationId":"campaigns_getExecution_v1","parameters":[{"name":"id","required":true,"in":"path","description":"ID da campanha","schema":{"type":"string"}},{"name":"executionId","required":true,"in":"path","description":"ID da execução","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetCampaignExecutionResponseSchema"}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}}}}}},"404":{"description":"- `CAMPAIGN_NOT_FOUND` (404): Nenhuma campanha com o ID informado foi encontrada para o tenant autenticado.\n- `RESOURCE_NOT_FOUND` (404): O recurso solicitado não existe ou não está acessível para o tenant autenticado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"CAMPAIGN_NOT_FOUND":{"value":{"statusCode":404,"code":"CAMPAIGN_NOT_FOUND","message":"Campanha não encontrada."}},"RESOURCE_NOT_FOUND":{"value":{"statusCode":404,"code":"RESOURCE_NOT_FOUND","message":"Recurso não encontrado."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Progresso de uma execução","tags":["Campaigns"]}},"/v1/campaigns/{id}/start":{"post":{"description":"Inicia o disparo para o público-alvo configurado. Informe commonVariables se o template exigir variáveis manuais.","operationId":"campaigns_start_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartCampaignBodyDto"}}}},"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartCampaignResponseSchema"}}}},"400":{"description":"- `CAMPAIGN_NAME_ALREADY_EXISTS` (400): O nome da campanha deve ser único dentro da organização.\n- `CAMPAIGN_TEMPLATE_PLATFORM_MISMATCH` (400): Templates oficiais só podem ser usados em WhatsApp Business ou Instagram.\n- `CAMPAIGN_MISSING_COMMON_VARIABLES` (400): Informe commonVariables com as chaves var1, var2, etc. exigidas pelo template.\n- `VALIDATION_ERROR` (400): Corpo, query ou parâmetros não passaram na validação de schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"CAMPAIGN_NAME_ALREADY_EXISTS":{"value":{"statusCode":400,"code":"CAMPAIGN_NAME_ALREADY_EXISTS","message":"Já existe uma campanha com esse nome."}},"CAMPAIGN_TEMPLATE_PLATFORM_MISMATCH":{"value":{"statusCode":400,"code":"CAMPAIGN_TEMPLATE_PLATFORM_MISMATCH","message":"Template incompatível com a plataforma selecionada."}},"CAMPAIGN_MISSING_COMMON_VARIABLES":{"value":{"statusCode":400,"code":"CAMPAIGN_MISSING_COMMON_VARIABLES","message":"Variáveis manuais do template não foram preenchidas."}},"VALIDATION_ERROR":{"value":{"statusCode":400,"code":"VALIDATION_ERROR","message":"Dados da requisição inválidos."}}}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}}}}}},"404":{"description":"- `CAMPAIGN_NOT_FOUND` (404): Nenhuma campanha com o ID informado foi encontrada para o tenant autenticado.\n- `MESSAGE_TEMPLATE_NOT_FOUND` (404): Nenhum modelo de mensagem com o ID informado foi encontrado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"CAMPAIGN_NOT_FOUND":{"value":{"statusCode":404,"code":"CAMPAIGN_NOT_FOUND","message":"Campanha não encontrada."}},"MESSAGE_TEMPLATE_NOT_FOUND":{"value":{"statusCode":404,"code":"MESSAGE_TEMPLATE_NOT_FOUND","message":"Template não encontrado."}}}}}},"422":{"description":"- `CAMPAIGN_INVALID_FILTERS` (422): Um ou mais filtros possuem campo, operador ou valor incompatível.\n- `CAMPAIGN_NOT_DRAFT` (422): A campanha já foi iniciada, concluída ou cancelada.\n- `CAMPAIGN_ALREADY_PROCESSING` (422): Aguarde a conclusão ou cancele a execução atual antes de iniciar novamente.\n- `CAMPAIGN_SIZE_LIMIT_EXCEEDED` (422): Reduza o público-alvo ou ajuste os filtros antes de iniciar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"CAMPAIGN_INVALID_FILTERS":{"value":{"statusCode":422,"code":"CAMPAIGN_INVALID_FILTERS","message":"Filtros de público-alvo inválidos."}},"CAMPAIGN_NOT_DRAFT":{"value":{"statusCode":422,"code":"CAMPAIGN_NOT_DRAFT","message":"Apenas campanhas em rascunho podem ser iniciadas."}},"CAMPAIGN_ALREADY_PROCESSING":{"value":{"statusCode":422,"code":"CAMPAIGN_ALREADY_PROCESSING","message":"Campanha já possui uma execução em andamento."}},"CAMPAIGN_SIZE_LIMIT_EXCEEDED":{"value":{"statusCode":422,"code":"CAMPAIGN_SIZE_LIMIT_EXCEEDED","message":"Campanha excede o limite de destinatários para a plataforma."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Iniciar campanha","tags":["Campaigns"]}},"/v1/campaigns/{id}/cancel":{"post":{"operationId":"campaigns_cancel_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":"Campanha cancelada."},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}}}}}},"404":{"description":"- `CAMPAIGN_NOT_FOUND` (404): Nenhuma campanha com o ID informado foi encontrada para o tenant autenticado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"CAMPAIGN_NOT_FOUND":{"value":{"statusCode":404,"code":"CAMPAIGN_NOT_FOUND","message":"Campanha não encontrada."}}}}}},"422":{"description":"- `UNPROCESSABLE_REQUEST` (422): A requisição está bem formada, mas não pode ser processada no estado atual.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"UNPROCESSABLE_REQUEST":{"value":{"statusCode":422,"code":"UNPROCESSABLE_REQUEST","message":"Requisição não pôde ser processada."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Cancelar campanha em andamento","tags":["Campaigns"]}},"/v1/message-templates":{"get":{"description":"Lista templates disponíveis para uso em campanhas e envios individuais.","operationId":"messagetemplates_list_v1","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMessageTemplatesResponseSchema"}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Listar modelos de mensagem","tags":["Message Templates"]},"post":{"description":"Cria um modelo interno ou um modelo oficial de campanha na Meta. O modelo oficial usa variáveis {{1}}, {{2}} no texto inteiro. Nome, idioma e categoria ficam fixos depois da criação.","operationId":"messagetemplates_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMessageTemplateBodyDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetMessageTemplateResponseSchema"}}}},"400":{"description":"- `MESSAGE_TEMPLATE_META_ERROR` (400): A Meta recusou a criação, edição ou exclusão do modelo. A mensagem descreve o motivo.\n- `VALIDATION_ERROR` (400): Corpo, query ou parâmetros não passaram na validação de schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"MESSAGE_TEMPLATE_META_ERROR":{"value":{"statusCode":400,"code":"MESSAGE_TEMPLATE_META_ERROR","message":"Erro ao criar template na Meta."}},"VALIDATION_ERROR":{"value":{"statusCode":400,"code":"VALIDATION_ERROR","message":"Dados da requisição inválidos."}}}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}}}}}},"404":{"description":"- `MESSAGE_TEMPLATE_NOT_FOUND` (404): Nenhum modelo de mensagem com o ID informado foi encontrado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"MESSAGE_TEMPLATE_NOT_FOUND":{"value":{"statusCode":404,"code":"MESSAGE_TEMPLATE_NOT_FOUND","message":"Template não encontrado."}}}}}},"409":{"description":"- `MESSAGE_TEMPLATE_META_NAME_TAKEN` (409): O nome do modelo na Meta precisa ser único por idioma na conta de WhatsApp.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"MESSAGE_TEMPLATE_META_NAME_TAKEN":{"value":{"statusCode":409,"code":"MESSAGE_TEMPLATE_META_NAME_TAKEN","message":"Já existe um modelo oficial com esse nome e idioma."}}}}}},"422":{"description":"- `MESSAGE_TEMPLATE_NOT_EDITABLE` (422): O conteúdo de um modelo oficial só pode ser editado quando o status na Meta é APPROVED ou REJECTED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"MESSAGE_TEMPLATE_NOT_EDITABLE":{"value":{"statusCode":422,"code":"MESSAGE_TEMPLATE_NOT_EDITABLE","message":"Este modelo oficial não pode ser editado na Meta neste status."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Criar modelo de mensagem","tags":["Message Templates"]}},"/v1/message-templates/{id}":{"get":{"description":"Inclui variáveis manuais (commonVariables) necessárias ao iniciar campanhas.","operationId":"messagetemplates_getById_v1","parameters":[{"name":"id","required":true,"in":"path","description":"ID do template","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetMessageTemplateResponseSchema"}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}}}}}},"404":{"description":"- `MESSAGE_TEMPLATE_NOT_FOUND` (404): Nenhum modelo de mensagem com o ID informado foi encontrado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"MESSAGE_TEMPLATE_NOT_FOUND":{"value":{"statusCode":404,"code":"MESSAGE_TEMPLATE_NOT_FOUND","message":"Template não encontrado."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Detalhes do modelo de mensagem","tags":["Message Templates"]},"patch":{"description":"Edita o rótulo interno ou o conteúdo. Alterar o conteúdo de um modelo oficial aprovado ou rejeitado devolve o modelo para análise da Meta. Modelos pendentes não aceitam mudança de conteúdo.","operationId":"messagetemplates_update_v1","parameters":[{"name":"id","required":true,"in":"path","description":"ID do template","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMessageTemplateBodyDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetMessageTemplateResponseSchema"}}}},"400":{"description":"- `MESSAGE_TEMPLATE_META_ERROR` (400): A Meta recusou a criação, edição ou exclusão do modelo. A mensagem descreve o motivo.\n- `VALIDATION_ERROR` (400): Corpo, query ou parâmetros não passaram na validação de schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"MESSAGE_TEMPLATE_META_ERROR":{"value":{"statusCode":400,"code":"MESSAGE_TEMPLATE_META_ERROR","message":"Erro ao criar template na Meta."}},"VALIDATION_ERROR":{"value":{"statusCode":400,"code":"VALIDATION_ERROR","message":"Dados da requisição inválidos."}}}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}}}}}},"404":{"description":"- `MESSAGE_TEMPLATE_NOT_FOUND` (404): Nenhum modelo de mensagem com o ID informado foi encontrado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"MESSAGE_TEMPLATE_NOT_FOUND":{"value":{"statusCode":404,"code":"MESSAGE_TEMPLATE_NOT_FOUND","message":"Template não encontrado."}}}}}},"409":{"description":"- `MESSAGE_TEMPLATE_META_NAME_TAKEN` (409): O nome do modelo na Meta precisa ser único por idioma na conta de WhatsApp.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"MESSAGE_TEMPLATE_META_NAME_TAKEN":{"value":{"statusCode":409,"code":"MESSAGE_TEMPLATE_META_NAME_TAKEN","message":"Já existe um modelo oficial com esse nome e idioma."}}}}}},"422":{"description":"- `MESSAGE_TEMPLATE_NOT_EDITABLE` (422): O conteúdo de um modelo oficial só pode ser editado quando o status na Meta é APPROVED ou REJECTED.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"MESSAGE_TEMPLATE_NOT_EDITABLE":{"value":{"statusCode":422,"code":"MESSAGE_TEMPLATE_NOT_EDITABLE","message":"Este modelo oficial não pode ser editado na Meta neste status."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Editar modelo de mensagem","tags":["Message Templates"]},"delete":{"description":"Remove o modelo no Spark. Se for oficial, também remove esse idioma na Meta.","operationId":"messagetemplates_delete_v1","parameters":[{"name":"id","required":true,"in":"path","description":"ID do template","schema":{"type":"string"}}],"responses":{"204":{"description":"Modelo excluído."},"400":{"description":"- `MESSAGE_TEMPLATE_META_ERROR` (400): A Meta recusou a criação, edição ou exclusão do modelo. A mensagem descreve o motivo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"MESSAGE_TEMPLATE_META_ERROR":{"value":{"statusCode":400,"code":"MESSAGE_TEMPLATE_META_ERROR","message":"Erro ao criar template na Meta."}}}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}}}}}},"404":{"description":"- `MESSAGE_TEMPLATE_NOT_FOUND` (404): Nenhum modelo de mensagem com o ID informado foi encontrado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"MESSAGE_TEMPLATE_NOT_FOUND":{"value":{"statusCode":404,"code":"MESSAGE_TEMPLATE_NOT_FOUND","message":"Template não encontrado."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Excluir modelo de mensagem","tags":["Message Templates"]}},"/v1/messaging/media":{"post":{"description":"Envia um ou mais arquivos. Use os IDs retornados ao enviar mensagens com mídia, imagem, vídeo ou documento. Para áudio, envie um único arquivo de áudio.","operationId":"messaging_uploadMedia_v1","parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/UploadPublicMediaBodySchema"}}}},"responses":{"200":{"description":"Resultado por arquivo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadPublicMediaResponseSchema_Output"}}}},"400":{"description":"- `MEDIA_UPLOAD_EMPTY` (400): O upload multipart não incluiu nenhum arquivo.\n- `MEDIA_UPLOAD_TOO_MANY_FILES` (400): Mais arquivos foram enviados do que o permitido por requisição.\n- `MEDIA_FILE_TOO_LARGE` (400): Um ou mais arquivos ultrapassam o limite de tamanho.\n- `MEDIA_INVALID_FORMAT` (400): O tipo MIME ou conteúdo do arquivo não é aceito para upload de mídia.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"MEDIA_UPLOAD_EMPTY":{"value":{"statusCode":400,"code":"MEDIA_UPLOAD_EMPTY","message":"Nenhum arquivo foi enviado."}},"MEDIA_UPLOAD_TOO_MANY_FILES":{"value":{"statusCode":400,"code":"MEDIA_UPLOAD_TOO_MANY_FILES","message":"Limite de arquivos por requisição excedido."}},"MEDIA_FILE_TOO_LARGE":{"value":{"statusCode":400,"code":"MEDIA_FILE_TOO_LARGE","message":"Arquivo excede o tamanho máximo permitido."}},"MEDIA_INVALID_FORMAT":{"value":{"statusCode":400,"code":"MEDIA_INVALID_FORMAT","message":"Formato de arquivo não suportado."}}}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Upload de mídia","tags":["Messaging"]}},"/v1/messaging/chats/{chatId}":{"post":{"description":"Envie texto e/ou referências a mídias previamente carregadas via upload. Áudio: use apenas `audioId` (sem texto nem outras mídias).","operationId":"messaging_sendMessage_v1","parameters":[{"name":"chatId","required":true,"in":"path","description":"ID do chat no Spark","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendPublicMessageBodyDto"}}}},"responses":{"204":{"description":"Mensagem enviada com sucesso."},"400":{"description":"- `VALIDATION_ERROR` (400): Corpo, query ou parâmetros não passaram na validação de schema.\n- `INVALID_REQUEST` (400): A combinação de campos ou parâmetros da requisição não é permitida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"VALIDATION_ERROR":{"value":{"statusCode":400,"code":"VALIDATION_ERROR","message":"Dados da requisição inválidos."}},"INVALID_REQUEST":{"value":{"statusCode":400,"code":"INVALID_REQUEST","message":"Requisição inválida."}}}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}}}}}},"404":{"description":"- `CHAT_NOT_FOUND` (404): Nenhum chat com o ID informado foi encontrado para o tenant autenticado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"CHAT_NOT_FOUND":{"value":{"statusCode":404,"code":"CHAT_NOT_FOUND","message":"Chat não encontrado."}}}}}},"422":{"description":"- `MESSAGE_CAMPAIGN_NOT_ALLOWED` (422): O corpo da mensagem referencia campanha, o que não é permitido na API pública.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"MESSAGE_CAMPAIGN_NOT_ALLOWED":{"value":{"statusCode":422,"code":"MESSAGE_CAMPAIGN_NOT_ALLOWED","message":"Não é possível enviar mensagens para campanhas através deste endpoint."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Envia mensagem para um chat","tags":["Messaging"]},"get":{"description":"Retorna as mensagens mais recentes primeiro.","operationId":"messaging_listMessages_v1","parameters":[{"name":"chatId","required":true,"in":"path","description":"ID do chat no Spark","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Tamanho da página (1-50; padrão 20).","schema":{}},{"name":"cursor","required":false,"in":"query","description":"Cursor da página seguinte (mensagens mais antigas).","schema":{}}],"responses":{"200":{"description":"Página de mensagens","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListPublicMessagesResponseSchema_Output"}}}},"400":{"description":"- `VALIDATION_ERROR` (400): Corpo, query ou parâmetros não passaram na validação de schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"VALIDATION_ERROR":{"value":{"statusCode":400,"code":"VALIDATION_ERROR","message":"Dados da requisição inválidos."}}}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}}}}}},"404":{"description":"- `CHAT_NOT_FOUND` (404): Nenhum chat com o ID informado foi encontrado para o tenant autenticado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"CHAT_NOT_FOUND":{"value":{"statusCode":404,"code":"CHAT_NOT_FOUND","message":"Chat não encontrado."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Lista mensagens de um chat","tags":["Messaging"]}},"/v1/messaging/chats/{chatId}/messages/{messageId}/read":{"post":{"description":"Marca a mensagem recebida como lida, sem iniciar o indicador de digitação.","operationId":"messaging_markMessageAsRead_v1","parameters":[{"name":"chatId","required":true,"in":"path","description":"ID do chat no Spark","schema":{"type":"string"}},{"name":"messageId","required":true,"in":"path","description":"ID da mensagem no Spark a ser marcada como lida","schema":{"type":"string"}}],"responses":{"204":{"description":"Mensagem marcada como lida com sucesso."},"400":{"description":"- `VALIDATION_ERROR` (400): Corpo, query ou parâmetros não passaram na validação de schema.\n- `INVALID_REQUEST` (400): A combinação de campos ou parâmetros da requisição não é permitida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"VALIDATION_ERROR":{"value":{"statusCode":400,"code":"VALIDATION_ERROR","message":"Dados da requisição inválidos."}},"INVALID_REQUEST":{"value":{"statusCode":400,"code":"INVALID_REQUEST","message":"Requisição inválida."}}}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}}}}}},"404":{"description":"- `CHAT_NOT_FOUND` (404): Nenhum chat com o ID informado foi encontrado para o tenant autenticado.\n- `RESOURCE_NOT_FOUND` (404): O recurso solicitado não existe ou não está acessível para o tenant autenticado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"CHAT_NOT_FOUND":{"value":{"statusCode":404,"code":"CHAT_NOT_FOUND","message":"Chat não encontrado."}},"RESOURCE_NOT_FOUND":{"value":{"statusCode":404,"code":"RESOURCE_NOT_FOUND","message":"Recurso não encontrado."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}},"500":{"description":"- `INTERNAL_ERROR` (500): Falha inesperada no servidor. Se persistir, contate o suporte.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"INTERNAL_ERROR":{"value":{"statusCode":500,"code":"INTERNAL_ERROR","message":"Erro interno ao processar a solicitação."}}}}}}},"security":[{"api-key":[]}],"summary":"Marca uma mensagem como lida","tags":["Messaging"]}},"/v1/messaging/chats/{chatId}/messages/{messageId}/read-and-type":{"post":{"description":"Marca a mensagem recebida como lida e inicia o indicador de digitação.","operationId":"messaging_markMessageAsReadAndType_v1","parameters":[{"name":"chatId","required":true,"in":"path","description":"ID do chat no Spark","schema":{"type":"string"}},{"name":"messageId","required":true,"in":"path","description":"ID da mensagem no Spark a ser marcada como lida","schema":{"type":"string"}}],"responses":{"204":{"description":"Mensagem marcada como lida e indicador de digitação iniciado."},"400":{"description":"- `VALIDATION_ERROR` (400): Corpo, query ou parâmetros não passaram na validação de schema.\n- `INVALID_REQUEST` (400): A combinação de campos ou parâmetros da requisição não é permitida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"VALIDATION_ERROR":{"value":{"statusCode":400,"code":"VALIDATION_ERROR","message":"Dados da requisição inválidos."}},"INVALID_REQUEST":{"value":{"statusCode":400,"code":"INVALID_REQUEST","message":"Requisição inválida."}}}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}}}}}},"404":{"description":"- `CHAT_NOT_FOUND` (404): Nenhum chat com o ID informado foi encontrado para o tenant autenticado.\n- `RESOURCE_NOT_FOUND` (404): O recurso solicitado não existe ou não está acessível para o tenant autenticado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"CHAT_NOT_FOUND":{"value":{"statusCode":404,"code":"CHAT_NOT_FOUND","message":"Chat não encontrado."}},"RESOURCE_NOT_FOUND":{"value":{"statusCode":404,"code":"RESOURCE_NOT_FOUND","message":"Recurso não encontrado."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}},"500":{"description":"- `INTERNAL_ERROR` (500): Falha inesperada no servidor. Se persistir, contate o suporte.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"INTERNAL_ERROR":{"value":{"statusCode":500,"code":"INTERNAL_ERROR","message":"Erro interno ao processar a solicitação."}}}}}}},"security":[{"api-key":[]}],"summary":"Marca uma mensagem como lida e indica digitação","tags":["Messaging"]}},"/v1/messaging/chats/{chatId}/templates":{"post":{"description":"Envia um template cadastrado no Spark. Preencha variáveis manuais em `commonVariables` (var1, var2, …). Variáveis automáticas (dados do chat) são resolvidas pelo Spark.","operationId":"messaging_sendTemplate_v1","parameters":[{"name":"chatId","required":true,"in":"path","description":"ID do chat no Spark","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendPublicTemplateBodyDto"}}}},"responses":{"204":{"description":"Template enviado com sucesso."},"400":{"description":"- `VALIDATION_ERROR` (400): Corpo, query ou parâmetros não passaram na validação de schema.\n- `INVALID_REQUEST` (400): A combinação de campos ou parâmetros da requisição não é permitida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"VALIDATION_ERROR":{"value":{"statusCode":400,"code":"VALIDATION_ERROR","message":"Dados da requisição inválidos."}},"INVALID_REQUEST":{"value":{"statusCode":400,"code":"INVALID_REQUEST","message":"Requisição inválida."}}}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}}}}}},"404":{"description":"- `CHAT_NOT_FOUND` (404): Nenhum chat com o ID informado foi encontrado para o tenant autenticado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"CHAT_NOT_FOUND":{"value":{"statusCode":404,"code":"CHAT_NOT_FOUND","message":"Chat não encontrado."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Envia modelo de mensagem para um chat","tags":["Messaging"]}},"/v1/entrypoints/whatsapp/connection-sessions":{"post":{"description":"Cria uma sessão e devolve a URL hospedada no Spark para a pessoa concluir o Embedded Signup da Meta. O resultado da conexão chega por webhook ou por GET desta sessão.","operationId":"whatsappconnectionsessions_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWhatsappConnectionSessionBodyDto"}}}},"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWhatsappConnectionSessionResponseSchema"}}}},"400":{"description":"- `VALIDATION_ERROR` (400): Corpo, query ou parâmetros não passaram na validação de schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"VALIDATION_ERROR":{"value":{"statusCode":400,"code":"VALIDATION_ERROR","message":"Dados da requisição inválidos."}}}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Inicia a conexão de um número da API oficial do WhatsApp.","tags":["Entrypoints"]}},"/v1/entrypoints/whatsapp/connection-sessions/{sessionId}":{"get":{"operationId":"whatsappconnectionsessions_getById_v1","parameters":[{"name":"sessionId","required":true,"in":"path","description":"ID da sessão devolvido ao iniciar a conexão","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetWhatsappConnectionSessionResponseSchema"}}}},"400":{"description":"- `VALIDATION_ERROR` (400): Corpo, query ou parâmetros não passaram na validação de schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"VALIDATION_ERROR":{"value":{"statusCode":400,"code":"VALIDATION_ERROR","message":"Dados da requisição inválidos."}}}}}},"401":{"description":"- `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas.\n- `API_KEY_INVALID` (401): Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel.\n- `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada) não é aceito neste endpoint.\n- `DEVELOPERS_DISABLED` (401): Habilite o ambiente de desenvolvedores no painel antes de usar a API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"API_KEY_MISSING":{"value":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."}},"API_KEY_INVALID":{"value":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."}},"API_KEY_WRONG_TYPE":{"value":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."}},"DEVELOPERS_DISABLED":{"value":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."}}}}}},"403":{"description":"- `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou a assinatura está suspensa/cancelada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"SUBSCRIPTION_INACTIVE":{"value":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."}}}}}},"404":{"description":"- `RESOURCE_NOT_FOUND` (404): O recurso solicitado não existe ou não está acessível para o tenant autenticado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RESOURCE_NOT_FOUND":{"value":{"statusCode":404,"code":"RESOURCE_NOT_FOUND","message":"Recurso não encontrado."}}}}}},"429":{"description":"- `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto intervalo. Aguarde e tente novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"examples":{"RATE_LIMIT_EXCEEDED":{"value":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."}}}}}}},"security":[{"api-key":[]}],"summary":"Consulta uma sessão de conexão da API oficial do WhatsApp.","tags":["Entrypoints"]}}},"info":{"title":"Spark","description":"Documentação da API pública do Spark CRM. Respostas de erro usam `{ statusCode, code, message }`; trate erros pelo campo `code` (veja catálogo completo abaixo).\n\n## Erros da API\n\nTodas as respostas de erro seguem o formato `{ statusCode, code, message }`.\nO campo **`code`** é estável entre versões — trate erros pelo código, não pela mensagem.\n\n| Código | HTTP | Descrição |\n| --- | ---: | --- |\n| `API_KEY_MISSING` | 401 | Cabeçalho `X-API-Key` ausente. Inclua a chave em todas as requisições autenticadas. |\n| `API_KEY_INVALID` | 401 | Prefixo ou valor da API Key não reconhecido. Verifique se copiou a chave correta do painel. |\n| `API_KEY_WRONG_TYPE` | 401 | O tipo da chave (pública ou privada) não é aceito neste endpoint. |\n| `DEVELOPERS_DISABLED` | 401 | Habilite o ambiente de desenvolvedores no painel antes de usar a API. |\n| `SUBSCRIPTION_INACTIVE` | 403 | O tenant não possui plano ativo ou a assinatura está suspensa/cancelada. |\n| `LEAD_LIMIT_EXCEEDED` | 403 | A operação criaria leads além do limite do plano atual. Faça upgrade ou remova leads. |\n| `FORM_INACTIVE` | 403 | O formulário existe, mas está desativado e não pode ser exibido nem receber envios. |\n| `RESOURCE_ACCESS_DENIED` | 403 | O recurso pertence a outro tenant ou a chave não tem escopo para lê-lo. |\n| `ENTRYPOINT_NOT_FOUND` | 404 | Nenhum entrypoint com o ID informado foi encontrado para o tenant autenticado. |\n| `FORM_NOT_FOUND` | 404 | Nenhum formulário com o ID público informado foi encontrado para o tenant autenticado. |\n| `CHAT_NOT_FOUND` | 404 | Nenhum chat com o ID informado foi encontrado para o tenant autenticado. |\n| `RESOURCE_NOT_FOUND` | 404 | O recurso solicitado não existe ou não está acessível para o tenant autenticado. |\n| `FORM_ALREADY_SUBMITTED` | 409 | Cada telefone pode enviar apenas uma resposta por formulário. |\n| `VALIDATION_ERROR` | 400 | Corpo, query ou parâmetros não passaram na validação de schema. |\n| `INVALID_PHONE` | 400 | O telefone informado não pôde ser normalizado para E.164. |\n| `ENTRYPOINT_PLATFORM_UNSUPPORTED` | 400 | O entrypoint informado pertence a uma plataforma não suportada pela operação. |\n| `PLATFORM_UNSUPPORTED` | 400 | Valor de filtro `platform` inválido ou não suportado. |\n| `FORM_MISSING_ENTRYPOINTS` | 400 | O formulário não possui entrypoints de destino configurados para receber leads. |\n| `FORM_INVALID_ANSWERS` | 400 | Perguntas ausentes, duplicadas, desconhecidas ou com opções inválidas. |\n| `FORM_INVALID_DESTINATION` | 400 | Um ou mais entrypoints configurados no formulário são inválidos ou inacessíveis. |\n| `MEDIA_UPLOAD_EMPTY` | 400 | O upload multipart não incluiu nenhum arquivo. |\n| `MEDIA_UPLOAD_TOO_MANY_FILES` | 400 | Mais arquivos foram enviados do que o permitido por requisição. |\n| `MEDIA_FILE_TOO_LARGE` | 400 | Um ou mais arquivos ultrapassam o limite de tamanho. |\n| `MEDIA_INVALID_FORMAT` | 400 | O tipo MIME ou conteúdo do arquivo não é aceito para upload de mídia. |\n| `INVALID_REQUEST` | 400 | A combinação de campos ou parâmetros da requisição não é permitida. |\n| `UNPROCESSABLE_REQUEST` | 422 | A requisição está bem formada, mas não pode ser processada no estado atual. |\n| `MESSAGE_CAMPAIGN_NOT_ALLOWED` | 422 | O corpo da mensagem referencia campanha, o que não é permitido na API pública. |\n| `CAMPAIGN_NOT_FOUND` | 404 | Nenhuma campanha com o ID informado foi encontrada para o tenant autenticado. |\n| `CAMPAIGN_NAME_ALREADY_EXISTS` | 400 | O nome da campanha deve ser único dentro da organização. |\n| `CAMPAIGN_TEMPLATE_NOT_FOUND` | 404 | O templateId informado não existe ou não pertence ao tenant autenticado. |\n| `CAMPAIGN_TEMPLATE_PLATFORM_MISMATCH` | 400 | Templates oficiais só podem ser usados em WhatsApp Business ou Instagram. |\n| `CAMPAIGN_INVALID_FILTERS` | 422 | Um ou mais filtros possuem campo, operador ou valor incompatível. |\n| `CAMPAIGN_NOT_DRAFT` | 422 | A campanha já foi iniciada, concluída ou cancelada. |\n| `CAMPAIGN_ALREADY_PROCESSING` | 422 | Aguarde a conclusão ou cancele a execução atual antes de iniciar novamente. |\n| `CAMPAIGN_MISSING_COMMON_VARIABLES` | 400 | Informe commonVariables com as chaves var1, var2, etc. exigidas pelo template. |\n| `CAMPAIGN_SIZE_LIMIT_EXCEEDED` | 422 | Reduza o público-alvo ou ajuste os filtros antes de iniciar. |\n| `MESSAGE_TEMPLATE_NOT_FOUND` | 404 | Nenhum modelo de mensagem com o ID informado foi encontrado. |\n| `MESSAGE_TEMPLATE_NOT_EDITABLE` | 422 | O conteúdo de um modelo oficial só pode ser editado quando o status na Meta é APPROVED ou REJECTED. |\n| `MESSAGE_TEMPLATE_META_NAME_TAKEN` | 409 | O nome do modelo na Meta precisa ser único por idioma na conta de WhatsApp. |\n| `MESSAGE_TEMPLATE_META_ERROR` | 400 | A Meta recusou a criação, edição ou exclusão do modelo. A mensagem descreve o motivo. |\n| `RATE_LIMIT_EXCEEDED` | 429 | Muitas requisições em curto intervalo. Aguarde e tente novamente. |\n| `INTERNAL_ERROR` | 500 | Falha inesperada no servidor. Se persistir, contate o suporte. |\n\nSchema: [`PublicApiErrorResponse`](#/components/schemas/PublicApiErrorResponse).","version":"1.0","contact":{}},"tags":[],"servers":[{"url":"https://gateway.crmspark.com.br","description":"Oficial"}],"components":{"securitySchemes":{"api-key":{"type":"apiKey","in":"header","name":"X-API-Key"}},"schemas":{"GetAllEntrypointsResponseSchema_Output":{"type":"object","properties":{"entrypoints":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":["string","null"]},"platform":{"type":"string","enum":["whatsapp","whatsapp_lite","instagram","telegram"]},"funnelStepId":{"type":["string","null"]},"displayName":{"type":["string","null"]},"state":{"type":"string","enum":["connected","disconnected","restarting","unknown"]}},"required":["id","name","platform","funnelStepId"],"additionalProperties":false}}},"required":["entrypoints"],"additionalProperties":false},"GetEntrypointByIdResponseSchema_Output":{"type":"object","properties":{"entrypoint":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":["string","null"]},"platform":{"type":"string","enum":["whatsapp"]},"funnelStepId":{"type":["string","null"]},"displayName":{"type":["string","null"]},"isCoexistence":{"type":"boolean"}},"required":["id","name","platform","funnelStepId","displayName","isCoexistence"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":["string","null"]},"platform":{"type":"string","enum":["whatsapp_lite"]},"funnelStepId":{"type":["string","null"]},"displayName":{"type":["string","null"]},"state":{"type":"string","enum":["connected","disconnected","restarting","unknown"]}},"required":["id","name","platform","funnelStepId","displayName","state"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":["string","null"]},"platform":{"type":"string","enum":["instagram"]},"funnelStepId":{"type":["string","null"]}},"required":["id","name","platform","funnelStepId"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":["string","null"]},"platform":{"type":"string","enum":["telegram"]},"funnelStepId":{"type":["string","null"]},"displayName":{"type":["string","null"]}},"required":["id","name","platform","funnelStepId","displayName"],"additionalProperties":false}]}},"required":["entrypoint"],"additionalProperties":false},"GetFormEmbedFramePolicyResponseSchema_Output":{"type":"object","properties":{"iframeEmbedAllowedOrigins":{"type":"array","items":{"type":"string"}}},"required":["iframeEmbedAllowedOrigins"],"additionalProperties":false},"GetFormByIdResponseSchema_Output":{"type":"object","properties":{"form":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"flow":{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"nodes":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["start"]},"title":{"type":"string"}},"required":["id","type","title"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["end"]},"title":{"type":"string"}},"required":["id","type","title"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["contact_capture"]},"title":{"type":"string"},"contact":{"type":"object","properties":{"nameFieldLabel":{"type":"string"},"phoneFieldLabel":{"type":"string"},"submitButtonLabel":{"type":"string"}},"required":["nameFieldLabel","phoneFieldLabel","submitButtonLabel"],"additionalProperties":false}},"required":["id","type","title","contact"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["question"]},"title":{"type":"string"},"questionKey":{"type":"string"},"question":{"oneOf":[{"type":"object","properties":{"prompt":{"type":"string"},"answerKind":{"type":"string","enum":["single_choice","multiple_choice"]},"options":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"}},"required":["id","label"],"additionalProperties":false}}},"required":["prompt","answerKind","options"],"additionalProperties":false},{"type":"object","properties":{"prompt":{"type":"string"},"answerKind":{"type":"string","enum":["text"]},"placeholder":{"type":"string"},"maxLength":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0}},"required":["prompt","answerKind"],"additionalProperties":false}]}},"required":["id","type","title","questionKey","question"],"additionalProperties":false}]}},"connections":{"type":"array","items":{"type":"object","properties":{"sourceNodeId":{"type":"string"},"targetNodeId":{"type":"string"},"label":{"type":"string"},"branch":{"type":"object","properties":{"optionIds":{"type":"array","items":{"type":"string"}},"match":{"type":"string","enum":["any","all"]}},"additionalProperties":false}},"required":["sourceNodeId","targetNodeId"],"additionalProperties":false}}},"required":["schemaVersion","nodes","connections"],"additionalProperties":false},"iframeEmbedAllowedOrigins":{"type":"array","items":{"type":"string","minLength":1}}},"required":["id","name","description","flow","iframeEmbedAllowedOrigins"],"additionalProperties":false}},"required":["form"],"additionalProperties":false},"SubmitFormBodySchema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"phone":{"type":"string","minLength":3,"maxLength":40},"answers":{"default":[],"type":"array","items":{"type":"object","properties":{"questionKey":{"type":"string","minLength":1},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["questionKey","value"]}},"acquisition":{"type":"object","properties":{"utmSource":{"type":"string","maxLength":200},"utmMedium":{"type":"string","maxLength":200},"utmCampaign":{"type":"string","maxLength":200},"utmTerm":{"type":"string","maxLength":200},"utmContent":{"type":"string","maxLength":200},"ref":{"type":"string","maxLength":200}},"additionalProperties":false}},"required":["name","phone"],"additionalProperties":false},"SubmitFormResponseSchema_Output":{"type":"object","properties":{"submissionId":{"type":"string"},"outcomes":{"type":"array","items":{"type":"object","properties":{"platform":{"type":"string","enum":["whatsapp","whatsapp_lite"]},"leadId":{"type":"string"},"chatId":{"type":"string"}},"required":["platform","leadId","chatId"],"additionalProperties":false}}},"required":["submissionId","outcomes"],"additionalProperties":false},"CreateChatsBatchBodyDto":{"type":"object","properties":{"entrypointId":{"type":"string","description":"ID do ponto de entrada (canal) no Spark. A plataforma é inferida automaticamente (WhatsApp ou WhatsApp Lite)."},"triggerAutomations":{"default":true,"description":"Se verdadeiro (padrão), dispara automações ao criar um novo lead ou chat.","type":"boolean"},"batch":{"minItems":1,"maxItems":500,"type":"array","items":{"type":"object","properties":{"phone":{"type":"string","minLength":3,"maxLength":40,"description":"Telefone do contato em qualquer formato comum. Será normalizado para o padrão E.164 da plataforma (ex.: 5511999999999)."},"name":{"description":"Nome exibido no chat (conversa DM). Se omitido, o chat é criado sem nome personalizado. Ao reutilizar um chat existente, atualiza o nome quando informado.","type":"string","minLength":1,"maxLength":255}},"required":["phone"],"additionalProperties":false},"description":"Lista de conversas DM a criar ou atualizar. O processamento ocorre em background e a resposta não inclui IDs dos chats ou leads."}},"required":["entrypointId","batch"],"additionalProperties":false},"CreateChatsBatchResponseSchema":{"type":"object","properties":{"queued":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Quantidade de itens enfileirados para upsert em background."}},"required":["queued"],"additionalProperties":false},"CreateChatBodyDto":{"type":"object","properties":{"entrypointId":{"type":"string","description":"ID do ponto de entrada (canal) no Spark. A plataforma é inferida automaticamente (WhatsApp ou WhatsApp Lite)."},"phone":{"type":"string","minLength":3,"maxLength":40,"description":"Telefone do contato em qualquer formato comum. Será normalizado para o padrão E.164 da plataforma (ex.: 5511999999999)."},"name":{"description":"Nome exibido no chat (conversa DM). Se omitido, o chat é criado sem nome personalizado. Ao reutilizar um chat existente, atualiza o nome quando informado.","type":"string","minLength":1,"maxLength":255},"triggerAutomations":{"default":true,"description":"Se verdadeiro (padrão), dispara automações ao criar um novo lead ou chat.","type":"boolean"}},"required":["entrypointId","phone"],"additionalProperties":false},"CreateChatResponseSchema":{"type":"object","properties":{"chatId":{"type":"string","description":"ID do chat no Spark."},"leadId":{"type":"string","description":"ID do lead vinculado ao chat (criado nesta requisição ou já existente)."}},"required":["chatId","leadId"],"additionalProperties":false},"CampaignFilterSchemaResponse":{"type":"object","properties":{"fields":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"type":{"type":"string"},"valueFormat":{"type":"string"},"operators":{"type":"array","items":{"type":"string"}},"description":{"type":"string"}},"required":["field","type","valueFormat","operators","description"]}},"combinationRules":{"type":"object","properties":{"groupCombinator":{"type":"string"},"betweenGroups":{"type":"string"},"description":{"type":"string"}},"required":["groupCombinator","betweenGroups","description"]}},"required":["fields","combinationRules"],"additionalProperties":false},"AudiencePreviewBodyDto":{"type":"object","properties":{"filters":{"description":"Grupos de filtros de público-alvo. Para restringir por canal, inclua chat.platform.","type":"array","items":{"type":"object","properties":{"combinator":{"type":"string","enum":["and","or"],"description":"Combina as condições dentro deste grupo."},"statements":{"minItems":1,"type":"array","items":{"type":"object","properties":{"field":{"type":"string","enum":["chat.platform","chat.status","chat.monetization","chat.entrypointId","chat.funnelStepId","chat.trackingLinkId","chat.isGroupChat","chat.isAnswered","chat.needsHumanAttention","chat.attentionReason","chat.tagIds","chat.assignedUserId","chat.virtual.participants-count","chat.virtual.dm-participant.contact","chat.virtual.dm-participant.birthDate","chat.virtual.lastMessageAt","chat.virtual.lastUpdateAt"],"description":"Campo do chat usado na condição. Consulte GET /v1/campaigns/filters/schema para detalhes."},"operator":{"type":"string","enum":["equals","not-equals","contains","not-contains","in","not-in","exists","not-exists","starts-with","ends-with","not-starts-with","not-ends-with","greater-than","less-than","greater-than-or-equal","less-than-or-equal","between","not-between","has-any","has-all","has-none"],"description":"Operador de comparação. Deve ser compatível com o tipo do campo."},"value":{"description":"Valor principal da condição. Datas em ISO 8601. IDs semânticos como string ou array de strings.","anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"array","items":{"type":"string"}},{"type":"array","items":{"type":"number"}},{"type":"array","items":{"type":"boolean"}},{"type":"array","items":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}}]},"value2":{"description":"Segundo valor para operadores between/not-between ou intervalos.","anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"array","items":{"type":"string"}},{"type":"array","items":{"type":"number"}},{"type":"array","items":{"type":"boolean"}},{"type":"array","items":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}}]}},"required":["field","operator"]}}},"required":["combinator","statements"]}}},"additionalProperties":false},"AudiencePreviewResponseSchema":{"type":"object","properties":{"estimatedCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Quantidade estimada de chats que receberiam o disparo."}},"required":["estimatedCount"],"additionalProperties":false},"CreateCampaignBodyDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"Nome único da campanha dentro da organização."},"description":{"description":"Descrição opcional da campanha.","type":"string","maxLength":2000},"platform":{"type":"string","enum":["whatsapp_lite","whatsapp","instagram"],"description":"Canal de envio da campanha. Define compatibilidade com templates oficiais e limites de cadência."},"templateId":{"type":"string","description":"ID semântico do modelo de mensagem cadastrado no Spark."},"cadence":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Mensagens por minuto (cadência). Ex.: 10 envia até 10 mensagens por minuto."},"filters":{"description":"Grupos de filtros de público-alvo. Grupos são combinados com AND.","type":"array","items":{"type":"object","properties":{"combinator":{"type":"string","enum":["and","or"],"description":"Combina as condições dentro deste grupo."},"statements":{"minItems":1,"type":"array","items":{"type":"object","properties":{"field":{"type":"string","enum":["chat.platform","chat.status","chat.monetization","chat.entrypointId","chat.funnelStepId","chat.trackingLinkId","chat.isGroupChat","chat.isAnswered","chat.needsHumanAttention","chat.attentionReason","chat.tagIds","chat.assignedUserId","chat.virtual.participants-count","chat.virtual.dm-participant.contact","chat.virtual.dm-participant.birthDate","chat.virtual.lastMessageAt","chat.virtual.lastUpdateAt"],"description":"Campo do chat usado na condição. Consulte GET /v1/campaigns/filters/schema para detalhes."},"operator":{"type":"string","enum":["equals","not-equals","contains","not-contains","in","not-in","exists","not-exists","starts-with","ends-with","not-starts-with","not-ends-with","greater-than","less-than","greater-than-or-equal","less-than-or-equal","between","not-between","has-any","has-all","has-none"],"description":"Operador de comparação. Deve ser compatível com o tipo do campo."},"value":{"description":"Valor principal da condição. Datas em ISO 8601. IDs semânticos como string ou array de strings.","anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"array","items":{"type":"string"}},{"type":"array","items":{"type":"number"}},{"type":"array","items":{"type":"boolean"}},{"type":"array","items":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}}]},"value2":{"description":"Segundo valor para operadores between/not-between ou intervalos.","anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"array","items":{"type":"string"}},{"type":"array","items":{"type":"number"}},{"type":"array","items":{"type":"boolean"}},{"type":"array","items":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}}]}},"required":["field","operator"]}}},"required":["combinator","statements"]}}},"required":["name","platform","templateId","cadence"],"additionalProperties":false},"CreateCampaignResponseSchema":{"type":"object","properties":{"campaignId":{"type":"string"},"status":{"type":"string","enum":["draft"]}},"required":["campaignId","status"],"additionalProperties":false},"ListCampaignsResponseSchema":{"type":"object","properties":{"campaigns":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"status":{"type":"string","enum":["draft","processing","completed","canceled","failed"]},"platform":{"type":"string","enum":["whatsapp_lite","whatsapp","instagram"],"description":"Canal de envio da campanha. Define compatibilidade com templates oficiais e limites de cadência."},"templateId":{"type":["string","null"]},"cadence":{"type":"number"}},"required":["id","name","description","status","platform","templateId","cadence"]}}},"required":["campaigns"],"additionalProperties":false},"GetCampaignResponseSchema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"array","items":{"type":"string"}},"status":{"type":"string","enum":["draft","processing","completed","canceled","failed"]},"platform":{"type":"string","enum":["whatsapp_lite","whatsapp","instagram"],"description":"Canal de envio da campanha. Define compatibilidade com templates oficiais e limites de cadência."},"templateId":{"type":"array","items":{"type":"string"}},"cadence":{"type":"number"},"executions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["draft","processing","completed","canceled","failed"]},"targetCount":{"type":"number"},"sentCount":{"type":"number"},"failedCount":{"type":"number"},"startedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","nullable":true},"completedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","nullable":true}},"required":["id","status","targetCount","sentCount","failedCount","startedAt","completedAt"]}}},"required":["id","name","description","status","platform","templateId","cadence","executions"]},"GetCampaignExecutionResponseSchema":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["draft","processing","completed","canceled","failed"]},"targetCount":{"type":"number"},"sentCount":{"type":"number"},"failedCount":{"type":"number"},"progress":{"type":"number","minimum":0,"maximum":100}},"required":["id","status","targetCount","sentCount","failedCount","progress"]},"StartCampaignBodyDto":{"type":"object","properties":{"commonVariables":{"description":"Valores das variáveis manuais do template (var1, var2, …) compartilhados por todos os destinatários.","type":"object","additionalProperties":{"type":"string"}}},"additionalProperties":false},"StartCampaignResponseSchema":{"type":"object","properties":{"executionId":{"type":"string"},"status":{"type":"string","enum":["processing"]}},"required":["executionId","status"],"additionalProperties":false},"ListMessageTemplatesResponseSchema":{"type":"object","properties":{"templates":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"isOfficial":{"type":"boolean"},"metaTemplateName":{"type":["string","null"]},"metaTemplateStatus":{"type":["string","null"]},"category":{"type":["string","null"]},"language":{"type":["string","null"]},"metaRejectedReason":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","name","description","isOfficial","metaTemplateName","metaTemplateStatus","category","language","metaRejectedReason","createdAt","updatedAt"]}}},"required":["templates"],"additionalProperties":false},"GetMessageTemplateResponseSchema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"array","items":{"type":"string"}},"isOfficial":{"type":"boolean"},"metaTemplateName":{"type":"array","items":{"type":"string"}},"metaTemplateStatus":{"type":"array","items":{"type":"string"}},"category":{"type":"array","items":{"type":"string"}},"language":{"type":"array","items":{"type":"string"}},"metaRejectedReason":{"type":"array","items":{"type":"string"}},"header":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","enum":["TEXT"]},"text":{"type":"string","minLength":1,"maxLength":60}},"required":["format","text"]},{"type":"object","properties":{"format":{"type":"string","enum":["IMAGE","VIDEO","DOCUMENT"]},"mediaId":{"type":"string"}},"required":["format","mediaId"]}],"nullable":true,"type":"object"},"body":{"type":"array","items":{"type":"string"}},"footer":{"type":"array","items":{"type":"string"}},"buttons":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["QUICK_REPLY","URL","PHONE_NUMBER"]},"text":{"type":"string","minLength":1,"maxLength":25},"url":{"type":"string","maxLength":2000},"phone_number":{"type":"string"}},"required":["type","text"]}},"variables":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0},"title":{"type":"string","minLength":1,"maxLength":120},"example":{"type":"string","minLength":1,"maxLength":15},"kind":{"type":"string","enum":["common","lead"]},"source":{"anyOf":[{"type":"string","enum":["chat.name","chat.contact","chat.birthday","lead.name","lead.contact","lead.display_contact"]},{"type":"string","pattern":"^custom_field:[a-z0-9_-]+$"}]}},"required":["index","title","example","kind"]}},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"},"type":{"type":"string"},"text":{"type":["string","null"]},"mediaId":{"type":["string","null"]}},"required":["id","order","type","text","mediaId"]}},"commonVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Chave da variável (ex.: var1, var2)."},"label":{"type":"string"},"required":{"type":"boolean"}},"required":["key"]},"description":"Variáveis manuais que devem ser informadas em commonVariables ao iniciar uma campanha."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","name","description","isOfficial","metaTemplateName","metaTemplateStatus","category","language","metaRejectedReason","header","body","footer","buttons","variables","items","commonVariables","createdAt","updatedAt"]},"CreateMessageTemplateBodyDto":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","minLength":1},"description":{"type":["string","null"]},"isOfficial":{"type":"boolean","enum":[true]},"whatsappEntrypointId":{"type":"string"},"metaTemplateName":{"type":"string","minLength":1,"maxLength":512,"pattern":"^[a-z0-9_]+$"},"category":{"type":"string","enum":["MARKETING","UTILITY"]},"language":{"type":"string","minLength":2,"maxLength":10},"header":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","enum":["TEXT"]},"text":{"type":"string","minLength":1,"maxLength":60}},"required":["format","text"]},{"type":"object","properties":{"format":{"type":"string","enum":["IMAGE","VIDEO","DOCUMENT"]},"mediaId":{"type":"string"}},"required":["format","mediaId"]}]},"body":{"type":"string","minLength":1,"maxLength":1024},"footer":{"type":"string","minLength":1,"maxLength":60},"buttons":{"maxItems":10,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["QUICK_REPLY","URL","PHONE_NUMBER"]},"text":{"type":"string","minLength":1,"maxLength":25},"url":{"type":"string","maxLength":2000},"phone_number":{"type":"string"}},"required":["type","text"]}},"variables":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0},"title":{"type":"string","minLength":1,"maxLength":120},"example":{"type":"string","minLength":1,"maxLength":15},"kind":{"type":"string","enum":["common","lead"]},"source":{"anyOf":[{"type":"string","enum":["chat.name","chat.contact","chat.birthday","lead.name","lead.contact","lead.display_contact"]},{"type":"string","pattern":"^custom_field:[a-z0-9_-]+$"}]}},"required":["index","title","example","kind"]}}},"required":["name","isOfficial","whatsappEntrypointId","metaTemplateName","category","language","body"]},{"type":"object","properties":{"name":{"type":"string","minLength":1},"description":{"type":["string","null"]},"isOfficial":{"type":"boolean","enum":[false]},"items":{"minItems":1,"type":"array","items":{"type":"object","properties":{"order":{"type":"integer","minimum":0,"maximum":9007199254740991},"type":{"type":"string","enum":["text","image","audio","video","document"]},"text":{"type":["string","null"]},"mediaId":{"type":["string","null"]}},"required":["order","type"]}},"variables":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0},"title":{"type":"string","minLength":1,"maxLength":120},"example":{"type":"string","minLength":1,"maxLength":15},"kind":{"type":"string","enum":["common","lead"]},"source":{"anyOf":[{"type":"string","enum":["chat.name","chat.contact","chat.birthday","lead.name","lead.contact","lead.display_contact"]},{"type":"string","pattern":"^custom_field:[a-z0-9_-]+$"}]}},"required":["index","title","example","kind"]}}},"required":["name","isOfficial","items"]}]},"UpdateMessageTemplateBodyDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"description":{"type":"array","items":{"type":"string"}},"items":{"minItems":1,"type":"array","items":{"type":"object","properties":{"order":{"type":"integer","minimum":0,"maximum":9007199254740991},"type":{"type":"string","enum":["text","image","audio","video","document"]},"text":{"type":["string","null"]},"mediaId":{"type":["string","null"]}},"required":["order","type"]}},"header":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","enum":["TEXT"]},"text":{"type":"string","minLength":1,"maxLength":60}},"required":["format","text"]},{"type":"object","properties":{"format":{"type":"string","enum":["IMAGE","VIDEO","DOCUMENT"]},"mediaId":{"type":"string"}},"required":["format","mediaId"]}],"nullable":true,"type":"object"},"body":{"type":"string","minLength":1,"maxLength":1024},"footer":{"type":"string","maxLength":60,"nullable":true},"buttons":{"maxItems":10,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["QUICK_REPLY","URL","PHONE_NUMBER"]},"text":{"type":"string","minLength":1,"maxLength":25},"url":{"type":"string","maxLength":2000},"phone_number":{"type":"string"}},"required":["type","text"]}},"variables":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0},"title":{"type":"string","minLength":1,"maxLength":120},"example":{"type":"string","minLength":1,"maxLength":15},"kind":{"type":"string","enum":["common","lead"]},"source":{"anyOf":[{"type":"string","enum":["chat.name","chat.contact","chat.birthday","lead.name","lead.contact","lead.display_contact"]},{"type":"string","pattern":"^custom_field:[a-z0-9_-]+$"}]}},"required":["index","title","example","kind"]}},"metaTemplateName":{"type":"string","minLength":1,"maxLength":512,"pattern":"^[a-z0-9_]+$"},"category":{"type":"string","enum":["MARKETING","UTILITY"]},"language":{"type":"string","minLength":2,"maxLength":10}}},"UploadPublicMediaBodySchema":{"type":"object","properties":{"files":{"type":"array","items":{"type":"string","format":"binary"}}},"required":["files"]},"UploadPublicMediaResponseSchema_Output":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"name":{"type":"string"},"id":{"type":"string"},"url":{"type":"string"}},"required":["success","name","id","url"],"additionalProperties":false},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"name":{"type":"string"}},"required":["success","name"],"additionalProperties":false}]}},"SendPublicMessageBodyDto":{"type":"object","properties":{"text":{"type":"string"},"mediaIds":{"type":"array","items":{"type":"string"}},"replyToId":{"type":"string"},"audioId":{"type":"string"},"delay":{"type":"integer","minimum":0,"maximum":9007199254740991},"instagramDelivery":{"type":"string","enum":["dm","comment_reply","private_reply"]},"instagramSourceMessageId":{"type":"string"}}},"SendPublicTemplateBodyDto":{"type":"object","properties":{"templateId":{"type":"string"},"replyToId":{"type":"string"},"commonVariables":{"type":"object","additionalProperties":{"type":"string"}}},"required":["templateId"]},"ListPublicMessagesResponseSchema_Output":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"text":{"type":["string","null"]},"type":{"type":"string"},"status":{"type":"string"},"transcription":{"type":["string","null"]},"forward":{"type":"object","properties":{"displayName":{"type":"string"},"type":{"type":"string"},"date":{"type":"number"}},"required":["displayName","type"],"additionalProperties":false,"nullable":true},"replyToId":{"type":["string","null"]},"instagram":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["comment"]},"commentId":{"type":"string"},"mediaId":{"type":"string"},"parentCommentId":{"type":"string"}},"required":["kind","commentId","mediaId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["comment_reply"]},"parentCommentId":{"type":"string"}},"required":["kind","parentCommentId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["private_reply"]},"parentCommentId":{"type":"string"}},"required":["kind","parentCommentId"],"additionalProperties":false}],"nullable":true,"type":"object"},"media":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["image","audio","video","document"]},"url":{"type":"string"},"mimeType":{"type":"string"},"fileName":{"type":["string","null"]}},"required":["id","type","url","mimeType"],"additionalProperties":false,"nullable":true},"location":{"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"name":{"type":"string"},"address":{"type":"string"},"url":{"type":"string"}},"required":["latitude","longitude"],"additionalProperties":false,"nullable":true},"sender":{"type":"object","properties":{"id":{"type":["string","null"]},"avatarUrl":{"type":["string","null"]},"name":{"type":"string"},"isParticipant":{"type":"boolean"}},"required":["id","name","isParticipant"],"additionalProperties":false},"isOfficialTemplate":{"type":"boolean"},"templateCharged":{"type":"boolean"},"templateComponents":{"$ref":"#/components/schemas/WebhookTemplateComponents"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"ad":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["ad","post"]},"url":{"type":"string"},"headline":{"type":"string"}},"required":["id","type","url"],"additionalProperties":false,"nullable":true}},"required":["id","type","status","sender","isOfficialTemplate","templateCharged","createdAt"],"additionalProperties":false}},"nextCursor":{"type":"string"}},"required":["records"],"additionalProperties":false},"CreateWhatsappConnectionSessionBodyDto":{"type":"object","properties":{"funnelId":{"description":"ID do funil. Informe junto com funnelStepId para garantir que a etapa pertence a esse funil.","type":"string"},"funnelStepId":{"description":"Etapa em que os contatos deste número entram. Omita para não vincular um funil.","type":"string"},"coexistence":{"description":"Quando verdadeiro, abre o fluxo de coexistência com o WhatsApp Business App. O padrão é o Embedded Signup da API oficial.","type":"boolean"},"returnUrl":{"description":"URL https para onde a pessoa volta depois de conectar o número.","type":"string","minLength":1,"maxLength":2000}},"additionalProperties":false},"CreateWhatsappConnectionSessionResponseSchema":{"type":"object","properties":{"sessionId":{"type":"string"},"status":{"type":"string","enum":["pending"]},"url":{"type":"string","format":"uri"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["sessionId","status","url","expiresAt"],"additionalProperties":false},"GetWhatsappConnectionSessionResponseSchema":{"type":"object","properties":{"sessionId":{"type":"string"},"status":{"type":"string","enum":["pending","completed","failed","expired"]},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"coexistence":{"type":"boolean"},"returnUrl":{"type":"array","items":{"type":"string"}},"entrypoint":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":["string","null"]},"displayPhone":{"type":["string","null"]},"phoneNumberId":{"type":"string"},"wabaId":{"type":"string"},"funnelId":{"type":["string","null"]},"funnelStepId":{"type":["string","null"]},"isCoexistence":{"type":"boolean"}},"required":["id","name","displayPhone","phoneNumberId","wabaId","funnelId","funnelStepId","isCoexistence"],"additionalProperties":false,"nullable":true},"reason":{"type":"string","enum":["expired","token_exchange_failed","phone_in_use","funnel_not_found","phone_not_found"],"nullable":true},"message":{"type":"array","items":{"type":"string"}}},"required":["sessionId","status","expiresAt","coexistence","returnUrl","entrypoint","reason","message"],"additionalProperties":false},"MessagesReceivedWebhookPayload":{"type":"object","properties":{"tenantId":{"type":"string"},"chatId":{"type":"string"},"entrypointId":{"type":"string"},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"chat":{"type":"object","properties":{"id":{"type":"string"},"platform":{"type":"string","enum":["whatsapp","whatsapp_lite","instagram","telegram","lead_form"]},"kind":{"type":"string","enum":["dm","group"]},"entrypointId":{"type":"string"},"externalId":{"nullable":true,"type":"string"},"name":{"nullable":true,"type":"string"},"status":{"type":"string","enum":["ongoing","ignored","completed"]},"avatarUrl":{"nullable":true,"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","platform","kind","entrypointId","externalId","name","status","avatarUrl","createdAt","updatedAt"],"additionalProperties":false},"message":{"type":"object","properties":{"id":{"type":"string"},"text":{"nullable":true,"type":"string"},"type":{"type":"string"},"status":{"type":"string"},"transcription":{"nullable":true,"type":"string"},"forward":{"nullable":true,"type":"object","properties":{"displayName":{"type":"string"},"type":{"type":"string"},"date":{"type":"number"}},"required":["displayName","type"],"additionalProperties":false},"replyToId":{"nullable":true,"type":"string"},"instagram":{"nullable":true,"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["comment"]},"commentId":{"type":"string"},"mediaId":{"type":"string"},"parentCommentId":{"type":"string"}},"required":["kind","commentId","mediaId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["comment_reply"]},"parentCommentId":{"type":"string"}},"required":["kind","parentCommentId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["private_reply"]},"parentCommentId":{"type":"string"}},"required":["kind","parentCommentId"],"additionalProperties":false}],"type":"object"},"media":{"nullable":true,"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["image","audio","video","document"]},"url":{"type":"string"},"mimeType":{"type":"string"},"fileName":{"nullable":true,"type":"string"}},"required":["id","type","url","mimeType"],"additionalProperties":false},"location":{"nullable":true,"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"name":{"type":"string"},"address":{"type":"string"},"url":{"type":"string"}},"required":["latitude","longitude"],"additionalProperties":false},"sender":{"type":"object","properties":{"id":{"nullable":true,"type":"string"},"avatarUrl":{"nullable":true,"type":"string"},"name":{"type":"string"},"isParticipant":{"type":"boolean"}},"required":["id","name","isParticipant"],"additionalProperties":false},"isOfficialTemplate":{"type":"boolean"},"templateCharged":{"type":"boolean"},"templateComponents":{"$ref":"#/components/schemas/WebhookTemplateComponents"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","type","status","sender","isOfficialTemplate","templateCharged","createdAt"],"additionalProperties":false}},"required":["tenantId","chatId","entrypointId","occurredAt","chat","message"],"additionalProperties":false},"MessagesSentWebhookPayload":{"type":"object","properties":{"tenantId":{"type":"string"},"chatId":{"type":"string"},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"source":{"type":"string","enum":["public_api","user","automation","campaign","addon","integration","business_hours","business_app","system"]},"chat":{"type":"object","properties":{"id":{"type":"string"},"platform":{"type":"string","enum":["whatsapp","whatsapp_lite","instagram","telegram","lead_form"]},"kind":{"type":"string","enum":["dm","group"]},"entrypointId":{"type":"string"},"externalId":{"nullable":true,"type":"string"},"name":{"nullable":true,"type":"string"},"status":{"type":"string","enum":["ongoing","ignored","completed"]},"avatarUrl":{"nullable":true,"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","platform","kind","entrypointId","externalId","name","status","avatarUrl","createdAt","updatedAt"],"additionalProperties":false},"message":{"type":"object","properties":{"id":{"type":"string"},"text":{"nullable":true,"type":"string"},"type":{"type":"string"},"status":{"type":"string"},"transcription":{"nullable":true,"type":"string"},"forward":{"nullable":true,"type":"object","properties":{"displayName":{"type":"string"},"type":{"type":"string"},"date":{"type":"number"}},"required":["displayName","type"],"additionalProperties":false},"replyToId":{"nullable":true,"type":"string"},"instagram":{"nullable":true,"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["comment"]},"commentId":{"type":"string"},"mediaId":{"type":"string"},"parentCommentId":{"type":"string"}},"required":["kind","commentId","mediaId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["comment_reply"]},"parentCommentId":{"type":"string"}},"required":["kind","parentCommentId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["private_reply"]},"parentCommentId":{"type":"string"}},"required":["kind","parentCommentId"],"additionalProperties":false}],"type":"object"},"media":{"nullable":true,"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["image","audio","video","document"]},"url":{"type":"string"},"mimeType":{"type":"string"},"fileName":{"nullable":true,"type":"string"}},"required":["id","type","url","mimeType"],"additionalProperties":false},"location":{"nullable":true,"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"name":{"type":"string"},"address":{"type":"string"},"url":{"type":"string"}},"required":["latitude","longitude"],"additionalProperties":false},"sender":{"type":"object","properties":{"id":{"nullable":true,"type":"string"},"avatarUrl":{"nullable":true,"type":"string"},"name":{"type":"string"},"isParticipant":{"type":"boolean"}},"required":["id","name","isParticipant"],"additionalProperties":false},"isOfficialTemplate":{"type":"boolean"},"templateCharged":{"type":"boolean"},"templateComponents":{"$ref":"#/components/schemas/WebhookTemplateComponents"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","type","status","sender","isOfficialTemplate","templateCharged","createdAt"],"additionalProperties":false}},"required":["tenantId","chatId","occurredAt","chat","message"],"additionalProperties":false},"ChatsCreatedWebhookPayload":{"type":"object","properties":{"tenantId":{"type":"string"},"chatId":{"type":"string"},"platform":{"type":"string","enum":["whatsapp","whatsapp_lite","instagram","telegram","lead_form"]},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"entrypointId":{"type":"string"},"acquisition":{"type":"object","properties":{"source":{"type":"string","enum":["meta_lead_ads","spark_lead_form","manual","unknown"]},"provider":{"type":"string","enum":["meta"]},"commercialChannel":{"type":"string","enum":["paid_media","organic","other"]},"originDetail":{"type":"string"},"capturedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"meta":{"type":"object","properties":{"pageId":{"type":"string"},"pageName":{"type":"string"},"formId":{"type":"string"},"formName":{"type":"string"},"leadgenId":{"type":"string"},"campaignId":{"type":"string"},"adsetId":{"type":"string"},"adId":{"type":"string"}}}},"required":["source"],"additionalProperties":false}},"required":["tenantId","chatId","platform","occurredAt"],"additionalProperties":false},"WhatsappEntrypointConnectedWebhookPayload":{"type":"object","properties":{"tenantId":{"type":"string"},"sessionId":{"type":"string"},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"entrypoint":{"type":"object","properties":{"id":{"type":"string"},"name":{"nullable":true,"type":"string"},"displayPhone":{"nullable":true,"type":"string"},"phoneNumberId":{"type":"string"},"wabaId":{"type":"string"},"funnelId":{"nullable":true,"type":"string"},"funnelStepId":{"nullable":true,"type":"string"},"isCoexistence":{"type":"boolean"}},"required":["id","name","displayPhone","phoneNumberId","wabaId","funnelId","funnelStepId","isCoexistence"],"additionalProperties":false}},"required":["tenantId","sessionId","occurredAt","entrypoint"],"additionalProperties":false},"WhatsappEntrypointConnectionFailedWebhookPayload":{"type":"object","properties":{"tenantId":{"type":"string"},"sessionId":{"type":"string"},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"status":{"type":"string","enum":["failed","expired"]},"reason":{"type":"string","enum":["expired","token_exchange_failed","phone_in_use","funnel_not_found","phone_not_found"]}},"required":["tenantId","sessionId","occurredAt","status","reason"],"additionalProperties":false},"WhatsappEntrypointHistorySyncedWebhookPayload":{"type":"object","properties":{"tenantId":{"type":"string"},"entrypointId":{"type":"string"},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"importedChats":{"type":"integer","minimum":0,"maximum":9007199254740991},"importedMessages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["tenantId","entrypointId","occurredAt","importedChats","importedMessages"],"additionalProperties":false},"MessageTemplatesCreatedWebhookPayload":{"type":"object","properties":{"tenantId":{"type":"string"},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"template":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"nullable":true,"type":"string"},"isOfficial":{"type":"boolean"},"metaTemplateName":{"nullable":true,"type":"string"},"metaTemplateStatus":{"nullable":true,"type":"string"},"category":{"nullable":true,"type":"string"},"language":{"nullable":true,"type":"string"},"metaRejectedReason":{"nullable":true,"type":"string"},"header":{"nullable":true,"oneOf":[{"type":"object","properties":{"format":{"type":"string","enum":["TEXT"]},"text":{"type":"string","minLength":1,"maxLength":60}},"required":["format","text"]},{"type":"object","properties":{"format":{"type":"string","enum":["IMAGE","VIDEO","DOCUMENT"]},"mediaId":{"type":"string"}},"required":["format","mediaId"]}],"type":"object"},"body":{"nullable":true,"type":"string"},"footer":{"nullable":true,"type":"string"},"buttons":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["QUICK_REPLY","URL","PHONE_NUMBER"]},"text":{"type":"string","minLength":1,"maxLength":25},"url":{"type":"string","maxLength":2000},"phone_number":{"type":"string"}},"required":["type","text"]}},"variables":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"title":{"type":"string","minLength":1,"maxLength":120},"example":{"type":"string","minLength":1,"maxLength":15},"kind":{"type":"string","enum":["common","lead"]},"source":{"anyOf":[{"type":"string","enum":["chat.name","chat.contact","chat.birthday","lead.name","lead.contact","lead.display_contact"]},{"type":"string","pattern":"^custom_field:[a-z0-9_-]+$"}]}},"required":["index","title","example","kind"]}},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"},"type":{"type":"string"},"text":{"nullable":true,"type":"string"},"mediaId":{"nullable":true,"type":"string"}},"required":["id","order","type","text","mediaId"]}},"commonVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Chave da variável (ex.: var1, var2)."},"label":{"type":"string"},"required":{"type":"boolean"}},"required":["key"]},"description":"Variáveis manuais que devem ser informadas em commonVariables ao iniciar uma campanha."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","name","description","isOfficial","metaTemplateName","metaTemplateStatus","category","language","metaRejectedReason","header","body","footer","buttons","variables","items","commonVariables","createdAt","updatedAt"]}},"required":["tenantId","occurredAt","template"],"additionalProperties":false},"MessageTemplatesUpdatedWebhookPayload":{"type":"object","properties":{"tenantId":{"type":"string"},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"template":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"nullable":true,"type":"string"},"isOfficial":{"type":"boolean"},"metaTemplateName":{"nullable":true,"type":"string"},"metaTemplateStatus":{"nullable":true,"type":"string"},"category":{"nullable":true,"type":"string"},"language":{"nullable":true,"type":"string"},"metaRejectedReason":{"nullable":true,"type":"string"},"header":{"nullable":true,"oneOf":[{"type":"object","properties":{"format":{"type":"string","enum":["TEXT"]},"text":{"type":"string","minLength":1,"maxLength":60}},"required":["format","text"]},{"type":"object","properties":{"format":{"type":"string","enum":["IMAGE","VIDEO","DOCUMENT"]},"mediaId":{"type":"string"}},"required":["format","mediaId"]}],"type":"object"},"body":{"nullable":true,"type":"string"},"footer":{"nullable":true,"type":"string"},"buttons":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["QUICK_REPLY","URL","PHONE_NUMBER"]},"text":{"type":"string","minLength":1,"maxLength":25},"url":{"type":"string","maxLength":2000},"phone_number":{"type":"string"}},"required":["type","text"]}},"variables":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"title":{"type":"string","minLength":1,"maxLength":120},"example":{"type":"string","minLength":1,"maxLength":15},"kind":{"type":"string","enum":["common","lead"]},"source":{"anyOf":[{"type":"string","enum":["chat.name","chat.contact","chat.birthday","lead.name","lead.contact","lead.display_contact"]},{"type":"string","pattern":"^custom_field:[a-z0-9_-]+$"}]}},"required":["index","title","example","kind"]}},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"},"type":{"type":"string"},"text":{"nullable":true,"type":"string"},"mediaId":{"nullable":true,"type":"string"}},"required":["id","order","type","text","mediaId"]}},"commonVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Chave da variável (ex.: var1, var2)."},"label":{"type":"string"},"required":{"type":"boolean"}},"required":["key"]},"description":"Variáveis manuais que devem ser informadas em commonVariables ao iniciar uma campanha."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","name","description","isOfficial","metaTemplateName","metaTemplateStatus","category","language","metaRejectedReason","header","body","footer","buttons","variables","items","commonVariables","createdAt","updatedAt"]}},"required":["tenantId","occurredAt","template"],"additionalProperties":false},"MessageTemplatesDeletedWebhookPayload":{"type":"object","properties":{"tenantId":{"type":"string"},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"template":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"nullable":true,"type":"string"},"isOfficial":{"type":"boolean"},"metaTemplateName":{"nullable":true,"type":"string"},"metaTemplateStatus":{"nullable":true,"type":"string"},"category":{"nullable":true,"type":"string"},"language":{"nullable":true,"type":"string"},"metaRejectedReason":{"nullable":true,"type":"string"},"header":{"nullable":true,"oneOf":[{"type":"object","properties":{"format":{"type":"string","enum":["TEXT"]},"text":{"type":"string","minLength":1,"maxLength":60}},"required":["format","text"]},{"type":"object","properties":{"format":{"type":"string","enum":["IMAGE","VIDEO","DOCUMENT"]},"mediaId":{"type":"string"}},"required":["format","mediaId"]}],"type":"object"},"body":{"nullable":true,"type":"string"},"footer":{"nullable":true,"type":"string"},"buttons":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["QUICK_REPLY","URL","PHONE_NUMBER"]},"text":{"type":"string","minLength":1,"maxLength":25},"url":{"type":"string","maxLength":2000},"phone_number":{"type":"string"}},"required":["type","text"]}},"variables":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"title":{"type":"string","minLength":1,"maxLength":120},"example":{"type":"string","minLength":1,"maxLength":15},"kind":{"type":"string","enum":["common","lead"]},"source":{"anyOf":[{"type":"string","enum":["chat.name","chat.contact","chat.birthday","lead.name","lead.contact","lead.display_contact"]},{"type":"string","pattern":"^custom_field:[a-z0-9_-]+$"}]}},"required":["index","title","example","kind"]}},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"},"type":{"type":"string"},"text":{"nullable":true,"type":"string"},"mediaId":{"nullable":true,"type":"string"}},"required":["id","order","type","text","mediaId"]}},"commonVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Chave da variável (ex.: var1, var2)."},"label":{"type":"string"},"required":{"type":"boolean"}},"required":["key"]},"description":"Variáveis manuais que devem ser informadas em commonVariables ao iniciar uma campanha."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","name","description","isOfficial","metaTemplateName","metaTemplateStatus","category","language","metaRejectedReason","header","body","footer","buttons","variables","items","commonVariables","createdAt","updatedAt"]}},"required":["tenantId","occurredAt","template"],"additionalProperties":false},"MessageTemplatesStatusUpdatedWebhookPayload":{"type":"object","properties":{"tenantId":{"type":"string"},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"template":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"nullable":true,"type":"string"},"isOfficial":{"type":"boolean"},"metaTemplateName":{"nullable":true,"type":"string"},"metaTemplateStatus":{"nullable":true,"type":"string"},"category":{"nullable":true,"type":"string"},"language":{"nullable":true,"type":"string"},"metaRejectedReason":{"nullable":true,"type":"string"},"header":{"nullable":true,"oneOf":[{"type":"object","properties":{"format":{"type":"string","enum":["TEXT"]},"text":{"type":"string","minLength":1,"maxLength":60}},"required":["format","text"]},{"type":"object","properties":{"format":{"type":"string","enum":["IMAGE","VIDEO","DOCUMENT"]},"mediaId":{"type":"string"}},"required":["format","mediaId"]}],"type":"object"},"body":{"nullable":true,"type":"string"},"footer":{"nullable":true,"type":"string"},"buttons":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["QUICK_REPLY","URL","PHONE_NUMBER"]},"text":{"type":"string","minLength":1,"maxLength":25},"url":{"type":"string","maxLength":2000},"phone_number":{"type":"string"}},"required":["type","text"]}},"variables":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"title":{"type":"string","minLength":1,"maxLength":120},"example":{"type":"string","minLength":1,"maxLength":15},"kind":{"type":"string","enum":["common","lead"]},"source":{"anyOf":[{"type":"string","enum":["chat.name","chat.contact","chat.birthday","lead.name","lead.contact","lead.display_contact"]},{"type":"string","pattern":"^custom_field:[a-z0-9_-]+$"}]}},"required":["index","title","example","kind"]}},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"},"type":{"type":"string"},"text":{"nullable":true,"type":"string"},"mediaId":{"nullable":true,"type":"string"}},"required":["id","order","type","text","mediaId"]}},"commonVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Chave da variável (ex.: var1, var2)."},"label":{"type":"string"},"required":{"type":"boolean"}},"required":["key"]},"description":"Variáveis manuais que devem ser informadas em commonVariables ao iniciar uma campanha."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","name","description","isOfficial","metaTemplateName","metaTemplateStatus","category","language","metaRejectedReason","header","body","footer","buttons","variables","items","commonVariables","createdAt","updatedAt"]},"previousStatus":{"nullable":true,"type":"string"}},"required":["tenantId","occurredAt","template","previousStatus"],"additionalProperties":false},"MessageTemplatesCategoryUpdatedWebhookPayload":{"type":"object","properties":{"tenantId":{"type":"string"},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"template":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"nullable":true,"type":"string"},"isOfficial":{"type":"boolean"},"metaTemplateName":{"nullable":true,"type":"string"},"metaTemplateStatus":{"nullable":true,"type":"string"},"category":{"nullable":true,"type":"string"},"language":{"nullable":true,"type":"string"},"metaRejectedReason":{"nullable":true,"type":"string"},"header":{"nullable":true,"oneOf":[{"type":"object","properties":{"format":{"type":"string","enum":["TEXT"]},"text":{"type":"string","minLength":1,"maxLength":60}},"required":["format","text"]},{"type":"object","properties":{"format":{"type":"string","enum":["IMAGE","VIDEO","DOCUMENT"]},"mediaId":{"type":"string"}},"required":["format","mediaId"]}],"type":"object"},"body":{"nullable":true,"type":"string"},"footer":{"nullable":true,"type":"string"},"buttons":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["QUICK_REPLY","URL","PHONE_NUMBER"]},"text":{"type":"string","minLength":1,"maxLength":25},"url":{"type":"string","maxLength":2000},"phone_number":{"type":"string"}},"required":["type","text"]}},"variables":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"title":{"type":"string","minLength":1,"maxLength":120},"example":{"type":"string","minLength":1,"maxLength":15},"kind":{"type":"string","enum":["common","lead"]},"source":{"anyOf":[{"type":"string","enum":["chat.name","chat.contact","chat.birthday","lead.name","lead.contact","lead.display_contact"]},{"type":"string","pattern":"^custom_field:[a-z0-9_-]+$"}]}},"required":["index","title","example","kind"]}},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"},"type":{"type":"string"},"text":{"nullable":true,"type":"string"},"mediaId":{"nullable":true,"type":"string"}},"required":["id","order","type","text","mediaId"]}},"commonVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Chave da variável (ex.: var1, var2)."},"label":{"type":"string"},"required":{"type":"boolean"}},"required":["key"]},"description":"Variáveis manuais que devem ser informadas em commonVariables ao iniciar uma campanha."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","name","description","isOfficial","metaTemplateName","metaTemplateStatus","category","language","metaRejectedReason","header","body","footer","buttons","variables","items","commonVariables","createdAt","updatedAt"]},"previousCategory":{"nullable":true,"type":"string"}},"required":["tenantId","occurredAt","template","previousCategory"],"additionalProperties":false},"SparkWebhookBodyMessagesReceived":{"type":"object","properties":{"event":{"type":"string","enum":["messages.received"]},"data":{"type":"object","properties":{"tenantId":{"type":"string"},"chatId":{"type":"string"},"entrypointId":{"type":"string"},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"chat":{"type":"object","properties":{"id":{"type":"string"},"platform":{"type":"string","enum":["whatsapp","whatsapp_lite","instagram","telegram","lead_form"]},"kind":{"type":"string","enum":["dm","group"]},"entrypointId":{"type":"string"},"externalId":{"nullable":true,"type":"string"},"name":{"nullable":true,"type":"string"},"status":{"type":"string","enum":["ongoing","ignored","completed"]},"avatarUrl":{"nullable":true,"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","platform","kind","entrypointId","externalId","name","status","avatarUrl","createdAt","updatedAt"],"additionalProperties":false},"message":{"type":"object","properties":{"id":{"type":"string"},"text":{"nullable":true,"type":"string"},"type":{"type":"string"},"status":{"type":"string"},"transcription":{"nullable":true,"type":"string"},"forward":{"nullable":true,"type":"object","properties":{"displayName":{"type":"string"},"type":{"type":"string"},"date":{"type":"number"}},"required":["displayName","type"],"additionalProperties":false},"replyToId":{"nullable":true,"type":"string"},"instagram":{"nullable":true,"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["comment"]},"commentId":{"type":"string"},"mediaId":{"type":"string"},"parentCommentId":{"type":"string"}},"required":["kind","commentId","mediaId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["comment_reply"]},"parentCommentId":{"type":"string"}},"required":["kind","parentCommentId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["private_reply"]},"parentCommentId":{"type":"string"}},"required":["kind","parentCommentId"],"additionalProperties":false}],"type":"object"},"media":{"nullable":true,"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["image","audio","video","document"]},"url":{"type":"string"},"mimeType":{"type":"string"},"fileName":{"nullable":true,"type":"string"}},"required":["id","type","url","mimeType"],"additionalProperties":false},"location":{"nullable":true,"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"name":{"type":"string"},"address":{"type":"string"},"url":{"type":"string"}},"required":["latitude","longitude"],"additionalProperties":false},"sender":{"type":"object","properties":{"id":{"nullable":true,"type":"string"},"avatarUrl":{"nullable":true,"type":"string"},"name":{"type":"string"},"isParticipant":{"type":"boolean"}},"required":["id","name","isParticipant"],"additionalProperties":false},"isOfficialTemplate":{"type":"boolean"},"templateCharged":{"type":"boolean"},"templateComponents":{"$ref":"#/components/schemas/WebhookTemplateComponents"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","type","status","sender","isOfficialTemplate","templateCharged","createdAt"],"additionalProperties":false}},"required":["tenantId","chatId","entrypointId","occurredAt","chat","message"],"additionalProperties":false}},"required":["event","data"],"additionalProperties":false},"SparkWebhookBodyMessagesSent":{"type":"object","properties":{"event":{"type":"string","enum":["messages.sent"]},"data":{"type":"object","properties":{"tenantId":{"type":"string"},"chatId":{"type":"string"},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"source":{"type":"string","enum":["public_api","user","automation","campaign","addon","integration","business_hours","business_app","system"]},"chat":{"type":"object","properties":{"id":{"type":"string"},"platform":{"type":"string","enum":["whatsapp","whatsapp_lite","instagram","telegram","lead_form"]},"kind":{"type":"string","enum":["dm","group"]},"entrypointId":{"type":"string"},"externalId":{"nullable":true,"type":"string"},"name":{"nullable":true,"type":"string"},"status":{"type":"string","enum":["ongoing","ignored","completed"]},"avatarUrl":{"nullable":true,"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","platform","kind","entrypointId","externalId","name","status","avatarUrl","createdAt","updatedAt"],"additionalProperties":false},"message":{"type":"object","properties":{"id":{"type":"string"},"text":{"nullable":true,"type":"string"},"type":{"type":"string"},"status":{"type":"string"},"transcription":{"nullable":true,"type":"string"},"forward":{"nullable":true,"type":"object","properties":{"displayName":{"type":"string"},"type":{"type":"string"},"date":{"type":"number"}},"required":["displayName","type"],"additionalProperties":false},"replyToId":{"nullable":true,"type":"string"},"instagram":{"nullable":true,"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["comment"]},"commentId":{"type":"string"},"mediaId":{"type":"string"},"parentCommentId":{"type":"string"}},"required":["kind","commentId","mediaId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["comment_reply"]},"parentCommentId":{"type":"string"}},"required":["kind","parentCommentId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["private_reply"]},"parentCommentId":{"type":"string"}},"required":["kind","parentCommentId"],"additionalProperties":false}],"type":"object"},"media":{"nullable":true,"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["image","audio","video","document"]},"url":{"type":"string"},"mimeType":{"type":"string"},"fileName":{"nullable":true,"type":"string"}},"required":["id","type","url","mimeType"],"additionalProperties":false},"location":{"nullable":true,"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"name":{"type":"string"},"address":{"type":"string"},"url":{"type":"string"}},"required":["latitude","longitude"],"additionalProperties":false},"sender":{"type":"object","properties":{"id":{"nullable":true,"type":"string"},"avatarUrl":{"nullable":true,"type":"string"},"name":{"type":"string"},"isParticipant":{"type":"boolean"}},"required":["id","name","isParticipant"],"additionalProperties":false},"isOfficialTemplate":{"type":"boolean"},"templateCharged":{"type":"boolean"},"templateComponents":{"$ref":"#/components/schemas/WebhookTemplateComponents"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","type","status","sender","isOfficialTemplate","templateCharged","createdAt"],"additionalProperties":false}},"required":["tenantId","chatId","occurredAt","chat","message"],"additionalProperties":false}},"required":["event","data"],"additionalProperties":false},"SparkWebhookBodyChatsCreated":{"type":"object","properties":{"event":{"type":"string","enum":["chats.created"]},"data":{"type":"object","properties":{"tenantId":{"type":"string"},"chatId":{"type":"string"},"platform":{"type":"string","enum":["whatsapp","whatsapp_lite","instagram","telegram","lead_form"]},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"entrypointId":{"type":"string"},"acquisition":{"type":"object","properties":{"source":{"type":"string","enum":["meta_lead_ads","spark_lead_form","manual","unknown"]},"provider":{"type":"string","enum":["meta"]},"commercialChannel":{"type":"string","enum":["paid_media","organic","other"]},"originDetail":{"type":"string"},"capturedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"meta":{"type":"object","properties":{"pageId":{"type":"string"},"pageName":{"type":"string"},"formId":{"type":"string"},"formName":{"type":"string"},"leadgenId":{"type":"string"},"campaignId":{"type":"string"},"adsetId":{"type":"string"},"adId":{"type":"string"}}}},"required":["source"],"additionalProperties":false}},"required":["tenantId","chatId","platform","occurredAt"],"additionalProperties":false}},"required":["event","data"],"additionalProperties":false},"SparkWebhookBodyEntrypointsWhatsappConnected":{"type":"object","properties":{"event":{"type":"string","enum":["entrypoints.whatsapp.connected"]},"data":{"type":"object","properties":{"tenantId":{"type":"string"},"sessionId":{"type":"string"},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"entrypoint":{"type":"object","properties":{"id":{"type":"string"},"name":{"nullable":true,"type":"string"},"displayPhone":{"nullable":true,"type":"string"},"phoneNumberId":{"type":"string"},"wabaId":{"type":"string"},"funnelId":{"nullable":true,"type":"string"},"funnelStepId":{"nullable":true,"type":"string"},"isCoexistence":{"type":"boolean"}},"required":["id","name","displayPhone","phoneNumberId","wabaId","funnelId","funnelStepId","isCoexistence"],"additionalProperties":false}},"required":["tenantId","sessionId","occurredAt","entrypoint"],"additionalProperties":false}},"required":["event","data"],"additionalProperties":false},"SparkWebhookBodyEntrypointsWhatsappConnectionFailed":{"type":"object","properties":{"event":{"type":"string","enum":["entrypoints.whatsapp.connection_failed"]},"data":{"type":"object","properties":{"tenantId":{"type":"string"},"sessionId":{"type":"string"},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"status":{"type":"string","enum":["failed","expired"]},"reason":{"type":"string","enum":["expired","token_exchange_failed","phone_in_use","funnel_not_found","phone_not_found"]}},"required":["tenantId","sessionId","occurredAt","status","reason"],"additionalProperties":false}},"required":["event","data"],"additionalProperties":false},"SparkWebhookBodyEntrypointsWhatsappHistorySynced":{"type":"object","properties":{"event":{"type":"string","enum":["entrypoints.whatsapp.history_synced"]},"data":{"type":"object","properties":{"tenantId":{"type":"string"},"entrypointId":{"type":"string"},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"importedChats":{"type":"integer","minimum":0,"maximum":9007199254740991},"importedMessages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["tenantId","entrypointId","occurredAt","importedChats","importedMessages"],"additionalProperties":false}},"required":["event","data"],"additionalProperties":false},"SparkWebhookBodyMessageTemplatesCreated":{"type":"object","properties":{"event":{"type":"string","enum":["message_templates.created"]},"data":{"type":"object","properties":{"tenantId":{"type":"string"},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"template":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"nullable":true,"type":"string"},"isOfficial":{"type":"boolean"},"metaTemplateName":{"nullable":true,"type":"string"},"metaTemplateStatus":{"nullable":true,"type":"string"},"category":{"nullable":true,"type":"string"},"language":{"nullable":true,"type":"string"},"metaRejectedReason":{"nullable":true,"type":"string"},"header":{"nullable":true,"oneOf":[{"type":"object","properties":{"format":{"type":"string","enum":["TEXT"]},"text":{"type":"string","minLength":1,"maxLength":60}},"required":["format","text"]},{"type":"object","properties":{"format":{"type":"string","enum":["IMAGE","VIDEO","DOCUMENT"]},"mediaId":{"type":"string"}},"required":["format","mediaId"]}],"type":"object"},"body":{"nullable":true,"type":"string"},"footer":{"nullable":true,"type":"string"},"buttons":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["QUICK_REPLY","URL","PHONE_NUMBER"]},"text":{"type":"string","minLength":1,"maxLength":25},"url":{"type":"string","maxLength":2000},"phone_number":{"type":"string"}},"required":["type","text"]}},"variables":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"title":{"type":"string","minLength":1,"maxLength":120},"example":{"type":"string","minLength":1,"maxLength":15},"kind":{"type":"string","enum":["common","lead"]},"source":{"anyOf":[{"type":"string","enum":["chat.name","chat.contact","chat.birthday","lead.name","lead.contact","lead.display_contact"]},{"type":"string","pattern":"^custom_field:[a-z0-9_-]+$"}]}},"required":["index","title","example","kind"]}},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"},"type":{"type":"string"},"text":{"nullable":true,"type":"string"},"mediaId":{"nullable":true,"type":"string"}},"required":["id","order","type","text","mediaId"]}},"commonVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Chave da variável (ex.: var1, var2)."},"label":{"type":"string"},"required":{"type":"boolean"}},"required":["key"]},"description":"Variáveis manuais que devem ser informadas em commonVariables ao iniciar uma campanha."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","name","description","isOfficial","metaTemplateName","metaTemplateStatus","category","language","metaRejectedReason","header","body","footer","buttons","variables","items","commonVariables","createdAt","updatedAt"]}},"required":["tenantId","occurredAt","template"],"additionalProperties":false}},"required":["event","data"],"additionalProperties":false},"SparkWebhookBodyMessageTemplatesUpdated":{"type":"object","properties":{"event":{"type":"string","enum":["message_templates.updated"]},"data":{"type":"object","properties":{"tenantId":{"type":"string"},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"template":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"nullable":true,"type":"string"},"isOfficial":{"type":"boolean"},"metaTemplateName":{"nullable":true,"type":"string"},"metaTemplateStatus":{"nullable":true,"type":"string"},"category":{"nullable":true,"type":"string"},"language":{"nullable":true,"type":"string"},"metaRejectedReason":{"nullable":true,"type":"string"},"header":{"nullable":true,"oneOf":[{"type":"object","properties":{"format":{"type":"string","enum":["TEXT"]},"text":{"type":"string","minLength":1,"maxLength":60}},"required":["format","text"]},{"type":"object","properties":{"format":{"type":"string","enum":["IMAGE","VIDEO","DOCUMENT"]},"mediaId":{"type":"string"}},"required":["format","mediaId"]}],"type":"object"},"body":{"nullable":true,"type":"string"},"footer":{"nullable":true,"type":"string"},"buttons":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["QUICK_REPLY","URL","PHONE_NUMBER"]},"text":{"type":"string","minLength":1,"maxLength":25},"url":{"type":"string","maxLength":2000},"phone_number":{"type":"string"}},"required":["type","text"]}},"variables":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"title":{"type":"string","minLength":1,"maxLength":120},"example":{"type":"string","minLength":1,"maxLength":15},"kind":{"type":"string","enum":["common","lead"]},"source":{"anyOf":[{"type":"string","enum":["chat.name","chat.contact","chat.birthday","lead.name","lead.contact","lead.display_contact"]},{"type":"string","pattern":"^custom_field:[a-z0-9_-]+$"}]}},"required":["index","title","example","kind"]}},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"},"type":{"type":"string"},"text":{"nullable":true,"type":"string"},"mediaId":{"nullable":true,"type":"string"}},"required":["id","order","type","text","mediaId"]}},"commonVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Chave da variável (ex.: var1, var2)."},"label":{"type":"string"},"required":{"type":"boolean"}},"required":["key"]},"description":"Variáveis manuais que devem ser informadas em commonVariables ao iniciar uma campanha."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","name","description","isOfficial","metaTemplateName","metaTemplateStatus","category","language","metaRejectedReason","header","body","footer","buttons","variables","items","commonVariables","createdAt","updatedAt"]}},"required":["tenantId","occurredAt","template"],"additionalProperties":false}},"required":["event","data"],"additionalProperties":false},"SparkWebhookBodyMessageTemplatesDeleted":{"type":"object","properties":{"event":{"type":"string","enum":["message_templates.deleted"]},"data":{"type":"object","properties":{"tenantId":{"type":"string"},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"template":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"nullable":true,"type":"string"},"isOfficial":{"type":"boolean"},"metaTemplateName":{"nullable":true,"type":"string"},"metaTemplateStatus":{"nullable":true,"type":"string"},"category":{"nullable":true,"type":"string"},"language":{"nullable":true,"type":"string"},"metaRejectedReason":{"nullable":true,"type":"string"},"header":{"nullable":true,"oneOf":[{"type":"object","properties":{"format":{"type":"string","enum":["TEXT"]},"text":{"type":"string","minLength":1,"maxLength":60}},"required":["format","text"]},{"type":"object","properties":{"format":{"type":"string","enum":["IMAGE","VIDEO","DOCUMENT"]},"mediaId":{"type":"string"}},"required":["format","mediaId"]}],"type":"object"},"body":{"nullable":true,"type":"string"},"footer":{"nullable":true,"type":"string"},"buttons":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["QUICK_REPLY","URL","PHONE_NUMBER"]},"text":{"type":"string","minLength":1,"maxLength":25},"url":{"type":"string","maxLength":2000},"phone_number":{"type":"string"}},"required":["type","text"]}},"variables":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"title":{"type":"string","minLength":1,"maxLength":120},"example":{"type":"string","minLength":1,"maxLength":15},"kind":{"type":"string","enum":["common","lead"]},"source":{"anyOf":[{"type":"string","enum":["chat.name","chat.contact","chat.birthday","lead.name","lead.contact","lead.display_contact"]},{"type":"string","pattern":"^custom_field:[a-z0-9_-]+$"}]}},"required":["index","title","example","kind"]}},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"},"type":{"type":"string"},"text":{"nullable":true,"type":"string"},"mediaId":{"nullable":true,"type":"string"}},"required":["id","order","type","text","mediaId"]}},"commonVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Chave da variável (ex.: var1, var2)."},"label":{"type":"string"},"required":{"type":"boolean"}},"required":["key"]},"description":"Variáveis manuais que devem ser informadas em commonVariables ao iniciar uma campanha."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","name","description","isOfficial","metaTemplateName","metaTemplateStatus","category","language","metaRejectedReason","header","body","footer","buttons","variables","items","commonVariables","createdAt","updatedAt"]}},"required":["tenantId","occurredAt","template"],"additionalProperties":false}},"required":["event","data"],"additionalProperties":false},"SparkWebhookBodyMessageTemplatesStatusUpdated":{"type":"object","properties":{"event":{"type":"string","enum":["message_templates.status_updated"]},"data":{"type":"object","properties":{"tenantId":{"type":"string"},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"template":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"nullable":true,"type":"string"},"isOfficial":{"type":"boolean"},"metaTemplateName":{"nullable":true,"type":"string"},"metaTemplateStatus":{"nullable":true,"type":"string"},"category":{"nullable":true,"type":"string"},"language":{"nullable":true,"type":"string"},"metaRejectedReason":{"nullable":true,"type":"string"},"header":{"nullable":true,"oneOf":[{"type":"object","properties":{"format":{"type":"string","enum":["TEXT"]},"text":{"type":"string","minLength":1,"maxLength":60}},"required":["format","text"]},{"type":"object","properties":{"format":{"type":"string","enum":["IMAGE","VIDEO","DOCUMENT"]},"mediaId":{"type":"string"}},"required":["format","mediaId"]}],"type":"object"},"body":{"nullable":true,"type":"string"},"footer":{"nullable":true,"type":"string"},"buttons":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["QUICK_REPLY","URL","PHONE_NUMBER"]},"text":{"type":"string","minLength":1,"maxLength":25},"url":{"type":"string","maxLength":2000},"phone_number":{"type":"string"}},"required":["type","text"]}},"variables":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"title":{"type":"string","minLength":1,"maxLength":120},"example":{"type":"string","minLength":1,"maxLength":15},"kind":{"type":"string","enum":["common","lead"]},"source":{"anyOf":[{"type":"string","enum":["chat.name","chat.contact","chat.birthday","lead.name","lead.contact","lead.display_contact"]},{"type":"string","pattern":"^custom_field:[a-z0-9_-]+$"}]}},"required":["index","title","example","kind"]}},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"},"type":{"type":"string"},"text":{"nullable":true,"type":"string"},"mediaId":{"nullable":true,"type":"string"}},"required":["id","order","type","text","mediaId"]}},"commonVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Chave da variável (ex.: var1, var2)."},"label":{"type":"string"},"required":{"type":"boolean"}},"required":["key"]},"description":"Variáveis manuais que devem ser informadas em commonVariables ao iniciar uma campanha."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","name","description","isOfficial","metaTemplateName","metaTemplateStatus","category","language","metaRejectedReason","header","body","footer","buttons","variables","items","commonVariables","createdAt","updatedAt"]},"previousStatus":{"nullable":true,"type":"string"}},"required":["tenantId","occurredAt","template","previousStatus"],"additionalProperties":false}},"required":["event","data"],"additionalProperties":false},"SparkWebhookBodyMessageTemplatesCategoryUpdated":{"type":"object","properties":{"event":{"type":"string","enum":["message_templates.category_updated"]},"data":{"type":"object","properties":{"tenantId":{"type":"string"},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"template":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"nullable":true,"type":"string"},"isOfficial":{"type":"boolean"},"metaTemplateName":{"nullable":true,"type":"string"},"metaTemplateStatus":{"nullable":true,"type":"string"},"category":{"nullable":true,"type":"string"},"language":{"nullable":true,"type":"string"},"metaRejectedReason":{"nullable":true,"type":"string"},"header":{"nullable":true,"oneOf":[{"type":"object","properties":{"format":{"type":"string","enum":["TEXT"]},"text":{"type":"string","minLength":1,"maxLength":60}},"required":["format","text"]},{"type":"object","properties":{"format":{"type":"string","enum":["IMAGE","VIDEO","DOCUMENT"]},"mediaId":{"type":"string"}},"required":["format","mediaId"]}],"type":"object"},"body":{"nullable":true,"type":"string"},"footer":{"nullable":true,"type":"string"},"buttons":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["QUICK_REPLY","URL","PHONE_NUMBER"]},"text":{"type":"string","minLength":1,"maxLength":25},"url":{"type":"string","maxLength":2000},"phone_number":{"type":"string"}},"required":["type","text"]}},"variables":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"title":{"type":"string","minLength":1,"maxLength":120},"example":{"type":"string","minLength":1,"maxLength":15},"kind":{"type":"string","enum":["common","lead"]},"source":{"anyOf":[{"type":"string","enum":["chat.name","chat.contact","chat.birthday","lead.name","lead.contact","lead.display_contact"]},{"type":"string","pattern":"^custom_field:[a-z0-9_-]+$"}]}},"required":["index","title","example","kind"]}},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"},"type":{"type":"string"},"text":{"nullable":true,"type":"string"},"mediaId":{"nullable":true,"type":"string"}},"required":["id","order","type","text","mediaId"]}},"commonVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Chave da variável (ex.: var1, var2)."},"label":{"type":"string"},"required":{"type":"boolean"}},"required":["key"]},"description":"Variáveis manuais que devem ser informadas em commonVariables ao iniciar uma campanha."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","name","description","isOfficial","metaTemplateName","metaTemplateStatus","category","language","metaRejectedReason","header","body","footer","buttons","variables","items","commonVariables","createdAt","updatedAt"]},"previousCategory":{"nullable":true,"type":"string"}},"required":["tenantId","occurredAt","template","previousCategory"],"additionalProperties":false}},"required":["event","data"],"additionalProperties":false},"SparkWebhookBody":{"oneOf":[{"$ref":"#/components/schemas/SparkWebhookBodyMessagesReceived"},{"$ref":"#/components/schemas/SparkWebhookBodyMessagesSent"},{"$ref":"#/components/schemas/SparkWebhookBodyChatsCreated"},{"$ref":"#/components/schemas/SparkWebhookBodyEntrypointsWhatsappConnected"},{"$ref":"#/components/schemas/SparkWebhookBodyEntrypointsWhatsappConnectionFailed"},{"$ref":"#/components/schemas/SparkWebhookBodyEntrypointsWhatsappHistorySynced"},{"$ref":"#/components/schemas/SparkWebhookBodyMessageTemplatesCreated"},{"$ref":"#/components/schemas/SparkWebhookBodyMessageTemplatesUpdated"},{"$ref":"#/components/schemas/SparkWebhookBodyMessageTemplatesDeleted"},{"$ref":"#/components/schemas/SparkWebhookBodyMessageTemplatesStatusUpdated"},{"$ref":"#/components/schemas/SparkWebhookBodyMessageTemplatesCategoryUpdated"}],"discriminator":{"propertyName":"event","mapping":{"messages.received":"#/components/schemas/SparkWebhookBodyMessagesReceived","messages.sent":"#/components/schemas/SparkWebhookBodyMessagesSent","chats.created":"#/components/schemas/SparkWebhookBodyChatsCreated","entrypoints.whatsapp.connected":"#/components/schemas/SparkWebhookBodyEntrypointsWhatsappConnected","entrypoints.whatsapp.connection_failed":"#/components/schemas/SparkWebhookBodyEntrypointsWhatsappConnectionFailed","entrypoints.whatsapp.history_synced":"#/components/schemas/SparkWebhookBodyEntrypointsWhatsappHistorySynced","message_templates.created":"#/components/schemas/SparkWebhookBodyMessageTemplatesCreated","message_templates.updated":"#/components/schemas/SparkWebhookBodyMessageTemplatesUpdated","message_templates.deleted":"#/components/schemas/SparkWebhookBodyMessageTemplatesDeleted","message_templates.status_updated":"#/components/schemas/SparkWebhookBodyMessageTemplatesStatusUpdated","message_templates.category_updated":"#/components/schemas/SparkWebhookBodyMessageTemplatesCategoryUpdated"}}},"WebhookTemplateComponents":{"type":"object","nullable":true,"additionalProperties":true},"PublicApiErrorResponse":{"type":"object","required":["statusCode","code","message"],"properties":{"statusCode":{"type":"integer","description":"Código HTTP da resposta.","example":400},"code":{"type":"string","description":"Código estável e legível por máquina. Use este campo — não parseie `message` — para tratar erros no cliente.","enum":["API_KEY_MISSING","API_KEY_INVALID","API_KEY_WRONG_TYPE","DEVELOPERS_DISABLED","SUBSCRIPTION_INACTIVE","LEAD_LIMIT_EXCEEDED","FORM_INACTIVE","RESOURCE_ACCESS_DENIED","ENTRYPOINT_NOT_FOUND","FORM_NOT_FOUND","CHAT_NOT_FOUND","RESOURCE_NOT_FOUND","FORM_ALREADY_SUBMITTED","VALIDATION_ERROR","INVALID_PHONE","ENTRYPOINT_PLATFORM_UNSUPPORTED","PLATFORM_UNSUPPORTED","FORM_MISSING_ENTRYPOINTS","FORM_INVALID_ANSWERS","FORM_INVALID_DESTINATION","MEDIA_UPLOAD_EMPTY","MEDIA_UPLOAD_TOO_MANY_FILES","MEDIA_FILE_TOO_LARGE","MEDIA_INVALID_FORMAT","INVALID_REQUEST","UNPROCESSABLE_REQUEST","MESSAGE_CAMPAIGN_NOT_ALLOWED","CAMPAIGN_NOT_FOUND","CAMPAIGN_NAME_ALREADY_EXISTS","CAMPAIGN_TEMPLATE_NOT_FOUND","CAMPAIGN_TEMPLATE_PLATFORM_MISMATCH","CAMPAIGN_INVALID_FILTERS","CAMPAIGN_NOT_DRAFT","CAMPAIGN_ALREADY_PROCESSING","CAMPAIGN_MISSING_COMMON_VARIABLES","CAMPAIGN_SIZE_LIMIT_EXCEEDED","MESSAGE_TEMPLATE_NOT_FOUND","MESSAGE_TEMPLATE_NOT_EDITABLE","MESSAGE_TEMPLATE_META_NAME_TAKEN","MESSAGE_TEMPLATE_META_ERROR","RATE_LIMIT_EXCEEDED","INTERNAL_ERROR"]},"message":{"type":"string","description":"Mensagem legível em português, útil para logs e exibição ao usuário."}}},"PublicApiErrorResponseExamples":{"type":"object","description":"Exemplos de erros por código. Em respostas reais, o corpo segue `PublicApiErrorResponse`.","additionalProperties":{"$ref":"#/components/schemas/PublicApiErrorResponse"},"example":{"API_KEY_MISSING":{"statusCode":401,"code":"API_KEY_MISSING","message":"API Key não fornecida."},"API_KEY_INVALID":{"statusCode":401,"code":"API_KEY_INVALID","message":"API Key inválida."},"API_KEY_WRONG_TYPE":{"statusCode":401,"code":"API_KEY_WRONG_TYPE","message":"API Key não autorizada a acessar este recurso."},"DEVELOPERS_DISABLED":{"statusCode":401,"code":"DEVELOPERS_DISABLED","message":"O ambiente de desenvolvedores não está habilitado para este tenant."},"SUBSCRIPTION_INACTIVE":{"statusCode":403,"code":"SUBSCRIPTION_INACTIVE","message":"Sua organização não possui uma assinatura ativa."},"LEAD_LIMIT_EXCEEDED":{"statusCode":403,"code":"LEAD_LIMIT_EXCEEDED","message":"Limite de leads excedido."},"FORM_INACTIVE":{"statusCode":403,"code":"FORM_INACTIVE","message":"Este formulário está desativado."},"RESOURCE_ACCESS_DENIED":{"statusCode":403,"code":"RESOURCE_ACCESS_DENIED","message":"Você não tem permissão para acessar este recurso."},"ENTRYPOINT_NOT_FOUND":{"statusCode":404,"code":"ENTRYPOINT_NOT_FOUND","message":"Ponto de entrada não encontrado."},"FORM_NOT_FOUND":{"statusCode":404,"code":"FORM_NOT_FOUND","message":"Formulário não encontrado."},"CHAT_NOT_FOUND":{"statusCode":404,"code":"CHAT_NOT_FOUND","message":"Chat não encontrado."},"RESOURCE_NOT_FOUND":{"statusCode":404,"code":"RESOURCE_NOT_FOUND","message":"Recurso não encontrado."},"FORM_ALREADY_SUBMITTED":{"statusCode":409,"code":"FORM_ALREADY_SUBMITTED","message":"Este número já enviou uma resposta para este formulário."},"VALIDATION_ERROR":{"statusCode":400,"code":"VALIDATION_ERROR","message":"Dados da requisição inválidos."},"INVALID_PHONE":{"statusCode":400,"code":"INVALID_PHONE","message":"Telefone inválido. Informe um número com DDI e DDD válidos."},"ENTRYPOINT_PLATFORM_UNSUPPORTED":{"statusCode":400,"code":"ENTRYPOINT_PLATFORM_UNSUPPORTED","message":"Este endpoint suporta apenas pontos de entrada do WhatsApp e WhatsApp Lite."},"PLATFORM_UNSUPPORTED":{"statusCode":400,"code":"PLATFORM_UNSUPPORTED","message":"Plataforma não suportada."},"FORM_MISSING_ENTRYPOINTS":{"statusCode":400,"code":"FORM_MISSING_ENTRYPOINTS","message":"Formulário sem pontos de entrada configurados."},"FORM_INVALID_ANSWERS":{"statusCode":400,"code":"FORM_INVALID_ANSWERS","message":"Respostas do formulário inválidas."},"FORM_INVALID_DESTINATION":{"statusCode":400,"code":"FORM_INVALID_DESTINATION","message":"Configuração de destino do formulário inválida."},"MEDIA_UPLOAD_EMPTY":{"statusCode":400,"code":"MEDIA_UPLOAD_EMPTY","message":"Nenhum arquivo foi enviado."},"MEDIA_UPLOAD_TOO_MANY_FILES":{"statusCode":400,"code":"MEDIA_UPLOAD_TOO_MANY_FILES","message":"Limite de arquivos por requisição excedido."},"MEDIA_FILE_TOO_LARGE":{"statusCode":400,"code":"MEDIA_FILE_TOO_LARGE","message":"Arquivo excede o tamanho máximo permitido."},"MEDIA_INVALID_FORMAT":{"statusCode":400,"code":"MEDIA_INVALID_FORMAT","message":"Formato de arquivo não suportado."},"INVALID_REQUEST":{"statusCode":400,"code":"INVALID_REQUEST","message":"Requisição inválida."},"UNPROCESSABLE_REQUEST":{"statusCode":422,"code":"UNPROCESSABLE_REQUEST","message":"Requisição não pôde ser processada."},"MESSAGE_CAMPAIGN_NOT_ALLOWED":{"statusCode":422,"code":"MESSAGE_CAMPAIGN_NOT_ALLOWED","message":"Não é possível enviar mensagens para campanhas através deste endpoint."},"CAMPAIGN_NOT_FOUND":{"statusCode":404,"code":"CAMPAIGN_NOT_FOUND","message":"Campanha não encontrada."},"CAMPAIGN_NAME_ALREADY_EXISTS":{"statusCode":400,"code":"CAMPAIGN_NAME_ALREADY_EXISTS","message":"Já existe uma campanha com esse nome."},"CAMPAIGN_TEMPLATE_NOT_FOUND":{"statusCode":404,"code":"CAMPAIGN_TEMPLATE_NOT_FOUND","message":"Modelo de mensagem não encontrado."},"CAMPAIGN_TEMPLATE_PLATFORM_MISMATCH":{"statusCode":400,"code":"CAMPAIGN_TEMPLATE_PLATFORM_MISMATCH","message":"Template incompatível com a plataforma selecionada."},"CAMPAIGN_INVALID_FILTERS":{"statusCode":422,"code":"CAMPAIGN_INVALID_FILTERS","message":"Filtros de público-alvo inválidos."},"CAMPAIGN_NOT_DRAFT":{"statusCode":422,"code":"CAMPAIGN_NOT_DRAFT","message":"Apenas campanhas em rascunho podem ser iniciadas."},"CAMPAIGN_ALREADY_PROCESSING":{"statusCode":422,"code":"CAMPAIGN_ALREADY_PROCESSING","message":"Campanha já possui uma execução em andamento."},"CAMPAIGN_MISSING_COMMON_VARIABLES":{"statusCode":400,"code":"CAMPAIGN_MISSING_COMMON_VARIABLES","message":"Variáveis manuais do template não foram preenchidas."},"CAMPAIGN_SIZE_LIMIT_EXCEEDED":{"statusCode":422,"code":"CAMPAIGN_SIZE_LIMIT_EXCEEDED","message":"Campanha excede o limite de destinatários para a plataforma."},"MESSAGE_TEMPLATE_NOT_FOUND":{"statusCode":404,"code":"MESSAGE_TEMPLATE_NOT_FOUND","message":"Template não encontrado."},"MESSAGE_TEMPLATE_NOT_EDITABLE":{"statusCode":422,"code":"MESSAGE_TEMPLATE_NOT_EDITABLE","message":"Este modelo oficial não pode ser editado na Meta neste status."},"MESSAGE_TEMPLATE_META_NAME_TAKEN":{"statusCode":409,"code":"MESSAGE_TEMPLATE_META_NAME_TAKEN","message":"Já existe um modelo oficial com esse nome e idioma."},"MESSAGE_TEMPLATE_META_ERROR":{"statusCode":400,"code":"MESSAGE_TEMPLATE_META_ERROR","message":"Erro ao criar template na Meta."},"RATE_LIMIT_EXCEEDED":{"statusCode":429,"code":"RATE_LIMIT_EXCEEDED","message":"Limite de requisições excedido."},"INTERNAL_ERROR":{"statusCode":500,"code":"INTERNAL_ERROR","message":"Erro interno ao processar a solicitação."}}}}},"x-webhooks":{"messages.received":{"post":{"operationId":"messages.received","summary":"Mensagem recebida","description":"Uma nova mensagem foi recebida no chat (ex.: lead respondeu em WhatsApp, Instagram, Telegram ou WhatsApp Lite).","tags":["Webhooks"],"x-svix-group-name":"messages","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SparkWebhookBodyMessagesReceived"},"example":{"event":"messages.received","data":{"tenantId":"tenant_p9q44rs4gudtlpjr3rhdjlzk","chatId":"chat_p9q44rs4gudtlpjr3rhdjlzk","entrypointId":"wa_entrypoint_p9q44rs4gudtlpjr3rhdjlzk","occurredAt":"2026-05-08T12:00:00.000Z","chat":{"id":"chat_p9q44rs4gudtlpjr3rhdjlzk","platform":"whatsapp","kind":"dm","entrypointId":"wa_entrypoint_p9q44rs4gudtlpjr3rhdjlzk","externalId":"5511999990000","name":"Cliente","status":"ongoing","avatarUrl":null,"createdAt":"2026-05-08T10:00:00.000Z","updatedAt":"2026-05-08T12:00:00.000Z"},"message":{"id":"message_p9q44rs4gudtlpjr3rhdjlzk","text":"Olá, preciso de ajuda com meu pedido.","type":"text","status":"delivered","createdAt":"2026-05-08T12:00:00.000Z","transcription":null,"forward":null,"replyToId":null,"instagram":null,"media":{"id":"media_p9q44rs4gudtlpjr3rhdjlzk","type":"image","url":"https://cdn.example.com/media/exemplo.png","mimeType":"image/png"},"sender":{"id":"lead_p9q44rs4gudtlpjr3rhdjlzk","avatarUrl":null,"name":"Cliente","isParticipant":true},"isOfficialTemplate":false,"templateCharged":false,"templateComponents":null}}}}}},"responses":{"2xx":{"description":"O endpoint do consumidor deve responder com 2xx para confirmar recebimento."}}}},"messages.sent":{"post":{"operationId":"messages.sent","summary":"Mensagem enviada","description":"Uma mensagem foi enviada no chat.","tags":["Webhooks"],"x-svix-group-name":"messages","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SparkWebhookBodyMessagesSent"},"example":{"event":"messages.sent","data":{"tenantId":"tenant_p9q44rs4gudtlpjr3rhdjlzk","chatId":"chat_p9q44rs4gudtlpjr3rhdjlzk","occurredAt":"2026-05-08T12:00:00.000Z","source":"public_api","chat":{"id":"chat_p9q44rs4gudtlpjr3rhdjlzk","platform":"whatsapp","kind":"dm","entrypointId":"wa_entrypoint_p9q44rs4gudtlpjr3rhdjlzk","externalId":"5511999990000","name":"Cliente","status":"ongoing","avatarUrl":null,"createdAt":"2026-05-08T10:00:00.000Z","updatedAt":"2026-05-08T12:00:00.000Z"},"message":{"id":"message_p9q44rs4gudtlpjr3rhdjlzk","text":"Olá, preciso de ajuda com meu pedido.","type":"text","status":"delivered","createdAt":"2026-05-08T12:00:00.000Z","transcription":null,"forward":null,"replyToId":null,"instagram":null,"media":{"id":"media_p9q44rs4gudtlpjr3rhdjlzk","type":"image","url":"https://cdn.example.com/media/exemplo.png","mimeType":"image/png"},"sender":{"id":"lead_p9q44rs4gudtlpjr3rhdjlzk","avatarUrl":null,"name":"Cliente","isParticipant":true},"isOfficialTemplate":false,"templateCharged":false,"templateComponents":null}}}}}},"responses":{"2xx":{"description":"O endpoint do consumidor deve responder com 2xx para confirmar recebimento."}}}},"chats.created":{"post":{"operationId":"chats.created","summary":"Chat criado","description":"Um novo chat foi criado (novo contato ou conversa iniciada).","tags":["Webhooks"],"x-svix-group-name":"chats","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SparkWebhookBodyChatsCreated"},"example":{"event":"chats.created","data":{"tenantId":"tenant_p9q44rs4gudtlpjr3rhdjlzk","chatId":"chat_p9q44rs4gudtlpjr3rhdjlzk","platform":"whatsapp","entrypointId":"wa_entrypoint_p9q44rs4gudtlpjr3rhdjlzk","occurredAt":"2026-05-08T12:00:00.000Z"}}}}},"responses":{"2xx":{"description":"O endpoint do consumidor deve responder com 2xx para confirmar recebimento."}}}},"entrypoints.whatsapp.connected":{"post":{"operationId":"entrypoints.whatsapp.connected","summary":"Número WhatsApp conectado","description":"Um número da API oficial do WhatsApp foi conectado à organização.","tags":["Webhooks"],"x-svix-group-name":"entrypoints","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SparkWebhookBodyEntrypointsWhatsappConnected"},"example":{"event":"entrypoints.whatsapp.connected","data":{"tenantId":"tenant_p9q44rs4gudtlpjr3rhdjlzk","sessionId":"wa_connect_p9q44rs4gudtlpjr3rhdjlzk","occurredAt":"2026-05-08T12:00:00.000Z","entrypoint":{"id":"wa_entrypoint_p9q44rs4gudtlpjr3rhdjlzk","name":"WhatsApp Business","displayPhone":"+55 11 99999-0000","phoneNumberId":"106540352242922","wabaId":"524126980791429","funnelId":"funnel_p9q44rs4gudtlpjr3rhdjlzk","funnelStepId":"funnel_step_p9q44rs4gudtlpjr3rhdjlzk","isCoexistence":false}}}}}},"responses":{"2xx":{"description":"O endpoint do consumidor deve responder com 2xx para confirmar recebimento."}}}},"entrypoints.whatsapp.connection_failed":{"post":{"operationId":"entrypoints.whatsapp.connection_failed","summary":"Conexão de WhatsApp não concluída","description":"A sessão de conexão da API oficial expirou ou falhou de forma definitiva.","tags":["Webhooks"],"x-svix-group-name":"entrypoints","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SparkWebhookBodyEntrypointsWhatsappConnectionFailed"},"example":{"event":"entrypoints.whatsapp.connection_failed","data":{"tenantId":"tenant_p9q44rs4gudtlpjr3rhdjlzk","sessionId":"wa_connect_p9q44rs4gudtlpjr3rhdjlzk","occurredAt":"2026-05-08T12:00:00.000Z","status":"expired","reason":"expired"}}}}},"responses":{"2xx":{"description":"O endpoint do consumidor deve responder com 2xx para confirmar recebimento."}}}},"entrypoints.whatsapp.history_synced":{"post":{"operationId":"entrypoints.whatsapp.history_synced","summary":"Histórico do WhatsApp importado","description":"Terminou a importação do histórico de conversas do app WhatsApp Business de um número em coexistência. As mensagens importadas não geram messages.received/messages.sent nem chats.created.","tags":["Webhooks"],"x-svix-group-name":"entrypoints","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SparkWebhookBodyEntrypointsWhatsappHistorySynced"},"example":{"event":"entrypoints.whatsapp.history_synced","data":{"tenantId":"tenant_p9q44rs4gudtlpjr3rhdjlzk","entrypointId":"wa_entrypoint_p9q44rs4gudtlpjr3rhdjlzk","occurredAt":"2026-05-08T12:00:00.000Z","importedChats":12,"importedMessages":840}}}}},"responses":{"2xx":{"description":"O endpoint do consumidor deve responder com 2xx para confirmar recebimento."}}}},"message_templates.created":{"post":{"operationId":"message_templates.created","summary":"Template de mensagem criado","description":"Um template de mensagem foi criado no Spark (painel, API pública ou duplicação).","tags":["Webhooks"],"x-svix-group-name":"message_templates","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SparkWebhookBodyMessageTemplatesCreated"},"example":{"event":"message_templates.created","data":{"tenantId":"tenant_p9q44rs4gudtlpjr3rhdjlzk","occurredAt":"2026-05-08T12:00:00.000Z","template":{"id":"message_template_p9q44rs4gudtlpjr3rhdjlzk","name":"Boas-vindas","description":null,"isOfficial":true,"metaTemplateName":"boas_vindas","metaTemplateStatus":"PENDING","category":"UTILITY","language":"pt_BR","metaRejectedReason":null,"header":null,"body":"Olá, seu pedido foi confirmado.","footer":null,"buttons":[],"variables":[],"items":[],"commonVariables":[],"createdAt":"2026-05-08T10:00:00.000Z","updatedAt":"2026-05-08T12:00:00.000Z"}}}}}},"responses":{"2xx":{"description":"O endpoint do consumidor deve responder com 2xx para confirmar recebimento."}}}},"message_templates.updated":{"post":{"operationId":"message_templates.updated","summary":"Template de mensagem atualizado","description":"O conteúdo ou os metadados de um template foram editados no Spark. Se a edição de um modelo oficial o recoloca em análise, o novo status já vem neste payload.","tags":["Webhooks"],"x-svix-group-name":"message_templates","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SparkWebhookBodyMessageTemplatesUpdated"},"example":{"event":"message_templates.updated","data":{"tenantId":"tenant_p9q44rs4gudtlpjr3rhdjlzk","occurredAt":"2026-05-08T12:00:00.000Z","template":{"id":"message_template_p9q44rs4gudtlpjr3rhdjlzk","name":"Boas-vindas","description":null,"isOfficial":true,"metaTemplateName":"boas_vindas","metaTemplateStatus":"PENDING","category":"UTILITY","language":"pt_BR","metaRejectedReason":null,"header":null,"body":"Olá, seu pedido foi confirmado.","footer":null,"buttons":[],"variables":[],"items":[],"commonVariables":[],"createdAt":"2026-05-08T10:00:00.000Z","updatedAt":"2026-05-08T12:00:00.000Z"}}}}}},"responses":{"2xx":{"description":"O endpoint do consumidor deve responder com 2xx para confirmar recebimento."}}}},"message_templates.deleted":{"post":{"operationId":"message_templates.deleted","summary":"Template de mensagem excluído","description":"Um template de mensagem foi removido no Spark. O payload traz o último estado conhecido.","tags":["Webhooks"],"x-svix-group-name":"message_templates","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SparkWebhookBodyMessageTemplatesDeleted"},"example":{"event":"message_templates.deleted","data":{"tenantId":"tenant_p9q44rs4gudtlpjr3rhdjlzk","occurredAt":"2026-05-08T12:00:00.000Z","template":{"id":"message_template_p9q44rs4gudtlpjr3rhdjlzk","name":"Boas-vindas","description":null,"isOfficial":true,"metaTemplateName":"boas_vindas","metaTemplateStatus":"APPROVED","category":"UTILITY","language":"pt_BR","metaRejectedReason":null,"header":null,"body":"Olá, seu pedido foi confirmado.","footer":null,"buttons":[],"variables":[],"items":[],"commonVariables":[],"createdAt":"2026-05-08T10:00:00.000Z","updatedAt":"2026-05-08T12:00:00.000Z"}}}}}},"responses":{"2xx":{"description":"O endpoint do consumidor deve responder com 2xx para confirmar recebimento."}}}},"message_templates.status_updated":{"post":{"operationId":"message_templates.status_updated","summary":"Status do template atualizado","description":"O status de aprovação de um template oficial mudou (webhook da Meta, consulta de status ou atualização interna). Inclui pausa, rejeição e demais status da Meta. Um status DELETED vindo da Meta não remove o template no Spark.","tags":["Webhooks"],"x-svix-group-name":"message_templates","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SparkWebhookBodyMessageTemplatesStatusUpdated"},"example":{"event":"message_templates.status_updated","data":{"tenantId":"tenant_p9q44rs4gudtlpjr3rhdjlzk","occurredAt":"2026-05-08T12:00:00.000Z","previousStatus":"PENDING","template":{"id":"message_template_p9q44rs4gudtlpjr3rhdjlzk","name":"Boas-vindas","description":null,"isOfficial":true,"metaTemplateName":"boas_vindas","metaTemplateStatus":"APPROVED","category":"UTILITY","language":"pt_BR","metaRejectedReason":null,"header":null,"body":"Olá, seu pedido foi confirmado.","footer":null,"buttons":[],"variables":[],"items":[],"commonVariables":[],"createdAt":"2026-05-08T10:00:00.000Z","updatedAt":"2026-05-08T12:00:00.000Z"}}}}}},"responses":{"2xx":{"description":"O endpoint do consumidor deve responder com 2xx para confirmar recebimento."}}}},"message_templates.category_updated":{"post":{"operationId":"message_templates.category_updated","summary":"Categoria do template atualizada","description":"A Meta alterou a categoria de um template oficial.","tags":["Webhooks"],"x-svix-group-name":"message_templates","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SparkWebhookBodyMessageTemplatesCategoryUpdated"},"example":{"event":"message_templates.category_updated","data":{"tenantId":"tenant_p9q44rs4gudtlpjr3rhdjlzk","occurredAt":"2026-05-08T12:00:00.000Z","previousCategory":"UTILITY","template":{"id":"message_template_p9q44rs4gudtlpjr3rhdjlzk","name":"Boas-vindas","description":null,"isOfficial":true,"metaTemplateName":"boas_vindas","metaTemplateStatus":"APPROVED","category":"MARKETING","language":"pt_BR","metaRejectedReason":null,"header":null,"body":"Olá, seu pedido foi confirmado.","footer":null,"buttons":[],"variables":[],"items":[],"commonVariables":[],"createdAt":"2026-05-08T10:00:00.000Z","updatedAt":"2026-05-08T12:00:00.000Z"}}}}}},"responses":{"2xx":{"description":"O endpoint do consumidor deve responder com 2xx para confirmar recebimento."}}}}}}