API v2.0

Documentação MozeSMS API

Plataforma moderna e robusta para integração de SMS em qualquer aplicativo

Introdução

MozeSMS API v2.0 é uma plataforma moderna e robusta, permitindo a integração eficiente de qualquer aplicativo com o nosso sistema de envio de mensagens SMS.

A principal vantagem da nova versão é a simplicidade de implementação, maior segurança e novos recursos como Bulk SMS e OTP. A mensagem pode ter remetente (SenderID) personalizado com nome da empresa ou qualquer número de telefone autorizado.

Autenticação Bearer Token

Maior segurança com tokens de acesso

Bulk SMS

Até 1000 mensagens por requisição

Sistema OTP

Geração e verificação automática

Validação SenderID

Controle de remetentes autorizados

Base URL da API
https://api.mozesms.com

Como Começar

1

Criar uma Conta

Acesse my.mozesms.com e crie uma conta gratuita ou faça login.

2

Registrar SenderID

Registre um nome ou número de remetente (SenderID) no painel para personalizar suas mensagens.

Importante: SenderIDs alfanuméricos devem ser registrados previamente.
3

Obter Bearer Token

No painel de cliente, copie seu Bearer Token para autenticação na API v2.0.

Autenticação

A API v2.0 utiliza autenticação Bearer Token para maior segurança:

Método Bearer Token
Header Authorization: Bearer SEU_TOKEN_AQUI
Formato Todas as requisições e respostas em JSON
Segurança Tokens únicos por cliente, gerados no painel

Enviar SMS Individual

POST /v2/sms/send

Parâmetros Obrigatórios

Parâmetro Descrição
phone Número do destinatário com código do país (ex: +258845888195)
message Conteúdo da mensagem (máximo 1600 caracteres)
sender_id SenderID/remetente (nome da empresa ou número autorizado)
  • PHP
  • cURL
  • Python
  • Node.js
  • C#
  • Ruby
  • Go
  • Java
<?php 
$curl = curl_init();

$data = json_encode([
    'phone' => '+258845888195',
    'message' => 'Olá! Esta é uma mensagem de teste da API v2.0',
    'sender_id' => 'MozeSMS'
]);

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://api.mozesms.com/v2/sms/send',
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $data,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'Authorization: Bearer SEU_TOKEN_AQUI'
    ],
    CURLOPT_RETURNTRANSFER => true
]);

$response = curl_exec($curl);
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);

echo "HTTP: $httpCode\n";
echo "Response: $response\n";
?>
curl -X POST https://api.mozesms.com/v2/sms/send \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SEU_TOKEN_AQUI" \
  -d '{
    "phone": "+258845888195",
    "message": "Olá! Esta é uma mensagem de teste",
    "sender_id": "MozeSMS"
  }'
import requests
import json

url = "https://api.mozesms.com/v2/sms/send"
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer SEU_TOKEN_AQUI"
}
data = {
    "phone": "+258845888195",
    "message": "Olá! Esta é uma mensagem de teste",
    "sender_id": "MozeSMS"
}

response = requests.post(url, headers=headers, json=data)
print(f"Status: {response.status_code}")
print(f"Response: {response.json()}")
const axios = require('axios');

const url = 'https://api.mozesms.com/v2/sms/send';
const headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer SEU_TOKEN_AQUI'
};
const data = {
    phone: '+258845888195',
    message: 'Olá! Esta é uma mensagem de teste',
    sender_id: 'MozeSMS'
};

axios.post(url, data, { headers })
    .then(response => {
        console.log('Status:', response.status);
        console.log('Response:', response.data);
    })
    .catch(error => {
        console.error('Error:', error.response?.data || error.message);
    });
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer SEU_TOKEN_AQUI");

var data = new
{
    phone = "+258845888195",
    message = "Olá! Esta é uma mensagem de teste",
    sender_id = "MozeSMS"
};

var json = JsonConvert.SerializeObject(data);
var content = new StringContent(json, Encoding.UTF8, "application/json");

