curl -X POST "https://suasofia.online/api/user/whatsapp/send-freeform" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sender_id": 12,
"recipient_phone": "+1234567890",
"message": "Obrigado pela sua consulta! Nossa equipe irá revisar seu pedido e retornará em até 2 horas."
}'
const response = await fetch(
'https://suasofia.online/api/user/whatsapp/send-freeform',
{
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
sender_id: 12,
recipient_phone: '+1234567890',
message: 'Obrigado pela sua consulta! Nossa equipe irá revisar seu pedido e retornará em até 2 horas.'
})
}
);
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://suasofia.online/api/user/whatsapp/send-freeform',
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
json={
'sender_id': 12,
'recipient_phone': '+1234567890',
'message': 'Obrigado pela sua consulta! Nossa equipe irá revisar seu pedido e retornará em até 2 horas.'
}
)
print(response.json())
{
"success": true,
"conversation_id": 1234,
"message_id": 567,
"whatsapp_message_id": 890,
"message_sid": "SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"session_status": {
"is_open": true,
"can_send_freeform": true,
"requires_template": false,
"message": "Sessão aberta (23 hr 45 min restantes). Mensagens livres ilimitadas permitidas.",
"minutes_remaining": 1425,
"expires_at": "2026-02-25T10:30:00+00:00"
}
}
{
"success": false,
"error": "Saldo insuficiente. Por favor, recarregue sua conta.",
"error_code": "INSUFFICIENT_BALANCE"
}
{
"success": false,
"error": "A janela de mensagens de 24 horas está fechada. O cliente deve responder primeiro ou usar uma mensagem de modelo.",
"error_code": "SESSION_EXPIRED",
"session_status": {
"is_open": false,
"can_send_freeform": false,
"requires_template": true,
"message": "Sessão expirada. Envie um modelo ou aguarde o cliente responder.",
"expired_at": "2026-02-23T10:30:00+00:00"
}
}
{
"success": false,
"error": "Remetente não encontrado ou não pertence a você",
"error_code": "SENDER_NOT_FOUND"
}
{
"success": false,
"error": "Formato de número de telefone inválido. Use o formato E.164 (ex: +14155551234).",
"error_code": "INVALID_PHONE"
}
{
"success": false,
"error": "Remetente não está online. Status atual: Offline",
"error_code": "SENDER_OFFLINE"
}
WhatsApp
Enviar Mensagem Livre
Envie uma mensagem de texto livre no WhatsApp dentro de uma sessão ativa de 24 horas
POST
/
user
/
whatsapp
/
send-freeform
curl -X POST "https://suasofia.online/api/user/whatsapp/send-freeform" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sender_id": 12,
"recipient_phone": "+1234567890",
"message": "Obrigado pela sua consulta! Nossa equipe irá revisar seu pedido e retornará em até 2 horas."
}'
const response = await fetch(
'https://suasofia.online/api/user/whatsapp/send-freeform',
{
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
sender_id: 12,
recipient_phone: '+1234567890',
message: 'Obrigado pela sua consulta! Nossa equipe irá revisar seu pedido e retornará em até 2 horas.'
})
}
);
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://suasofia.online/api/user/whatsapp/send-freeform',
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
json={
'sender_id': 12,
'recipient_phone': '+1234567890',
'message': 'Obrigado pela sua consulta! Nossa equipe irá revisar seu pedido e retornará em até 2 horas.'
}
)
print(response.json())
{
"success": true,
"conversation_id": 1234,
"message_id": 567,
"whatsapp_message_id": 890,
"message_sid": "SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"session_status": {
"is_open": true,
"can_send_freeform": true,
"requires_template": false,
"message": "Sessão aberta (23 hr 45 min restantes). Mensagens livres ilimitadas permitidas.",
"minutes_remaining": 1425,
"expires_at": "2026-02-25T10:30:00+00:00"
}
}
{
"success": false,
"error": "Saldo insuficiente. Por favor, recarregue sua conta.",
"error_code": "INSUFFICIENT_BALANCE"
}
{
"success": false,
"error": "A janela de mensagens de 24 horas está fechada. O cliente deve responder primeiro ou usar uma mensagem de modelo.",
"error_code": "SESSION_EXPIRED",
"session_status": {
"is_open": false,
"can_send_freeform": false,
"requires_template": true,
"message": "Sessão expirada. Envie um modelo ou aguarde o cliente responder.",
"expired_at": "2026-02-23T10:30:00+00:00"
}
}
{
"success": false,
"error": "Remetente não encontrado ou não pertence a você",
"error_code": "SENDER_NOT_FOUND"
}
{
"success": false,
"error": "Formato de número de telefone inválido. Use o formato E.164 (ex: +14155551234).",
"error_code": "INVALID_PHONE"
}
{
"success": false,
"error": "Remetente não está online. Status atual: Offline",
"error_code": "SENDER_OFFLINE"
}
Este endpoint envia uma mensagem livre (texto livre) do WhatsApp para um destinatário. Ao contrário das mensagens de modelo, as mensagens livres podem conter qualquer texto, mas exigem uma janela de mensagens ativa de 24 horas — o que significa que o destinatário deve ter enviado uma mensagem para o seu remetente do WhatsApp nas últimas 24 horas.
Mensagens livres só podem ser enviadas durante uma janela de mensagens ativa de 24 horas. Se a sessão expirou, você deve enviar uma mensagem de modelo primeiro para reiniciar a conversa. Use o endpoint Status da Sessão para verificar se uma sessão está ativa.
Este endpoint tem um limite de taxa de 5 requisições por segundo por usuário.
Corpo da Requisição
integer
required
O ID do remetente do WhatsApp de onde enviar (obtido do endpoint Obter Remetentes)
string
required
O número de telefone do destinatário no formato internacional (ex:
+1234567890)string
required
O conteúdo da mensagem a ser enviada (máx. 4096 caracteres)
Campos de Resposta
boolean
Se a mensagem foi enviada com sucesso
integer
O ID da conversa associada a esta mensagem
integer
O ID do registro da mensagem da conversa
integer
O ID do registro da mensagem do WhatsApp
string
O SID da mensagem do Twilio para rastreamento de entrega
object
Status da sessão atualizado após o envio da mensagem
Show Propriedades do status da sessão
Show Propriedades do status da sessão
boolean
Se a janela de mensagens de 24 horas está atualmente aberta
boolean
Se mensagens livres podem ser enviadas agora
boolean
Se uma mensagem de modelo é necessária
string
Descrição legível por humanos do estado da sessão
integer
Minutos restantes na janela de 24 horas
string
Timestamp ISO 8601 quando a sessão expira
Respostas de Erro
curl -X POST "https://suasofia.online/api/user/whatsapp/send-freeform" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sender_id": 12,
"recipient_phone": "+1234567890",
"message": "Obrigado pela sua consulta! Nossa equipe irá revisar seu pedido e retornará em até 2 horas."
}'
const response = await fetch(
'https://suasofia.online/api/user/whatsapp/send-freeform',
{
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
sender_id: 12,
recipient_phone: '+1234567890',
message: 'Obrigado pela sua consulta! Nossa equipe irá revisar seu pedido e retornará em até 2 horas.'
})
}
);
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://suasofia.online/api/user/whatsapp/send-freeform',
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
json={
'sender_id': 12,
'recipient_phone': '+1234567890',
'message': 'Obrigado pela sua consulta! Nossa equipe irá revisar seu pedido e retornará em até 2 horas.'
}
)
print(response.json())
{
"success": true,
"conversation_id": 1234,
"message_id": 567,
"whatsapp_message_id": 890,
"message_sid": "SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"session_status": {
"is_open": true,
"can_send_freeform": true,
"requires_template": false,
"message": "Sessão aberta (23 hr 45 min restantes). Mensagens livres ilimitadas permitidas.",
"minutes_remaining": 1425,
"expires_at": "2026-02-25T10:30:00+00:00"
}
}
{
"success": false,
"error": "Saldo insuficiente. Por favor, recarregue sua conta.",
"error_code": "INSUFFICIENT_BALANCE"
}
{
"success": false,
"error": "A janela de mensagens de 24 horas está fechada. O cliente deve responder primeiro ou usar uma mensagem de modelo.",
"error_code": "SESSION_EXPIRED",
"session_status": {
"is_open": false,
"can_send_freeform": false,
"requires_template": true,
"message": "Sessão expirada. Envie um modelo ou aguarde o cliente responder.",
"expired_at": "2026-02-23T10:30:00+00:00"
}
}
{
"success": false,
"error": "Remetente não encontrado ou não pertence a você",
"error_code": "SENDER_NOT_FOUND"
}
{
"success": false,
"error": "Formato de número de telefone inválido. Use o formato E.164 (ex: +14155551234).",
"error_code": "INVALID_PHONE"
}
{
"success": false,
"error": "Remetente não está online. Status atual: Offline",
"error_code": "SENDER_OFFLINE"
}
Janela de Mensagens de 24 Horas
O WhatsApp impõe uma política de janela de mensagens de 24 horas:- Quando um cliente envia uma mensagem para o seu número de WhatsApp Business, uma janela de 24 horas se abre.
- Durante esta janela, você pode enviar mensagens livres sem restrições.
- Após a expiração da janela, você deve usar uma mensagem de modelo para reiniciar a conversa.
- Cada nova mensagem do cliente reinicia o cronômetro de 24 horas.
Notas
- O comprimento máximo da mensagem é de 4.096 caracteres (limite do WhatsApp).
- O remetente deve estar
online. Remetentes offline retornam um erro503. - Os custos das mensagens são automaticamente deduzidos do saldo da sua conta.
- Limite de taxa: 5 requisições por segundo por usuário.

