API do ChatSIA.

Ligue o ChatSIA ao sistema que a sua empresa já usa. Contatos, conversas e mensagens passam de um para o outro, e o ChatSIA avisa o seu sistema quando algo acontece.

Em todos os planos, também nos 7 dias grátis. A integração é feita por alguém técnico do seu lado.

O que dá para fazer.

  • Criar e atualizar contatos a partir do seu sistema, com nome, telefone, e-mail e os campos que você criar.
  • Responder numa conversa ou mandar mensagem só com o telefone do cliente, na hora ou programada para o dia e o horário que você escolher. A mensagem fica na conversa, junto com o resto do atendimento. No WhatsApp oficial, a Meta cobra cada mensagem no cartão da sua conta do WhatsApp Business, e fora da janela de 24 horas só sai modelo aprovado. No Instagram e no Messenger, só dentro da janela que a Meta permite depois da última mensagem do cliente.
  • Receber um aviso no seu sistema quando chega conversa, mensagem ou contato novo, ou quando uma conversa é resolvida.
  • Etiquetar a conversa, passar para uma pessoa ou um time e marcar como resolvida.
  • Criar cartões no funil, mudar a etapa e marcar como ganho ou perdido. No Profissional e no Avançado.
  • Levar para o seu sistema o volume de conversas e o tempo da primeira resposta e de resolução, por pessoa, canal, time e etiqueta, com token de uma pessoa administradora.

Para quem é.

Para a empresa que já usa um sistema próprio, como um cadastro de clientes ou um sistema de vendas, e quer que ele e o ChatSIA troquem informações sem ninguém copiar dados de uma tela para a outra.

Quem faz a integração é alguém técnico: o programador da sua empresa ou um de sua confiança. Se preferir que a SIA faça, a integração com um sistema da sua empresa é cotada à parte.

Se a sua empresa não usa outro sistema, a API não é necessária: os contatos e as conversas já ficam no ChatSIA.

Em quais planos.

  • Em todos os planos, também nos 7 dias grátis: a API da conta, os webhooks, as telas do seu sistema dentro do ChatSIA e o canal próprio.
  • No Profissional e no Avançado: o funil pela API, com cartões, etapas, ganho e perdido.
  • Só no Avançado: as ferramentas próprias do agente de IA, que consultam o seu sistema durante a conversa.

Preços e o que entra em cada plano estão em Planos.

Como começar.

  1. Copie o seu token. No ChatSIA, clique na sua foto, abra Configurações do Perfil e copie o Token de acesso.
  2. Veja o número da conta. Ele aparece no endereço do painel, logo depois de /accounts/. Em app.servicosia.com.br/app/accounts/123/dashboard, a conta é a 123.
  3. Use o endereço da conta. As chamadas da conta começam com https://app.servicosia.com.br/api/v1/accounts/{id_da_conta} e trocam dados em JSON.
  4. Mande o token em todo pedido, no cabeçalho api_access_token.

Exemplos prontos para copiar.

Os exemplos usam dados fictícios. Antes, guarde o token e o endereço da conta no terminal:

Terminal
CHATSIA_TOKEN="cole-aqui-o-seu-token"
API="https://app.servicosia.com.br/api/v1/accounts/123"   # troque 123 pelo número da sua conta

Conferir o token.

Terminal
curl "https://app.servicosia.com.br/api/v1/profile" \
  -H "api_access_token: $CHATSIA_TOKEN"

A resposta traz o seu nome e as contas que você acessa, com o número e o seu papel em cada uma. Se algum proxy do seu lado descartar cabeçalho com sublinhado, mande o mesmo token em Api-Access-Token.

Listar as conversas abertas.

Terminal
curl "$API/conversations?status=open&page=1" \
  -H "api_access_token: $CHATSIA_TOKEN"

