# API Wevichat # # Crie a chave em Conta > Desenvolvedores. Comece por uma chave wevi_test_, # que roda tudo sem enviar mensagem de verdade. @base = https://api.wevi.chat/functions/v1 @apiKey = wevi_test_sua_chave_aqui @id = ### ─────────────── Contatos ─────────────── ### Lista ou busca contatos # Sem identificador na query, devolve a lista paginada da organização. Com # `id`, `email`, `phone` ou `cpf`, devolve um contato só, ou `404` quando # não existe. GET {{base}}/contacts?id=&email=&phone= Authorization: Bearer {{apiKey}} ### Cria ou atualiza um contato # Identifica o contato por email ou telefone. Existindo, atualiza os campos # que vieram; senão, cria. Os campos que você não mandar ficam como estão. POST {{base}}/contacts Authorization: Bearer {{apiKey}} Content-Type: application/json { "phone": "+55 11 98765-4321", "name": "Marina Alves", "email": "marina.alves@exemplo.com.br", "tags": [ "Lead quente" ], "fields": { "plano": "Premium" }, "assigned_user_email": "paula@clinicabemestar.com.br" } ### Cria ou atualiza até 100 contatos # Até 100 contatos por chamada, com a mesma regra do `POST /contacts` item a # item. Um item ruim não derruba os outros: a resposta traz o resultado de # cada um, na ordem em que vieram. POST {{base}}/contacts/batch Authorization: Bearer {{apiKey}} Content-Type: application/json { "contacts": [ { "phone": "+5511987654321", "name": "Marina Alves", "tags": [ "Lead quente" ] }, { "email": "joao@exemplo.com.br", "name": "João Prado" }, { "name": "Sem identificador" } ] } ### Um contato # Um contato, com etiquetas, campos personalizados, posição nos funis, dono da carteira e as estatísticas do relacionamento. GET {{base}}/contacts/{{id}} Authorization: Bearer {{apiKey}} ### Altera um contato # Altera só os campos que vieram no corpo. Por padrão, `fields` é mesclado # com o que já existe; mande `replace_fields: true` para trocar o conjunto # inteiro. PATCH {{base}}/contacts/{{id}} Authorization: Bearer {{apiKey}} Content-Type: application/json { "name": "Marina Alves Souza", "fields": { "plano": "Ultra" } } ### Anonimiza ou apaga um contato # Por padrão anonimiza: apaga nome, telefone, email e campos personalizados, # e mantém as conversas sem identificação, para os números do período # continuarem batendo. Com `?mode=erase`, apaga o contato e tudo que aponta DELETE {{base}}/contacts/{{id}}?mode= Authorization: Bearer {{apiKey}} ### Conversas do contato # As conversas deste contato, da mais recente para a mais antiga. GET {{base}}/contacts/{{id}}/conversations Authorization: Bearer {{apiKey}} ### Etapas, trocas de dono e notas, em ordem # Mudanças de etapa, trocas de dono e notas, em ordem cronológica. É o que # responde "por que este contato está nesta etapa" sem abrir o painel. GET {{base}}/contacts/{{id}}/history Authorization: Bearer {{apiKey}} ### Exporta os dados do contato # Tudo que temos sobre a pessoa num JSON só: cadastro, identificadores, # etiquetas, posição nos funis, notas, conversas e mensagens. É o que # entregar quando alguém exercer o direito de portabilidade. GET {{base}}/contacts/{{id}}/export Authorization: Bearer {{apiKey}} ### Notas do contato # As notas internas do contato, da mais recente para a mais antiga. O cliente nunca vê isto. GET {{base}}/contacts/{{id}}/notes Authorization: Bearer {{apiKey}} ### Adiciona uma nota # Adiciona uma nota ao contato, sem apagar as anteriores. POST {{base}}/contacts/{{id}}/notes Authorization: Bearer {{apiKey}} Content-Type: application/json { "body": "Cliente pediu orçamento de clareamento." } ### Funde outro contato neste # Funde o contato informado em `contact_id` neste, que sobrevive. Conversas, # mensagens, etiquetas, notas e identificadores passam para cá; o outro # deixa de existir. POST {{base}}/contacts/{{id}}/merge Authorization: Bearer {{apiKey}} Content-Type: application/json { "contact_id": "c0a80101-1112-4111-8111-111111111112" } ### Marca que o contato não quer mais receber # Marca que o contato não quer mais receber. A partir daí, campanha, # automação e disparo avulso não saem para ele. Resposta dentro da janela de # 24 horas continua funcionando, porque aí é conversa que ele mesmo começou. POST {{base}}/contacts/{{id}}/opt-out Authorization: Bearer {{apiKey}} Content-Type: application/json {} ### Volta a permitir envio para o contato # Desfaz o opt-out. Use só quando a pessoa pedir de volta, e guarde no seu lado a prova de que pediu. POST {{base}}/contacts/{{id}}/opt-in Authorization: Bearer {{apiKey}} Content-Type: application/json {} ### Aplica uma etiqueta # Aplica uma etiqueta ao contato, criando a etiqueta se ela ainda não # existir. Identifique o contato por `id`, `email`, `phone` ou `cpf` no # corpo. POST {{base}}/contacts/tag Authorization: Bearer {{apiKey}} Content-Type: application/json { "phone": "+5511987654321", "tag": "Lead quente" } ### Remove uma etiqueta # Tira uma etiqueta do contato. A etiqueta continua existindo na organização. DELETE {{base}}/contacts/tag Authorization: Bearer {{apiKey}} Content-Type: application/json { "phone": "+5511987654321", "tag": "Lead quente" } ### Move o contato no funil # Move o contato de etapa no funil, ou marca como perdido. Sem `pipeline`, # usa o funil padrão da organização. Aceita nome ou id tanto para o funil # quanto para a etapa. POST {{base}}/contacts/stage Authorization: Bearer {{apiKey}} Content-Type: application/json { "phone": "+5511987654321", "pipeline": "Funil de vendas", "stage": "Proposta enviada" } ### Define o dono da carteira # Define o dono da carteira pelo email de um membro da organização. O email # precisa ser de alguém que já faz parte da equipe. POST {{base}}/contacts/assign Authorization: Bearer {{apiKey}} Content-Type: application/json { "phone": "+5511987654321", "assigned_user_email": "paula@clinicabemestar.com.br" } ### Remove o dono da carteira # Deixa o contato sem dono. Ele volta para a fila geral. DELETE {{base}}/contacts/assign Authorization: Bearer {{apiKey}} Content-Type: application/json { "phone": "+5511987654321" } ### Grava as notas do cadastro do contato # Grava o campo de anotação do cadastro, substituindo o que estava lá. # Mande `null` ou string vazia para limpar. POST {{base}}/contacts/note Authorization: Bearer {{apiKey}} Content-Type: application/json { "phone": "+5511987654321", "note": "Prefere ser chamada de manhã." } ### Grava um campo personalizado # Grava um campo personalizado sozinho, sem mexer nos outros. A chave # precisa existir em Campos personalizados. Mande `value: null` para limpar. POST {{base}}/contacts/field Authorization: Bearer {{apiKey}} Content-Type: application/json { "phone": "+5511987654321", "key": "plano", "value": "Ultra" } ### ─────────────── Configuração ─────────────── ### Metadados da organização # Tudo que a organização tem cadastrado e que você precisa conhecer antes de # gravar um contato: campos personalizados, etiquetas, funis com as etapas, # membros da equipe e números conectados. GET {{base}}/contacts-schema Authorization: Bearer {{apiKey}} ### Números de WhatsApp conectados # Os números de WhatsApp conectados, com a nota de qualidade que a Meta dá a # cada um e o erro de configuração, quando existe. GET {{base}}/connections?agent_id=&limit=&cursor= Authorization: Bearer {{apiKey}} ### Uma conexão # Um número conectado. GET {{base}}/connections/{{id}} Authorization: Bearer {{apiKey}} ### Templates de WhatsApp # Os templates de mensagem da organização, com o status que a Meta deu a # cada um. Só template `APPROVED` pode ser enviado. GET {{base}}/templates?connection_id=&status=&category= Authorization: Bearer {{apiKey}} ### Cria e submete um template à Meta # Cria o template e submete à Meta na mesma chamada. Ele nasce `PENDING` e a # aprovação leva de minutos a algumas horas. POST {{base}}/templates Authorization: Bearer {{apiKey}} Content-Type: application/json { "connection_id": "c0a80101-4444-4444-8444-444444444444", "name": "lembrete_retorno", "category": "UTILITY", "language_code": "pt_BR", "body_text": "Oi {{1}}, faz {{2}} meses desde a sua última visita. Quer marcar um retorno?", "footer_text": "Clínica Bem Estar" } ### Sincroniza templates com a Meta # Puxa da Meta o status atual de todos os templates do número. Use quando # desconfiar que a lista aqui está atrasada; no dia a dia, o evento # `template.status_changed` já avisa. POST {{base}}/templates/sync Authorization: Bearer {{apiKey}} Content-Type: application/json { "connection_id": "c0a80101-4444-4444-8444-444444444444" } ### Um template, por id da Wevichat ou Meta ID # Um template, pelo identificador da Wevichat ou pelo Meta ID. GET {{base}}/templates/{{id}} Authorization: Bearer {{apiKey}} ### Apaga o template na Meta e aqui # Apaga o template na Meta e aqui. Campanha que ainda dependia dele para de funcionar, então confira antes. DELETE {{base}}/templates/{{id}} Authorization: Bearer {{apiKey}} ### Etiquetas de contato ou de conversa # As etiquetas da organização. As de contato e as de conversa são conjuntos separados. GET {{base}}/tags?type= Authorization: Bearer {{apiKey}} ### Funis e suas etapas # Os funis, com as etapas na ordem em que aparecem no painel. Use os nomes daqui em `POST /contacts/stage`. GET {{base}}/pipelines Authorization: Bearer {{apiKey}} ### Campos personalizados de contato # Os campos personalizados de contato. As chaves daqui são as únicas aceitas em `fields`. GET {{base}}/fields Authorization: Bearer {{apiKey}} ### Membros da organização # Os membros da organização, com o papel de cada um. É daqui que sai o email para atribuir carteira ou conversa. GET {{base}}/users?role=&assignable= Authorization: Bearer {{apiKey}} ### Respostas rápidas da equipe # As respostas rápidas que a equipe usa no inbox. Serve para reaproveitar o mesmo texto no seu sistema. GET {{base}}/quick-replies Authorization: Bearer {{apiKey}} ### ─────────────── Conversas ─────────────── ### Lista conversas # As conversas da organização, da que teve movimento mais recente para a # mais antiga. GET {{base}}/conversations?status=&channel=&agent_id= Authorization: Bearer {{apiKey}} ### Uma conversa # Uma conversa, com contato, agente, situação, transbordo, avaliação, humor e a origem do anúncio quando ela veio de um Click to WhatsApp. GET {{base}}/conversations/{{id}} Authorization: Bearer {{apiKey}} ### Mensagens da conversa # As mensagens da conversa, da mais antiga para a mais recente, com o status # de entrega de cada uma quando o canal informa. GET {{base}}/conversations/{{id}}/messages?limit=&cursor= Authorization: Bearer {{apiKey}} ### Responde dentro da conversa # Responde dentro de uma conversa que já existe. Aceita os mesmos doze tipos # do `POST /messages`, sem precisar informar destino: a conversa já diz para # quem vai. POST {{base}}/conversations/{{id}}/messages Authorization: Bearer {{apiKey}} Content-Type: application/json { "type": "text", "text": "Perfeito, Marina. Agendei para quinta às 14h." } ### Eventos de conversão da conversa # Os eventos de conversão que o agente detectou nesta conversa, como um # agendamento marcado ou uma proposta aceita. Quais eventos existem é # configuração de cada agente. GET {{base}}/conversations/{{id}}/events Authorization: Bearer {{apiKey}} ### Transcrição da conversa # A conversa inteira num arquivo só, para anexar num chamado, num processo # ou num relatório. Em `markdown` sai legível para uma pessoa; em `json`, # para outro sistema. GET {{base}}/conversations/{{id}}/export?format= Authorization: Bearer {{apiKey}} ### Define quem atende a conversa # Coloca um membro da equipe como responsável pela conversa. A IA para de # responder nela até alguém devolver com `/release`. POST {{base}}/conversations/{{id}}/assign Authorization: Bearer {{apiKey}} Content-Type: application/json { "user_email": "paula@clinicabemestar.com.br" } ### Devolve a conversa para a IA # Tira o responsável humano e devolve a conversa para a IA, que volta a responder na próxima mensagem do cliente. POST {{base}}/conversations/{{id}}/release Authorization: Bearer {{apiKey}} ### Silencia a IA por um tempo # Silencia a IA nesta conversa por um tempo, sem passar o atendimento para # ninguém. Serve para quem vai responder na mão agora e não quer o agente # falando junto. POST {{base}}/conversations/{{id}}/pause-ai Authorization: Bearer {{apiKey}} Content-Type: application/json { "minutes": 30 } ### Volta a IA a responder # Cancela a pausa e devolve a palavra à IA na hora. POST {{base}}/conversations/{{id}}/resume-ai Authorization: Bearer {{apiKey}} ### Encerra a conversa # Encerra a conversa. Ela sai da fila do inbox e passa a contar como # resolvida nos números. Se o cliente escrever de novo, ela reabre sozinha. POST {{base}}/conversations/{{id}}/resolve Authorization: Bearer {{apiKey}} Content-Type: application/json { "user_email": "paula@clinicabemestar.com.br" } ### Reabre a conversa # Reabre uma conversa encerrada, sem esperar o cliente escrever. POST {{base}}/conversations/{{id}}/reopen Authorization: Bearer {{apiKey}} Content-Type: application/json {} ### Pede atendente humano # Marca que esta conversa precisa de atendente humano. Ela passa a aparecer # no filtro `handoff=pending` e dispara o evento # `conversation.handoff_requested`. POST {{base}}/conversations/{{id}}/handoff Authorization: Bearer {{apiKey}} Content-Type: application/json { "reason": "Cliente relatou cobrança indevida" } ### Aplica etiqueta na conversa # Aplica uma etiqueta de conversa, criando a etiqueta se ela ainda não existir. Etiqueta de conversa é diferente de etiqueta de contato. POST {{base}}/conversations/{{id}}/tags Authorization: Bearer {{apiKey}} Content-Type: application/json { "tag": "Urgente" } ### Remove etiqueta da conversa # Tira uma etiqueta da conversa. DELETE {{base}}/conversations/{{id}}/tags Authorization: Bearer {{apiKey}} Content-Type: application/json { "tag": "Urgente" } ### ─────────────── Mensagens ─────────────── ### Busca mensagens # Busca mensagens de conversa e disparos avulsos no mesmo lugar. Exige um # filtro: `conversation_id` traz as mensagens daquela conversa, `contact_id` # traz os disparos feitos para um contato, e `wamid` traz a mensagem GET {{base}}/messages?wamid=&conversation_id=&contact_id= Authorization: Bearer {{apiKey}} ### Envia uma mensagem de qualquer tipo # O envio de mensagem, para todos os tipos. O campo `type` decide o resto do # corpo: `text` usa `text`, `template` usa `template_name` e `body_params`, # mídia usa `media`, e os interativos usam `body` mais o campo do formato. POST {{base}}/messages Authorization: Bearer {{apiKey}} Content-Type: application/json { "type": "template", "to": "+5511987654321", "connection_id": "c0a80101-4444-4444-8444-444444444444", "template_name": "confirmacao_consulta", "language_code": "pt_BR", "body_params": [ "Marina", "quinta às 14h" ], "contact": { "name": "Marina Alves" } } ### Uma mensagem, ou um disparo avulso # Uma mensagem de conversa ou um disparo avulso, pelo identificador que o envio devolveu. GET {{base}}/messages/{{id}} Authorization: Bearer {{apiKey}} ### ─────────────── Agentes ─────────────── ### Lista agentes # Os agentes da organização, com modelo, canal e o que cada um sabe detectar na conversa. GET {{base}}/agents?status=&type=&q= Authorization: Bearer {{apiKey}} ### Um agente, por id ou slug público # Um agente, pelo identificador interno ou pelo slug público. O prompt do sistema vem junto, então trate a resposta como conteúdo interno. GET {{base}}/agents/{{id}} Authorization: Bearer {{apiKey}} ### Conversa com o agente # Conversa com um agente de IA sem passar pelo WhatsApp. A resposta vem no # corpo, e a conversa fica registrada no inbox como qualquer outra, no canal # `api`. POST {{base}}/agents/{{id}}/chat Authorization: Bearer {{apiKey}} Content-Type: application/json { "message": "Quanto custa uma limpeza?", "external_user_id": "usuario-4471", "user": { "name": "Marina Alves", "email": "marina.alves@exemplo.com.br" } } ### Documentos da base de conhecimento # Os documentos que alimentam as respostas deste agente, com o status da indexação de cada um. GET {{base}}/agents/{{id}}/knowledge/documents Authorization: Bearer {{apiKey}} ### Adiciona um documento # Adiciona um documento à base de conhecimento do agente, por texto direto # ou por URL. A indexação roda em segundo plano: o documento nasce # `pending` e vira `ready` quando terminar. POST {{base}}/agents/{{id}}/knowledge/documents Authorization: Bearer {{apiKey}} Content-Type: application/json { "name": "Tabela de preços 2026", "content": "Limpeza: R$ 180. Clareamento: R$ 890...", "format": "text" } ### Remove um documento # Remove o documento e os trechos indexados dele. O agente para de usar aquele conteúdo na resposta seguinte. DELETE {{base}}/agents/{{id}}/knowledge/documents/{{document_id}} Authorization: Bearer {{apiKey}} ### ─────────────── Campanhas ─────────────── ### Lista campanhas # As campanhas da organização, com as métricas de entrega de cada uma. GET {{base}}/campaigns?status=&connection_id=&limit= Authorization: Bearer {{apiKey}} ### Cria uma campanha como rascunho # Cria a campanha como rascunho. Nada é enviado aqui: depois de conferir a # audiência em `GET /campaigns/{id}`, dispare com `/start` ou marque hora # com `/schedule`. POST {{base}}/campaigns Authorization: Bearer {{apiKey}} Content-Type: application/json { "name": "Retorno semestral", "connection_id": "c0a80101-4444-4444-8444-444444444444", "template_name": "lembrete_retorno", "language_code": "pt_BR", "audience_filter": { "tag": "Inativo" }, "open_conversation": "on_reply" } ### Uma campanha, com métricas # Uma campanha, com as métricas atualizadas. Durante o disparo, os números sobem aos poucos. GET {{base}}/campaigns/{{id}} Authorization: Bearer {{apiKey}} ### Dispara a campanha # Dispara a campanha agora. O envio acontece em lotes, respeitando o limite do número na Meta. POST {{base}}/campaigns/{{id}}/start Authorization: Bearer {{apiKey}} ### Agenda a campanha # Marca hora para o disparo. A campanha fica `scheduled` até lá. POST {{base}}/campaigns/{{id}}/schedule Authorization: Bearer {{apiKey}} Content-Type: application/json { "scheduled_at": "2026-09-10T09:00:00Z" } ### Cancela a campanha # Cancela a campanha. O que já saiu não volta: cancelar interrompe os lotes # que ainda não foram enviados. POST {{base}}/campaigns/{{id}}/cancel Authorization: Bearer {{apiKey}} ### Destinatários da campanha # Quem recebeu, com o status de cada envio. É onde você vê quais números # falharam e por quê, para limpar a sua base. GET {{base}}/campaigns/{{id}}/recipients?status=&limit=&cursor= Authorization: Bearer {{apiKey}} ### ─────────────── Automações ─────────────── ### Lista fluxos de automação # Os fluxos de automação da organização. O token do webhook de cada fluxo é credencial e não aparece aqui. GET {{base}}/automations?status=&limit=&cursor= Authorization: Bearer {{apiKey}} ### Um fluxo # Um fluxo, com o gatilho, as condições de saída e quantos passos ele tem. GET {{base}}/automations/{{id}} Authorization: Bearer {{apiKey}} ### Execuções do fluxo # As passagens de contatos por este fluxo, da mais recente para a mais # antiga. Mostra em que passo cada um está e por que os que saíram saíram. GET {{base}}/automations/{{id}}/runs?status=&contact_id=&limit= Authorization: Bearer {{apiKey}} ### Coloca um contato no fluxo # Coloca um contato no fluxo. O contato é criado ou atualizado na mesma # chamada, então você não precisa cadastrar antes. POST {{base}}/automations/{{id}}/start Authorization: Bearer {{apiKey}} Content-Type: application/json { "phone": "+5511987654321", "name": "Marina Alves", "custom_fields": { "orcamento": "1890" } } ### Tira um contato do fluxo # Tira o contato do fluxo antes da hora. Serve para parar a sequência quando ele já resolveu o assunto por outro canal. POST {{base}}/automations/{{id}}/stop Authorization: Bearer {{apiKey}} Content-Type: application/json { "phone": "+5511987654321", "reason": "Cliente respondeu por telefone" } ### Dispara um fluxo por token # Dispara um fluxo usando o token do próprio fluxo, sem chave de API. É o # formato antigo, mantido para as integrações que já existem. POST {{base}}/automation-trigger Content-Type: application/json { "token": "fluxo_token_exemplo", "phone": "+5511987654321", "name": "Marina Alves" } ### ─────────────── Webhooks ─────────────── ### Lista os webhooks cadastrados # Os endereços cadastrados para receber eventos, com a saúde de cada um. O # segredo de assinatura não aparece aqui: ele só é mostrado uma vez, na # criação. GET {{base}}/webhooks Authorization: Bearer {{apiKey}} ### Cadastra um webhook # Cadastra um endereço para receber eventos. A resposta traz o `secret`, que # aparece uma vez só: guarde agora, porque não há como consultá-lo depois, # só gerar outro. POST {{base}}/webhooks Authorization: Bearer {{apiKey}} Content-Type: application/json { "url": "https://sistema.clinicabemestar.com.br/wevichat", "events": [ "message.received", "conversation.handoff_requested" ], "description": "CRM" } ### Todos os tipos de evento disponíveis # Todos os tipos de evento que dá para assinar, como uma lista de # identificadores. Use para validar do seu lado antes de mandar em # `POST /webhooks`, em vez de descobrir pelo `400`. GET {{base}}/webhooks/event-types Authorization: Bearer {{apiKey}} ### Um webhook # Um webhook, com a saúde da entrega. O segredo não vem junto. GET {{base}}/webhooks/{{id}} Authorization: Bearer {{apiKey}} ### Altera url, eventos, descrição ou situação # Muda endereço, eventos assinados, descrição ou liga e desliga o webhook. # Desligar com `active: false` para a entrega sem apagar o histórico. PATCH {{base}}/webhooks/{{id}} Authorization: Bearer {{apiKey}} Content-Type: application/json { "events": [ "message.received", "message.failed" ], "active": true } ### Remove o webhook e o histórico dele # Remove o webhook e o histórico de entregas dele. Não tem volta. DELETE {{base}}/webhooks/{{id}} Authorization: Bearer {{apiKey}} ### Dispara um evento de teste # Enfileira um evento de teste para o endereço. Serve para conferir, antes # de depender disso, que o seu servidor recebe e que a sua verificação de # assinatura passa. POST {{base}}/webhooks/{{id}}/test Authorization: Bearer {{apiKey}} ### Gera um segredo novo # Gera um segredo novo e invalida o antigo na hora. A resposta mostra o novo # uma vez só. POST {{base}}/webhooks/{{id}}/rotate-secret Authorization: Bearer {{apiKey}} ### Tentativas de entrega # As tentativas de entrega, da mais recente para a mais antiga, com o HTTP # que o seu servidor devolveu e os primeiros bytes da resposta. É o primeiro # lugar a olhar quando um evento não chegou. GET {{base}}/webhooks/{{id}}/deliveries?status=&limit=&cursor= Authorization: Bearer {{apiKey}} ### Reenvia uma entrega # Reenvia uma entrega que falhou, sem esperar a próxima retentativa automática. Use depois de corrigir o seu lado. POST {{base}}/webhooks/{{id}}/deliveries/{{delivery_id}}/retry Authorization: Bearer {{apiKey}} ### Os mesmos eventos do webhook, por consulta # Os mesmos eventos do webhook, por consulta. Serve para quem não tem # endereço público: um script atrás de firewall, ou um n8n em rede fechada. GET {{base}}/events?since=&type=&limit= Authorization: Bearer {{apiKey}} ### ─────────────── Parceiros ─────────────── ### Lista os clientes do parceiro # Os clientes desta organização parceira, com o consumo do mês de cada um. # Serve para o parceiro montar o próprio painel de clientes, sem espelhar GET {{base}}/partner/clients?plan=&q=&limit= Authorization: Bearer {{apiKey}} ### Cria um cliente # Cria o espaço de um cliente dentro da sua organização parceira. # Sem `plan`, ele nasce em teste de 15 dias. Com `plan`, nasce ativo e entra POST {{base}}/partner/clients Authorization: Bearer {{apiKey}} Content-Type: application/json { "name": "Clínica Bem Estar", "plan": "pro", "primary_color": "#B5F03F" } ### Um cliente, com o consumo do mês # Um cliente seu, com o consumo do mês. Cliente de outro parceiro responde # `404`, não `403`: para a sua chave, ele não existe. GET {{base}}/partner/clients/{{id}} Authorization: Bearer {{apiKey}} ### Altera nome e identidade visual # Altera nome, cor, logotipo e domínio próprio do cliente. # Trocar de plano ainda passa pelo painel, porque mexe na sua cobrança no PATCH {{base}}/partner/clients/{{id}} Authorization: Bearer {{apiKey}} Content-Type: application/json { "primary_color": "#1CB945", "logo_url": "https://cdn.exemplo.com/logo.png" } ### Gera uma chave dentro do cliente # Gera uma chave de API dentro do espaço do cliente, para o seu sistema # operar aquele espaço. POST {{base}}/partner/clients/{{id}}/keys Authorization: Bearer {{apiKey}} Content-Type: application/json { "name": "integração do parceiro", "scopes": [ "contacts:read", "messages:send" ], "is_test": true } ### Consumo de todos os clientes # O consumo de todos os seus clientes de uma vez, agregado e por cliente. # É o número que fecha com a sua fatura de licenças no fim do mês. GET {{base}}/partner/usage Authorization: Bearer {{apiKey}} ### ─────────────── Sistema ─────────────── ### A organização da chave # A organização da chave, com o plano, os limites e o consumo do mês. Limite # sem teto vem como `null`, porque JSON não tem infinito. GET {{base}}/org Authorization: Bearer {{apiKey}} ### Consumo do mês corrente # Só o consumo do mês, sem os dados da organização. Mais barato para um painel que atualiza sozinho. GET {{base}}/org/usage Authorization: Bearer {{apiKey}} ### Números do atendimento # Os números do atendimento no período: conversas, mensagens, transbordos, # avaliações e humor. Sem `from` e `to`, usa os últimos 30 dias. GET {{base}}/analytics/overview?from=&to= Authorization: Bearer {{apiKey}} ### Os mesmos números, para um agente # Os mesmos números, só do que passou por um agente. Serve para comparar dois agentes no mesmo período. GET {{base}}/analytics/agents/{{id}}?from=&to= Authorization: Bearer {{apiKey}} ### Ping para monitoramento # Responde sem autenticação, para você apontar o seu monitoramento. Além do # status, devolve `db_ms`, o tempo de uma consulta trivial ao banco: é o que # separa "a API está de pé" de "a API está rápida". GET {{base}}/health ### Esta especificação # Esta especificação, em JSON, sem autenticação. Aponte a sua ferramenta # para cá e ela gera o cliente sozinha. GET {{base}}/openapi