Documentação da API

Business2 BusinessCode - Sistema de Mensageria Multicanal

Versão 1.0 | Base URL: http://painelv2.businesscode.com.br/api

🔐 Informações de Autenticação

Tipo: JWT Bearer Token

Header: Authorization: Bearer {token}

Obtenção: Faça login através do endpoint POST /auth/login

Validade: O token expira em 60 minutos

🔐 Autenticação
POST /webhooks/receive
Endpoint para receber webhooks de status de mensagens

Parâmetros:

Campo Tipo Obrigatório Descrição
message_id string Sim ID externo da mensagem
status string Sim Status: sent, delivered, failed, read
timestamp datetime Sim Timestamp do evento
error_code string Não Código de erro (se status = failed)
error_message string Não Mensagem de erro (se status = failed)

Exemplo de Webhook Recebido:

{
  "message_id": "msg_ext_123",
  "status": "delivered",
  "timestamp": "2024-01-15T10:30:15Z",
  "error_code": null,
  "error_message": null
}

Resposta Esperada:

200
{
  "success": true,
  "message": "Webhook processado com sucesso"
}
GET /webhooks/logs
Lista os logs de webhooks recebidos

🔒 Autenticação Necessária

Este endpoint requer autenticação JWT

Parâmetros de Query:

Parâmetro Tipo Descrição
per_page integer Número de itens por página (padrão: 15)
message_id string Filtrar por ID da mensagem
event string Filtrar por evento: sent, delivered, failed, read

Resposta de Sucesso:

200
{
  "success": true,
  "data": {
    "data": [
      {
        "id": 1,
        "message_id": 1,
        "external_message_id": "msg_ext_123",
        "event": "delivered",
        "payload": {
          "message_id": "msg_ext_123",
          "status": "delivered",
          "timestamp": "2024-01-15T10:30:15Z"
        },
        "received_at": "2024-01-15T10:30:15Z"
      }
    ],
    "current_page": 1,
    "last_page": 2,
    "per_page": 15,
    "total": 25
  }
}

📋 Configuração de Webhooks

Formato: JSON via POST

Timeout: 30 segundos

Retry: 3 tentativas com backoff exponencial

Autenticação: Opcional via header personalizado

⚠️ Códigos de Erro

Códigos de Status HTTP

Código Status Descrição
200 OK Requisição processada com sucesso
201 Created Recurso criado com sucesso
400 Bad Request Dados da requisição inválidos
401 Unauthorized Token de autenticação inválido ou ausente
422 Unprocessable Entity Erro de validação dos dados
500 Internal Server Error Erro interno do servidor

Formato de Resposta de Erro

{
  "success": false,
  "message": "Descrição do erro",
  "errors": {
    "campo": [
      "Mensagem de erro específica do campo"
    ]
  },
  "error_code": "CODIGO_ERRO_INTERNO"
}

Códigos de Erro Específicos

Código Descrição Solução
INSUFFICIENT_BALANCE Saldo insuficiente para enviar mensagem Adicione créditos à sua conta
INVALID_PHONE_NUMBER Número de telefone inválido Verifique o formato do número (+5511999999999)
CHANNEL_NOT_AVAILABLE Canal de comunicação indisponível Tente novamente mais tarde ou use outro canal
RATE_LIMIT_EXCEEDED Limite de requisições excedido Aguarde antes de fazer nova requisição
CAMPAIGN_NOT_FOUND Campanha não encontrada Verifique o ID da campanha
MESSAGE_TOO_LONG Mensagem excede o limite de caracteres Reduza o tamanho da mensagem
💡 Exemplos de Integração

Exemplo em PHP

 'sms',
    'to' => '+5511999999999',
    'content' => 'Olá! Esta é uma mensagem de teste.'
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $baseUrl . '/messages');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

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

if ($httpCode === 201) {
    $result = json_decode($response, true);
    echo "Mensagem enviada com sucesso! ID: " . $result['data']['id'];
} else {
    echo "Erro ao enviar mensagem: " . $response;
}
?>

Exemplo em JavaScript

// Configuração
const baseUrl = 'https://seudominio.com/business2/businesscode/api';
const token = 'seu_jwt_token_aqui';