As conversas vêm em data.payload, a de atividade mais recente primeiro, em páginas: peça page=2, page=3 e assim por diante, até a lista vir vazia. O status aceita open, pending, resolved, snoozed ou all; sem ele, vêm só as abertas. Para ver um canal só, acrescente &inbox_id=7 ao endereço. O id de cada conversa é o mesmo número que aparece no painel. Com token de agente, vêm só as conversas das caixas de entrada em que essa pessoa está.

Mandar uma mensagem numa conversa.

Terminal
curl -X POST "$API/conversations/1042/messages" \
  -H "api_access_token: $CHATSIA_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"content": "Oi, Mariana! Sua avaliação está confirmada para sexta, às 15h."}'

A mensagem sai pelo canal da conversa 1042 e fica registrada como enviada pela pessoa dona do token. Com "private": true, ela vira nota interna, que o cliente não vê. Se a conversa estava resolvida, volta a ficar aberta. No WhatsApp oficial, fora da janela de 24 horas, mande um modelo aprovado pela Meta em template_params, com o nome e o idioma exatos do modelo: {"content": "Oi, Mariana! Sua avaliação está confirmada.", "template_params": {"name": "confirmacao_avaliacao", "language": "pt_BR", "processed_params": {"body": {"1": "Mariana"}}}}. Texto livre fica com status de falha. Na resposta, message_type vem em número (0 é recebida, 1 é enviada); nos avisos, vem em texto (incoming, outgoing).

Criar um contato.

Terminal
curl -X POST "$API/contacts" \
  -H "api_access_token: $CHATSIA_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "Mariana Costa", "phone_number": "+5548999999999",
       "email": "mariana@example.com", "identifier": "cliente-1042"}'

O telefone vai no formato internacional, com + e o código do país. O identifier é o código do cliente no seu sistema: não se repete na conta e serve para achar o contato depois, pela busca. Telefone, e-mail ou código que já estejam na conta voltam com erro 422, então busque antes com GET /contacts/search?q=. A exceção é o mesmo celular escrito com ou sem o nono dígito: nesse caso, o ChatSIA aproveita o contato que já existe. O id do contato criado vem em payload.contact.id; é ele que vai em contact_id nas outras chamadas.

Principais chamadas.

As chamadas abaixo partem de https://app.servicosia.com.br/api/v1/accounts/{id_da_conta}, menos as dos relatórios, que têm o endereço completo.

