Sua primeira chamada
Liste as conexões que a sua chave alcança e confira se você tem capacidade antes de provisionar outra.
URL base https://developers.wasync.app/api/v1.
Liste as conexões que você pode usar
curl https://developers.wasync.app/api/v1/connections \
-H "Authorization: Bearer $WASYNC_API_KEY"Só aparecem conexões com licença ativa. Cada uma traz um provider com valor
qr ou cloud_api, um id (um cuid — o identificador estável que você deve
guardar junto ao registro do seu próprio cliente) e um status. Usa
whatsapp.read.
Já chama cloudapi.wasync.app/api/v1? Continue chamando.
developers.wasync.app é o host canônico, mas cloudapi.wasync.app é um alias
permanente para exatamente a mesma API — mesmas chaves, mesmos caminhos, mesmas
respostas — e continua válido por tempo indeterminado. Nenhuma integração
existente precisa mudar nada. Os endpoints OAuth, os documentos /.well-known/…
e a URL do servidor MCP são identificadores de protocolo registrados pelos
clientes: eles ficam em cloudapi.wasync.app de propósito.
Confira a sua capacidade antes de prometê-la
curl https://developers.wasync.app/api/v1/account \
-H "Authorization: Bearer $WASYNC_API_KEY"{
"slots": {
"total": 30,
"used": 28,
"available": 2,
"nextExpiry": "2027-08-08T09:00:00.000Z"
},
"connections": {
"total": 28,
"connected": 27,
"needsReconnect": 1
}
}slots.available mostra se você pode cadastrar mais um número agora, e
nextExpiry é a data antes da qual você precisa faturar o seu próprio cliente —
assim, um slot nunca expira na mão de quem já pagou a você.
connections.needsReconnect conta os números que, neste momento, esperam que o
dono escaneie um QR; assine os eventos de conexão para
ser avisado assim que esse número mudar, em vez de consultar o tempo todo. Usa
whatsapp.read.
Um slot é capacidade, não um número de telefone. Se você exclui uma conexão, o slot volta para o seu conjunto com o tempo que ainda restava nele — o próximo número que você conectar o aproveita automaticamente. É isso que permite transferir um slot pago de um cliente que está saindo para um novo, sem pagar duas vezes.
Conecte um número
Uma única chamada cria a conexão e devolve um QR code para escanear. Ela funciona em um workspace novinho, sem nenhuma conexão — com uma chave, não há nada para clicar antes em um portal.
curl -X POST https://developers.wasync.app/api/v1/connections \
-H "Authorization: Bearer $WASYNC_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"label":"Support line"}'{
"connection": {
"id": "conn_8f3a21",
"status": "connecting",
"qr": "data:image/png;base64,iVBORw0KGgo…"
}
}O QR que você recebe aqui não continua válido
O WhatsApp troca o código de pareamento a cada 20 segundos, mais ou menos;
por isso, o qr da resposta de criação já está vencido poucos segundos depois de
exibido. A falha é silenciosa: o telefone nunca pareia e nada na tela explica o
motivo. Consulte GET /connections/{id} a cada 3–5 s e renderize de novo o qr
de cada resposta. Não o guarde em cache e não esconda a atualização atrás de um
botão que o usuário precise apertar. Código de pareamento e QR
traz a alternativa para um único dispositivo.
Usa whatsapp.manage. As conexões criadas assim são números qr; os números
cloud_api são cadastrados pelo Meta Embedded Signup. Este endpoint vale apenas
para workspaces independentes — um portal Bitrix24 recebe
403 forbidden_portal_kind, porque nele as conexões são criadas pelo
administrador do portal dentro do WASync. Envie um Idempotency-Key: criar uma
conexão consome um slot pago, e uma nova tentativa depois de um timeout, sem
essa chave, faz você comprar dois.
Erros e idempotência traz os quatro
casos que você precisa tratar.
Crie uma conta e uma chave
Duas formas de obter uma chave — dentro do Bitrix24 ou no console de desenvolvedores, com e-mail e senha. Sem redirect URI, sem PKCE, sem tela de consentimento.
Sua primeira mensagem
Envie um texto pelo WhatsApp, leia a conversa de volta e deixe o cliente com os dois tiques azuis.