// Função para enviar mensagem
async function sendMessage(channel, to, content) {
    try {
        const response = await fetch(`${baseUrl}/messages`, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'Authorization': `Bearer ${token}`
            },
            body: JSON.stringify({
                channel: channel,
                to: to,
                content: content
            })
        });

        const data = await response.json();
        
        if (response.ok) {
            console.log('Mensagem enviada com sucesso!', data);
            return data;
        } else {
            console.error('Erro ao enviar mensagem:', data);
            throw new Error(data.message);
        }
    } catch (error) {
        console.error('Erro na requisição:', error);
        throw error;
    }
}

// Uso
sendMessage('sms', '+5511999999999', 'Olá! Esta é uma mensagem de teste.')
    .then(result => {
        console.log('ID da mensagem:', result.data.id);
    })
    .catch(error => {
        console.error('Falha ao enviar:', error.message);
    });

Exemplo em Python

import requests
import json

# Configuração
BASE_URL = 'https://seudominio.com/business2/businesscode/api'
TOKEN = 'seu_jwt_token_aqui'

# Headers
headers = {
    'Content-Type': 'application/json',
    'Authorization': f'Bearer {TOKEN}'
}

# Função para enviar mensagem
def send_message(channel, to, content):
    data = {
        'channel': channel,
        'to': to,
        'content': content
    }
    
    try:
        response = requests.post(
            f'{BASE_URL}/messages',
            headers=headers,
            json=data
        )
        
        if response.status_code == 201:
            result = response.json()
            print(f"Mensagem enviada com sucesso! ID: {result['data']['id']}")
            return result
        else:
            error_data = response.json()
            print(f"Erro ao enviar mensagem: {error_data['message']}")
            return None
            
    except requests.exceptions.RequestException as e:
        print(f"Erro na requisição: {e}")
        return None

# Uso
result = send_message('sms', '+5511999999999', 'Olá! Esta é uma mensagem de teste.')
if result:
    print(f"Status da mensagem: {result['data']['status']}")
    print(f"Custo: R$ {result['data']['cost']}")

Business2 BusinessCode API - Versão 1.0

Para suporte técnico, entre em contato através do painel administrativo

Última atualização: Janeiro 2024 | Voltar ao topo

"> POST /auth/register
Registra um novo usuário no sistema

Parâmetros:

Campo Tipo Obrigatório Descrição
name string Sim Nome completo do usuário (máx. 255 caracteres)
email string Sim Email único do usuário
password string Sim Senha (mín. 8 caracteres)
password_confirmation string Sim Confirmação da senha
user_type string Sim Tipo: admin, pre-pago, pos-pago
phone string Não Telefone do usuário
company string Não Nome da empresa
webhook_url string Não URL para receber webhooks

Exemplo de Requisição:

{
  "name": "João Silva",
  "email": "joao@empresa.com",
  "password": "senha123",
  "password_confirmation": "senha123",
  "user_type": "pre-pago",
  "phone": "+5511999999999",
  "company": "Empresa LTDA",
  "webhook_url": "https://empresa.com/webhook"
}

Resposta de Sucesso:

201
{
  "success": true,
  "message": "Usuário registrado com sucesso",
  "data": {
    "user": {
      "id": 1,
      "name": "João Silva",
      "email": "joao@empresa.com",
      "user_type": "pre-pago",
      "status": "active"
    },
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
    "token_type": "bearer",
    "expires_in": 3600
  }
}
POST /auth/login
Autentica um usuário e retorna o token JWT

Parâmetros:

Campo Tipo Obrigatório Descrição
email string Sim Email do usuário
password string Sim Senha do usuário

Exemplo de Requisição:

{
  "email": "joao@empresa.com",
  "password": "senha123"
}

Resposta de Sucesso:

200
{
  "success": true,
  "data": {
    "user": {
      "id": 1,
      "name": "João Silva",
      "email": "joao@empresa.com",
      "user_type": "pre-pago"
    },
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
    "token_type": "bearer",
    "expires_in": 3600
  }
}
GET /auth/me
Retorna informações do usuário autenticado

🔒 Autenticação Necessária

Este endpoint requer autenticação JWT

Resposta de Sucesso:

200
{
  "success": true,
  "data": {
    "id": 1,
    "name": "João Silva",
    "email": "joao@empresa.com",
    "user_type": "pre-pago",
    "status": "active",
    "balance": {
      "current_balance": 100.50,
      "credit_limit": 0.00,
      "account_type": "pre-pago"
    }
  }
}
POST /auth/logout
Invalida o token JWT atual