Para quê Chamada
Listar contatos, em páginas GET /contacts?page=1
Buscar contato por nome, telefone, e-mail ou código GET /contacts/search?q=
Criar contato POST /contacts
Atualizar contato PATCH /contacts/{id}
Conversas de um contato GET /contacts/{id}/conversations
Listar conversas GET /conversations?status=open&page=1
Ver uma conversa GET /conversations/{id}
Abrir conversa com um contato num canal POST /conversations com inbox_id e contact_id
Mudar o status da conversa POST /conversations/{id}/toggle_status com {"status": "resolved"}
Passar para uma pessoa ou um time POST /conversations/{id}/assignments com assignee_id ou team_id
Etiquetas da conversa POST /conversations/{id}/labels com {"labels": ["retorno"]}
Ler as mensagens GET /conversations/{id}/messages
Responder ou deixar nota interna POST /conversations/{id}/messages
Mandar mensagem só com o telefone POST /outbound_messages
Programar mensagem para dia e hora POST /scheduled_outbound_messages
Canais da conta GET /inboxes
Etiquetas, pessoas e times GET /labels, GET /agents, GET /teams
Campos personalizados GET /custom_attribute_definitions
Funis e etapas GET /funnels
Criar cartão no funil POST /kanban_items
Mudar o cartão de etapa POST /kanban_items/{id}/move_to_stage
Marcar ganho, perdido ou aberto POST /kanban_items/{id}/change_status com {"status": "won"}
Webhooks GET e POST /webhooks, PATCH e DELETE /webhooks/{id}
Resumo do atendimento no período GET https://app.servicosia.com.br/api/v2/accounts/{id_da_conta}/reports/summary?type=account&since=&until=
Resumo por pessoa, canal, time ou etiqueta GET https://app.servicosia.com.br/api/v2/accounts/{id_da_conta}/summary_reports/agent?since=&until=, trocando agent por inbox, team ou label
  • Nas etiquetas, a lista enviada substitui as que a conversa tinha.
  • Ao abrir conversa, se o contato já tem uma aberta ou pendente naquele canal, a resposta é 422, com o número dela.
  • Para mandar só com o telefone, envie {"inbox_id": 7, "recipient": {"phone_number": "+5548999999999"}, "message": {"type": "text", "content": "..."}}. O ChatSIA acha ou cria o contato e a conversa e responde 202, porque a mensagem entra numa fila. O cabeçalho opcional Idempotency-Key evita mandar a mesma mensagem duas vezes. No WhatsApp oficial, para quem não escreveu nas últimas 24 horas, troque message por um modelo aprovado: {"type": "template", "template": {"name": "lembrete_avaliacao", "language": "pt_BR", "parameters": {"body": {"1": "Mariana"}}}}. O 202 só confirma que a mensagem entrou na fila; acompanhe a entrega pelo aviso message_updated.
  • Para programar, envie {"inbox_id": 7, "recipient": {"phone_number": "+5548999999999"}, "title": "Lembrete da avaliação", "content": "...", "scheduled_at": "2026-10-08T12:00:00-03:00"}, com data e hora no futuro, no formato ISO 8601 e com o fuso.
  • O funil vale no Profissional e no Avançado. Em GET /funnels, cada funil traz stages, e as chaves desse objeto são as etapas. Para criar o cartão, envie {"kanban_item": {"funnel_id": 3, "funnel_stage": "chave-da-etapa", "position": 1, "conversation_display_id": 1042, "item_details": {"title": "Avaliação"}}}. Para mudar de etapa, {"funnel_stage": "chave-da-etapa"}; com item obrigatório do checklist em aberto, a resposta é 422.
  • Para criar webhook pela API, envie {"webhook": {"name": "Sistema da clínica", "url": "https://...", "subscriptions": ["message_created"], "inbox_ids": [7]}}; a resposta traz o secret.
  • Nos relatórios, since e until vão em segundos (horário Unix).

Webhooks: avisos para o seu sistema.

Em Configurações, Integrações, Webhooks, clique em Adicionar novo Webhook. Informe o endereço do seu sistema e um nome, escolha as caixas de entrada (sem escolher, valem todas) e marque os eventos. Ao criar, o ChatSIA mostra o segredo do webhook. Guarde-o para conferir a assinatura; ele também aparece depois, ao editar o webhook.

A cada evento, o ChatSIA manda um POST em JSON para o seu endereço, com o nome do evento no campo event.

Evento Chave Quando chega
Conversa criada conversation_created começa uma conversa nova
Status de conversa alterado conversation_status_changed a conversa fica aberta, pendente, resolvida ou adiada
Conversa atualizada conversation_updated muda o responsável, o time, as etiquetas, a prioridade, o status ou um campo personalizado
Mensagem criada message_created chega mensagem do cliente ou sai mensagem da conta, inclusive nota interna
Mensagem atualizada message_updated uma mensagem muda, por exemplo o status de entrega
Contato criado contact_created entra um contato novo
Contato atualizado contact_updated muda um dado do contato; chega também a cada mensagem que o contato manda, então assine só se for usar
Widget de chat aberto pelo usuário webwidget_triggered o visitante abre o chat do seu site
Caixa de entrada atualizada inbox_updated muda a configuração de um canal
Digitação ligada e desligada conversation_typing_on e conversation_typing_off alguém começa ou para de digitar
Mensagens e salas do chat interno chat_room_message_created, chat_room_message_updated, chat_room_message_deleted e chat_room_updated movimento no chat interno da equipe, que existe no Profissional e no Avançado

Trecho de um aviso de mensagem recebida, com dados fictícios:

JSON
{
  "event": "message_created",
  "id": 98765,
  "content": "Oi! Tem horário na sexta?",
  "message_type": "incoming",
  "private": false,
  "sender": { "id": 4567, "name": "Mariana Costa", "phone_number": "+5548999999999", "identifier": "cliente-1042" },
  "conversation": { "id": 1042, "inbox_id": 7, "status": "open", "labels": [] },
  "inbox": { "id": 7, "name": "WhatsApp" },
  "account": { "id": 123, "name": "Clínica Exemplo" }
}

Assinatura.

Cada aviso traz três cabeçalhos com o prefixo da plataforma, terminados em -Timestamp, -Signature e -Delivery:

  • o que termina em -Timestamp traz a hora do envio, em segundos;
  • o que termina em -Signature traz sha256= seguido do HMAC SHA-256, feito com o segredo do webhook, do texto {hora}.{corpo}: a hora do cabeçalho anterior, um ponto e o corpo exato que chegou;
  • o que termina em -Delivery identifica a entrega. Use para ignorar um aviso repetido.

Se chegar também um cabeçalho terminado em -Global-Signature, ignore: ele usa outro segredo, que não é o da sua conta.

Conferência em Node.js:

JavaScript
import crypto from 'node:crypto';

// cabecalhos: os cabeçalhos do pedido
// corpo: o texto exato que chegou, antes de virar JSON
export function avisoConfere(cabecalhos, corpo, segredo) {
  const achar = (fim) => {
    const nome = Object.keys(cabecalhos).find((n) => {
      const m = n.toLowerCase();
      return m.endsWith(fim) && !m.includes('global');
    });
    return nome ? String(cabecalhos[nome]) : '';
  };
  const hora = achar('-timestamp');
  const recebida = achar('-signature');
  const esperada = 'sha256=' + crypto
    .createHmac('sha256', segredo)
    .update(`${hora}.${corpo}`)
    .digest('hex');
  const recente = Math.abs(Date.now() / 1000 - Number(hora)) < 300; // até 5 minutos de diferença
  const a = Buffer.from(recebida);
  const b = Buffer.from(esperada);
  return recente && a.length === b.length && crypto.timingSafeEqual(a, b);
}

No Express, leia o corpo cru com express.raw({ type: 'application/json' }) e só depois converta para JSON.

Entrega.

  • Responda com 200 em menos de 5 segundos, que é o tempo que o ChatSIA espera hoje, e deixe o trabalho pesado para depois. Se o seu endereço demorar, responder com erro ou estiver fora do ar, aquele aviso se perde: não há nova tentativa. Por isso, de tempos em tempos, consulte a API para pegar o que ficou para trás.
  • Os avisos saem por uma fila e podem chegar fora de ordem. Para saber como uma conversa está agora, consulte a API.
  • O ChatSIA precisa alcançar o seu endereço pela internet. Use https.
  • Para avisar só em certas condições, use a ação Enviar evento de Webhook nas regras de automação ou nas macros. Ela manda os dados da conversa para o endereço que você indicar, sem assinatura.