var response = await client.PostAsync(
    "https://api.mozesms.com/v2/sms/send", 
    content
);

var result = await response.Content.ReadAsStringAsync();
Console.WriteLine($"Status: {response.StatusCode}");
Console.WriteLine($"Response: {result}");
require 'net/http'
require 'json'
require 'uri'

uri = URI('https://api.mozesms.com/v2/sms/send')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request['Authorization'] = 'Bearer SEU_TOKEN_AQUI'
request.body = {
  phone: '+258845888195',
  message: 'Olá! Esta é uma mensagem de teste',
  sender_id: 'MozeSMS'
}.to_json

response = http.request(request)
puts "Status: #{response.code}"
puts "Response: #{response.body}"
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
)

func main() {
    url := "https://api.mozesms.com/v2/sms/send"
    
    data := map[string]string{
        "phone":     "+258845888195",
        "message":   "Olá! Esta é uma mensagem de teste",
        "sender_id": "MozeSMS",
    }
    
    jsonData, _ := json.Marshal(data)
    req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("Authorization", "Bearer SEU_TOKEN_AQUI")
    
    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    
    fmt.Println("Status:", resp.Status)
}
import java.net.http.*;
import java.net.URI;
import com.google.gson.Gson;
import java.util.HashMap;

public class MozeSMS {
    public static void main(String[] args) throws Exception {
        String url = "https://api.mozesms.com/v2/sms/send";
        
        HashMap<String, String> data = new HashMap<>();
        data.put("phone", "+258845888195");
        data.put("message", "Olá! Esta é uma mensagem de teste");
        data.put("sender_id", "MozeSMS");
        
        String json = new Gson().toJson(data);
        
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(url))
            .header("Content-Type", "application/json")
            .header("Authorization", "Bearer SEU_TOKEN_AQUI")
            .POST(HttpRequest.BodyPublishers.ofString(json))
            .build();
        
        HttpResponse<String> response = client.send(
            request, 
            HttpResponse.BodyHandlers.ofString()
        );
        
        System.out.println("Status: " + response.statusCode());
        System.out.println("Response: " + response.body());
    }
}

Resposta de Sucesso

{
  "success": true,
  "data": {
    "sms_id": "SMS_1755034567_1234",
    "phone": "+258845888195",
    "message": "Olá! Esta é uma mensagem de teste.",
    "sender_id": "MozeSMS",
    "segments": 1,
    "status": "sent",
    "credits_used": 1,
    "credits_remaining": 7890,
    "timestamp": "2025-08-12T23:45:00+02:00"
  }
}

Enviar Bulk SMS (Em Massa)

POST /v2/sms/bulk

Envie até 1000 mensagens em uma única requisição para máxima eficiência.

Parâmetros

Parâmetro Descrição
sender_id SenderID padrão para todas as mensagens
messages Array de mensagens (máx: 1000 mensagens)
messages[].phone Número do destinatário
messages[].message Conteúdo da mensagem
messages[].sender_id SenderID específico (opcional)
  • PHP
  • cURL
  • Python
  • Node.js
  • C#
  • Ruby
  • Go
<?php
$data = json_encode([
    'sender_id' => 'MozeSMS',
    'messages' => [
        [
            'phone' => '+258845888195',
            'message' => 'Mensagem para cliente 1'
        ],
        [
            'phone' => '+258847123456',
            'message' => 'Mensagem para cliente 2'
        ],
        [
            'phone' => '+258848555666',
            'message' => 'Mensagem especial para cliente 3',
            'sender_id' => 'PROMO'
        ]
    ]
]);

$curl = curl_init();
curl_setopt_array($curl, [
    CURLOPT_URL => 'https://api.mozesms.com/v2/sms/bulk',
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $data,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'Authorization: Bearer SEU_TOKEN_AQUI'
    ],
    CURLOPT_RETURNTRANSFER => true
]);