🔒 Autenticação Necessária

Este endpoint requer autenticação JWT

Resposta de Sucesso:

200
{
  "success": true,
  "message": "Logout realizado com sucesso"
}
PUT /auth/profile
Atualiza o perfil do usuário autenticado

🔒 Autenticação Necessária

Este endpoint requer autenticação JWT

Parâmetros:

Campo Tipo Obrigatório Descrição
name string Não Nome do usuário
phone string Não Telefone do usuário
company string Não Nome da empresa
webhook_url string Não URL para webhooks
password string Não Nova senha (mín. 8 caracteres)
password_confirmation string Não Confirmação da nova senha
📢 Campanhas
GET /campaigns
Lista todas as campanhas do usuário autenticado

🔒 Autenticação Necessária

Este endpoint requer autenticação JWT

Parâmetros de Query:

Parâmetro Tipo Descrição
per_page integer Número de itens por página (padrão: 15)
page integer Número da página

Resposta de Sucesso:

200
{
  "success": true,
  "data": {
    "data": [
      {
        "id": 1,
        "campaign_id": "CAMP_001",
        "channel": "sms",
        "message": "Olá! Esta é uma mensagem de teste.",
        "status": "completed",
        "total_recipients": 100,
        "sent_count": 98,
        "delivered_count": 95,
        "failed_count": 3,
        "total_cost": 50.00,
        "created_at": "2024-01-15T10:30:00Z"
      }
    ],
    "current_page": 1,
    "last_page": 5,
    "per_page": 15,
    "total": 75
  }
}
POST /campaigns
Cria uma nova campanha de mensagens

🔒 Autenticação Necessária

Este endpoint requer autenticação JWT

Parâmetros:

Campo Tipo Obrigatório Descrição
channel string Sim Canal: sms, whatsapp, rcs, voice
message string Sim Conteúdo da mensagem
recipients array Sim Lista de números de telefone
webhook_url string Não URL para receber status
scheduled_at datetime Não Agendamento (formato ISO 8601)

Exemplo de Requisição:

{
  "channel": "sms",
  "message": "Olá! Esta é uma mensagem promocional.",
  "recipients": [
    "+5511999999999",
    "+5511888888888",
    "+5511777777777"
  ],
  "webhook_url": "https://empresa.com/webhook",
  "scheduled_at": "2024-01-20T14:30:00Z"
}

Resposta de Sucesso:

201
{
  "success": true,
  "message": "Campanha criada com sucesso",
  "data": {
    "id": 1,
    "campaign_id": "CAMP_001",
    "channel": "sms",
    "message": "Olá! Esta é uma mensagem promocional.",
    "status": "scheduled",
    "total_recipients": 3,
    "total_cost": 1.50,
    "scheduled_at": "2024-01-20T14:30:00Z",
    "created_at": "2024-01-15T10:30:00Z"
  }
}
GET /campaigns/{id}
Retorna detalhes de uma campanha específica

🔒 Autenticação Necessária

Este endpoint requer autenticação JWT

Parâmetros de URL:

Parâmetro Tipo Descrição
id integer ID da campanha
POST /campaigns/{id}/send
Envia uma campanha imediatamente

🔒 Autenticação Necessária

Este endpoint requer autenticação JWT

Resposta de Sucesso:

200
{
  "success": true,
  "message": "Campanha enviada para processamento",
  "data": {
    "id": 1,
    "status": "processing",
    "started_at": "2024-01-15T10:30:00Z"
  }
}
GET /campaigns/{id}/status
Retorna o status e estatísticas de uma campanha

🔒 Autenticação Necessária

Este endpoint requer autenticação JWT

Resposta de Sucesso:

200
{
  "success": true,
  "data": {
    "campaign_id": "CAMP_001",
    "status": "completed",
    "total_recipients": 100,
    "sent_count": 98,
    "delivered_count": 95,
    "failed_count": 3,
    "delivery_rate": 95.0,
    "failure_rate": 3.0,
    "total_cost": 50.00,
    "started_at": "2024-01-15T10:30:00Z",
    "completed_at": "2024-01-15T10:45:00Z"
  }
}
DELETE /campaigns/{id}
Remove uma campanha (apenas se pendente, agendada ou falhada)