Outras formas de ligar.

  • Telas do seu sistema dentro do ChatSIA. Em Configurações, Integrações, Painel de Aplicativos, cadastre o nome e o endereço da tela. Ela abre numa aba ao lado da conversa. Ao carregar, recebe por postMessage um texto JSON com event igual a appContext e, em data, a conversa aberta, o contato, a pessoa que está com o ChatSIA aberto (id, nome e e-mail) e o tema, claro ou escuro. Em todos os planos. Precisa de: a sua página aceitar ser aberta dentro de outra (iframe), sem o cabeçalho X-Frame-Options e, se usar Content-Security-Policy, com frame-ancestors liberando https://app.servicosia.com.br. Esses dados vão para o endereço cadastrado, então cadastre só sistemas em que você confia.
  • Ferramentas próprias do agente de IA. Na área do agente de IA, em Ferramentas, cadastre chamadas ao seu sistema: método (GET, POST, PUT, PATCH ou DELETE), endereço, autenticação (nenhuma, Bearer, Basic ou chave de API) e o que cada parâmetro quer dizer. Durante a conversa, o agente usa a ferramenta quando precisa, por exemplo para consultar um pedido ou um horário livre. Só no Avançado. Precisa de: endereço https com nome de domínio. As respostas do agente usam os créditos de IA do plano.
  • Canal próprio. Serve para pôr um chat dentro do app ou do sistema da sua empresa. Em Configurações, Caixas de Entrada, crie uma caixa do tipo API e informe o endereço que vai receber as respostas. As chamadas do canal começam com https://app.servicosia.com.br/public/api/v1/inboxes/{identificador_da_caixa}, com o identificador que aparece na tela da caixa: POST /contacts cria o contato e devolve o source_id; POST /contacts/{source_id}/conversations abre a conversa; POST /contacts/{source_id}/conversations/{id}/messages manda a mensagem do cliente. As respostas chegam no endereço da caixa como aviso message_created. Entregue ao cliente só as que vierem com message_type igual a outgoing e private falso, porque as notas internas também chegam por ali. Essas chamadas não usam token, então faça todas do seu servidor. Na tela da caixa, ligue Forçar validação de identidade do usuário. Com ela ligada, as chamadas do contato exigem identifier e identifier_hash: o HMAC SHA-256 do identifier, feito com a chave que aparece nessa tela, em hexadecimal. Em todos os planos. Ocupa um dos canais do plano.

Limites e boas práticas.

  • O token faz tudo o que a pessoa dona dele pode fazer no ChatSIA. Para integrar, crie uma pessoa só para isso, com papel de agente, nas caixas de entrada que a integração usa. Ela ocupa uma das 20 vagas de atendente do plano.
  • Use token de administrador só quando precisar. Relatórios e webhooks pela API pedem esse token, e ele também lê os segredos dos canais e dos webhooks.
  • Guarde o token no servidor, nunca no navegador nem no app. Se ele vazar, clique em Reiniciar, na mesma tela onde você copiou, e confirme: o token antigo para de funcionar na hora.
  • Pagine as listas e prefira os avisos a perguntar à API a cada poucos segundos. Se a plataforma frear as suas chamadas, a resposta é 429: espere um pouco e tente de novo.
  • Chamar a API não gasta créditos de IA. Se a sua integração cria mensagens de cliente numa caixa com o agente de IA ligado, o agente responde, e cada resposta gasta créditos.

Respostas de erro.

Código Quando
401 token ausente ou errado, pessoa sem acesso à conta ou sem permissão para aquela ação, ou conta suspensa (Account is suspended)
404 o que você pediu não existe nessa conta
409 Idempotency-Key repetida com conteúdo diferente, no envio só com o telefone
422 dado inválido ou repetido, como telefone, e-mail ou código que já está na conta
429 chamadas demais em pouco tempo

O que fica de fora.

  • Biblioteca pronta e ambiente de testes separado. A API é HTTP com JSON, e qualquer linguagem faz essas chamadas. Para testar, use a conta dos 7 dias grátis.
  • Referência de todas as chamadas. Esta página traz as mais usadas. Se precisar de outra, fale com a SIA.
  • Criar contas ou trocar de plano pela API. Conta nova nasce no cadastro.
  • Mensagem livre no WhatsApp oficial fora da janela de 24 horas. Fora dela, só modelo aprovado pela Meta.
  • Disparo em massa pela API. Para mandar a mesma mensagem a uma lista de contatos, use as Campanhas de WhatsApp, no Profissional e no Avançado, com modelo aprovado pela Meta e contatos que aceitaram receber.
  • Número de versão. A API muda junto com o ChatSIA, que é atualizado com frequência, e não há versão para travar. Faça a sua integração ignorar os campos que não usa.

Teste a API nos 7 dias grátis.

O teste é do Profissional, sem cartão, e já inclui tudo o que está nesta página, menos as ferramentas próprias do agente, que são do Avançado.

Página conferida em 02/10/2026.

Falar no WhatsApp