API v1.3.0 Stable

Documentação da API

A API RESTful da SendSync permite orquestrar comunicações multicanal (WhatsApp e Email) com filas inteligentes, validação automática de destinatários, suporte a anexos e priorização por tipo de mensagem.

Alta Performance

Processamento assíncrono via Redis e filas por conector. Envio em massa até 1000 mensagens por requisição.

Multicanal

WhatsApp (Baileys) e E-mail. Conectores por empresa; cada um com fila e limites independentes.

Fluxo de uso recomendado

  1. Autenticar — Use POST /api/auth/login (email + senha) para obter um access_token JWT, ou gere uma Chave de API no painel (menu Dados da API) e use o header X-API-Key.
  2. Listar conectoresGET /api/connectors retorna os conectores da sua empresa (WhatsApp, E-mail). Você precisará do id do conector para enviar mensagens.
  3. Conectar WhatsApp (se necessário) — Para conectores do tipo WhatsApp, chame POST /api/whatsapp/connect/:connectorId para obter o QR Code, escaneie com o app e aguarde status CONNECTED.
  4. Enviar mensagensPOST /api/queue/send (unitário) ou POST /api/queue/bulk (até 1000 por vez). A mensagem entra na fila e é processada conforme prioridade e limites do conector.
  5. Consultar a filaGET /api/queue/list com filtros (status, page, limit, externalId, etc.) para acompanhar envios e status (PENDING, SENT, FAILED, etc.).

Autenticação

A SendSync oferece duas formas de autenticação para suas requisições:

Chave de API Permanente

Recomendado para integrações backend estáveis. A chave nunca expira até ser revogada.

X-API-Key: sk_live_...

Bearer Token (JWT)

Gerado ao fazer login no painel. Expira periodicamente por segurança.

Authorization: Bearer eyJ...

Você pode gerar e gerenciar suas chaves de API permanentes no menu Dados da API do painel (após login).

Obter token JWT (login)

Para usar Authorization: Bearer <token>, faça login com email e senha do painel:

curl -X POST https://sendsync.com.br/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"seu@email.com","password":"sua_senha"}'

Resposta: { "access_token": "eyJ...", "user": { ... } }. Use access_token no header Authorization: Bearer <access_token>.

Segurança Crítica

Nunca exponha sua chave secreta em código client-side (navegador). Realize chamadas apenas do seu servidor backend.

Authorization: Bearer sk_live_51M3...

Respostas de erro comuns

  • 401 Unauthorized — Token inválido ou expirado; chave de API inválida.
  • 400 Bad Request — Dados inválidos (ex.: connectorId, to ou message ausentes ou formato incorreto).
  • 404 — Recurso não encontrado (ex.: conector ou mensagem inexistente).

URL base

Todos os endpoints da API estão sob o prefixo /api. Use a URL base:

https://sendsync.com.br

Exemplo: enviar mensagem = https://sendsync.com.br/api/queue/send


POST/api/queue/send

Enviar mensagem unitária

Adiciona uma mensagem à fila de processamento. Ideal para notificações transacionais (OTP, confirmação de pedido). A mensagem é processada de forma assíncrona conforme a fila e os limites do conector.

Formato: Para mensagens só de texto use Content-Type: application/json. Para anexos use multipart/form-data e envie os arquivos no campo attachments. Limite por arquivo: 50MB.

Parâmetros do Body

connectorIdstringOBRIGATÓRIO

ID do conector (instância WhatsApp) que realizará o envio.

tostringOBRIGATÓRIO

Destinatário da mensagem. Para WhatsApp: número completo (DDI + DDD + Número) apenas dígitos. Para Email: endereço de email válido. O sistema valida automaticamente baseado no tipo de conector.

Ex: 5511999998888 ou email@exemplo.com

messagestringOBRIGATÓRIO

Conteúdo da mensagem. Suporta formatação Markdown do WhatsApp.

contactNamestring

Nome da pessoa ou empresa. Será usado para atualizar o cadastro mestre e ficará registrado no histórico da mensagem.

Ex: João Silva

messageTypestring

Tipo/categoria da mensagem. Valores: GERAL (padrão), NOTIFICATION, MARKETING, TRANSACTIONAL, SUPPORT, REMINDER.

Ex: TRANSACTIONAL

prioritynumber

Prioridade da mensagem de 1 a 10 (10 = mais alta). Padrão: 5.

scheduledAtstring

Data/hora agendada para envio em ISO 8601. Ex: 2024-01-22T10:00:00Z

requiresApprovalboolean

Se true, a mensagem fica com status PENDING_APPROVAL até ser aprovada no painel.

