API de Integração · WhatsApp Unofficial

Envie WhatsApp via API de Integração

Endpoint sem estado para enviar mensagens no WhatsApp do seu aplicativo/sistema usando Local API Key — sem JWT, sem fluxo de login. Ideal para integração de backend, automação (Zapier/n8n) ou webhook personalizado.

Resumo

A Integration API cshub é um caminho externo para enviar mensagens WhatsApp do seu backend / ferramenta de automação. Use a Local API Key por empresa para autenticação (comportamento espelhado do whatscrmhub Laravel). Este endpoint é separado do endpoint interno usado pelo painel + aplicativo móvel cshub.

Base URL

https://api.cshub.id/api/v1

Content-Type

application/json

Autenticação

Autentique usando a Local API Key no corpo da requisição (campo `api_key`), não no cabeçalho HTTP. Cada empresa tem 1 Local API Key (UUID) que é gerada automaticamente quando a empresa é criada.

Sem JWT, sem cabeçalho de token

Diferente do endpoint interno do painel. Basta enviar `api_key` no corpo, o servidor resolve a empresa a partir daí. Para segurança, trate a Local API Key como uma senha — não a comite em repositórios públicos, não a exponha no frontend.

Como obter a Local API Key

  1. Faça login no painel cshub em /app.
  2. Abra o menu Configurações → API Key (ou Perfil → Integração).
  3. Copie a Local API Key. Pode regenerar a qualquer momento (a antiga se torna inválida imediatamente).

Endpoint

Um endpoint para todos os tipos de mensagens WhatsApp Não Oficiais (whatsmeow). Escolha o método = text para mensagens livres, ou método = template para mensagens de um template já criado no painel.

POST https://api.cshub.id/api/v1/integration/whatsapp/send-message

Autenticação

Local API Key no corpo (`api_key`)

Limite de taxa

Por dispositivo (de acordo com o limite daily_send do dispositivo)

Campo corpo

Corpo da requisição no formato JSON. Os campos abaixo têm paridade com o whatscrmhub Laravel — se você estiver migrando de uma versão antiga, a forma da requisição é idêntica.

Field Type Required Descrição
api_keystring✅Local API Key da empresa (UUID). Obtida nas Configurações do painel cshub.
phonestring✅Número de destino no formato internacional sem "+" (ex. 6281234567890), ou JID de grupo se `is_group` = true.
methodstring✅text, template
textstringmethod=textConteúdo da mensagem de texto. Obrigatório se o método = text.
templatestringmethod=templateID do Template de Mensagem que já foi criado no painel cshub. Obrigatório se o método = template.
variablesobject—Objeto literal `{placeholder: value}` para substituição no template. Exemplo: `{"$name":"Budi"}` substituirá todos os `$name` na mensagem template por "Budi".
device_keystringdependente *UUID do dispositivo WhatsApp que será usado para enviar.
is_groupboolean—Defina como verdadeiro se `phone` for JID de grupo (ex. 120363...@g.us).

Exemplo de requisição

1. Enviar mensagem de texto simples

cURL
curl -X POST "https://api.cshub.id/api/v1/integration/whatsapp/send-message" \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "<LOCAL_API_KEY>",
    "device_key": "<DEVICE_ID>",
    "phone": "6281234567890",
    "method": "text",
    "text": "Halo, makasih udah order ya!"
  }'

2. Enviar mensagem de template com substituição de variáveis

cURL
curl -X POST "https://api.cshub.id/api/v1/integration/whatsapp/send-message" \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "<LOCAL_API_KEY>",
    "device_key": "<DEVICE_ID>",
    "phone": "6281234567890",
    "method": "template",
    "template": "<TEMPLATE_ID>",
    "variables": {
      "$name": "Pak Budi",
      "$order_id": "INV-20260602-001"
    }
  }'

3. Enviar para grupo (usando JID de grupo)

cURL
curl -X POST "https://api.cshub.id/api/v1/integration/whatsapp/send-message" \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "<LOCAL_API_KEY>",
    "device_key": "<DEVICE_ID>",
    "phone": "120363012345678901@g.us",
    "method": "text",
    "text": "Pengumuman: order minggu ini ditutup pukul 17:00.",
    "is_group": true
  }'

Resposta de sucesso (200 OK)

200 OK
{
  "status": true,
  "message": "berhasil mengirim pesan"
}

Código de erro & solução

Status Causa Solução
401Api Key Cannot be recognizedVerifique se o api_key está correto (copie novamente do painel) e se a empresa não está suspensa.
401Device tidak di temukanVerifique se o device_key é válido + se o dispositivo está ativo. Faça login novamente no dispositivo via QR/código de pareamento no painel se necessário.
401Template tidak dikenaliVerifique se o ID do template está correto e pertence à sua empresa (template = veja a lista no painel → Dados Mestres → Templates).
422Daily send limit habisAguarde o reset diário (00:00 WIB) ou use outro dispositivo. Aumente o limit_per_day nas configurações do dispositivo se necessário.
422Validation gagal (phone/method/text)Certifique-se de que o telefone está no formato internacional sem "+" e que o método é um dos text/template.
502WhatsApp service unavailableO serviço WhatsApp está fora do ar. Tente novamente em alguns minutos ou verifique o status do dispositivo no painel.

Notas & limitações

  • Há um limite daily_send por dispositivo. Evite enviar mais de 10 mensagens/segundo de um único dispositivo para evitar bloqueio do WhatsApp.
  • Se as configurações da sua empresa definirem `api_device_use = required`, o campo `device_key` É OBRIGATÓRIO. Se definido como opcional, o servidor escolherá automaticamente um dispositivo ativo de acordo com a estratégia (`sequence` / `spin` / `random` nas configurações `whatsapp_sender_notif`).
  • Substitua variáveis usando literal `str_replace` — o placeholder pode ser qualquer string (ex. `$name`, `{name}`, `[NAME]`). O importante é que seja exatamente igual ao que está na mensagem template.
  • Sempre no formato sem "+" e sem espaços/tracos. Exemplo: 6281234567890 (Indonésia), 60123456789 (Malásia). Para grupos: use o JID completo com o sufixo `@g.us`.
  • Iteração MVP: ainda não suporta upload de arquivo binário via multipart/form-data. Para enviar mídia, use method=template com um template que já tenha a imagem configurada no painel.

Integration API vs Internal Panel API

cshub possui dois caminhos para enviar mensagens que foram intencionalmente separados. A Integration API é para desenvolvedores de terceiros / automação; a Internal API é para o painel web + aplicativo móvel cshub. Público diferente, autenticação diferente, forma de resposta diferente.

Integration API Internal Panel API
PúblicoDesenvolvedor backend, Zapier, n8n, integração personalizadaPainel web cshub-fe, aplicativo móvel cshub-mobile
URL/integration/whatsapp/send-message/app/device/{id}/chats/send
Autenticaçãoapi_key di bodyJWT Bearer + X-Business-ID + CSRF
Forma de resposta{status, message}{success, message, data}

Pronto para integrar?

Faça login no painel cshub, obtenha a Local API Key nas Configurações e integre o WhatsApp ao seu sistema.