$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>
curl -X POST https://api.mozesms.com/v2/sms/bulk \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SEU_TOKEN_AQUI" \
  -d '{
    "sender_id": "MozeSMS",
    "messages": [
      {
        "phone": "+258845888195",
        "message": "Mensagem para cliente 1"
      },
      {
        "phone": "+258847123456",
        "message": "Mensagem para cliente 2"
      }
    ]
  }'
import requests

url = "https://api.mozesms.com/v2/sms/bulk"
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer SEU_TOKEN_AQUI"
}
data = {
    "sender_id": "MozeSMS",
    "messages": [
        {
            "phone": "+258845888195",
            "message": "Mensagem para cliente 1"
        },
        {
            "phone": "+258847123456",
            "message": "Mensagem para cliente 2"
        }
    ]
}

response = requests.post(url, headers=headers, json=data)
print(response.json())
const axios = require('axios');

const url = 'https://api.mozesms.com/v2/sms/bulk';
const data = {
    sender_id: 'MozeSMS',
    messages: [
        {
            phone: '+258845888195',
            message: 'Mensagem para cliente 1'
        },
        {
            phone: '+258847123456',
            message: 'Mensagem para cliente 2'
        }
    ]
};

axios.post(url, data, {
    headers: {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer SEU_TOKEN_AQUI'
    }
})
.then(res => console.log(res.data))
.catch(err => console.error(err.response?.data));
using System.Net.Http;
using System.Text;
using Newtonsoft.Json;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer SEU_TOKEN_AQUI");

var data = new
{
    sender_id = "MozeSMS",
    messages = new[]
    {
        new { phone = "+258845888195", message = "Mensagem para cliente 1" },
        new { phone = "+258847123456", message = "Mensagem para cliente 2" }
    }
};

var json = JsonConvert.SerializeObject(data);
var content = new StringContent(json, Encoding.UTF8, "application/json");

var response = await client.PostAsync(
    "https://api.mozesms.com/v2/sms/bulk", 
    content
);

Console.WriteLine(await response.Content.ReadAsStringAsync());
require 'net/http'
require 'json'

uri = URI('https://api.mozesms.com/v2/sms/bulk')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request['Authorization'] = 'Bearer SEU_TOKEN_AQUI'
request.body = {
  sender_id: 'MozeSMS',
  messages: [
    { phone: '+258845888195', message: 'Mensagem para cliente 1' },
    { phone: '+258847123456', message: 'Mensagem para cliente 2' }
  ]
}.to_json

response = http.request(request)
puts response.body
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io"
    "net/http"
)

func main() {
    url := "https://api.mozesms.com/v2/sms/bulk"
    
    data := map[string]interface{}{
        "sender_id": "MozeSMS",
        "messages": []map[string]string{
            {"phone": "+258845888195", "message": "Mensagem para cliente 1"},
            {"phone": "+258847123456", "message": "Mensagem para cliente 2"},
        },
    }
    
    jsonData, _ := json.Marshal(data)
    req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("Authorization", "Bearer SEU_TOKEN_AQUI")
    
    client := &http.Client{}
    resp, _ := client.Do(req)
    defer resp.Body.Close()
    
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}

Resposta de Sucesso

{
  "success": true,
  "data": {
    "bulk_id": "BULK_1755034567_89012",
    "total_messages": 2,
    "successful_sends": 2,
    "failed_sends": 0,
    "total_segments": 2,
    "credits_used": 2,
    "credits_remaining": 7888,
    "results": [...]
  }
}

Enviar Código OTP

POST /v2/otp/send

Gere e envie códigos OTP (One-Time Password) para autenticação de dois fatores.

Parâmetros

Parâmetro Descrição
phone Número do destinatário
sender_id SenderID (opcional, padrão: MozeSMS)
code_length Tamanho do código (4-8 dígitos, padrão: 6)
expires_in Tempo de expiração em segundos (60-3600, padrão: 300)
template Template da mensagem (use {code} para inserir o código)
app_name Nome da aplicação (opcional)
  • PHP
  • cURL
  • Python
  • Node.js
  • C#
  • Go
