API do painel

Contratos previsíveis e sem dados sensíveis.

Os endpoints abaixo servem ao painel autenticado. Integrações externas devem consumir webhooks assinados; uma credencial de sessão nunca deve sair do navegador.

Autenticação

As rotas usam cookie seguro de sessão e o cabeçalho X-CSRF-Token nas mutações JSON. O token CSRF está no <meta name="csrf-token">. Respostas são JSON UTF-8 e incluem apenas IDs públicos.

Content-Type: application/json
Accept: application/json
X-CSRF-Token: <token-da-sessao>

Endpoints autenticados

MétodoRotaUso
GET/POST/PUT/DELETE/painel/api/campaigns.phpConsultar, criar, atualizar, duplicar, testar, ativar, pausar ou arquivar campanhas.
GET/POST/painel/api/instances.phpListar conexões; consultar status/QR; reiniciar, desconectar ou sincronizar grupos.
GET/POST/painel/api/validations.phpListar e iniciar validação em lote.
GET/POST/painel/api/extractions.phpListar e iniciar extração de contatos.
GET/POST/painel/api/contacts.phpConsultar contatos mascarados e registrar evidência de consentimento.
GET/POST/painel/api/suppressions.phpGerenciar opt-out e supressões.
GET/POST/painel/api/webhooks.phpCRUD, teste e rotação dos webhooks externos.
GET/POST/painel/api/subscription.phpConsultar ou alterar cancelamento no fim do período.
POST/painel/api/group_toggle.phpIncluir ou remover um grupo da exclusão global.
As URLs antigas continuam como wrappers de compatibilidade. Novas integrações do painel devem usar /painel/api/. IDs sequenciais e nomes internos de sessão nunca autorizam uma operação.

Ações de campanha

POST aceita create, activate, pause, archive, duplicate ou test; PUT faz atualização integral da configuração JSON e DELETE arquiva. O PUT preserva as mídias atuais; alterações de mídia permanecem no formulário multipart autenticado. Toda campanha nasce como draft. O campo active permanece compatível com o scheduler, e lifecycle_status informa draft|active|paused|archived.

{
  "action": "activate",
  "id": "uuid-publico-da-campanha"
}

Ações de conexão

Para estado ou QR, use GET /painel/api/instances.php?action=status&id=UUID ou action=qr. Mutações usam JSON, CSRF e uma das ações abaixo:

{
  "action": "restart | disconnect | sync_groups",
  "id": "uuid-publico-da-conexao"
}

Paginação e filtros

Campanhas e conexões aceitam page e per_page (máximo 50). A resposta informa página atual, tamanho, total de páginas e total de itens.

Campanhas

q, state=all|draft|active|paused|archived, run_status, instance_id ou id.

Conexões

q, connection_status, provisioning_status, billing_status ou id.

Validações e extrações

Históricos aceitam limit (máximo 100) e cursor. Resultados aceitam até 1.000 por página. O cursor é opaco e vinculado ao usuário e ao job.

{
  "page": 2,
  "per_page": 20,
  "pages": 8,
  "total": 153
}
{
  "limit": 1000,
  "has_more": true,
  "next_cursor": "v1:token-opaco"
}

Formato de resposta

{
  "status": "success",
  "campaign": {
    "id": "uuid",
    "lifecycle_status": "active",
    "active": true,
    "latest_run": {
      "status": "completed",
      "totals": {"targets": 150, "sent": 148, "failed": 2},
      "costs": {"reserved_cents": 3750, "charged_cents": 3700}
    },
    "queue": {"active": 0, "review": 0, "sent": 148, "failed": 2}
  }
}

Falhas usam status: error, código estável, mensagem segura e status HTTP correspondente. 401 indica sessão ausente, 402 acesso financeiro inativo, 404 recurso inexistente ou de outro proprietário, 419 CSRF inválido, 422 entrada inválida e 429 limite temporário.

Privacidade das respostas

Telefones podem ser mascarados nas listagens; tokens, segredos, chaves, cabeçalhos de autenticação e respostas internas são removidos. Segredos de webhook são retornados somente na criação ou rotação.