forceDirectboolean

Se true, envia imediatamente sem passar pela fila (use com cautela).

notesstring

Observações internas (não enviadas ao destinatário).

webhookUrlstring

URL de webhook para notificações de status (quando disponível).

externalIdstring

ID de referência do seu sistema. Útil para conciliação e consulta posterior.

Ex: PEDIDO-12345

attachmentsfile[]

Arquivos para anexar à mensagem. Requer envio via multipart/form-data. Limite: 50MB por arquivo. Suportado para WhatsApp e Email.

attachmentUrlstring

URL pública de um arquivo PDF para download e anexo automático. Útil para boletos e documentos. O sistema baixa e anexa automaticamente.

Ex: https://exemplo.com/boleto.pdf

Exemplo de Requisição

curl -X POST https://sendsync.com.br/api/queue/send \
  -H "Authorization: Bearer SEU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "connectorId": "con_123456",
    "to": "5511999998888",
    "message": "Olá *Cliente*, seu pedido foi confirmado!",
    "contactName": "João Silva",
    "notes": "Mensagem de confirmação de pedido #12345",
    "messageType": "TRANSACTIONAL",
    "externalId": "REF-123"
  }'

# --- ALTERNATIVA: Chave de API Permanente ---
curl -X POST https://sendsync.com.br/api/queue/send \
  -H "X-API-Key: SUA_API_KEY_PERMANENTE" \
  -H "Content-Type: application/json" \
  -d '{
    "connectorId": "con_123456",
    "to": "5511999998888",
    "contactName": "Maria Oliveira",
    "message": "Sua chave de acesso é 1234",
    "externalId": "REF-456"
  }'

# Exemplo com Email
curl -X POST https://sendsync.com.br/api/queue/send \
  -H "Authorization: Bearer SEU_TOKEN" \
  -H "Content-Type": application/json" \
  -d '{
    "connectorId": "con_email_123",
    "to": "cliente@exemplo.com",
    "message": "Seu pedido foi confirmado!",
    "messageType": "TRANSACTIONAL"
  }'

# Exemplo com Anexo via URL (Boleto)
curl -X POST https://sendsync.com.br/api/queue/send \
  -H "Authorization: Bearer SEU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "connectorId": "con_whatsapp_123",
    "to": "5511999998888",
    "message": "Segue o boleto em anexo",
    "attachmentUrl": "https://api.asaas.com/boleto.pdf"
  }'

# Exemplo com Anexo (Multipart)
curl -X POST https://sendsync.com.br/api/queue/send \
  -H "Authorization: Bearer SEU_TOKEN" \
  -F "connectorId=con_123456" \
  -F "to=5511999998888" \
  -F "message=Segue o comprovante" \
  -F "attachments=@/caminho/do/arquivo.pdf"

Resposta de Sucesso (201 Created)

Retorna o objeto da mensagem criada na fila. Exemplo:

{
  "id": "uuid-da-mensagem",
  "status": "PENDING",
  "to": "5511999998888",
  "message": "Olá! Seu pedido foi confirmado.",
  "priority": 5,
  "connectorId": "uuid-do-conector",
  "messageType": "TRANSACTIONAL",
  "createdAt": "2024-01-22T14:30:00.000Z",
  "externalId": "REF-123"
}
POST/api/queue/bulk

Envio em Massa

Permite enviar até 1000 mensagens em uma única requisição HTTP. Altamente recomendado para campanhas de marketing para reduzir overhead de rede.

curl -X POST https://sendsync.com.br/api/queue/bulk \
  -H "Authorization: Bearer SEU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [
      { "connectorId": "c1", "to": "5511999...", "message": "Msg 1", "messageType": "MARKETING" },
      { "connectorId": "c1", "to": "5511988...", "message": "Msg 2", "messageType": "MARKETING" }
    ]
  }'
GET/api/queue/list

Listar Fila de Mensagens

Retorna mensagens da fila com paginação e filtros. Ordenação: mais recentes primeiro. Útil para monitorar envios e consultar status por externalId.

Query params

statusstring

Filtra por status: PENDING, WAITING, PROCESSING, SENT, FAILED, CANCELED, PENDING_APPROVAL. Omita para todos.

Ex: SENT

pageinteger

Página. Padrão: 1

Ex: 1

limitinteger

Itens por página (máx. 250). Padrão: 250

Ex: 50

externalIdstring

Filtra pelo ID externo que você enviou no POST /send.

Ex: PEDIDO-12345

searchstring

Busca por texto no destinatário, nome do contato ou corpo da mensagem.

connectorIdstring

Filtra por ID do conector.

messageTypestring

Filtra por tipo: GERAL, NOTIFICATION, MARKETING, TRANSACTIONAL, SUPPORT, REMINDER.

dateFromstring

Data inicial (ISO 8601).

Ex: 2024-01-01T00:00:00Z

dateTostring

Data final (ISO 8601).

Ex: 2024-01-31T23:59:59Z

Exemplo

curl -X GET "https://sendsync.com.br/api/queue/list?status=SENT&page=1&limit=50&externalId=PEDIDO-12345" \
  -H "Authorization: Bearer SEU_TOKEN"

Resposta

{
  "data": [
    {
      "id": "uuid",
      "to": "5511999998888",
      "message": "Texto da mensagem",
      "status": "SENT",
      "priority": 5,
      "messageType": "TRANSACTIONAL",
      "connectorId": "uuid-conector",
      "createdAt": "2024-01-22T14:30:00.000Z",
      "sentAt": "2024-01-22T14:30:05.000Z",
      "externalId": "PEDIDO-12345",
      "attachments": [{ "id": "...", "url": "...", "originalFileName": "file.pdf" }]
    }
  ],
  "meta": { "total": 100, "page": 1, "limit": 50, "pages": 2 }
}
GET/api/connectors

Listar conectores

Retorna os conectores da sua empresa (WhatsApp, E-mail). Use o id em POST /api/queue/send e em POST /api/whatsapp/connect/:connectorId. Credenciais e config sensíveis não são retornadas.

curl -X GET "https://sendsync.com.br/api/connectors" \
  -H "Authorization: Bearer SEU_TOKEN" \
  -H "X-API-Key: SUA_API_KEY"

Resposta: array de objetos com id, name, type (WHATSAPP, EMAIL), status (ACTIVE, PAUSED, DISCONNECTED), companyId.

POST/api/whatsapp/connect/:connectorId

Conectar sessão WhatsApp

Inicia a conexão do conector WhatsApp e retorna o QR Code (em base64) para ser escaneado no aplicativo WhatsApp do celular. O connectorId é o ID do conector retornado em GET /api/connectors.

Resposta: { status, qrCode? } — quando status for QR_CODE, use o qrCode (data URL) para exibir a imagem e o usuário escaneia no WhatsApp.

curl -X POST https://sendsync.com.br/api/whatsapp/connect/SEU_CONNECTOR_ID \
  -H "Authorization: Bearer SEU_TOKEN" \
  -H "X-API-Key: SUA_API_KEY"

WhatsApp — Status e desconexão

GET/api/whatsapp/status/:connectorId

Retorna o status da conexão: CONNECTED, DISCONNECTED ou QR_CODE. Pode incluir phone quando conectado.

POST/api/whatsapp/disconnect/:connectorId

Desconecta a sessão WhatsApp e remove os arquivos de sessão. Requer autenticação.

Contatos (CRM)

Endpoints para manter um cadastro de contatos (identificador + tipo WHATSAPP/EMAIL + nome). Útil para atualizar o nome ao enviar mensagem e para listar/inativar contatos.

  • GET /api/contacts — Lista todos os contatos da empresa.
  • POST /api/contacts — Cria ou atualiza contato (body: identifier, type, name?).
  • PATCH /api/contacts/:id/status — Ativa/inativa (body: active, reason?).
  • DELETE /api/contacts/:id — Remove o contato.

Todos exigem autenticação (JWT ou X-API-Key).

GET/api/queue/template

Baixar template Excel

Retorna um arquivo Excel (.xlsx) com o formato esperado para importação em massa de mensagens (usado junto ao fluxo de importação do painel). Requer autenticação.

curl -X GET "https://sendsync.com.br/api/queue/template" \
  -H "Authorization: Bearer SEU_TOKEN" \
  -o template_mensagens.xlsx

Guia: Prevenção de Bloqueios

Spintax & Variáveis

Jamais envie o mesmo texto hash idêntico para milhares de pessoas. Use variações como 'Olá', 'Oi', 'Tudo bem' e inclua o nome do cliente.

Limitadores de Velocidade

Comece devagar. O sistema aplica delay aleatório (min-max) entre mensagens, mas respeite o limite de aquecimento do chip.

Saúde do Chip (Health Score)

O WhatsApp monitora interações. Se você envia 1000 msgs e recebe 0 respostas (ou muitos bloqueios), seu score cai.

Warm-up Gradual

Dia 1: 50 msgs. Dia 2: 100 msgs. Dia 3: 200 msgs. Aumente 30-50% ao dia até o volume desejado.