<?php 
$data = json_encode([
    'phone' => '+258845888195',
    'sender_id' => 'MOZOTP',
    'code_length' => 6,
    'expires_in' => 300,
    'template' => 'Seu código de verificação é: {code}',
    'app_name' => 'MeuApp'
]);

$curl = curl_init();
curl_setopt_array($curl, [
    CURLOPT_URL => 'https://api.mozesms.com/v2/otp/send',
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $data,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'Authorization: Bearer SEU_TOKEN_AQUI'
    ],
    CURLOPT_RETURNTRANSFER => true
]);

$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>
curl -X POST https://api.mozesms.com/v2/otp/send \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SEU_TOKEN_AQUI" \
  -d '{
    "phone": "+258845888195",
    "code_length": 6,
    "expires_in": 300,
    "template": "Seu código de verificação é: {code}"
  }'
import requests

url = "https://api.mozesms.com/v2/otp/send"
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer SEU_TOKEN_AQUI"
}
data = {
    "phone": "+258845888195",
    "code_length": 6,
    "expires_in": 300,
    "template": "Seu código de verificação é: {code}"
}

response = requests.post(url, headers=headers, json=data)
print(response.json())
const axios = require('axios');

axios.post('https://api.mozesms.com/v2/otp/send', {
    phone: '+258845888195',
    code_length: 6,
    expires_in: 300,
    template: 'Seu código de verificação é: {code}'
}, {
    headers: {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer SEU_TOKEN_AQUI'
    }
})
.then(res => console.log(res.data))
.catch(err => console.error(err.response?.data));
using System.Net.Http;
using System.Text;
using Newtonsoft.Json;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer SEU_TOKEN_AQUI");

var data = new
{
    phone = "+258845888195",
    code_length = 6,
    expires_in = 300,
    template = "Seu código de verificação é: {code}"
};

var json = JsonConvert.SerializeObject(data);
var content = new StringContent(json, Encoding.UTF8, "application/json");

var response = await client.PostAsync(
    "https://api.mozesms.com/v2/otp/send", 
    content
);

Console.WriteLine(await response.Content.ReadAsStringAsync());
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io"
    "net/http"
)

func main() {
    url := "https://api.mozesms.com/v2/otp/send"
    
    data := map[string]interface{}{
        "phone":       "+258845888195",
        "code_length": 6,
        "expires_in":  300,
        "template":    "Seu código de verificação é: {code}",
    }
    
    jsonData, _ := json.Marshal(data)
    req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("Authorization", "Bearer SEU_TOKEN_AQUI")
    
    client := &http.Client{}
    resp, _ := client.Do(req)
    defer resp.Body.Close()
    
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}

Resposta de Sucesso

{
  "success": true,
  "data": {
    "otp_id": "OTPID_1755034567_12345",
    "sms_id": "OTP_1755034567_6789",
    "phone": "+258845888195",
    "code_length": 6,
    "expires_in": 300,
    "expires_at": "2025-08-12T23:50:00+02:00",
    "status": "sent",
    "credits_used": 1,
    "credits_remaining": 7887
  }
}

Verificar Código OTP

POST /v2/otp/verify

Parâmetros

Parâmetro Descrição
phone Número que recebeu o OTP
code Código OTP a ser verificado
otp_id ID do OTP retornado no endpoint /otp/send
  • PHP
  • cURL
  • Python
  • Node.js
  • C#
  • Ruby
<?php 
$data = json_encode([
    'phone' => '+258845888195',
    'code' => '123456',
    'otp_id' => 'OTPID_1755034567_12345'
]);

$curl = curl_init();
curl_setopt_array($curl, [
    CURLOPT_URL => 'https://api.mozesms.com/v2/otp/verify',
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $data,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'Authorization: Bearer SEU_TOKEN_AQUI'
    ],
    CURLOPT_RETURNTRANSFER => true
]);

