Sua primeira mensagem
Envie um texto pelo WhatsApp, leia a conversa de volta e deixe o cliente com os dois tiques azuis.
Enviar um texto
curl -X POST https://developers.wasync.app/api/v1/messages \
-H "Authorization: Bearer $WASYNC_API_KEY" \
-H "Content-Type: application/json" \
-d '{"connectionId":"conn_8f3a21","to":"40700000000","text":"Hi from my app 👋"}'{
"messageId": "cmqj3k2ab0001xyz",
"waMessageId": "[email protected]_3EB0A1B2C3",
"status": "sent"
}to aceita apenas dígitos no formato internacional, sem + — por exemplo, 40700000000. text tem no máximo
4096 caracteres. Para mídia, envie media em vez de text:
{ filename, mimetype, data (base64, ≤ 16 MB), caption? } — exatamente um dos
dois. Notas de voz usam mimetype: audio/ogg e um nome de arquivo voice-*.ogg. Usa
whatsapp.send.
Defina o timeout HTTP para pelo menos 180 segundos
Um envio qr normalmente leva de 1 a 7 s, até cerca de 20 s para textos longos, e o
caminho de autorrecuperação pode levar ~2,5 minutos. Um envio cloud_api leva cerca de 1 s. Um envio lento
não é uma falha — um cliente que desiste aos 30 s e tenta de novo envia a mensagem
duas vezes ao cliente final. Passe sempre um idempotencyKey (um UUID por envio lógico)
e tente de novo com o mesmo.
Dois ids — use o certo para relacionar
A resposta traz dois identificadores, e eles não são intercambiáveis.
| Id | Onde aparece | Para que usar |
|---|---|---|
messageId (um cuid) | messageId no POST, id no GET, message.id nos dois webhooks | O único id para relacionar registros. Guarde-o ao enviar, use-o para deduplicar e para casar os eventos message.status. |
waMessageId | waMessageId (REST), wa_id (webhooks), wa_message_id (envio de mídia) | Chamados de suporte e depuração. Pode ser null — nunca use para relacionar nem deduplicar. |
Vale tratar um caso degradado no código: { "messageId": null, "waMessageId": "…", "status": …, "persisted": false } com HTTP 200 significa que a mensagem foi
entregue, mas não foi persistida. Não tente de novo.
Ler a conversa de volta
curl "https://developers.wasync.app/api/v1/messages?connectionId=conn_8f3a21&limit=20" \
-H "Authorization: Bearer $WASYNC_API_KEY"{
"messages": [
{
"id": "cmqj3k2ab0001xyz",
"waMessageId": "[email protected]_3EB0A1B2C3",
"connectionId": "conn_8f3a21",
"direction": "outgoing",
"text": "Hi from my app 👋",
"mediaUrl": null,
"mediaType": null,
"status": "delivered",
"errorMessage": null,
"createdAt": "2026-07-22T10:00:00.000Z"
}
],
"nextCursor": "cmqj3k2ab0001xyz",
"hasMore": true
}As mais recentes vêm primeiro, com paginação por cursor: limit vai de 1 a 100 (padrão 20), e cursor
recebe o nextCursor da resposta anterior. Usa whatsapp.read.
Deixe o cliente com os tiques azuis
curl -X POST https://developers.wasync.app/api/v1/messages/read \
-H "Authorization: Bearer $WASYNC_API_KEY" \
-H "Content-Type: application/json" \
-d '{"connectionId":"conn_8f3a21","phone":"40700000000"}'Chame este endpoint quando um operador abrir a conversa na sua interface — caso contrário,
ninguém abre o chat no WhatsApp, as mensagens do cliente continuam com dois tiques
cinza e a conversa parece ignorada. O corpo é
{ connectionId, phone?, messageId? }, com pelo menos um entre phone /
messageId (o cuid de uma mensagem recebida; messageId prevalece quando os dois
são informados). Usa whatsapp.send, e não whatsapp.read, porque transmite um
recibo de leitura ao cliente. É idempotente, sem chave e sem limite de requisições. Retorna
{ "ok": true, "marked": 3 }.
Próximos passos
- Seja avisado sobre mensagens recebidas em vez de fazer polling: Webhooks.
- Monte tudo sem código: n8n ou MCP.
- Gere um cliente a partir do contrato:
npx @openapitools/openapi-generator-cli generate -i https://developers.wasync.app/openapi.json -g typescript-fetch -o ./wasync-client
Sua primeira chamada
Liste as conexões que a sua chave alcança e confira se você tem capacidade antes de provisionar outra.
Produto
O app WASync dentro do Bitrix24, documentado recurso por recurso. Estas são as páginas para as quais a lista "Novidades" do app aponta, e elas são mantidas atualizadas conforme os recursos mudam.