🔒 Autenticação Necessária

Este endpoint requer autenticação JWT

Resposta de Sucesso:

200
{
  "success": true,
  "message": "Campanha deletada com sucesso"
}
💬 Mensagens
GET /messages
Lista todas as mensagens do usuário autenticado

🔒 Autenticação Necessária

Este endpoint requer autenticação JWT

Parâmetros de Query:

Parâmetro Tipo Descrição
per_page integer Número de itens por página (padrão: 15)
campaign_id integer Filtrar por ID da campanha
status string Filtrar por status: pending, sent, delivered, failed
channel string Filtrar por canal: sms, whatsapp, rcs, voice

Resposta de Sucesso:

200
{
  "success": true,
  "data": {
    "data": [
      {
        "id": 1,
        "campaign_id": 1,
        "recipient_phone": "+5511999999999",
        "message_content": "Olá! Esta é uma mensagem de teste.",
        "channel": "sms",
        "status": "delivered",
        "cost": 0.50,
        "sent_at": "2024-01-15T10:30:00Z",
        "delivered_at": "2024-01-15T10:30:15Z",
        "campaign": {
          "id": 1,
          "campaign_id": "CAMP_001",
          "channel": "sms"
        }
      }
    ],
    "current_page": 1,
    "last_page": 10,
    "per_page": 15,
    "total": 150
  }
}
POST /messages
Envia uma mensagem individual

🔒 Autenticação Necessária

Este endpoint requer autenticação JWT

Parâmetros:

Campo Tipo Obrigatório Descrição
channel string Sim Canal: sms, whatsapp, rcs, voice
to string Sim Número de telefone do destinatário
content string Sim Conteúdo da mensagem
campaign_id integer Não ID da campanha (se aplicável)

Exemplo de Requisição:

{
  "channel": "sms",
  "to": "+5511999999999",
  "content": "Olá! Esta é uma mensagem individual.",
  "campaign_id": null
}

Resposta de Sucesso:

201
{
  "success": true,
  "message": "Mensagem enviada com sucesso",
  "data": {
    "id": 1,
    "recipient_phone": "+5511999999999",
    "message_content": "Olá! Esta é uma mensagem individual.",
    "channel": "sms",
    "status": "pending",
    "cost": 0.50,
    "created_at": "2024-01-15T10:30:00Z"
  }
}
GET /messages/{id}
Retorna detalhes de uma mensagem específica

🔒 Autenticação Necessária

Este endpoint requer autenticação JWT

Resposta de Sucesso:

200
{
  "success": true,
  "data": {
    "id": 1,
    "campaign_id": 1,
    "recipient_phone": "+5511999999999",
    "message_content": "Olá! Esta é uma mensagem de teste.",
    "channel": "sms",
    "status": "delivered",
    "cost": 0.50,
    "external_id": "msg_ext_123",
    "sent_at": "2024-01-15T10:30:00Z",
    "delivered_at": "2024-01-15T10:30:15Z",
    "error_message": null,
    "webhooks": [
      {
        "id": 1,
        "event": "delivered",
        "received_at": "2024-01-15T10:30:15Z"
      }
    ]
  }
}
POST /messages/rcs/send
Envia uma mensagem RCS via Infobip e realiza a cobrança

🔒 Autenticação Necessária

Este endpoint requer autenticação JWT

Parâmetros:

Campo Tipo Obrigatório Descrição
recipient string Sim Número de telefone do destinatário (E.164)
text string Sim Conteúdo de texto da mensagem RCS

Exemplo de Requisição:

{
  "recipient": "+5511999999999",
  "text": "Olá! Esta é uma mensagem RCS."
}

Resposta de Sucesso:

200
{
  "success": true,
  "data": {
    "message": {
      "id": 123,
      "message_id": "MSG_ABC123",
      "recipient_phone": "+5511999999999",
      "message_content": "Olá! Esta é uma mensagem RCS.",
      "channel": "rcs",
      "status": "sent",
      "cost": 0.50,
      "sent_at": "2024-01-15T10:30:00Z",
      "infobip_message_id": "abc-def-123"
    },
    "infobip": {
      "success": true,
      "messageId": "abc-def-123",
      "status": "PENDING",
      "data": { "...": "payload do Infobip" }
    }
  }
}

Saldo Insuficiente:

400
{
  "success": false,
  "message": "Saldo insuficiente para enviar a mensagem",
  "required_balance": 0.50,
  "available_balance": 0.20
}

Dados Inválidos:

422
{
  "success": false,
  "message": "Dados de validação inválidos",
  "errors": {
    "recipient": ["O campo recipient é obrigatório"],
    "text": ["O campo text é obrigatório"]
  }
}

Falha no Envio (Infobip):

502
{
  "success": false,
  "message": "Falha no envio RCS",
  "error": "Motivo do erro",
  "data": {
    "message": { "id": 123, "status": "failed" },
    "infobip": { "success": false, "error": "..." }
  }
}
💰 Transações
GET /transactions
Lista todas as transações do usuário autenticado

🔒 Autenticação Necessária

Este endpoint requer autenticação JWT

Parâmetros de Query:

Parâmetro Tipo Descrição
per_page integer Número de itens por página (padrão: 15)
type string Filtrar por tipo: credit, debit
status string Filtrar por status: pending, completed, failed
date_from date Data inicial (formato: YYYY-MM-DD)
date_to date Data final (formato: YYYY-MM-DD)

Resposta de Sucesso:

200
{
  "success": true,
  "data": {
    "data": [
      {
        "id": 1,
        "transaction_id": "TXN_001",
        "type": "debit",
        "amount": 50.00,
        "description": "Débito para campanha CAMP_001",
        "status": "completed",
        "balance_before": 150.00,
        "balance_after": 100.00,
        "created_at": "2024-01-15T10:30:00Z"
      },
      {
        "id": 2,
        "transaction_id": "TXN_002",
        "type": "credit",
        "amount": 100.00,
        "description": "Recarga de créditos",
        "status": "completed",
        "balance_before": 50.00,
        "balance_after": 150.00,
        "created_at": "2024-01-14T15:20:00Z"
      }
    ],
    "current_page": 1,
    "last_page": 3,
    "per_page": 15,
    "total": 45
  }
}
POST /transactions/credit
Adiciona créditos à conta do usuário

🔒 Autenticação Necessária

Este endpoint requer autenticação JWT

Parâmetros:

Campo Tipo Obrigatório Descrição
amount decimal Sim Valor a ser creditado (mín. 0.01)
description string Não Descrição da transação

Exemplo de Requisição:

{
  "amount": 100.00,
  "description": "Recarga de créditos via cartão"
}

Resposta de Sucesso:

201
{
  "success": true,
  "message": "Crédito adicionado com sucesso",
  "data": {
    "transaction": {
      "id": 1,
      "transaction_id": "TXN_001",
      "type": "credit",
      "amount": 100.00,
      "description": "Recarga de créditos via cartão",
      "status": "completed",
      "balance_before": 50.00,
      "balance_after": 150.00
    },
    "new_balance": 150.00
  }
}
POST /transactions/debit
Debita valor da conta do usuário

🔒 Autenticação Necessária

Este endpoint requer autenticação JWT

Parâmetros:

Campo Tipo Obrigatório Descrição
amount decimal Sim Valor a ser debitado (mín. 0.01)
description string Não Descrição da transação

Resposta de Sucesso:

201
{
  "success": true,
  "message": "Débito realizado com sucesso",
  "data": {
    "transaction": {
      "id": 2,
      "transaction_id": "TXN_002",
      "type": "debit",
      "amount": 25.00,
      "description": "Débito manual",
      "status": "completed",
      "balance_before": 150.00,
      "balance_after": 125.00
    },
    "new_balance": 125.00
  }
}
📊 Relatórios
GET /reports/summary
Retorna um resumo geral das atividades do usuário

🔒 Autenticação Necessária

Este endpoint requer autenticação JWT

Parâmetros de Query:

Parâmetro Tipo Descrição
period string Período: today, week, month, year (padrão: month)

Resposta de Sucesso:

200
{
  "success": true,
  "data": {
    "period": "month",
    "campaigns": {
      "total": 15,
      "completed": 12,
      "pending": 2,
      "failed": 1
    },
    "messages": {
      "total": 1500,
      "sent": 1485,
      "delivered": 1420,
      "failed": 65
    },
    "costs": {
      "total_spent": 750.00,
      "average_per_message": 0.50
    },
    "delivery_rate": 94.67,
    "channels": {
      "sms": 1200,
      "whatsapp": 250,
      "rcs": 50,
      "voice": 0
    }
  }
}
GET /reports/channels
Relatório detalhado por canal de comunicação