$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>
curl -X POST https://api.mozesms.com/v2/otp/verify \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SEU_TOKEN_AQUI" \
  -d '{
    "phone": "+258845888195",
    "code": "123456",
    "otp_id": "OTPID_1755034567_12345"
  }'
import requests

url = "https://api.mozesms.com/v2/otp/verify"
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer SEU_TOKEN_AQUI"
}
data = {
    "phone": "+258845888195",
    "code": "123456",
    "otp_id": "OTPID_1755034567_12345"
}

response = requests.post(url, headers=headers, json=data)
result = response.json()

if result.get('success'):
    print("✓ Código verificado com sucesso!")
else:
    print("✗ Código inválido ou expirado")
const axios = require('axios');

axios.post('https://api.mozesms.com/v2/otp/verify', {
    phone: '+258845888195',
    code: '123456',
    otp_id: 'OTPID_1755034567_12345'
}, {
    headers: {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer SEU_TOKEN_AQUI'
    }
})
.then(res => {
    if (res.data.success) {
        console.log('✓ Código verificado com sucesso!');
    }
})
.catch(err => console.error('✗ Código inválido ou expirado'));
using System.Net.Http;
using System.Text;
using Newtonsoft.Json;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer SEU_TOKEN_AQUI");

var data = new
{
    phone = "+258845888195",
    code = "123456",
    otp_id = "OTPID_1755034567_12345"
};

var json = JsonConvert.SerializeObject(data);
var content = new StringContent(json, Encoding.UTF8, "application/json");

var response = await client.PostAsync(
    "https://api.mozesms.com/v2/otp/verify", 
    content
);

var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
require 'net/http'
require 'json'

uri = URI('https://api.mozesms.com/v2/otp/verify')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request['Authorization'] = 'Bearer SEU_TOKEN_AQUI'
request.body = {
  phone: '+258845888195',
  code: '123456',
  otp_id: 'OTPID_1755034567_12345'
}.to_json

response = http.request(request)
result = JSON.parse(response.body)

if result['success']
  puts '✓ Código verificado com sucesso!'
else
  puts '✗ Código inválido ou expirado'
end

Validação de SenderID

GET /v2/senderids

A API v2.0 inclui validação rigorosa de SenderIDs para garantir que apenas remetentes autorizados sejam utilizados:

Tipo de SenderID Validação
Alfanumérico Deve estar registrado com status ativo
Numérico Permitido automaticamente (máximo 15 dígitos)
Comprimento Máximo 11 caracteres para alfanumérico
Importante: SenderIDs alfanuméricos não registrados retornarão erro HTTP 403 com código SENDER_ID_NOT_ALLOWED.

Códigos de Resposta

A API v2.0 utiliza códigos de status HTTP padrão e retorna respostas em formato JSON:

Status HTTP Código Descrição
200 SUCCESS Requisição processada com sucesso
400 VALIDATION_ERROR Parâmetros obrigatórios em falta ou inválidos
401 UNAUTHORIZED Token de autenticação inválido ou em falta
402 INSUFFICIENT_CREDITS Saldo insuficiente para enviar SMS
403 SENDER_ID_NOT_ALLOWED SenderID não autorizado ou inativo
404 NOT_FOUND Endpoint não encontrado
429 RATE_LIMIT_EXCEEDED Limite de rate (OTP) excedido
500 INTERNAL_ERROR Erro interno do servidor

Exemplo de Resposta de Erro

{
  "success": false,
  "error": "SENDER_ID_NOT_ALLOWED",
  "message": "SenderID alfanumérico não autorizado. Registe primeiro o SenderID no painel de cliente.",
  "timestamp": "2025-08-12T23:45:00+02:00"
}

Limites e Restrições

Serviço Limite
SMS Individual Sem limite específico
Bulk SMS Máximo 1000 mensagens por requisição
OTP Rate Limit 1 OTP por minuto por número
Tamanho da Mensagem Máximo 1600 caracteres
Segmentação Automática (160 chars por segmento)
Custo 1 crédito por segmento enviado

Suporte

Para suporte técnico ou dúvidas sobre a integração: