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.
- Copie o seu token. No ChatSIA, clique na sua foto, abra Configurações do Perfil e copie o Token de acesso.
- Veja o número da conta. Ele aparece no endereço do painel, logo depois de
/accounts/. Emapp.servicosia.com.br/app/accounts/123/dashboard, a conta é a 123. - 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. - 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:
CHATSIA_TOKEN="cole-aqui-o-seu-token"
API="https://app.servicosia.com.br/api/v1/accounts/123" # troque 123 pelo número da sua contaConferir o token.
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.
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.
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.
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 / |
| Buscar contato por nome, telefone, e-mail ou código | GET / |
| Criar contato | POST / |
| Atualizar contato | PATCH / |
| Conversas de um contato | GET / |
| Listar conversas | GET / |
| Ver uma conversa | GET / |
| Abrir conversa com um contato num canal | POST / com inbox_ e contact_ |
| Mudar o status da conversa | POST / com {"status": "resolved"} |
| Passar para uma pessoa ou um time | POST / com assignee_ ou team_ |
| Etiquetas da conversa | POST / com {"labels": ["retorno"]} |
| Ler as mensagens | GET / |
| Responder ou deixar nota interna | POST / |
| Mandar mensagem só com o telefone | POST / |
| Programar mensagem para dia e hora | POST / |
| Canais da conta | GET / |
| Etiquetas, pessoas e times | GET /, GET /, GET / |
| Campos personalizados | GET / |
| Funis e etapas | GET / |
| Criar cartão no funil | POST / |
| Mudar o cartão de etapa | POST / |
| Marcar ganho, perdido ou aberto | POST / com {"status": "won"} |
| Webhooks | GET e POST /, PATCH e DELETE / |
| Resumo do atendimento no período | GET https:// |
| Resumo por pessoa, canal, time ou etiqueta | GET https://, 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 opcionalIdempotency-Keyevita mandar a mesma mensagem duas vezes. No WhatsApp oficial, para quem não escreveu nas últimas 24 horas, troquemessagepor 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 avisomessage_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 trazstages, 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 osecret. - Nos relatórios,
sinceeuntilvã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_ |
começa uma conversa nova |
| Status de conversa alterado | conversation_ |
a conversa fica aberta, pendente, resolvida ou adiada |
| Conversa atualizada | conversation_ |
muda o responsável, o time, as etiquetas, a prioridade, o status ou um campo personalizado |
| Mensagem criada | message_ |
chega mensagem do cliente ou sai mensagem da conta, inclusive nota interna |
| Mensagem atualizada | message_ |
uma mensagem muda, por exemplo o status de entrega |
| Contato criado | contact_ |
entra um contato novo |
| Contato atualizado | contact_ |
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_ |
o visitante abre o chat do seu site |
| Caixa de entrada atualizada | inbox_ |
muda a configuração de um canal |
| Digitação ligada e desligada | conversation_ e conversation_ |
alguém começa ou para de digitar |
| Mensagens e salas do chat interno | chat_, chat_, chat_ e chat_ |
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:
{
"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
-Timestamptraz a hora do envio, em segundos; - o que termina em
-Signaturetrazsha256=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
-Deliveryidentifica 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:
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
postMessageum texto JSON comeventigual aappContexte, emdata, 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çalhoX-Frame-Optionse, se usarContent-Security-Policy, comframe-ancestorsliberandohttps://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 /contactscria o contato e devolve osource_id;POST /contacts/{source_id}/conversationsabre a conversa;POST /contacts/{source_id}/conversations/{id}/messagesmanda a mensagem do cliente. As respostas chegam no endereço da caixa como avisomessage_created. Entregue ao cliente só as que vierem commessage_typeigual aoutgoingeprivatefalso, 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 exigemidentifiereidentifier_hash: o HMAC SHA-256 doidentifier, 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.