ciro.chat
Uma API pública sobre o protocolo do WhatsApp Web. Seu número, seu aparelho, suas regras — sem provedor para pedir aprovação, sem revisão de modelo, e sem taxa em cada frase que você manda.
Plano gratuito · traga seu númeroSem cartãoPrimeira mensagem em minutos
Você precisa ter o direito de usar cada número que conectar e é responsável por cumprir os termos das redes que alcançar. O Ciro é para conversar com quem já te escolheu — conta que alcança desconhecido é encerrada. Política de uso
Para quem é
Os mesmos endpoints atendem o desenvolvedor ligando uma ferramenta interna, a plataforma provisionando milhares de clientes, e o agente de IA que precisa de um número próprio.
Crie um canal, embuta o widget de pareamento no seu app, e seu usuário conecta lendo um código com o próprio celular. A sessão roda na nossa nuvem.
Você não hospeda nada. Sem contêiner para manter vivo, sem arquivo de sessão para salvar, sem tela de pareamento para desenhar.
# BYOD — seu número, seu aparelho curl -X POST https://api.ciro.chat/v1/channels \ -H "x-api-key: $CIRO_KEY" \ -d '{"name":"Support","deviceModel":"byod"}'
# cunhe uma sessão curta e embuta curl -X POST https://api.ciro.chat/v1/widget/sessions \ -H "x-api-key: $CIRO_KEY" \ -d '{"channelId":"'$ID'"}' <iframe src="https://ciro.chat/embed?token=SESSION_TOKEN" allow="camera" width="380" height="440"></iframe>
curl -X POST https://api.ciro.chat/v1/channels/$ID/messages \ -H "x-api-key: $CIRO_KEY" \ -d '{"contact":"5511999998888","body":"Your order shipped."}'
Uma chamada autenticada cria a organização, a empresa, a chave de API e o primeiro usuário administrador — de forma atômica. Depois você embute o widget com a sua marca e cada cliente seu conecta os números dele, quantos precisar.
A multi-tenancy é nossa. A relação continua sua. O isolamento é garantido no banco, em dois níveis, não no código da sua aplicação.
curl -X POST https://api.ciro.chat/partner/tenants \ -H "x-partner-token: $CIRO_PARTNER_TOKEN" \ -d '{ "organizationName": "Acme Retail", "companyName": "Acme HQ", "adminEmail": "[email protected]" }' # 201 → # organizationId · companyId · apiKey # admin: { email, tempPassword }
# suas cores, seu domínio <iframe src="https://ciro.chat/embed?token=…&accent=%23C1552F"></iframe> # o número entra no ar window.addEventListener("message", (e) => { if (e.data.type === "ciro:connected") activate(e.data.channelId); });
Um servidor MCP, para que o Claude Code e qualquer agente que fale o protocolo leia e envie mensagens por um número que é seu. Um comando para instalar, nenhum backend seu, e cada ferramenta aponta para um endpoint que já existe.
“Avise o cliente que o deploy terminou.” — e chega, do seu número, na conversa que ele já conhece.
claude mcp add ciro -- npx -y @ciro/mcp
# CIRO_API_KEY=… ciro_list_channels → GET /v1/channels ciro_create_channel → POST /v1/channels ciro_connect_channel → POST /v1/channels/:id/start ciro_channel_status → GET /v1/channels/:id ciro_send_message → POST /v1/channels/:id/messages ciro_read_messages → GET /v1/channels/:id/messages ciro_channel_events → GET /v1/channels/:id/events ciro_set_webhook → POST /v1/webhooks
Por que agora
Construa em cima de nós, eles disseram. Traga seus clientes para cá. E uma indústria inteira trouxe — uma década de atendimento, aviso de pedido, comprovante de entrega, lembrete de consulta, tudo migrado para uma única rede. Depois o portão fechou. Hoje cada frase que você manda para quem já te escolheu tem pedágio.
Não estamos aqui para pedir um pedágio menor.
O que muda
A sessão roda na nossa nuvem. Você traz um número e um aparelho para parear uma vez — esse é todo o esforço operacional. Os kits auto-hospedados te entregam um contêiner e desejam boa sorte às três da manhã.
Organização → Empresa → Canal, isolados no banco por row-level security, em dois níveis. As chaves são escopadas por empresa. Nada nessa categoria entrega multi-tenancy pronta — você teria que construir, e errar uma vez é vazamento de dados.
Uma única requisição autenticada cria cliente, empresa, chave de API e usuário administrador, de forma atômica. Revenda aqui é primitiva da API, não planilha com abertura de ticket.
Token curto por canal, origem autorizada, a sua cor de destaque, e um aviso para a sua página no instante em que o número entra no ar. Quinze minutos de integração em vez de uma semana de lógica de polling.
Assinado com HMAC-SHA256, enfileirado por outbox, com retentativa progressiva e fila de mortos que você consegue ler. Uma entrega em voo por canal e paralelismo entre canais — um cliente barulhento não travar o silencioso.
Mudança de status chega no instante em que acontece, e toda transição fica num log de eventos append-only. Nada sobre um canal é mistério para você reconstruir a partir de log de servidor.
Onde nos encaixamos
| Ciro | Kit auto-hospedado | API oficial | |
|---|---|---|---|
| Quem opera a infraestrutura | Nós | Você | A plataforma |
| Multi-tenant | Nativo, dois níveis | Você constrói | Por conta |
| Taxa por mensagem | Nenhuma | Nenhuma | Sim |
| Aprovação de modelo | Nenhuma | Nenhuma | Obrigatória |
| Tela de pareamento | Widget embutível | Você constrói | Fluxo hospedado |
| API de provisionamento | Sim, atômica | Você constrói | Programa de parceiro |
| Garantia de entrega | Outbox, HMAC, fila de mortos | Em geral dispara e reza | Forte |
| Conector de agente | MCP oficial | Só comunidade | Não tem |
| Estado do canal em tempo real | Chega na mudança | Você faz o poll | Webhook |
| Histórico de eventos | Log append-only | Seus próprios logs | Limitado |
| Papéis de acesso por filial | Nativo | Não tem | Business manager |
Quando o caso é abrir conversa em escala com modelo aprovado, a resposta honesta é a API oficial. O Ciro é para a conversa que já é sua.
Sem rodeio
O nome significa franco tanto quanto significa livre. Esta é a parte que quase todo fornecedor esconde.
Não é a API oficial, e não é provedor licenciado. O Ciro é uma API pública sobre o protocolo do WhatsApp Web. Leia os termos da plataforma e decida por você — não vamos fingir que essa decisão é nossa.
Não funciona sem aparelho. Um canal é ligado a um número real e pareia lendo um código de um celular real, como qualquer sessão web.
Não é caminho para alcançar desconhecido. O Ciro carrega a conversa com quem já te escolheu. Disparo para lista fria encerra a conta, e a sua entrega depende do comportamento de todo mundo — então a gente fiscaliza.
Não é a ferramenta certa para tudo. Se o seu caso é abrir conversa em escala com modelo aprovado, use o canal oficial. Preferimos perder a venda a te vender a coisa errada.
Preço
Cobrar por mensagem faria de nós o pedágio, só mais barato. Preço fixo por número conectado significa que seu custo para de crescer no momento em que a sua conversa começa.
Crédito pré-pago em stablecoin tem 10–15% de desconto. Cartão não é oferecido: adquirente classifica essa categoria como negócio proibido, e conta congelada no meio do mês seria a sua parada, não só a nossa. Preferimos avisar antes a te surpreender depois.
Começar
Conte o que você está construindo e a gente entra em contato. O acesso abre em lotes, porque cada número é uma sessão viva — a gente prefere que a sua primeira hora funcione a que ela fique na fila.
Sem cartão. Sem compromisso. Toda inscrição é respondida.
Em 539 a.C., um rei tomou a maior cidade do mundo.
Todos esperavam correntes. Ele mandou gravar o oposto em argila: voltem para casa, falem sua língua, cultuem seu deus. É a declaração de liberdade mais antiga que sobreviveu, e o nome dele era Ciro.
Seus clientes. Sua conversa. Seu canal.
Ciro. Mensagem que não pede licença a ninguém.
A gente entra em contato pelo e-mail que você deixou. Se o seu caso for urgente, responda esse e-mail com o volume e o que você vai conectar — isso adianta.