MozeSMS API
Integre envio de SMS, consulta de estados e gestão de saldo nas suas aplicações. Suporta envio simples, envio em massa até 10 000 destinatários e histórico completo de mensagens.
Autenticação
Todos os pedidos à API requerem um token Bearer no header Authorization. Obtenha o seu token em my.mozesms.com → Gestão de APIs.
Authorization: Bearer SEU_BEARER_TOKEN Content-Type: application/json
Aceda a my.mozesms.com, navegue para Gestão de APIs e clique em Gerar Token. Guarde-o em segurança — não será exibido novamente.
Nunca exponha o token em código client-side. Faça sempre os pedidos à API a partir do seu servidor. Revogue tokens comprometidos imediatamente no painel.
Erros & Limites
A API usa códigos HTTP convencionais. Erros devolvem sempre um objeto JSON com success: false e uma mensagem descritiva no campo error.
| Código | Significado |
|---|---|
| 200 | Operação realizada com sucesso. |
| 400 | Parâmetros inválidos ou em falta. Verifique o corpo do pedido. |
| 401 | Token inválido ou ausente. Verifique o header Authorization. |
| 402 | Créditos insuficientes. Recarregue o saldo da conta. |
| 404 | Recurso não encontrado. |
| 429 | Rate limit excedido. Aguarde antes de repetir o pedido. |
| 500 | Erro interno do servidor. Contacte o suporte se persistir. |
100 pedidos/min por token. Envio bulk: 1 000 SMS/min. Máx. 10 000 destinatários por pedido bulk.
Até 160 caracteres = 1 SMS. De 161 a 306 caracteres = 2 SMS. Mensagens longas são concatenadas automaticamente.
| Campo | Tipo | Descrição |
|---|---|---|
toobrigatório |
string | Número de destino em formato internacional. Ex: 258847001234 |
messageobrigatório |
string | Texto da mensagem. Máx. 160 chars por SMS. |
fromopcional |
string | Nome do remetente. Máx. 11 caracteres. Default: MozeSMS |
curl -X POST https://api.mozesms.com/v1/sms/send \ -H "Authorization: Bearer SEU_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "to": "258847001234", "message": "Olá, bem-vindo ao MozeSMS!", "from": "MozeSMS" }'
$ch = curl_init('https://api.mozesms.com/v1/sms/send'); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer SEU_TOKEN', 'Content-Type: application/json', ], CURLOPT_POSTFIELDS => json_encode([ 'to' => '258847001234', 'message' => 'Olá, bem-vindo ao MozeSMS!', 'from' => 'MozeSMS', ]), ]); $resp = json_decode(curl_exec($ch), true); curl_close($ch);
const res = await fetch('https://api.mozesms.com/v1/sms/send', { method: 'POST', headers: { 'Authorization': 'Bearer SEU_TOKEN', 'Content-Type': 'application/json', }, body: JSON.stringify({ to: '258847001234', message: 'Olá, bem-vindo ao MozeSMS!', from: 'MozeSMS', }), }); const data = await res.json();
{
"success": true,
"data": {
"id": "msg_9k2xA7Bq",
"to": "258847001234",
"status": "enviado",
"cost": 1.5,
"remaining_balance": 98.50
}
}
| Campo | Tipo | Descrição |
|---|---|---|
messagesobrigatório |
object[] | Array de mensagens. Máx. 1 000 entradas. Cada item: to (número) e text (mensagem) |
fromopcional |
string | Nome do remetente. Máx. 11 caracteres. |
messages vazio, limite excedido ou parâmetros inválidos.curl -X POST "https://api.mozesms.com/v1/sms/bulk" \ -H "Authorization: Bearer SEU_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "from": "MozeSMS", "messages": [ {"to": "258840000000", "text": "Mensagem 1"}, {"to": "258850000000", "text": "Mensagem 2"} ] }'
$ch = curl_init('https://api.mozesms.com/v1/sms/bulk'); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer SEU_TOKEN', 'Content-Type: application/json', ], CURLOPT_POSTFIELDS => json_encode([ 'from' => 'MozeSMS', 'messages' => [ ['to' => '258840000000', 'text' => 'Mensagem 1'], ['to' => '258850000000', 'text' => 'Mensagem 2'], ], ]), ]); $resp = json_decode(curl_exec($ch), true); curl_close($ch);
const res = await fetch('https://api.mozesms.com/v1/sms/bulk', { method: 'POST', headers: { 'Authorization': 'Bearer SEU_TOKEN', 'Content-Type': 'application/json', }, body: JSON.stringify({ from: 'MozeSMS', messages: [ { to: '258840000000', text: 'Mensagem 1' }, { to: '258850000000', text: 'Mensagem 2' }, ], }), }); const data = await res.json();
import requests response = requests.post( 'https://api.mozesms.com/v1/sms/bulk', headers={'Authorization': 'Bearer SEU_TOKEN'}, json={ 'from': 'MozeSMS', 'messages': [ {'to': '258840000000', 'text': 'Mensagem 1'}, {'to': '258850000000', 'text': 'Mensagem 2'}, ] } ) data = response.json()
require 'net/http' require 'json' uri = URI('https://api.mozesms.com/v1/sms/bulk') req = Net::HTTP::Post.new(uri) req['Authorization'] = 'Bearer SEU_TOKEN' req['Content-Type'] = 'application/json' req.body = JSON.generate({ from: 'MozeSMS', messages: [ { to: '258840000000', text: 'Mensagem 1' }, { to: '258850000000', text: 'Mensagem 2' }, ] }) data = JSON.parse( Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }.body )
import requests response = requests.post( 'https://api.mozesms.com/v1/sms/bulk', headers={'Authorization': 'Bearer SEU_TOKEN'}, json={ 'from': 'MozeSMS', 'messages': [ {'to': '258840000000', 'text': 'Mensagem 1'}, {'to': '258850000000', 'text': 'Mensagem 2'}, ] } ) data = response.json()
require 'net/http' require 'json' uri = URI('https://api.mozesms.com/v1/sms/bulk') req = Net::HTTP::Post.new(uri) req['Authorization'] = 'Bearer SEU_TOKEN' req['Content-Type'] = 'application/json' req.body = JSON.generate({ from: 'MozeSMS', messages: [ { to: '258840000000', text: 'Mensagem 1' }, { to: '258850000000', text: 'Mensagem 2' }, ] }) data = JSON.parse( Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }.body )
{
"success": true,
"data": {
"id": "batch_7mRx2Kp",
"status": "processing",
"cost": 3.0,
"remaining_balance": 95.50
}
}
| Parâmetro | Tipo | Descrição |
|---|---|---|
idobrigatório |
string | ID único da mensagem, retornado no envio. Ex: msg_9k2xA7Bq |
| Valor | Significado |
|---|---|
queued | Na fila de envio |
sent | Enviada para a operadora |
delivered | Entregue ao destinatário |
failed | Falhou no envio |
expired | Expirou sem entrega |
curl -X GET "https://api.mozesms.com/v1/sms/status/MSG123456" \ -H "Authorization: Bearer SEU_TOKEN"
$ch = curl_init( 'https://api.mozesms.com/v1/sms/status/msg_9k2xA7Bq' ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Authorization: Bearer SEU_TOKEN', ]); $resp = json_decode(curl_exec($ch), true); curl_close($ch);
const res = await fetch( 'https://api.mozesms.com/v1/sms/status/msg_9k2xA7Bq', { headers: { 'Authorization': 'Bearer SEU_TOKEN' } } ); const data = await res.json();
import requests response = requests.get( 'https://api.mozesms.com/v1/sms/status/msg_9k2xA7Bq', headers={'Authorization': 'Bearer SEU_TOKEN'} ) data = response.json()
require 'net/http' require 'json' uri = URI( 'https://api.mozesms.com/v1/sms/status/msg_9k2xA7Bq' ) req = Net::HTTP::Get.new(uri) req['Authorization'] = 'Bearer SEU_TOKEN' data = JSON.parse( Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }.body )
{
"success": true,
"data": {
"id": "msg_9k2xA7Bq",
"to": "258847001234",
"status": "delivered",
"delivered_at": "2025-01-15T10:30:02Z"
}
}
| Parâmetro | Tipo | Descrição |
|---|---|---|
limitopcional |
integer | Resultados por página. Default: 20. Máx: 100. |
offsetopcional |
integer | Posição inicial para paginação. Default: 0. |
statusopcional |
string | Filtrar por estado: sent · delivered · failed |
start_dateopcional |
date | Data inicial (YYYY-MM-DD). |
end_dateopcional |
date | Data final (YYYY-MM-DD). |
curl 'https://api.mozesms.com/sms/history?limit=20&offset=0' \ -H "Authorization: Bearer SEU_TOKEN"
$ch = curl_init( 'https://api.mozesms.com/sms/history?limit=20&offset=0' ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Authorization: Bearer SEU_TOKEN', ]); $resp = json_decode(curl_exec($ch), true); curl_close($ch);
const params = new URLSearchParams({ limit: 20, offset: 0, status: 'delivered', }); const res = await fetch( `https://api.mozesms.com/sms/history?${params}`, { headers: { 'Authorization': 'Bearer SEU_TOKEN' } } ); const data = await res.json();
import requests response = requests.get( 'https://api.mozesms.com/sms/history', headers={'Authorization': 'Bearer SEU_TOKEN'}, params={ 'limit': 20, 'offset': 0, 'status': 'delivered', } ) data = response.json()
require 'net/http' require 'json' uri = URI('https://api.mozesms.com/sms/history') uri.query = URI.encode_www_form( limit: 20, offset: 0, status: 'delivered' ) req = Net::HTTP::Get.new(uri) req['Authorization'] = 'Bearer SEU_TOKEN' data = JSON.parse( Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }.body )
{
"success": true,
"data": [
{
"id": "msg_9k2xA7Bq",
"to": "258847001234",
"message": "Olá, bem-vindo!",
"status": "delivered",
"cost": 1.5,
"created_at": "2025-01-15T10:28:00Z"
}
],
"total": 142,
"limit": 20,
"offset": 0
}
Este endpoint não requer parâmetros. Apenas o token Bearer no header Authorization.
curl -X GET "https://api.mozesms.com/v1/account/balance" \ -H "Authorization: Bearer SEU_TOKEN"
$ch = curl_init( 'https://api.mozesms.com/v1/account/balance' ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Authorization: Bearer SEU_TOKEN', ]); $resp = json_decode(curl_exec($ch), true); curl_close($ch);
const res = await fetch( 'https://api.mozesms.com/v1/account/balance', { headers: { 'Authorization': 'Bearer SEU_TOKEN' } } ); const data = await res.json();
import requests response = requests.get( 'https://api.mozesms.com/v1/account/balance', headers={'Authorization': 'Bearer SEU_TOKEN'} ) data = response.json()
require 'net/http' require 'json' uri = URI( 'https://api.mozesms.com/v1/account/balance' ) req = Net::HTTP::Get.new(uri) req['Authorization'] = 'Bearer SEU_TOKEN' data = JSON.parse( Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }.body )
{
"success": true,
"data": {
"balance": 4820.00,
"currency": "MZN",
"plan": "Profissional"
}
}