API de gateway de mensagens
Uma só API para todos os canais de mensagens
Envie mensagens de WhatsApp Business, SMS, Telegram, Messenger, Instagram e TikTok através de um único endpoint REST. Pré-pago, com cobrança por mensagem de saída, webhooks de entrega e modo de teste.
- Desde
- 0,0003 $
- por mensagem de saída
- Ao registar-se
- 100
- mensagens gratuitas
- Compromisso
- Nenhum
- pré-pago, sem contrato
curl https://api.omnimessage.co/v1/messages \
-H "Authorization: Bearer om_live_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-1042-shipped" \
-d '{
"channel": "ch_7Hq2mN5vB8cX1zL0pK3j",
"to": "+971501234567",
"type": "text",
"text": { "body": "Your order #1042 has shipped." },
"reference": "order-1042"
}'{
"id": "msg_2b1Xw9aQ3rT8yU0pL4kZ",
"object": "message",
"mode": "live",
"channel_id": "ch_7Hq2mN5vB8cX1zL0pK3j",
"channel_type": "whatsapp",
"direction": "outbound",
"to": "+971501234567",
"from": "+971800123456",
"type": "text",
"content": {
"text": { "body": "Your order #1042 has shipped." }
},
"status": "queued",
"error": null,
"reference": "order-1042",
"metadata": {},
"billing": {
"source": "wallet",
"amount_micros": 1000,
"package_grant_id": null,
"refunded": false
},
"created_at": "2026-10-05T09:30:00.000Z",
"sent_at": null,
"delivered_at": null,
"read_at": null,
"failed_at": null
}Canais
Sete tipos de canal, um só formato de pedido
Ligue os remetentes que já são seus. Cada um passa a ser um ID de canal que envia para o mesmo endpoint, e todos devolvem os mesmos estados.
- 0,001 $WhatsApp BusinessModelos, mensagens interativas e multimédia no seu próprio número da Cloud API.Texto · Anexos · Modelo · Botões de resposta · Lista · Botão de URL · Localização · Contactos
- 0,0005 $SMSMensagens de texto e multimédia a partir do seu próprio número da Twilio.Texto · Anexos
- 0,0005 $SMS OTPUma via só de texto para códigos de utilização única.Texto
- 0,0003 $TelegramMensagens de bot com botões, sondagens, localizações e multimédia.Texto · Anexos · Botões de resposta · Localização · Contactos · Sondagem
- 0,0005 $MessengerConversas com as pessoas que escrevem à sua Página do Facebook.Texto · Anexos · Botões de resposta
- 0,0005 $InstagramMensagens diretas para uma conta profissional do Instagram.Texto · Anexos · Botões de resposta
- 0,0005 $TikTokMensagens diretas para uma conta empresarial do TikTok.Texto · Anexos · Botões de resposta
- Traga o seu próprio canalOs seus números e bots continuam a ser seusVeja o que cada canal exige
Como funciona
Do registo a uma mensagem entregue em quatro passos
Não há chamadas comerciais nem compromisso mínimo. Pode fazer a sua primeira chamada à API em modo de teste um minuto depois de criar a conta.
- Passo 01
Crie uma conta
Registe-se, verifique o seu e-mail e crie uma chave de API na consola. As chaves de teste funcionam de imediato, antes de qualquer canal estar ligado.
- Passo 02
Ligue um canal
Inicie sessão com o Facebook ou o TikTok na consola para ligar um número de WhatsApp, uma Página ou uma conta empresarial. Adicione um bot de Telegram ou um número da Twilio com as respetivas credenciais, na consola ou com
POST /v1/channels. - Passo 03
Envie através de um só endpoint
POST /v1/messagesrecebe um ID de canal, um destinatário e um objeto de conteúdo tipado. O formato do pedido é o mesmo em todos os canais. - Passo 04
Acompanhe cada entrega
Os webhooks assinados comunicam os estados enviada, entregue, lida e falhada. O mesmo histórico está na consola e em
GET /v1/messages.
Tipos de mensagem
O que envia é o que eles veem
Cada mensagem tem um tipo e um objeto de conteúdo sob a chave desse tipo. Escolha um para ver o corpo do pedido ao lado da mensagem que ele produz.
{
"channel": "ch_7Hq2mN5vB8cX1zL0pK3j",
"to": "+971501234567",
"type": "text",
"text": {
"body": "A sua encomenda n.º 1042 foi expedida. Acompanhe-a em https://example.com/t/1042",
"preview_url": true
},
"reference": "order-1042"
}Texto simples, aceite por todos os tipos de canal. Defina preview_url para permitir que o canal apresente uma pré-visualização da ligação.
CanaisWhatsApp Business, SMS, SMS OTP, Telegram, Messenger, Instagram e TikTok
Consola
Uma consola para as partes que não são código
Crie chaves, ligue canais, pesquise o registo de mensagens, repita entregas de webhooks e faça a gestão da faturação. Tudo o que a consola mostra está também disponível através da API.
Preços
Pague por mensagem ou compre mensagens em volume
Carregue uma carteira pré-paga a partir de 10 $ e pague o preço por mensagem de cada canal, ou compre um pacote de créditos de mensagens para ter volume nos seus canais mais caros.
10 mil mensagens
8 $
0,0008 $ por mensagem
- 10 000 mensagens de saída
- Válido durante 3 meses a contar da compra
- Válido em todos os tipos de canal
100 mil mensagens
Em destaque60 $
0,0006 $ por mensagem
- 100 000 mensagens de saída
- Válido durante 6 meses a contar da compra
- Válido em todos os tipos de canal
1 M mensagens
400 $
0,0004 $ por mensagem
- 1 000 000 mensagens de saída
- Válido durante 12 meses a contar da compra
- Válido em todos os tipos de canal
Pagamento por utilização
| Canal | Por mensagem |
|---|---|
| WhatsApp Business | 0,001 $ |
| Telegram | 0,0003 $ |
| SMS | 0,0005 $ |
| SMS OTP | 0,0005 $ |
| Messenger | 0,0005 $ |
| 0,0005 $ | |
| TikTok | 0,0005 $ |
O que o preço inclui
- CobradoMensagens de saída aceites pela API, no momento em que são aceites.
- GratuitoMensagens de entrada, mensagens em modo de teste, webhooks e a consola.
- ReembolsadoQualquer mensagem que termine como falhada, devolvida ao pacote ou à carteira de onde saiu.
- À parteTaxas que a Meta, os operadores ou outros fornecedores cobram pelo próprio canal.
Experiência de programação
Feito para integrar uma vez e não voltar a mexer
Webhooks assinados, novas tentativas seguras, uma sandbox que se comporta como a produção e erros que o seu código consegue distinguir.
Webhooks que pode verificar
Cada entrega é assinada com HMAC-SHA256 sobre o carimbo de data/hora e o corpo em bruto, no cabeçalho OmniMessage-Signature. Responda com qualquer 2xx em 10 segundos. As entregas falhadas são repetidas oito vezes com backoff, de 30 segundos até 24 horas.
import { createHmac, timingSafeEqual } from 'node:crypto';
// header is "t=<unix seconds>,v1=<hex hmac-sha256>"
export function verifySignature(rawBody, header, secret) {
const parts = header.split(',').map((part) => part.split('='));
const { t, v1 = '' } = Object.fromEntries(parts);
const expected = createHmac('sha256', secret)
.update(`${t}.${rawBody}`)
.digest('hex');
const fresh = Math.abs(Date.now() / 1000 - Number(t)) < 300;
const matches =
v1.length === expected.length &&
timingSafeEqual(Buffer.from(v1), Buffer.from(expected));
return fresh && matches;
}{
"id": "evt_8Kd2pQ7wN4xB1zR6mT3c",
"object": "event",
"type": "message.delivered",
"mode": "live",
"created_at": "2026-10-05T09:30:02.900Z",
"data": {
"object": {
"id": "msg_2b1Xw9aQ3rT8yU0pL4kZ",
"object": "message",
"status": "delivered",
"reference": "order-1042",
"delivered_at": "2026-10-05T09:30:02.871Z"
}
}
}Um modo de teste que não custa nada
As chaves de teste utilizam canais de sandbox incorporados, pelo que não há nada para ligar. Os últimos dígitos do destinatário determinam o resultado simulado, e os seus webhooks são disparados tal como seriam em produção.
curl https://api.omnimessage.co/v1/messages \
-H "Authorization: Bearer om_test_..." \
-H "Content-Type: application/json" \
-d '{
"channel": "ch_test_whatsapp",
"to": "+971501230002",
"type": "text",
"text": { "body": "Hello from the sandbox" }
}'Erros com um tipo e um código
Todas as respostas que não sejam 2xx têm o mesmo corpo: um type para a classe da falha, um code estável para o seu código distinguir, o param em causa quando existe e um request_id para o suporte.
{
"error": {
"type": "billing_error",
"code": "insufficient_balance",
"message": "Not enough wallet balance or package credits.",
"request_id": "req_5Vn1cH8jL3qW6yD9sF2k",
"doc_url": "https://omnimessage.co/docs/errors#insufficient_balance"
}
}POST idempotentes
Envie um cabeçalho
Idempotency-Keye uma nova tentativa nas 24 horas seguintes devolve a resposta guardada comIdempotent-Replayed: true, sem enviar nem cobrar duas vezes.Limites previsíveis
100 pedidos por segundo por chave em
POST /v1/messages, 20 nos restantes. Todas as respostas incluemRateLimit-Remaining, e um 429 incluiRetry-After.Envio em lote
POST /v1/messages/batchaceita até 100 mensagens. Cada item é aceite, rejeitado e cobrado individualmente, e a resposta 207 indica-os por índice.Chaves com âmbitos
Dê a cada chave apenas os âmbitos de que precisa, como
messages:writeoubilling:read, e restrinja-a a uma lista de endereços IP permitidos.
Perguntas
Antes de integrar
As respostas curtas. As longas estão na documentação.
Preciso de ter o meu próprio número de WhatsApp, bot ou número de SMS?
Sim. A OmniMessage é um gateway para o qual traz os seus próprios canais: liga o seu número da WhatsApp Cloud API, o seu bot de Telegram, o seu número da Twilio ou a sua conta de rede social, e continua a ser o titular. A página de canais indica o que cada tipo exige.
O que me é cobrado, exatamente?
Uma cobrança por cada mensagem de saída que a API aceita: um crédito de pacote, se tiver algum; caso contrário, o preço por mensagem do tipo de canal, debitado da carteira. As mensagens de entrada e as mensagens em modo de teste são gratuitas, e uma mensagem que termine como falhada é reembolsada automaticamente.
As taxas da Meta, dos operadores ou dos fornecedores estão incluídas?
Não. A taxa do gateway cobre a API, o acompanhamento das entregas, os webhooks e a consola. As taxas que a Meta, a Twilio ou outro fornecedor cobram pelo próprio canal ficam entre si e esse fornecedor.
Como posso testar sem enviar mensagens reais?
Utilize uma chave que comece por om_test_. Cada conta tem um canal de sandbox por tipo, como ch_test_whatsapp. Nada é entregue nem cobrado e os estados são simulados: um destinatário terminado em 0000 falha, em 0001 fica como enviada, em 0002 é também lida, e qualquer outro é entregue em cerca de dois segundos.
O que acontece quando o meu saldo acaba?
A API responde 402 insufficient_balance e nada é colocado em fila, pelo que nunca fica a dever dinheiro a posteriori. Pode subscrever o evento balance.low ou ativar o carregamento automático para carregar a carteira quando esta descer abaixo de um limiar à sua escolha.
Preciso de um SDK?
Não. A API é JSON sobre HTTPS com autenticação bearer, pelo que qualquer cliente HTTP serve. A documentação tem exemplos em cURL, Node, Python e PHP.
Envie hoje a sua primeira mensagem em modo de teste
Crie uma conta, copie uma chave de teste e chame a API antes de ligar um único canal. Cada conta nova começa com 100 mensagens gratuitas.