waiaconnect

Documentação / Essencial

Enviar uma mensagem de texto

POST /v1/messages

Markdown

POST /v1/messages com type: "text". Devolve 202 (aceito, NÃO enviado): entra na fila e é drenado em ritmo controlado. O header Idempotency-Key (UUID) é obrigatório — repetir com a mesma key devolve o mesmo registro (200) em vez de duplicar. Identifique o número emissor com connectionId (conn_…) ou from (phoneNumberId).

curl -X POST https://api.waiaconnect.com/v1/messages \
  -H "Authorization: Bearer wc_live_YOUR_API_KEY" \
  -H "Idempotency-Key: REPLACE-WITH-A-UNIQUE-ID" \
  -H "Content-Type: application/json" \
  -d '{"connectionId":"conn_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","to":"5493511234567","type":"text","text":{"body":"Hello from WAIA Connect"}}'
const res = await fetch("https://api.waiaconnect.com/v1/messages", {
  method: "POST",
  headers: {
    "Authorization": "Bearer wc_live_YOUR_API_KEY",
    "Idempotency-Key": crypto.randomUUID(),
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
  "connectionId": "conn_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "to": "5493511234567",
  "type": "text",
  "text": {
    "body": "Hello from WAIA Connect"
  }
})
});
console.log(await res.json()); // { id: "msg_…", status: "queued" }
<?php
$ch = curl_init("https://api.waiaconnect.com/v1/messages");
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer wc_live_YOUR_API_KEY",
    "Idempotency-Key: " . bin2hex(random_bytes(16)),
    "Content-Type: application/json",
  ],
  CURLOPT_POSTFIELDS => json_encode(["connectionId" => "conn_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","to" => "5493511234567","type" => "text","text" => ["body" => "Hello from WAIA Connect"]]),
]);
echo curl_exec($ch);
import requests, uuid
res = requests.post("https://api.waiaconnect.com/v1/messages",
  headers={
    "Authorization": "Bearer wc_live_YOUR_API_KEY",
    "Idempotency-Key": str(uuid.uuid4()),
  },
  json={"connectionId":"conn_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","to":"5493511234567","type":"text","text":{"body":"Hello from WAIA Connect"}})
print(res.json())  # {"id": "msg_…", "status": "queued"}

De onde saem esses dois: o conn_… é o campo id de GET /v1/connections (e pode ser copiado na ficha do número, no painel); o phoneNumberId é o campo phoneNumberId dessa mesma resposta. Um dos dois é obrigatório, mesmo que você tenha um só número (se não mandar nenhum: CONNECTION_REQUIRED).

to vai no formato E.164 (só dígitos, 8–15). No exemplo vai o seu próprio número, para você poder testar contra si mesmo.

Pré-visualização de um link: acrescente preview_url: true dentro de text e o WhatsApp tenta mostrar o cartão do primeiro link do corpo. Quem o monta é a Meta, com os metadados dessa página: se ela não os tiver, a mensagem sai igual, sem pré-visualização — não é um erro. É opcional; sem o campo, tudo funciona como sempre.

Resposta: { id: "msg_…", status: "queued" } (ou held com um reason). O estado é acompanhado com GET /v1/messages/:id.