API para SMS e WhatsApp
Envie mensagens transacionais, campanhas, templates aprovados, mídias e acompanhe retornos de entrega com uma integração REST simples.
Todas as respostas da API são retornadas em JSON e podem ser acompanhadas por consulta ou callback.
Autenticação
Use usuário e senha da sua conta pelo header Authorization: Basic.
O valor do Basic é formado por base64(usuario:senha). Também é possível enviar user e password por parâmetro, mas o header é a forma recomendada.
Authorization: Basic U2V1VXN1YXJpbzpTdWFTZW5oYQ==| Uso | Headers |
|---|---|
| Envio individual e consultas | Content-Type: application/x-www-form-urlencoded |
| Envio em massa por lote | Content-Type: application/jsonAccept: application/json |
Tipos de mensagem
O parâmetro type define o serviço usado no envio.
| type | Serviço | Campos principais | Quando usar |
|---|---|---|---|
0 | SMS não interativo | content | SMS simples, sem resposta. |
1 | SMS interativo Flash | content | SMS interativo em modo Flash. |
2 | SMS interativo | content | SMS com possibilidade de resposta. |
3 | WhatsApp Template | template_name, content | Template aprovado do WhatsApp. |
4 | WhatsApp áudio | media | Enviar áudio por URL. |
5 | WhatsApp texto | content | Enviar somente texto. |
6 | WhatsApp imagem | media, caption | Imagem JPG/JPEG com legenda opcional. |
7 | WhatsApp documento | media, caption | Documento PDF com legenda opcional. |
8 | WhatsApp vídeo | media, caption | Vídeo MP4 com legenda opcional. |
type=4, type=6, type=7 e type=8, envie a URL no parâmetro media. O type=5 é apenas texto.Envio individual
Use este endpoint para enviar uma mensagem para um único destinatário.
https://54.233.99.254/webservice-rest/send-singleCampos aceitos
| Campo | Obrigatório | Descrição |
|---|---|---|
user | Não, se usar Basic Auth | Usuário da conta. |
password | Não, se usar Basic Auth | Senha da conta. |
type | Sim | Tipo da mensagem. |
country_code | Não | DDI do país. Padrão Brasil: 55. |
number | Sim | Número do destinatário sem DDI, sem espaços e sem símbolos. |
sender | Sim para WhatsApp | Canal remetente do WhatsApp, normalmente o phone_number_id. |
content | Sim para SMS, texto e template com variáveis | Texto da mensagem ou variáveis do template. |
media | Sim para WhatsApp mídia | URL pública HTTPS para áudio, imagem, documento ou vídeo. |
caption | Não | Legenda para imagem, documento ou vídeo. Áudio não aceita legenda. |
template_name | Sim para type=3 | Nome exato do template aprovado no WhatsApp. |
campaign_id | Não | Identificador da mensagem no seu sistema. |
schedule | Não | Data de agendamento em YYYY-MM-DD HH:MM:SS. |
timezone | Não | Fuso horário, por exemplo -03:00. |
utf8 | Não | Use 1 para SMS com acentos e caracteres especiais. |
concatenation | Não | Use 1 para permitir SMS longo. |
Enviar SMS
curl --location 'https://54.233.99.254/webservice-rest/send-single' \
--header 'Authorization: Basic U2V1VXN1YXJpbzpTdWFTZW5oYQ==' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'type=2' \
--data-urlencode 'country_code=55' \
--data-urlencode 'number=14999999999' \
--data-urlencode 'content=Mensagem de teste' \
--data-urlencode 'campaign_id=pedido-123'Enviar WhatsApp texto
curl --location 'https://54.233.99.254/webservice-rest/send-single' \
--header 'Authorization: Basic U2V1VXN1YXJpbzpTdWFTZW5oYQ==' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'type=5' \
--data-urlencode 'sender=103888109342779' \
--data-urlencode 'country_code=55' \
--data-urlencode 'number=14999999999' \
--data-urlencode 'content=Olá! Sua solicitação foi recebida.' \
--data-urlencode 'campaign_id=whatsapp-texto-001'Enviar WhatsApp imagem, documento, vídeo ou áudio
| Tipo | Extensão aceita | Campo da URL | Legenda |
|---|---|---|---|
type=4 áudio | .mp3, .ogg | media | Não |
type=6 imagem | .jpg, .jpeg | media | caption opcional |
type=7 documento | .pdf | media | caption opcional |
type=8 vídeo | .mp4 | media | caption opcional |
curl --location 'https://54.233.99.254/webservice-rest/send-single' \
--header 'Authorization: Basic U2V1VXN1YXJpbzpTdWFTZW5oYQ==' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'type=6' \
--data-urlencode 'sender=103888109342779' \
--data-urlencode 'country_code=55' \
--data-urlencode 'number=14999999999' \
--data-urlencode 'media=https://seudominio.com.br/imagens/produto.jpg' \
--data-urlencode 'caption=Veja a imagem do produto solicitado.' \
--data-urlencode 'campaign_id=whatsapp-imagem-001'curl --location 'https://54.233.99.254/webservice-rest/send-single' \
--header 'Authorization: Basic U2V1VXN1YXJpbzpTdWFTZW5oYQ==' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'type=7' \
--data-urlencode 'sender=103888109342779' \
--data-urlencode 'country_code=55' \
--data-urlencode 'number=14999999999' \
--data-urlencode 'media=https://seudominio.com.br/arquivos/boleto.pdf' \
--data-urlencode 'caption=Segue o documento solicitado.' \
--data-urlencode 'campaign_id=whatsapp-documento-001'curl --location 'https://54.233.99.254/webservice-rest/send-single' \
--header 'Authorization: Basic U2V1VXN1YXJpbzpTdWFTZW5oYQ==' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'type=8' \
--data-urlencode 'sender=103888109342779' \
--data-urlencode 'country_code=55' \
--data-urlencode 'number=14999999999' \
--data-urlencode 'media=https://seudominio.com.br/videos/apresentacao.mp4' \
--data-urlencode 'caption=Assista ao vídeo de apresentação.' \
--data-urlencode 'campaign_id=whatsapp-video-001'curl --location 'https://54.233.99.254/webservice-rest/send-single' \
--header 'Authorization: Basic U2V1VXN1YXJpbzpTdWFTZW5oYQ==' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'type=4' \
--data-urlencode 'sender=103888109342779' \
--data-urlencode 'country_code=55' \
--data-urlencode 'number=14999999999' \
--data-urlencode 'media=https://seudominio.com.br/audios/audio.mp3' \
--data-urlencode 'campaign_id=whatsapp-audio-001'Resposta de sucesso
{
"success": true,
"responseCode": "000",
"responseDescription": "Success queued",
"credit": "1",
"balance": "99984",
"id": "813831"
}Template WhatsApp
O type=3 envia templates aprovados. A API grava as tags que o worker de disparo lê para montar o payload oficial do WhatsApp.
sender, template_name, number e type=3. Se o template tiver variáveis, informe-as em content.Como a API monta as tags internas
Quando você chama o endpoint, a API transforma os parâmetros em tags antes de gravar na fila. O worker de disparo lê essas tags.
| Parâmetro enviado | Tag gravada | Uso no worker |
|---|---|---|
template_name=pedido_status | <template_name>pedido_status</template_name> | Localiza o template aprovado do canal. |
content=Willian;12345;enviado | <variable>Willian;12345;enviado</variable> | Preenche variáveis do corpo na ordem {{1}}, {{2}}, {{3}}. |
content={...JSON...} | <variable>{...JSON...}</variable> | Preenche header, body e botões dinâmicos. |
Template com variáveis simples no corpo
Se o template aprovado for Olá {{1}}, seu pedido {{2}} foi atualizado para {{3}}., envie os valores no content, separados por ponto e vírgula.
curl --location 'https://54.233.99.254/webservice-rest/send-single' \
--header 'Authorization: Basic U2V1VXN1YXJpbzpTdWFTZW5oYQ==' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'type=3' \
--data-urlencode 'sender=103888109342779' \
--data-urlencode 'country_code=55' \
--data-urlencode 'number=14999999999' \
--data-urlencode 'template_name=pedido_status' \
--data-urlencode 'content=Willian;12345;enviado' \
--data-urlencode 'campaign_id=whatsapp-template-001'<template_name>pedido_status</template_name>
<variable>Willian;12345;enviado</variable>Template sem variáveis
Se o template não tiver campos dinâmicos, envie apenas template_name.
curl --location 'https://54.233.99.254/webservice-rest/send-single' \
--header 'Authorization: Basic U2V1VXN1YXJpbzpTdWFTZW5oYQ==' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'type=3' \
--data-urlencode 'sender=103888109342779' \
--data-urlencode 'country_code=55' \
--data-urlencode 'number=14999999999' \
--data-urlencode 'template_name=aviso_simples' \
--data-urlencode 'campaign_id=whatsapp-template-002'Template com header, body ou botão dinâmico
Quando o template tiver cabeçalho com mídia, cabeçalho com texto variável ou botão com parâmetro, envie o content em JSON.
{
"header": {
"text": ["valor do cabeçalho de texto"],
"link": "https://seudominio.com.br/arquivo.pdf"
},
"body": ["valor de {{1}}", "valor de {{2}}"],
"buttons": {
"0": ["valor do botão 0"],
"1": ["valor do botão 1"]
}
}content.header.link. O worker monta o componente do template a partir da tag <variable>.curl --location 'https://54.233.99.254/webservice-rest/send-single' \
--header 'Authorization: Basic U2V1VXN1YXJpbzpTdWFTZW5oYQ==' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'type=3' \
--data-urlencode 'sender=103888109342779' \
--data-urlencode 'country_code=55' \
--data-urlencode 'number=14999999999' \
--data-urlencode 'template_name=boleto_cliente' \
--data-urlencode 'content={"header":{"link":"https://seudominio.com.br/arquivos/boleto.pdf"},"body":["Willian","R$ 50,00","18/04/2026"]}' \
--data-urlencode 'campaign_id=whatsapp-template-003'curl --location 'https://54.233.99.254/webservice-rest/send-single' \
--header 'Authorization: Basic U2V1VXN1YXJpbzpTdWFTZW5oYQ==' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'type=3' \
--data-urlencode 'sender=103888109342779' \
--data-urlencode 'country_code=55' \
--data-urlencode 'number=14999999999' \
--data-urlencode 'template_name=acompanhar_pedido' \
--data-urlencode 'content={"body":["Willian","12345"],"buttons":{"0":["12345"]}}' \
--data-urlencode 'campaign_id=whatsapp-template-004'{{1}}, {{2}} e {{3}}, envie três valores.Envio em massa por lote
Use send-multiple para enviar mensagens em lote por JSON.
https://54.233.99.254/webservice-rest/send-multipledefaultValues para campos comuns e messages para os destinatários.Estrutura do JSON
{
"defaultValues": {
"type": 5,
"country_code": 55,
"sender": "103888109342779"
},
"messages": [
{
"number": "14999999999",
"content": "Mensagem 1",
"campaign_id": "wa-001"
}
]
}SMS em lote
curl --location 'https://54.233.99.254/webservice-rest/send-multiple' \
--header 'Authorization: Basic U2V1VXN1YXJpbzpTdWFTZW5oYQ==' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data '{
"defaultValues": {
"type": 2,
"country_code": 55
},
"messages": [
{
"number": "14999999999",
"content": "Mensagem SMS 1",
"campaign_id": "sms-001"
},
{
"number": "14988888888",
"content": "Mensagem SMS 2",
"campaign_id": "sms-002"
}
]
}'WhatsApp texto em lote
curl --location 'https://54.233.99.254/webservice-rest/send-multiple' \
--header 'Authorization: Basic U2V1VXN1YXJpbzpTdWFTZW5oYQ==' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data '{
"defaultValues": {
"type": 5,
"country_code": 55,
"sender": "103888109342779"
},
"messages": [
{
"number": "14999999999",
"content": "Olá! Esta é uma mensagem de WhatsApp.",
"campaign_id": "wa-001"
},
{
"number": "14988888888",
"content": "Olá! Seu atendimento foi registrado.",
"campaign_id": "wa-002"
}
]
}'WhatsApp mídia em lote
Para mídia em lote, mantenha o mesmo padrão do envio individual: type conforme a mídia e URL no campo media.
curl --location 'https://54.233.99.254/webservice-rest/send-multiple' \
--header 'Authorization: Basic U2V1VXN1YXJpbzpTdWFTZW5oYQ==' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data '{
"defaultValues": {
"type": 6,
"country_code": 55,
"sender": "103888109342779"
},
"messages": [
{
"number": "14999999999",
"media": "https://seudominio.com.br/imagens/produto-1.jpg",
"caption": "Imagem do produto 1",
"campaign_id": "wa-img-001"
},
{
"number": "14988888888",
"media": "https://seudominio.com.br/imagens/produto-2.jpg",
"caption": "Imagem do produto 2",
"campaign_id": "wa-img-002"
}
]
}'Resposta do lote
{
"success": true,
"responseCode": "001",
"responseDescription": "Batch processed",
"credit": "2",
"balance": "87018",
"totalProcessed": "2",
"totalSuccess": "2",
"messages": [
{
"success": true,
"responseCode": "000",
"responseDescription": "Success queued",
"credit": "1"
}
]
}Consultas
Consulte status, saldo e mensagens recebidas.
Status por identificador
https://54.233.99.254/webservice-rest/mt_idcurl --location 'https://54.233.99.254/webservice-rest/mt_id?campaign_id=wa-001,wa-002&timezone=-03:00' \
--header 'Authorization: Basic U2V1VXN1YXJpbzpTdWFTZW5oYQ=='curl --location 'https://54.233.99.254/webservice-rest/mt_id?id=813831,813832&timezone=-03:00' \
--header 'Authorization: Basic U2V1VXN1YXJpbzpTdWFTZW5oYQ=='Status por período
https://54.233.99.254/webservice-rest/mt_datecurl --location 'https://54.233.99.254/webservice-rest/mt_date?start_date=2026-04-01%2000:00:00&end_date=2026-04-16%2023:59:59&type=5&status=0,1,2&timezone=-03:00' \
--header 'Authorization: Basic U2V1VXN1YXJpbzpTdWFTZW5oYQ=='Novas mensagens recebidas
https://54.233.99.254/webservice-rest/mo_newmo_new, ela não aparece novamente como nova em uma próxima consulta.curl --location 'https://54.233.99.254/webservice-rest/mo_new?type=5&timezone=-03:00' \
--header 'Authorization: Basic U2V1VXN1YXJpbzpTdWFTZW5oYQ=='Mensagens recebidas por período
https://54.233.99.254/webservice-rest/mocurl --location 'https://54.233.99.254/webservice-rest/mo?start_date=2026-04-01%2000:00:00&end_date=2026-04-16%2023:59:59&type=5&campaign_id=wa-001&timezone=-03:00' \
--header 'Authorization: Basic U2V1VXN1YXJpbzpTdWFTZW5oYQ=='Saldo
https://54.233.99.254/webservice-rest/balancecurl --location 'https://54.233.99.254/webservice-rest/balance' \
--header 'Authorization: Basic U2V1VXN1YXJpbzpTdWFTZW5oYQ=='{
"success": true,
"responseCode": "200",
"responseDescription": "Successful search",
"sms": "7289",
"whatsapp": "606",
"activation": "2026-03-30 12:10:59",
"expiration": "2027-03-30 23:59:59"
}Callbacks
Configure uma URL para receber status de entrega e mensagens recebidas.
Status de entrega
https://suaurl.com/callback.php?campaign_id=abc123&id=150&status=0&date=2026-04-16+10:00:00&carrier=WhatsappMensagem recebida
https://suaurl.com/callback.php?number=5514999999999&content=Recebido&campaign_id=abc123&id=150&status=4&date=2026-04-16+10:05:00&carrier=Whatsapp| Campo | Descrição |
|---|---|
campaign_id | Identificador enviado por você na requisição. |
id | ID interno da mensagem na plataforma. |
status | Status da mensagem, ou 4 para mensagem recebida. |
date | Data do evento. |
carrier | Operadora ou canal, como Whatsapp. |
number | Número do cliente que respondeu. |
content | Conteúdo recebido do cliente. |
Status
As chamadas retornam responseCode. As mensagens possuem status próprio de envio.
Status de chamada
| responseCode | Descrição | success |
|---|---|---|
000 | Success queued | true |
001 | Batch processed | true |
002 | Scheduled | true |
010 | User or password is invalid | false |
020 | Empty or invalid type | false |
030 | Empty message content | false |
040 | Scheduling date invalid or incorrect | false |
050 | Empty or invalid number | false |
060 | International sending not allowed | false |
070 | Message rejected by server | false |
080 | Insufficient or expired balance | false |
090 | Blocked account - Please contact support | false |
100 | This service is currently under maintenance | false |
110 | There was an error processing, please try again, or contact us | false |
120 | Message array cannot exceed 5000 | false |
130 | Message array is empty | false |
140 | Incorrect time zone | false |
150 | File extension not allowed | false |
160 | Unknown method or unknown parameter | false |
170 | Invalid search attributes | false |
200 | Successful search | true |
Status de envio
| Status | Descrição | Callback |
|---|---|---|
-1 | Mensagem enfileirada. | Não |
3 | Preparando para envio. | Não |
6 | Mensagem pausada. | Não |
-9 | Bloqueado, sem cobertura. | Sim |
-8 | Bloqueado, conteúdo não permitido. | Sim |
-7 | Número sem WhatsApp ou indisponível. | Sim |
-6 | Mensagem cancelada. | Sim |
-5 | Bloqueado, lista negra. | Sim |
-4 | Bloqueado, número fixo. | Sim |
-3 | Bloqueado, número inválido. | Sim |
-2 | Erro na rede ou falha de entrega. | Sim |
0 | Enviado. | Sim |
1 | Entregue. | Sim |
2 | Lido no WhatsApp. | Sim |
4 | Mensagem recebida do cliente. | Sim |
7 | Expirada. | Sim |
8 | Rejeitada. | Sim |
9 | Não recebida no aparelho. | Sim |
Problemas comuns
Verificações rápidas para falhas frequentes de integração.
WhatsApp não envia mídia
- A URL precisa abrir sem login.
- O servidor não pode retornar
403 Forbidden. - Use as extensões aceitas pela API.
- O certificado HTTPS precisa ser válido.
- Áudio WebM não é aceito para envio no WhatsApp.
Erro de saldo
Quando a API retornar responseCode=080, o saldo está insuficiente ou os créditos estão vencidos para o serviço solicitado.
Template não envia
- Use o nome exato do template aprovado.
- Confira se o template pertence ao canal informado no
sender. - Envie a mesma quantidade de variáveis exigida pelo template.
- Para header, body e botões dinâmicos, use JSON no
content.