Cordex
CRM do WhatsApp no seu assistente de IA: faça triagem de conversas, gerencie contatos e negócios, planeje campanhas, automações e relatórios no Cordex. MCP remoto com OAuth.
Servidor MCP hospedado
npx add-mcp 'https://app.cordex.ai/api/mcp'Instala no Claude Code, Codex, Cursor e outros
Documentação
URL do servidor
https://app.cordex.ai/api/mcp
Transporte Streamable HTTP. Autenticação OAuth 2.1 com PKCE, com registro dinâmico de cliente (DCR) ou Client ID Metadata Document (CIMD).
O que você precisa
Uma conta na Cordex (crie em app.cordex.ai/signup) e um assistente que aceite conectores MCP remotos.
Como conectar
Claude (claude.ai, Desktop e mobile)
Abra Configurações › Conectores, procure "Cordex" no diretório ou clique em Adicionar conector personalizado e cole https://app.cordex.ai/api/mcp. Clique em Conectar, entre na Cordex, escolha a empresa e aprove as permissões.
ChatGPT
Procure "Cordex" nos apps do ChatGPT. Enquanto o app não aparecer para você, ative o modo desenvolvedor em Configurações › Apps, crie um app com a URL https://app.cordex.ai/api/mcp, escolha OAuth e aprove as permissões na janela da Cordex.
Claude Code
Rode o comando abaixo e, dentro do Claude Code, use /mcp para autenticar pelo navegador.
claude mcp add --transport http cordex https://app.cordex.ai/api/mcp
Cursor e VS Code
Adicione o servidor ao mcp.json. O editor abre o navegador para o login OAuth na primeira chamada.
{
"mcpServers": {
"cordex": {
"url": "https://app.cordex.ai/api/mcp"
}
}
}
Grok
Em grok.com/connectors, clique em Novo conector › Personalizado, cole https://app.cordex.ai/api/mcp e conclua a autorização.
Mistral Le Chat
Em Conectores › Adicionar conector › Conector MCP personalizado, cole https://app.cordex.ai/api/mcp e escolha OAuth.
Perplexity
Em Configurações › Conectores › Adicionar conector personalizado, cole https://app.cordex.ai/api/mcp e autorize.
Outros clientes (chave de API)
Clientes sem OAuth podem usar uma chave de API criada em Configurações › API e MCP, enviada no cabeçalho Authorization: Bearer cdx_….
Permissões
Na tela de consentimento você escolhe acesso total ou, por módulo, só leitura ou leitura e alteração. Ferramentas que só leem dados são marcadas como somente leitura; as que apagam ou cancelam algo são marcadas como destrutivas, e o assistente pede confirmação antes de usá-las.
Ferramentas disponíveis
233 ferramentas em 12 módulos. Organização · 5 de leitura · 4 de alteração
integrations_list— Listar integrações dentro da organização atual.integrations_overview— Listar as conexões de integração da organização com quantos agentes usam cada uma.integrations_upsert— Criar ou atualizar um registro de conexão de integração da organização; OAuth é tratado separadamente.members_invite— Convidar um administrador para a organização atual por e-mail.members_list— Listar membros dentro da organização atual.members_remove— Remover um membro da organização atual, preservando pelo menos um administrador.org_get— Obter a organização dentro da organização atual.org_update— Atualizar a organização dentro da organização atual.usage_summary— Uso de IA somente leitura da organização: solicitações, tokens e custo em USD somados por mês, fonte e modelo. Contatos · 6 de leitura · 8 de alteraçãocontacts_create— Criar contatos dentro da organização atual.contacts_delete— Excluir um contato e suas conversas; seus negócios são mantidos sem contato.contacts_deleteMatching— Excluir todos os contatos que correspondem ao filtro contacts.overview (consulta, plataforma, tags; nenhum = todos os contatos), exceto excludeIds, como contacts.delete: suas conversas são excluídas e seus negócios mantidos sem contato. No máximo 5000 por chamada. expectedCount (o número que a pessoa confirmou) faz a chamada falhar quando a correspondência mudou.contacts_duplicates— Encontrar grupos de contatos que parecem ser a mesma pessoa (mesmo e-mail, dígitos de telefone ou número de WhatsApp).contacts_get— Obter contatos dentro da organização atual.contacts_identities_add— Vincular um contato a uma identidade de canal na organização atual.contacts_identities_remove— Remover uma identidade de canal de um contato na organização atual.contacts_list— Listar contatos dentro da organização atual.contacts_merge— Mover atomicamente identidades, conversas e negócios do contato de origem para o destino e, em seguida, excluir a origem.contacts_overview— Paginar contatos para telas: texto de pesquisa, filtro de plataforma de canal, tags (contatos com qualquer uma delas), ordenação, identidades, negócios abertos e última atividade, além do total.contacts_search— Pesquisar contatos por nome, e-mail ou telefone dentro da organização atual.contacts_setCampaignOptOut— Marcar se um contato recebe campanhas. Contatos que respondem SAIR/PARAR/STOP a uma campanha são excluídos automaticamente; optedOut:false permite que eles recebam campanhas novamente.contacts_tags— Listar as tags usadas nos contatos desta organização com quantos contatos carregam cada uma, das mais usadas para as menos usadas.contacts_update— Atualizar contatos dentro da organização atual. CRM · 12 de leitura · 20 de alteraçãocustom_fields_create— Criar campos personalizados dentro da organização atual.custom_fields_delete— Excluir uma definição de campo personalizado e remover seus valores armazenados de contatos ou negócios.custom_fields_get— Obter campos personalizados dentro da organização atual.custom_fields_list— Listar campos personalizados dentro da organização atual.custom_fields_update— Atualizar campos personalizados dentro da organização atual.deal_views_create— Salvar uma visão dos negócios de um funil para o usuário atual (shared: true mostra para toda a organização). Abra em /crm?pipeline=<pipelineId>&view=<id>. config = {layout: kanban|table|calendar, filter: {match: all|any, rules: [{field, op, value?}]}, sort: [{field, dir: asc|desc}] (máx. 3, em ordem de prioridade), cardFields: [field] (cartão kanban, em ordem), columns: [{field, width?}] (tabela, em ordem), calendar: {dateField, span: month|week}}; chaves omitidas mantêm seus padrões. field = title|stage|value|owner|contact|expectedCloseDate|createdAt|updatedAt ou custom.<key> de um campo personalizado de negócio; o título é sempre exibido, então deixe-o fora de cardFields e columns. op por tipo de campo: text (title, contact, custom text) contains|notContains|is|empty|notEmpty; number (value em reais, custom number) eq|gt|lt|between [a,b]|empty|notEmpty; date (expectedCloseDate, createdAt, updatedAt, custom date) relative (today|thisWeek|thisMonth|overdue|next7|next30)|before|after (YYYY-MM-DD)|between [from,to]|empty|notEmpty; stage anyOf|noneOf [ids de estágios deste funil]; owner anyOf|noneOf [ids de usuários ou "me"]|empty|notEmpty; select anyOf|noneOf [opções]|empty|notEmpty; multiselect hasAny|hasAll|hasNone [opções]|empty|notEmpty; boolean isTrue|isFalse. Todos os operadores: contains, notContains, is, eq, gt, lt, between, before, after, relative, anyOf, noneOf, hasAny, hasAll, hasNone, isTrue, isFalse, empty, notEmpty.deal_views_delete— Excluir uma visão de negócio salva que o usuário atual criou.deal_views_get— Obter uma visão de negócio salva que o usuário atual pode usar.deal_views_list— Listar as visões de negócio salvas de um funil que o usuário atual pode usar: as próprias em ordem de aba, depois as compartilhadas por colegas.deal_views_reorder— Reordenar as abas de visão de negócio do próprio usuário atual de um funil; os ids devem conter cada uma de suas visões exatamente uma vez.deal_views_update— Alterar uma visão de negócio salva que o usuário atual criou: nome, shared ou config (chaves de config de nível superior fornecidas substituem as armazenadas; o restante é mantido). config = {layout: kanban|table|calendar, filter: {match: all|any, rules: [{field, op, value?}]}, sort: [{field, dir: asc|desc}] (máx. 3, em ordem de prioridade), cardFields: [field] (cartão kanban, em ordem), columns: [{field, width?}] (tabela, em ordem), calendar: {dateField, span: month|week}}; chaves omitidas mantêm seus padrões. field = title|stage|value|owner|contact|expectedCloseDate|createdAt|updatedAt ou custom.<key> de um campo personalizado de negócio; o título é sempre exibido, então deixe-o fora de cardFields e columns. op por tipo de campo: text (title, contact, custom text) contains|notContains|is|empty|notEmpty; number (value em reais, custom number) eq|gt|lt|between [a,b]|empty|notEmpty; date (expectedCloseDate, createdAt, updatedAt, custom date) relative (today|thisWeek|thisMonth|overdue|next7|next30)|before|after (YYYY-MM-DD)|between [from,to]|empty|notEmpty; stage anyOf|noneOf [ids de estágios deste funil]; owner anyOf|noneOf [ids de usuários ou "me"]|empty|notEmpty; select anyOf|noneOf [opções]|empty|notEmpty; multiselect hasAny|hasAll|hasNone [opções]|empty|notEmpty; boolean isTrue|isFalse. Todos os operadores: contains, notContains, is, eq, gt, lt, between, before, after, relative, anyOf, noneOf, hasAny, hasAll, hasNone, isTrue, isFalse, empty, notEmpty.deals_create— Criar negócios dentro da organização atual.deals_delete— Excluir negócios dentro da organização atual.deals_get— Obter negócios dentro da organização atual.deals_history— Listar as últimas 500 entradas do log de atividades de um negócio, das mais antigas para as mais recentes: seus próprios eventos de criação/atualização/movimentação (cada saída é o negócio completo após a alteração) e conversation.created para seu contato atual. Mantido por 90 dias.deals_list— Listar negócios dentro da organização atual.deals_move— Mover um negócio para um estágio pertencente ao mesmo funil.deals_overview— Listar negócios com seus contatos para telas, filtrados por id, funil, estágio, proprietário, contato ou texto.deals_update— Atualizar negócios dentro da organização atual.pipelines_configure— Configurar um funil que ainda não tem negócios em uma única etapa: nome novo opcional e a lista ordenada completa de estágios (substitui todos os estágios atuais). Precisa de pelo menos um estágio aberto e um ganho. Recusado quando o funil tem negócios ou uma automação, fluxo ou visão salva aponta para seus estágios; edite os estágios um a um nesse caso.pipelines_create— Criar funis dentro da organização atual.pipelines_delete— Excluir um funil com seus estágios e negócios.pipelines_ensureDefault— Criar o funil de vendas padrão quando a organização não tem nenhum; retorna os funis.pipelines_get— Obter funis dentro da organização atual.pipelines_list— Listar funis dentro da organização atual.pipelines_update— Atualizar funis dentro da organização atual.stages_create— Criar um estágio; sem uma posição, ele é anexado após o último estágio do funil.stages_delete— Excluir um estágio; quando ele ainda tem negócios, moveDealsTo deve nomear outro estágio do mesmo funil.stages_get— Obter estágios dentro da organização atual.stages_list— Listar estágios dentro da organização atual.stages_reorder— Reordenar todos os estágios de um funil; os ids devem conter cada estágio exatamente uma vez.stages_update— Atualizar estágios dentro da organização atual. Agentes · 11 de leitura · 21 de alteraçãoagents_create— Criar agentes dentro da organização atual.agents_delete— Excluir um agente; as caixas de entrada que ele gerencia voltam a não ter manipulador e suas conversas a não ter responsável.agents_get— Obter agentes dentro da organização atual.agents_integrations_attach— Anexar integrações de agentes dentro da organização atual.agents_integrations_detach— Desanexar integrações de agentes dentro da organização atual.agents_knowledge_attach— Anexar uma base de conhecimento a um agente: a partir da próxima resposta, o agente a pesquisa (ferramenta search_knowledge) antes de responder perguntas que os documentos cobrem, e cita documento e página.agents_knowledge_detach— Desanexar uma base de conhecimento de um agente; a base e seus documentos permanecem.agents_list— Listar agentes dentro da organização atual.agents_skills_attach— Anexar habilidades de agentes dentro da organização atual.agents_skills_detach— Desanexar habilidades de agentes dentro da organização atual.agents_update— Atualizar agentes dentro da organização atual.agents_usage— Listar as caixas de entrada gerenciadas por um agente e contar as conversas atribuídas a ele, antes de excluí-lo.knowledge_bases_create— Criar uma base de conhecimento: uma biblioteca nomeada de documentos (manuais, políticas, FAQs) que os agentes podem pesquisar. Em seguida, adicione arquivos (knowledge.sources.addFile) ou páginas da web (knowledge.sources.addUrl) e anexe-a aos agentes com agents.knowledge.attach.knowledge_bases_delete— Excluir uma base de conhecimento com todas as suas fontes e passagens, e desanexá-la de todos os agentes.knowledge_bases_get— Obter uma base de conhecimento com suas contagens de fontes e os agentes aos quais está anexada.knowledge_bases_list— Listar as bases de conhecimento da organização com quantas fontes cada uma contém e quantas estão prontas, processando ou com falha. Os agentes pesquisam as bases anexadas a eles (agents.knowledge.attach).knowledge_bases_update— Renomear uma base de conhecimento ou alterar sua descrição.knowledge_search— Pesquisar bases de conhecimento da mesma forma que um agente: pesquisa híbrida (significado mais palavras exatas, como modelos de produtos e códigos de erro) na base fornecida, ou em todas as bases anexadas ao agente fornecido. Retorna as melhores passagens com título do documento, página e URL.knowledge_sources_addUrl— Adicionar uma página da web pública ou um PDF vinculado (até 50 MB, páginas escaneadas incluídas), ou todas as páginas de um sitemap.xml (até 200 páginas do mesmo site), a uma base de conhecimento. Apenas endereços https públicos são buscados; a fonte se torna pesquisável quando seu status é ready. Use knowledge.sources.resync para buscá-la novamente mais tarde.knowledge_sources_delete— Excluir uma fonte de conhecimento e suas passagens; os agentes param de encontrá-la imediatamente.knowledge_sources_get— Obter uma fonte de conhecimento com seu status, contagens de páginas e passagens, modelos de produtos detectados e resumo.knowledge_sources_list— Listar as fontes (arquivos, páginas, sitemaps) de uma base de conhecimento com seu status de processamento: pending e processing ainda estão sendo lidas, ready são pesquisáveis, failed carregam o erro.knowledge_sources_resync— Ler uma fonte de conhecimento novamente (buscar a página ou o sitemap novamente, ou reprocessar um arquivo), por exemplo, após uma falha ou quando o site mudou.skills_create— Criar uma habilidade privada: um nome, uma descrição curta de quando um agente deve usá-la e um corpo em Markdown com as instruções. Anexe-a a um agente com agents.skills.attach.skills_delete— Excluir uma habilidade privada e desanexá-la de todos os agentes que a usam.skills_get— Obtém uma skill privada com seu corpo em Markdown e se seu snapshot publicado no marketplace está desatualizado (publicationDirty).skills_install— Copia um snapshot publicado no marketplace para a biblioteca de skills privadas da organização atual.skills_list— Lista as skills privadas desta organização: instruções reutilizáveis em Markdown (nome, descrição, corpo) que agentes de IA seguem quando uma skill é anexada com agents.skills.attach.skills_marketplace_list— Lista snapshots de skills públicas explicitamente publicados entre organizações.skills_publish— Publica um snapshot público explícito no marketplace de uma skill privada; edições privadas posteriores permanecem privadas.skills_unpublish— Despublica skills na organização atual.skills_update— Altera o nome, a descrição ou o corpo em Markdown de uma skill privada. Agentes que a usam seguem o novo texto a partir da próxima resposta; um snapshot publicado no marketplace só muda com skills.publish. Fluxos · 2 de leitura · 8 de alteraçãoflows_create— Cria fluxos na organização atual.flows_delete— Exclui fluxos na organização atual.flows_get— Obtém fluxos na organização atual.flows_list— Lista fluxos na organização atual.flows_publish— Publica o rascunho atual como uma nova versão imutável de fluxo e a ativa.flows_run_skipWait— Fluxos skipWait executados na organização atual.flows_run_start— Inicia um fluxo publicado em uma conversa a partir do nó inicial, substituindo qualquer fluxo em execução; restart=true também reinicia o mesmo fluxo.flows_run_stop— Interrompe o fluxo em execução em uma conversa; o usuário que o interrompe se torna o responsável para que o bot não retome.flows_saveDraft— Salva um grafo de fluxo como rascunho sem alterar versões publicadas; flows.publish o valida. Grafo: {nodes:[{id,type,position:{x,y},data}], edges:[{id,source,target,sourceHandle?}]}. Dados do nó por tipo: start {}; message {text} (suporta {{contact.firstName}}, {{contact.name}} e {{var}} capturado); question {text, buttons:[{id,label<=20 chars}] (max 3), saveAs?}; agent {agentId, goal, variables:[{name,description?}], exits:[{id,label,when}], maxTurns}; condition {branches:[{id,label,variable,operator:equals|not_equals|contains|gt|lt|is_set,value?}], elseLabel}; action {kind, label, params} with string params (they accept {{var}}): set_variable {name,value}; add_tag {tag}; update_contact_field {field: name|email|phone|<custom field key>, value}; create_deal {pipeline, stage, title?, valueCents?}; move_deal {stage, pipeline?} (move o negócio do contato no pipeline daquela etapa); handoff {target:human|copilot, userId?, message?}; end {outcome:resolved|abandoned|converted}. Arestas: exatamente um start; start/message/action precisam de uma aresta padrão (sem sourceHandle); arestas de question usam sourceHandle=id do botão, on_invalid ou on_timeout; arestas de agent usam id de saída e um 'fallback' obrigatório; arestas de condition usam id de ramo e 'else'; end/handoff não têm arestas de saída.flows_update— Atualiza fluxos na organização atual. Canais · 18 de leitura · 16 de alteraçãochannels_abandon— Cancela uma conexão que o usuário iniciou e não concluiu: desconecta-a e depois a remove localmente.channels_configureWebhook— Ativa o webhook do Cordex em uma sessão WhatsApp de propriedade do usuário ou restaura sua configuração original salva.channels_connectComplete— Conclui uma ação de conexão descrita por esquema para um canal pendente de propriedade do usuário.channels_connectOptions— Lista opções seguras para uma conexão pendente de propriedade do usuário.channels_connectStart— Inicia uma nova conexão de canal Cordex.channels_delete— Exclui canais na organização atual.channels_disconnect— Desconecta um canal Cordex de propriedade do usuário.channels_get— Obtém canais na organização atual.channels_groups_list— Lista os grupos de WhatsApp de um canal WhatsApp QR de propriedade do usuário, incluindo nomes e contagens de participantes, para configurar grupos de caixa de entrada permitidos. Somente leitura.channels_importExisting— Importa uma conta conectada autorizada pelo operador sem mover seu perfil.channels_list— Lista canais na organização atual.channels_messagingLimit— Limite de mensagens da Meta para um canal WhatsApp oficial: nível (o mais alto da organização), limite (destinatários únicos iniciados pela empresa por 24h corridas, null quando ilimitado), orçamento (90% disso, o que as campanhas usam), usado (destinatários contados agora, modelos manuais incluídos), oldestAt (quando o destinatário contado mais antigo libera um espaço), classificação de qualidade e quando o nível foi lido (atualizado após 6h). Somente leitura.channels_numbers_search— Lê números de telefone e preços disponíveis.channels_numbers_unconnected— Lê os números que esta organização comprou e que nenhuma conta WhatsApp usa ainda. Somente leitura.channels_permissions_status— Se um canal Instagram ou Facebook foi autorizado para comentários e mensagens diretas;missing\lista as áreas a conceder ao reconectar. Somente leitura.channels_qr— QR para um canal Cordex de propriedade do usuário.channels_removalImpact— Conta as conversas e mensagens que a remoção de um canal de propriedade do usuário excluiria.channels_remove— Remove localmente um canal desconectado com sua caixa de entrada, conversas e mensagens; contatos e negócios permanecem e a conta do provedor não é tocada.channels_status— Status de um canal Cordex de propriedade do usuário.channels_templates_create— Envia um novo modelo de WhatsApp para revisão (componentes personalizados) ou cria um modelo de biblioteca pré-aprovado (libraryTemplateName; omita componentes). Cabeçalhos de mídia aceitam apenas URL https pública, em example.header_handle. Variáveis {{1}}.. ou {{name}} precisam de exemplos. Carousel e limited_time_offer são apenas MARKETING; botões otp apenas AUTHENTICATION.channels_templates_delete— Exclui um modelo, irreversível: o nome fica bloqueado por 30 dias. Passe language para excluir uma variante, ou allLanguages true para excluir todas as variantes.channels_templates_get— Obtém uma variante de modelo com seus componentes, rejectedReason e qualidade. Passe language quando o nome tiver várias variantes. Somente leitura.channels_templates_library— Consulta um modelo de biblioteca WhatsApp pré-aprovado pelo nome exato para visualizar seu corpo, parâmetros e botões antes de criá-lo. Somente leitura.channels_templates_list— Lista modelos de mensagem WhatsApp de um canal WhatsApp oficial de propriedade do usuário com status, categoria, idioma e uma prévia do corpo. O status muda assincronamente (PENDING para APPROVED ou REJECTED); chame novamente para atualizar. Somente leitura.channels_templates_update— Edita uma variante de modelo APPROVED, REJECTED ou PAUSED. Edições de componentes a enviam de volta para revisão; nome, idioma e categoria não podem mudar; modelos aprovados podem ser editados uma vez por 24h.channels_update— Atualiza canais na organização atual.channels_whatsappFlows_list— Lista os WhatsApp Flows de um canal WhatsApp oficial de propriedade do usuário, para anexar um a um botão de fluxo de modelo. Somente leitura.comments_reply— Responde publicamente sob um comentário Instagram ou Facebook (comment.received); todos que veem a postagem veem a resposta.comments_replyPrivately— Envia uma mensagem direta ao autor de um comentário Instagram ou Facebook (comment.received). A Meta permite uma resposta privada por comentário, dentro de 7 dias. Botões opcionais (1-3) são {type:'postback',title,payload} ou {type:'web_url',title,url}.inboxes_create— Cria uma caixa de entrada para um canal nesta organização. Uma caixa de entrada por canal; allowedGroupIds seleciona até 50 ids de grupos WhatsApp (...@g.us), padrão vazio (sem grupos); groupsAll permite todos os grupos, incluindo futuros; groupMentionOnly faz o manipulador responder em grupos apenas quando o número é @mencionado ou respondido.inboxes_get— Obtém caixas de entrada na organização atual.inboxes_list— Lista caixas de entrada na organização atual.inboxes_update— Atualiza roteamento/configurações da caixa de entrada. allowedGroupIds seleciona até 50 ids de grupos WhatsApp (...@g.us); [] desativa grupos a menos que groupsAll; omiti-lo preserva a seleção. groupsAll=true permite todos os grupos, incluindo futuros. groupMentionOnly=true faz o manipulador responder em grupos apenas quando o número é @mencionado ou respondido; outras mensagens de grupo permanecem como contexto. Grupos usam o manipulador próprio da caixa de entrada. Use channels.groups.list para descobrir grupos.posts_list— Lista as postagens mais recentes (25 por conta, mais novas primeiro) dos canais Instagram e Facebook conectados da organização, incluindo postagens sem comentários.id\é o id de postagem da plataforma que comment.received carrega como postId.search\filtra por legenda. Somente leitura. Conversas · 7 de leitura · 10 de alteraçãoconversations_assign— Atribui uma conversa a um membro atual, um agente da organização, o copiloto ou nenhum responsável. Atribuir alguém enquanto um fluxo roda interrompe esse fluxo.conversations_filter— Filtra conversas como a tela de caixa de entrada, em toda a organização, atividade mais recente primeiro. Retorna { items, total }; items têm a forma conversations.overview. tab: mine (atribuída ao chamador) | unassigned | all | bots (agente, copiloto ou um fluxo em execução). channelId e status são os filtros rápidos. filter: { match: all|any, rules: [{ field, op, value }] }, máx. 20 regras, combinadas com os filtros rápidos por AND. Campos e ops: messageText (qualquer mensagem visível, 3-200 caracteres) e contact (nome, telefone ou e-mail) contains|notContains; assignee anyOf|noneOf [user:<id> | agent:<id> | flow:<id> | copilot | none]; channel anyOf|noneOf [ids de canal]; status anyOf|noneOf [open|pending|snoozed|resolved]; campaign anyOf|noneOf [ids de campanha]; createdAt, lastMessageAt, lastInboundAt (última mensagem do cliente) relative (today|yesterday|last7|last30|thisMonth|lastMonth)|before|after (YYYY-MM-DD)|between [de,até] inclusivo, como dias em timeZone; conversas sem essa atividade nunca correspondem a datas; tags (tags de contato) hasAny|hasAll|hasNone [tags]; awaitingReply (cliente falou por último, não resolvido) e isTest isTrue|isFalse. timeZone é um fuso IANA como America/Sao_Paulo.conversations_get— Obtém conversas na organização atual.conversations_list— Lista conversas na organização atual.conversations_messagingWindow— Se mensagens de formato livre podem ser enviadas: WhatsApp oficial só permite dentro de 24h da última mensagem do contato; caso contrário, use messages.sendTemplate. Somente leitura.conversations_overview— Lista conversas com contato, caixa de entrada, canal e última mensagem. lastMessageBefore/After filtra qualquer atividade de mensagem visível; lastInboundBefore significa que o cliente está silencioso desde esse timestamp ISO, e lastInboundAfter seleciona atividade recente do cliente. Timestamps de atividade nulos nunca correspondem a esses filtros.conversations_setFlowStep— Define uma conversa para um nó existente de uma versão de fluxo publicada e opcionalmente atualiza variáveis.conversations_setStatus— Define o status de uma conversa para open, pending, snoozed ou resolved.conversations_startWithTemplate— Inicia (ou continua) uma conversa oficial de WhatsApp com um contato enviando um modelo APPROVED. Dê contactId, ou phone em formato internacional com + inicial (ex.: +5511999990000). Retorna conversationId; a resposta chega na mesma conversa. Mesmos parâmetros de messages.sendTemplate.conversations_startWithText— Inicia (ou continua) uma conversa de WhatsApp em um canal WhatsApp conectado por QR enviando uma mensagem de texto livre; canais oficiais de WhatsApp precisam de conversations.startWithTemplate. Dê contactId, ou phone em formato internacional com + inicial (ex.: +5511999990000); o número deve estar no WhatsApp. Retorna conversationId; a resposta chega na mesma conversa.messages_list— Lista mensagens de uma conversa. latest:true retorna a página mais recente em ordem cronológica; includeId a estende de volta até essa mensagem (mais algum contexto), até 1000 mensagens.messages_retry— Repete mensagens na organização atual.messages_search— Pesquisa texto de mensagem em todas as conversas desta organização (substring sem diferenciar maiúsculas/minúsculas, pelo menos 3 caracteres), mais recentes primeiro. Filtros opcionais de channelId e status de conversa. Retorna messageId, conversationId, text, createdAt, contact e channel.messages_send— Persiste uma mensagem de saída e depois enfileira a entrega após o commit do banco de dados; mensagens pendentes sobrevivem a falhas de fila.messages_sendTemplate— Envie um template do WhatsApp APROVADO em uma conversa oficial do WhatsApp existente; funciona quando a janela de 24h está fechada. headerParams/bodyParams são valores na ordem de aparição (um objeto chaveado por nome de variável para templates nomeados); buttonParams preenchem sufixos de URL dinâmicos, cupons copy_code e tokens de fluxo por índice de botão; headerMedia substitui a mídia aprovada (somente URL https pública); headerLocation é obrigatório para cabeçalhos de localização. O template é verificado contra o template ativo antes de ser enfileirado.web_sessions_create— Crie uma conversa de teste com um agente ou fluxo no canal Web.web_sessions_send— Fale como o cliente em uma sessão de teste Web existente; roteia pelo processamento normal de entrada. Automações · 6 de leitura · 6 de alteraçãoautomations_catalog— Descubra nomes de eventos de automação, operações, operadores de regra, variáveis, limites e fuso horário da organização. Chame antes de criar uma automação. Informe a operação para obter o schema JSON de entrada dessa operação.automations_create— Crie uma automação (Quando → Se → Então). Verifique automations.templates primeiro e prefira automations.createFromTemplate quando um template se encaixar; caso contrário, chame automations.catalog primeiro. Gatilho: evento (qualquer nome de operação que altere dados, ou message.received / conversation.created / contact.created / comment.received), agendamento (cron de 5 campos no fuso da organização, opcional forEach sobre uma operação de lista) ou manual. Passos: operação (qualquer operação do registro; JSON de entrada aceita {{variables}}) ou espera (duração como 1h, 3d). Opcional por passo: if (regras), onFalse skip|stop, once (chave de template). Criado desabilitado, a menos que enabled:true. once executa um passo no máximo uma vez por chave em todas as execuções; trigger.dedupe evita execuções duplicadas por chave; trigger.when filtra dados imutáveis de gatilho/item antes da criação da execução.automations_createFromTemplate— Instale um template do marketplace (veja automations.templates) como automação. fill mapeia chaves de slot para valores: resolva IDs reais com ferramentas de leitura primeiro; textos são corpos de mensagem. Slots automáticos de pipeline/estágio permanecem consistentes: um stageId fornecido traz seu pipeline, um pipelineId fornecido traz seu primeiro estágio, nenhum deles traz o pipeline padrão e seu primeiro estágio. name e prompt usam os localizados por padrão; prompt só é aceito por templates de IA. Criado desabilitado, a menos que enabled:true, o que exige que todo slot não automático seja preenchido. Ajuste depois com automations.update.automations_delete— Exclua uma automação e a exclusão em cascata de suas execuções e marcas once.automations_get— Obtenha a definição de uma automação, estado de ativação, última execução e estatísticas de execução de sete dias por ID.automations_list— Liste as automações desta organização, opcionalmente filtrando por habilitadas; inclui última execução e totais de sete dias, concluídas e com falha.automations_run— Execute manualmente uma automação, incluindo desabilitadas, com payload de gatilho opcional, item e marcador isTest. Ignora trigger.when; if/once de passo e dedupe de gatilho ainda se aplicam. A execução é enfileirada após o commit; inspecione automations.runs.get para resultados.automations_runs_get— Obtenha o snapshot completo da definição de uma execução, variáveis, log de passos, erro e tempo de execução por ID de execução.automations_runs_list— Liste execuções de automação das mais recentes para as mais antigas, opcionalmente filtrando por automationId, status e isTest. Inclui nome da automação e payload de gatilho; use runs.get para log completo e snapshot.automations_setEnabled— Habilite ou desabilite uma automação. Habilitar a partir de desabilitada redefine o estado do agendamento e ativa a partir de agora. Desabilitar cancela execuções pendentes e em espera na mesma transação.automations_templates— Liste o marketplace de automações selecionado (templates prontos) em um idioma (pt-BR padrão, en, es), opcionalmente por categoria ou texto livre. Cada item tem key, categoria, título, descrição, needsInput, slots (o que ainda precisa ser preenchido: IDs de pipeline/estágio/fluxo/agente/usuário, um nome de template do WhatsApp aprovado, textos de mensagem ou uma palavra-chave) e a definição completa. Verifique antes de construir uma automação do zero e instale um que se encaixe com automations.createFromTemplate.automations_update— Atualize nome, gatilho ou passos fornecidos de uma automação; seções omitidas são preservadas e a definição mesclada completa é validada. Alterar o tipo de gatilho redefine o estado do agendamento. Execuções existentes mantêm seu snapshot de definição original. Relatórios · 5 de leitura · 7 de alteraçãoreports_catalog— Descubra o que os Relatórios podem medir: fontes (conversas, mensagens, negócios, contatos, anúncios) com seus campos, tipos, agregações permitidas e operadores de filtro (incluindo campos personalizados desta organização como custom.<key>), períodos, buckets, presets prontos, templates de dashboard e o fuso horário da organização. Chame antes de construir uma consulta ou dashboard.reports_dashboards_create— Crie um dashboard para o usuário atual (shared: true mostra para toda a organização, somente leitura para outros). Comece de um template (anuncios, atendimento, vendas, contatos) ou forneça uma config; locale (pt-BR padrão, en, es) define o idioma dos títulos de widgets de um template; sem nenhum, começa vazio. Abra em /reports/<id>. config = {filters: {period, channelIds, assigneeIds, pipelineIds, networks (somente fonte de anúncios: meta|google|tiktok|linkedin|pinterest|x|reddit|openai)}, widgets: [{id, title, viz: kpi|line|bar|area|pie|donut|table|funnel, query, layout: {x 0-11, y, w 1-12, h 1-12} em uma grade de 12 colunas, options: {compare: none|previousPeriod, format: number|currency|duration|percent, stacked?, colors?}}] (máx. 30 widgets). Widgets KPI são w 3 h 2, gráficos w 6 h 4. Configs inválidas retornam problemas com caminhos como widgets.0.query.measures.0.field.reports_dashboards_delete— Exclua um dashboard que o usuário atual possui, com todos os seus widgets. Dashboards compartilhados por colegas não podem ser excluídos; isso não pode ser desfeito.reports_dashboards_duplicate— Copie um dashboard que o usuário atual pode ver (próprio ou compartilhado) em um novo dashboard privado que ele possui. A cópia é nomeada "<name> (cópia)" a menos que name seja fornecido (locale en/es muda o sufixo para "(copy)"/"(copia)").reports_dashboards_get— Obtenha um dashboard (com sua config) que o usuário atual possui ou que foi compartilhado com ele.reports_dashboards_list— Liste os dashboards que o usuário atual pode usar: os próprios primeiro (por posição), depois os compartilhados por colegas. Cada um tem id, name, shared, position, ownerId e config.reports_dashboards_update— Altere um dashboard que o usuário atual possui: name, shared, position (ordem das abas) ou config (uma config fornecida substitui a armazenada; use reports.widgets.* para editar widgets individuais). config = {filters: {period, channelIds, assigneeIds, pipelineIds, networks (somente fonte de anúncios: meta|google|tiktok|linkedin|pinterest|x|reddit|openai)}, widgets: [{id, title, viz: kpi|line|bar|area|pie|donut|table|funnel, query, layout: {x 0-11, y, w 1-12, h 1-12} em uma grade de 12 colunas, options: {compare: none|previousPeriod, format: number|currency|duration|percent, stacked?, colors?}}] (máx. 30 widgets). Widgets KPI são w 3 h 2, gráficos w 6 h 4.reports_query— Execute um relatório e retorne {columns, rows, truncated, period, previous?, labels?}. Columns são g0.. (grupos) e depois m0.. (medidas); labels mapeia IDs de assignee/owner para nomes. Somente leitura. Forneça uma query ou um preset, opcionalmente com filtros estilo dashboard {period, channelIds, assigneeIds, pipelineIds, networks} (period substitui o intervalo da query) e compare: true para também obter as linhas do período anterior. Uma query = {source: conversations|messages|deals|contacts|ads, measures: [{agg: count|sum|avg|median|min|max|distinct, field?}] (1-6; field obrigatório exceto para count), groupBy?: [{field, bucket?: day|week|month|quarter|year}] (máx. 2, bucket somente em campos de data), filters?: [{field, op, value?}], period: {field?, range}, sort?: {by: m0..m5|g0|g1, dir}, limit?: 1-500, includeTest?: boolean}. range = today|yesterday|last7|last30|last90|thisWeek|thisMonth|thisQuarter|thisYear|lastMonth ou {from: YYYY-MM-DD, to: YYYY-MM-DD}; period.field usa por padrão a data de criação da fonte (use closedAt para negócios fechados no período, resolvedAt para conversas resolvidas). ads = fatos de anúncios (métricas por anúncio por dia, conversas e negócios atribuídos, leads de plataforma): agrupe por network, account, campaign, adSet, ad, currency, date; soma spend/impressions/reach/clicks/conversions/conversionValue/platformLeads/messagingStarted/conversations/leads/deals/won/revenue; média ctr/cpc/cpm/cpaReal/roasReal/roasPlatform (razão de somas); count precisa de um campo. Medidas monetárias são divididas por moeda (um grupo de moeda é adicionado); revenue é BRL; roasReal usa somente contas BRL; roasReal e cpaReal contam apenas negócios ganhos cujo primeiro toque tem uma campanha de anúncio conhecida, então podem ser menores que os totais de won/revenue. reach é uma soma de alcance diário, não pessoas únicas. Gráficos de dinheiro de anúncios suportam uma medida (use uma tabela para várias); conversations/leads/deals/won não podem ser filtrados. Métricas de plataforma ausentes são null, não 0. Filtre um relatório de anúncios por network com filters.networks. Campos, agregações e operadores por fonte vêm de reports.catalog: chame primeiro. preset = um de: conv.volume, conv.byChannel, conv.byAssignee, conv.byStatus, conv.frt.median, conv.resolution.avg, msgs.volume, deals.wonValue, deals.winRate, deals.funnel, deals.byOwner, contacts.new, contacts.byTag, ads.spend, ads.spendByDay, ads.funnelByNetwork, ads.roasByNetwork, ads.topAds, ads.conversations.reports_records— Faça drill down nos registros (até 50: id, title, subtitle, createdAt, href) por trás de um relatório, opcionalmente restrito a um grupo ou bucket de tempo com bucket: {field, value} (field deve ser um dos campos groupBy da query; value é o valor do grupo como retornado em rows, ex. "2026-03-02" para um dia). Somente leitura. Uma query = {source: conversations|messages|deals|contacts|ads, measures: [{agg: count|sum|avg|median|min|max|distinct, field?}] (1-6; field obrigatório exceto para count), groupBy?: [{field, bucket?: day|week|month|quarter|year}] (máx. 2, bucket somente em campos de data), filters?: [{field, op, value?}], period: {field?, range}, sort?: {by: m0..m5|g0|g1, dir}, limit?: 1-500, includeTest?: boolean}. range = today|yesterday|last7|last30|last90|thisWeek|thisMonth|thisQuarter|thisYear|lastMonth ou {from: YYYY-MM-DD, to: YYYY-MM-DD}; period.field usa por padrão a data de criação da fonte (use closedAt para negócios fechados no período, resolvedAt para conversas resolvidas). ads = fatos de anúncios (métricas por anúncio por dia, conversas e negócios atribuídos, leads de plataforma): agrupe por network, account, campaign, adSet, ad, currency, date; soma spend/impressions/reach/clicks/conversions/conversionValue/platformLeads/messagingStarted/conversations/leads/deals/won/revenue; média ctr/cpc/cpm/cpaReal/roasReal/roasPlatform (razão de somas); count precisa de um campo. Medidas monetárias são divididas por moeda (um grupo de moeda é adicionado); revenue é BRL; roasReal usa somente contas BRL; roasReal e cpaReal contam apenas negócios ganhos cujo primeiro toque tem uma campanha de anúncio conhecida, então podem ser menores que os totais de won/revenue. reach é uma soma de alcance diário, não pessoas únicas. Gráficos de dinheiro de anúncios suportam uma medida (use uma tabela para várias); conversations/leads/deals/won não podem ser filtrados. Métricas de plataforma ausentes são null, não 0. Filtre um relatório de anúncios por network com filters.networks. Campos, agregações e operadores por fonte vêm de reports.catalog: chame primeiro. preset = um de: conv.volume, conv.byChannel, conv.byAssignee, conv.byStatus, conv.frt.median, conv.resolution.avg, msgs.volume, deals.wonValue, deals.winRate, deals.funnel, deals.byOwner, contacts.new, contacts.byTag, ads.spend, ads.spendByDay, ads.funnelByNetwork, ads.roasByNetwork, ads.topAds, ads.conversations.reports_widgets_add— Adiciona um widget a um dashboard que o usuário atual possui. Informe título, viz, consulta e opções opcionais; o id é gerado. Sem layout, o widget vai para a próxima linha quando couber nas 12 colunas, caso contrário, abaixo dos existentes em x 0 (tamanho w 6 h 4, ou w 3 h 2 para kpi). Retorna {widgetId, dashboard}. Uma consulta = {source: conversations|messages|deals|contacts|ads, measures: [{agg: count|sum|avg|median|min|max|distinct, field?}] (1-6; campo obrigatório exceto para count), groupBy?: [{field, bucket?: day|week|month|quarter|year}] (máx. 2, bucket apenas em campos de data), filters?: [{field, op, value?}], period: {field?, range}, sort?: {by: m0..m5|g0|g1, dir}, limit?: 1-500, includeTest?: boolean}. range = today|yesterday|last7|last30|last90|thisWeek|thisMonth|thisQuarter|thisYear|lastMonth ou {from: YYYY-MM-DD, to: YYYY-MM-DD}; period.field usa como padrão a data de criação da fonte (use closedAt para negócios fechados no período, resolvedAt para conversas resolvidas). ads = fatos de anúncios (métricas por anúncio por dia, conversas e negócios atribuídos, leads de plataforma): agrupar por network, account, campaign, adSet, ad, currency, date; somar spend/impressions/reach/clicks/conversions/conversionValue/platformLeads/messagingStarted/conversations/leads/deals/won/revenue; média ctr/cpc/cpm/cpaReal/roasReal/roasPlatform (razão das somas); count precisa de um campo. Medidas monetárias são divididas por moeda (um grupo de moeda é adicionado); revenue é BRL; roasReal usa apenas contas BRL; roasReal e cpaReal contam apenas negócios ganhos cujo primeiro toque tem uma campanha de anúncio conhecida, então podem ser menores que os totais de won/revenue. reach é uma soma do alcance diário, não pessoas únicas. Gráficos de dinheiro de anúncios suportam uma medida (use uma tabela para várias); conversations/leads/deals/won não podem ser filtrados. Métricas de plataforma ausentes são null, não 0. Filtre um relatório de anúncios por rede com filters.networks. Campos, agregações e operadores por fonte vêm de reports.catalog: chame-o primeiro.reports_widgets_remove— Remove um widget de um dashboard que o usuário atual possui. Retorna o dashboard.reports_widgets_update— Altera um widget de um dashboard que o usuário atual possui. patch pode conter title, viz, query, layout e options (cada chave fornecida substitui a armazenada). Retorna o dashboard. Uma consulta = {source: conversations|messages|deals|contacts|ads, measures: [{agg: count|sum|avg|median|min|max|distinct, field?}] (1-6; campo obrigatório exceto para count), groupBy?: [{field, bucket?: day|week|month|quarter|year}] (máx. 2, bucket apenas em campos de data), filters?: [{field, op, value?}], period: {field?, range}, sort?: {by: m0..m5|g0|g1, dir}, limit?: 1-500, includeTest?: boolean}. range = today|yesterday|last7|last30|last90|thisWeek|thisMonth|thisQuarter|thisYear|lastMonth ou {from: YYYY-MM-DD, to: YYYY-MM-DD}; period.field usa como padrão a data de criação da fonte (use closedAt para negócios fechados no período, resolvedAt para conversas resolvidas). ads = fatos de anúncios (métricas por anúncio por dia, conversas e negócios atribuídos, leads de plataforma): agrupar por network, account, campaign, adSet, ad, currency, date; somar spend/impressions/reach/clicks/conversions/conversionValue/platformLeads/messagingStarted/conversations/leads/deals/won/revenue; média ctr/cpc/cpm/cpaReal/roasReal/roasPlatform (razão das somas); count precisa de um campo. Medidas monetárias são divididas por moeda (um grupo de moeda é adicionado); revenue é BRL; roasReal usa apenas contas BRL; roasReal e cpaReal contam apenas negócios ganhos cujo primeiro toque tem uma campanha de anúncio conhecida, então podem ser menores que os totais de won/revenue. reach é uma soma do alcance diário, não pessoas únicas. Gráficos de dinheiro de anúncios suportam uma medida (use uma tabela para várias); conversations/leads/deals/won não podem ser filtrados. Métricas de plataforma ausentes são null, não 0. Filtre um relatório de anúncios por rede com filters.networks. Campos, agregações e operadores por fonte vêm de reports.catalog: chame-o primeiro. Campanhas · 4 de leitura · 7 de alteraçãocampaigns_audiencePreview— Pré-visualize quem uma audiência de campanha alcança em um canal: total, elegíveis, ignorados por motivo (no_phone, opted_out, duplicate) e uma amostra de 20 contatos elegíveis. QR precisa de uma identidade de canal ou um telefone com 10+ dígitos; WhatsApp oficial precisa de um número WhatsApp conhecido ou um telefone com + no início. Grupos nunca são destinatários.campaigns_cancel— Cancele uma campanha definitivamente: destinatários ainda não enviados são ignorados (motivo cancelled); mensagens já na fila ainda são enviadas.campaigns_create— Crie uma campanha de rascunho; campaigns.launch a inicia. O canal deve estar conectado: WhatsApp QR envia mensagem {kind:'text', text (suporta {{nome}}, {{primeiro_nome}}, {{telefone}}, {{email}}, {{campo.<key>}} e spintax {Oi|Olá}), media?: {key, type, name?} do upload de mídia}; WhatsApp oficial (a API Meta) envia {kind:'template', name, language, bodyParams?: {<variable>: {source:'field', field} | {source:'fixed', value}}, headerMedia?}. audience: {tags?, query?, platform?} (como filtros de contacts.overview) ou um {contactIds} explícito, com excludeIds; verifique com campaigns.audiencePreview. cadence usa como padrão o preset cuidadoso (ligado para QR, desligado para oficial). replyTo (um membro, um agente ou um fluxo publicado que as respostas entram no início) recebe as conversas que a campanha abre; o padrão é você.campaigns_delete— Exclua uma campanha e sua lista de destinatários (mensagens enviadas permanecem em suas conversas). Uma campanha em execução deve ser pausada ou cancelada primeiro.campaigns_get— Obtenha uma campanha: mensagem, audiência, cadence, replyTo, agendamento, status com motivo de espera/pausa, canal, contagens cumulativas de destinatários e progresso {total, done}.campaigns_launch— Inicie uma campanha de rascunho: congela a audiência agora (contatos elegíveis em ordem de nome, no máximo 5000; o restante listado como ignorado com um motivo) e envia agora, ou em scheduledAt quando estiver no futuro. Falha sem destinatários elegíveis.campaigns_list— Liste as campanhas desta organização (envios em massa de WhatsApp), das mais recentes primeiro, com canal, status, motivo de espera/pausa e contagens de destinatários. As contagens são cumulativas para o funil: sent inclui delivered, delivered inclui read, read inclui replied; pending, queued, failed e skipped são exclusivos.campaigns_pause— Pause uma campanha em execução ou agendada; campaigns.resume continua de onde parou.campaigns_recipients— Pagine os destinatários de uma campanha em ordem de envio com contato, status exibido (pending, queued, sent, delivered, read, replied, failed, skipped), motivo de ignorar, código de erro, texto renderizado, conversa e a primeira resposta. O filtro de status é cumulativo como as contagens (sent também retorna delivered, read e replied).campaigns_resume— Retome uma campanha pausada (pausada manualmente ou automaticamente) a partir do próximo destinatário pendente, enviando agora; uma pausada antes do agendamento volta para agendada.campaigns_update— Atualize uma campanha de rascunho ou agendada (name, channelId, message, audience, cadence, replyTo, scheduledAt). Uma campanha agendada recongela seus destinatários quando a audiência ou o canal mudam. Anúncios · 25 de leitura · 24 de alteraçãoads_accounts_list— Liste as contas de anúncios das redes de anúncios conectadas: network, name, currency, timezone, se é utilizável (e por que não), se está selecionada para sincronização, estado de sincronização e último horário de sincronização. Apenas contas de anúncios selecionadas são sincronizadas.ads_accounts_select— Escolha quais contas de anúncios de uma conexão o Cordex sincroniza: accountIds é o conjunto selecionado completo (ids de ads.accounts.list); as outras são desmarcadas e param de sincronizar. Em redes onde o provedor define contas por API (Meta, Google e outros), desmarcar uma conta também exclui o histórico sincronizado do provedor (cerca de 90 dias) para ela, então confirme com o usuário primeiro. Contas não utilizáveis não podem ser selecionadas.ads_accounts_sync— Peça ao Cordex para atualizar as campanhas, anúncios e métricas das contas de anúncios selecionadas (todas, ou apenas accountIds de ads.accounts.list). A atualização roda em segundo plano em cerca de um minuto; não espera por ela. Respeita os limites de taxa de cada rede.ads_audiences_create— Crie uma audiência em uma conta de anúncios. kind customer_list transforma contatos CRM (source {kind:'crm', tags, query, platform}) em uma lista: apenas contatos que não optaram por sair e têm um email (ou telefone onde a rede corresponde) são enviados, carregados em segundo plano (ads_audiences_get mostra tamanho e estado de sincronização; o tamanho aparece horas depois). kind lookalike (source {kind:'lookalike', seedAudienceId, country, ratio ou size}) constrói sobre outra audiência da mesma conta; audiências website (pixelId, retentionDays, urlContains) e engagement (source, sourceIds, event, retentionDays) precisam do pixel ou ids de ads.identities.list. ads.networks.describe lista quais kinds cada rede suporta e suas regras. syncMode daily mantém uma lista de clientes atualizada com novos contatos. Não é seguro repetir: se a resposta for perdida, a audiência pode existir mesmo assim, então verifique ads.audiences.list antes de criá-la novamente.ads_audiences_delete— Exclua permanentemente uma audiência na rede de anúncios e no Cordex. Anúncios que a segmentam a perdem, e rascunhos de anúncios editáveis a têm removida. Recusado enquanto uma audiência lookalike construída a partir dela existir, enquanto está sendo reconstruída, para audiências criadas no próprio gerenciador da rede de anúncios e em redes que não podem excluir esse tipo.ads_audiences_estimate— Estime, antes de criar uma lista de clientes a partir de contatos CRM, quantas pessoas cada conta de anúncios poderia receber: eligible = contatos que correspondem à fonte e não optaram por sair; usable = emails distintos (e telefones onde a rede corresponde por telefone, como Meta) que o upload enviaria. warnings: belowMinimum (a rede precisa de pelo menosminimum\pessoas correspondidas para servir anúncios, ex. Google 5000, Meta e X 100), replaceUpload (LinkedIn substitui a lista inteira em cada sincronização), overMax (mais do que a rede mantém: o upload é rejeitado, então reduza a fonte abaixo demaximum\), noUsable, notSupported (com motivo). Somente leitura; números são contagens de contatos, não de pessoas que a rede corresponderá.ads_audiences_get— Obtenha uma audiência salva com seu tamanho, taxa de correspondência, estado de sincronização e o que depende dela: seedOf (audiências lookalike construídas a partir dela), drafts (rascunhos de anúncios editáveis que a segmentam) e adsUsing (conjuntos de anúncios sincronizados que a mencionam, null quando não tem id de rede ainda). Tamanho e status são relidos da rede de anúncios quando mais antigos que 15 minutos.ads_audiences_list— Liste audiências salvas (listas de clientes construídas a partir de contatos CRM, lookalike, audiências de visitantes do site e engajamento, além das criadas no próprio gerenciador da rede de anúncios) com seu tamanho, taxa de correspondência e estado de sincronização. size e matchRate são null até a rede de anúncios reportá-los (pode levar horas).networks\diz, para cada rede de anúncios conectada, quais tipos de audiência ela suporta e por que não quando não suporta. Lê a lista da rede de anúncios no máximo a cada 10 minutos; passe refresh true para forçar.ads_audiences_rebuild— Recrie uma lista de clientes a partir dos contatos CRM atuais para que contatos que optaram por sair ou foram apagados sejam realmente removidos, depois exclua a lista antiga na rede de anúncios. Confirme com o usuário primeiro: anúncios que segmentavam a lista antiga a perdem (adsUsing é quantos conjuntos de anúncios sincronizados a mencionam). Roda em segundo plano; ads_audiences_get mostra o progresso. Em redes onde cada sincronização já substitui a lista inteira, isso apenas enfileira uma sincronização (modo replace).ads_audiences_sync— Carregue os contatos CRM que correspondem à fonte de uma lista de clientes e ainda não estão nela, em segundo plano (contatos que optaram por sair ou não têm email utilizável são ignorados). Apenas cresce a lista: contatos removidos ou que optaram por sair desde então permanecem na rede de anúncios até ads.audiences.rebuild.ads_audiences_update— Renomeie uma audiência (apenas em redes de anúncios que permitem renomear; veja actions.rename em ads.audiences.get) ou altere o syncMode de uma lista de clientes (manual ou daily). Audiências criadas no próprio gerenciador da rede de anúncios são somente leitura.ads_campaigns_list— Lista campanhas de anúncios nas redes de anúncios conectadas como uma árvore: campanha, depois conjunto de anúncios (grupo), depois anúncio. Apenas contas de anúncios selecionadas das redes conectadas são incluídas. Cada nó tem seu selo de status, se seu próprio interruptor de ligar/desligar está ativo, orçamento e seu nível, objetivo, métricas de desempenho no intervalo de datas (gastos, impressões, cliques, ctr, cpc, cpm, resultados, leads, messagingStarted), colunas de CRM (conversas, leads, negócios, ganhos, receita, roas) e capacidades por ação (pausar, retomar, orçamento, renomear, duplicar, excluir: habilitado ou o motivo pelo qual não está). O dinheiro está na moeda de cada conta de anúncios e nunca é somado entre moedas: os totais são uma linha por moeda. Uma métrica que a rede não reporta é null, não 0. As colunas de CRM vêm da atribuição do Cordex (último clique de anúncio pago em 30 dias) e são todas null quando nenhuma venda ou conversa foi atribuída a um anúncio ainda; roas é receita dividida por gastos apenas para campanhas em BRL (null com roasNote 'currency' caso contrário). Intervalo padrão: últimos 30 dias; campanhas arquivadas/excluídas são ocultadas a menos que o status seja 'archived' ou 'all'.ads_connections_disconnect— Desconecta uma conexão de rede de anúncios. Suas contas de anúncios são desmarcadas (a sincronização para), mas campanhas, anúncios e métricas já sincronizados são mantidos.ads_connections_list— Lista as conexões de redes de anúncios desta organização: uma entrada por rede (Meta, Google, TikTok, LinkedIn, Pinterest, X, Reddit, OpenAI) com a conexão ativa (status connecting, connected, needs_reconnect ou error, nome de exibição, estado de sincronização, contagens de contas de anúncios e contas de anúncios selecionadas) ou null quando essa rede não está conectada.ads_conversion_destinations_list— Lista para onde as conversões podem ser enviadas: para cada conta de anúncios conectada, os pixels, ações de conversão, regras ou conjuntos de eventos que ela pode receber (destinations, null quando a rede de anúncios não pode receber conversões, com capi explicando o motivo), além dos números de WhatsApp conectados e se eles já têm um conjunto de dados de conversões, e as redes que não podem receber conversões de forma alguma. Uma falha ao ler uma conta é relatada no erro dessa conta e não oculta as outras. Use os ids de destino com ads.conversion_rules.create.ads_conversion_events_list— O log de envio de conversões, do mais recente para o mais antigo: para cada evento, a regra, o gatilho, o status (pending, sent, failed com o motivo e falhas da rede de anúncios, skipped com o motivo: nenhum clique de anúncio encontrado, outra rede, fora da janela, optou por sair, identificadores ausentes...), o valor, o negócio e o contato envolvidos e o id de rastreamento da rede para suporte. Nunca inclui o email ou telefone do contato. Paginação com nextCursor.ads_conversion_rules_create— Cria regras de conversão que reportam resultados reais de CRM às redes de anúncios. Um gatilho (deal_won, deal_stage com um stageId, tag_added com uma tag, conversation_started) e 1 a 8 destinos (pipe capi: uma conta de anúncios mais um destinationId de ads.conversion_destinations.list; pipe whatsapp: um número de WhatsApp conectado, apenas para anúncios Meta Click-to-WhatsApp, que pode configurar seu conjunto de dados de conversões na rede). Uma regra é criada por destino, juntas ou nenhuma. eventName tem padrão por gatilho e rede; windowDays tem padrão de 30 (7 para WhatsApp e Reddit, no máximo 90); o valor vem do negócio a menos que valueSource seja fixed ou none. testCode envia cada evento para a visualização de teste da rede. As regras começam habilitadas e enviam conversões reais: confirme com o usuário primeiro. Redes sem suporte a conversões (X) são recusadas. Os valores de negócios estão em BRL, então uma regra com valor de negócio reporta BRL (use valueSource fixed para outra moeda). Conversões do Google não carregam sinal de consentimento, que só é exigido para públicos no EEE/Reino Unido.ads_conversion_rules_delete— Exclui uma regra de conversão e, com ela, seu log de envio. Eventos já enviados à rede de anúncios permanecem lá. Pause a regra (enabled false) para manter o log.ads_conversion_rules_get— Obtém uma regra de conversão com seu código de teste (se houver) e seus 20 eventos mais recentes do log de envio.ads_conversion_rules_list— Lista regras de conversão: cada uma envia um evento de CRM (negócio ganho, negócio atingindo uma etapa, uma tag adicionada, uma conversa iniciada) para um destino de rede de anúncios, apenas para contatos cujo clique de anúncio veio dessa rede dentro da janela da regra. Cada linha tem seu destino, evento, os identificadores que envia, janela, configuração de valor, se está em modo de teste (o código de teste em si nunca é listado) e as contagens enviado/falhou/pulado dos últimos 30 dias.networks\diz quais redes de anúncios podem receber conversões e por que não quando uma não pode.ads_conversion_rules_update— Altera uma regra de conversão: nome, enabled, eventName, windowDays, configurações de valor, o gatilho ou testCode (null sai do modo de teste). O destino não pode ser alterado: crie uma nova regra em vez disso. Mesmos limites que ads.conversion_rules.create.ads_conversions_dispatch— Envia novamente eventos de conversão que falharam ou ainda estão pendentes (1 a 50 ids de ads.conversion_events.list). O mesmo id de evento é reutilizado, então a rede de anúncios nunca conta um duas vezes. Eventos já enviados ou pulados não podem ser reenviados. Retorna o novo status e motivo de cada evento.ads_conversions_test— Envia uma conversão de teste para uma regra para que o usuário possa vê-la na visualização de teste da rede de anúncios. Apenas onde a rede tem um modo de teste (Meta pixel e WhatsApp, Pinterest, Reddit); em outros lugares é recusado, porque um teste lá seria uma conversão real. Precisa de um código de teste (da tela de eventos de teste da rede), fornecido aqui ou salvo na regra. Sem contactId, um visitante sintético com um endereço inventado (sem dados de pessoa real) é usado (não para WhatsApp, que precisa de um contato que veio de um anúncio Click-to-WhatsApp). O teste é registrado como um evento de teste.ads_create— Cria um anúncio em sua rede a partir de um rascunho salvo com ads.drafts.save (valide-o primeiro com ads.validate). Ele é sempre criado pausado, com os países do rascunho, e apenas uma vez por rascunho mesmo se chamado novamente. Ele roda em segundo plano: o resultado diz submitting, e a nova campanha aparece em ads.campaigns.list como pending review em cerca de um minuto; uma falha é armazenada no rascunho (ads.drafts.get). Ativá-lo depois com ads.objects.set_status começa a gastar: confirme com o usuário.ads_drafts_delete— Exclui um rascunho de anúncio. Apenas rascunhos que não foram enviados (status draft) ou cujo envio falhou podem ser excluídos; rascunhos sendo enviados ou já criados não podem.ads_drafts_get— Obtém um rascunho de anúncio: rede, conta de anúncios, objetivo, nome, o formulário inteiro, seu cdxRef, status (draft, submitting, submitted ou failed), o erro de uma tentativa falha e o resultado de uma enviada.ads_drafts_list— Lista rascunhos de anúncios, mais recentemente editados primeiro: id, rede, conta de anúncios, objetivo, nome, cdxRef, status (draft, submitting, submitted, failed), erro e resultado. Filtre por status.ads_drafts_save— Cria ou atualiza um rascunho de anúncio (passe id para atualizar).form\segue os campos de ads.networks.describe para essa rede e objetivo: o valor do orçamento é um número inteiro na moeda da conta de anúncios; países têm padrão Brasil (OpenAI: Estados Unidos); imagens e vídeos são URLs https públicas em creative.imageUrl / creative.videoUrl. O formulário é substituído como um todo a cada salvamento. Retorna o id do rascunho, seu cdxRef e os problemas que ainda bloqueiam ads.create, cada um marcado com a etapa do assistente. Nada é enviado à rede de anúncios.ads_forms_create— Cria um formulário de lead nativo no Meta ou LinkedIn para anúncios de geração de leads. Formulários não podem ser editados após a criação (crie um novo em vez disso). O LinkedIn não pode pré-preencher campos de perfil, então peça email e telefone como perguntas. Use o id retornado como leadGenFormId em ads.drafts.save. A rede do formulário deve corresponder à rede da conta. Não é seguro repetir: se a resposta for perdida, o formulário pode existir de qualquer forma, então verifique ads.forms.list antes de criar novamente.ads_forms_get— Obtém um formulário de lead de uma conta de anúncios com suas perguntas (chaves, rótulos, opções de resposta) e quantos leads e negócios ele produziu nos últimos 30 dias. Formulários de lead não podem ser editados: para alterar um, crie um novo formulário a partir dele.ads_forms_list— Lista os formulários de lead nativos de uma conta de anúncios (Meta, LinkedIn) com seu status, quantos leads e negócios cada um produziu nos últimos 30 dias e a campanha que o usou. supported false significa que a rede de anúncios da conta não tem formulários de lead. delivery diz se os leads chegam instantaneamente (webhook) ou são buscados periodicamente (poll). Use o id de um formulário como leadGenFormId em ads.drafts.save.ads_identities_list— Lista as páginas do Facebook, pixels, formulários de lead, posts, quadros, organizações ou números de WhatsApp conectados (whatsapp, para anúncios click-to-WhatsApp) que um anúncio pode usar em uma conta de anúncios, para que ids não precisem ser digitados manualmente. supported false significa que esta rede de anúncios não pode listar esse tipo: peça o id ao usuário em vez disso.ads_leads_get— Obtém um lead de anúncio (id de ads.leads.list) com cada resposta que a pessoa deu no formulário, os consentimentos que aceitou e o contato, negócio, anúncio e campanha aos quais está vinculado.ads_leads_list— Lista os leads recebidos de formulários de lead de anúncios com o contato e negócio do Cordex que cada um criou. Filtre por rede, formulário, conta de anúncios, status de importação ou intervalo de datas (yyyy-mm-dd). Mais recentes primeiro.ads_leads_settings_get— Obtém o que acontece quando um lead de anúncio chega: o estágio do pipeline onde seu negócio é criado (se houver), o proprietário do negócio e a conversa de modelo do WhatsApp iniciada com o lead (se houver).ads_leads_settings_update— Escolhe o que acontece quando um lead de anúncio chega: criar um negócio em um estágio do pipeline, definir seu proprietário e, opcionalmente, iniciar uma conversa no WhatsApp com um modelo aprovado. Substitui toda a configuração; envie deal null, ownerUserId null e whatsapp null para apenas criar o contato.ads_networks_describe— Descreve as redes de anúncios que o Cordex gerencia (Meta, Google, TikTok, LinkedIn, Pinterest, X, Reddit, OpenAI): o que cada uma pode criar, editar, pausar, duplicar ou excluir por nível, seus objetivos, regras e mínimos de orçamento, países padrão, quais métricas reporta (outras são null) e como as vendas são atribuídas. Leia antes de agir em uma rede.ads_objects_delete— Exclui uma campanha de anúncios, conjunto de anúncios ou anúncio. Dependendo da rede, isso o remove permanentemente ou apenas o arquiva (o resultado diz qual: modo delete ou archive); de qualquer forma, ele para de entregar e reportar. Prefira pausar com ads.objects.set_status a menos que o usuário queira claramente que seja removido, e confirme primeiro.ads_objects_duplicate— Duplica uma campanha de anúncios, conjunto de anúncios ou anúncio em sua rede. A cópia é sempre criada pausada. Envie o mesmo idempotencyKey para repetir com segurança sem criar uma segunda cópia; deixe-o de fora para uma nova (ele é retornado). Não disponível em todas as redes: veja ads.networks.describe.ads_objects_get— Obtém um objeto de anúncio (campanha, conjunto de anúncios ou anúncio) pelo seu id do Cordex: seus campos, selo de status, capacidades, seus pais (campanha, conjunto de anúncios), seus filhos diretos com suas métricas e métricas de desempenho no intervalo de datas mais uma série diária. O dinheiro está na moeda da conta de anúncios; uma métrica que a rede não reporta é null.ads_objects_set_status— Pausa ou ativa uma campanha de anúncios, conjunto de anúncios ou anúncio em sua rede de anúncios. Ativar começa a gastar o orçamento da empresa imediatamente: confirme com o usuário primeiro. Cada nível tem seu próprio interruptor (pausar uma campanha não altera seus filhos). No X, o interruptor de um anúncio é o do seu line item, então todo o line item pausa ou retoma. Desabilitado por rede ou estado como ads.networks.describe e as capacidades de ads.objects.get dizem. O resultado diz qual nível foi alternado.ads_objects_update_budget— Altera o orçamento de uma campanha de anúncios, conjunto de anúncios ou anúncio. amount é um número inteiro na moeda da própria conta de anúncios (não centavos) e type é daily ou lifetime. Isso altera gastos reais: confirme o valor com o usuário primeiro. O Cordex o aplica no nível onde a rede mantém o orçamento (por exemplo, o conjunto de anúncios no TikTok, LinkedIn e Pinterest); níveis que não podem conter um orçamento são recusados com o motivo. Algumas redes têm um orçamento mínimo em USD.ads_reach_estimate— Estime quantas pessoas um público alcança. PassedraftIdpara usar os países e a segmentação de um rascunho de anúncio, ouaccountIdcom países e segmentação. Retornaestimatecomonullquando a rede de anúncios não fornece estimativa;readycomofalsesignifica que ainda está sendo calculado, pergunte novamente em alguns segundos.ads_targeting_search— Encontre IDs de segmentação (locais, interesses, idiomas, palavras-chave) para uma conta de anúncios, para usar na segmentação de um rascunho de anúncio.dimensioné um delocation,age,gender,language,interestoukeyword, limitado ao que a rede da conta pode segmentar (vejaads.networks.describe).keywordretorna ideias de palavras-chave com suas médias mensais de buscas.countryCode(ISO com 2 letras) restringe a busca e usa por padrão o país padrão da rede.ads_touches_list— Liste os cliques de anúncios que o Cordex atribuiu a contatos (anúncios do WhatsApp, formulários de lead, links de rastreamento), do mais recente ao mais antigo. ComcontactId,attributedmarca o toque que conta para aquele contato: o último toque pago dentro de 30 dias.ads_tracking_links_create— Crie um link de rastreamento do Cordex para usar como destino de um anúncio em qualquer rede. Cada clique é registrado com o ID de clique da rede e tags UTM; links para WhatsApp carregam um código curto na mensagem pré-preenchida para que a conversa seja atribuída ao anúncio. O destino deve ser um site https ou um número de WhatsApp; não pode ser alterado depois. Opcionalmente, vincule o link a um objeto de anúncio (campanha, conjunto de anúncios ou ID de anúncio deads.campaigns.list) para que os cliques sejam atribuídos nesse nível.ads_tracking_links_delete— Exclua um link de rastreamento do Cordex (iddeads.tracking_links.list). O link para de funcionar (sua URL responde "não encontrado"), mas os cliques e contatos já atribuídos a ele são mantidos.ads_tracking_links_list— Liste os links de rastreamento do Cordex da organização com sua URL, código curto, destino, contagem de cliques, quantos contatos vieram por eles e o horário do último clique. Links arquivados ficam ocultos, a menos queincludeArchivedsejatrue.ads_validate— Verifique um rascunho de anúncio sem criar nada: retornaoke os problemas que bloqueiamads.create(cada um com o caminho do formulário, um código e a etapa do assistente).withPlatformtambém pede à rede de anúncios que verifique o anúncio sem criá-lo, apenas onde a rede suporta isso; conta contra o limite de taxa da rede, então use uma vez antes deads.create. Atividade · 1 de leitura · 0 de alteraçãoactivity_list— Liste o log de atividades desta organização do mais recente ao mais antigo: toda operação que altera dados e os eventosmessage.received,conversation.created,contact.createdecomment.received, com o payload exato que as automações recebem comotrigger.\*. Filtre por nome do evento; pagine combefore(createdAtdo último item). Mantido por 90 dias.
Exemplos de pedidos
- Quais conversas do WhatsApp estão sem resposta há mais de 2 horas?
- Crie o contato Maria Souza, telefone +55 11 99999-0000, com a etiqueta "lead quente".
- Mova o negócio da Padaria Central para a etapa Proposta enviada.
- Quantas conversas cada agente atendeu na última semana?
- Liste as campanhas agendadas para este mês com o número de destinatários.
Segurança e privacidade
O assistente age como você, só na empresa escolhida e dentro dos escopos aprovados. A Cordex não recebe o histórico da conversa com o assistente. As alterações ficam no registro de atividade da empresa. Para desconectar, revogue o aplicativo em Configurações › API e MCP.