🔒 Autenticação Necessária

Este endpoint requer autenticação JWT

Parâmetros de Query:

Parâmetro Tipo Descrição
period string Período: today, week, month, year (padrão: month)

Resposta de Sucesso:

200
{
  "success": true,
  "data": [
    {
      "channel": "sms",
      "total_messages": 1200,
      "delivered": 1150,
      "failed": 50,
      "delivery_rate": 95.83,
      "total_cost": 600.00,
      "average_cost": 0.50
    },
    {
      "channel": "whatsapp",
      "total_messages": 250,
      "delivered": 240,
      "failed": 10,
      "delivery_rate": 96.0,
      "total_cost": 125.00,
      "average_cost": 0.50
    },
    {
      "channel": "rcs",
      "total_messages": 50,
      "delivered": 45,
      "failed": 5,
      "delivery_rate": 90.0,
      "total_cost": 25.00,
      "average_cost": 0.50
    }
  ]
}
⚙️ Administração

🔒 Acesso Restrito

Todos os endpoints desta seção requerem privilégios de administrador

GET /admin/users
Lista todos os usuários do sistema

Parâmetros de Query:

Parâmetro Tipo Descrição
per_page integer Número de itens por página (padrão: 15)
status string Filtrar por status: active, inactive
user_type string Filtrar por tipo: admin, pre-pago, pos-pago
search string Buscar por nome, email ou telefone

Resposta de Sucesso:

200
{
  "success": true,
  "users": [
    {
      "id": 1,
      "name": "João Silva",
      "email": "joao@empresa.com",
      "user_type": "pre-pago",
      "status": "active",
      "phone": "+5511999999999",
      "company": "Empresa LTDA",
      "balance": {
        "current_balance": 100.50,
        "credit_limit": 0.00,
        "account_type": "pre-pago"
      },
      "created_at": "2024-01-10T10:00:00Z"
    }
  ],
  "pagination": {
    "current_page": 1,
    "last_page": 5,
    "per_page": 15,
    "total": 75
  }
}
POST /admin/users
Cria um novo usuário no sistema

Parâmetros:

Campo Tipo Obrigatório Descrição
name string Sim Nome completo do usuário
email string Sim Email único do usuário
password string Sim Senha (mín. 8 caracteres)
user_type string Sim Tipo: admin, pre-pago, pos-pago
status string Sim Status: active, inactive
GET /admin/pricing
Lista todas as configurações de preços

Resposta de Sucesso:

200
{
  "success": true,
  "data": [
    {
      "id": 1,
      "channel": "sms",
      "cost_price": 0.30,
      "sell_price": 0.50,
      "is_active": true,
      "created_at": "2024-01-01T00:00:00Z"
    },
    {
      "id": 2,
      "channel": "whatsapp",
      "cost_price": 0.35,
      "sell_price": 0.55,
      "is_active": true,
      "created_at": "2024-01-01T00:00:00Z"
    }
  ]
}
POST /admin/pricing
Cria uma nova configuração de preço

Parâmetros:

Campo Tipo Obrigatório Descrição
channel string Sim Canal: sms, whatsapp, rcs, voice
cost_price decimal Sim Preço de custo (mín. 0)
sell_price decimal Sim Preço de venda (mín. 0)
is_active boolean Não Se o preço está ativo (padrão: true)
GET /admin/statistics
Retorna estatísticas gerais do sistema

Resposta de Sucesso:

200
{
  "success": true,
  "data": {
    "users": {
      "total": 150,
      "active": 140,
      "inactive": 10,
      "by_type": {
        "admin": 5,
        "pre-pago": 100,
        "pos-pago": 45
      }
    },
    "campaigns": {
      "total": 500,
      "this_month": 75,
      "completed": 450,
      "pending": 30,
      "failed": 20
    },
    "messages": {
      "total": 50000,
      "this_month": 7500,
      "delivered": 47500,
      "failed": 2500
    },
    "revenue": {
      "total": 25000.00,
      "this_month": 3750.00,
      "average_per_message": 0.50
    }
  }
}
🔗 Webhooks