Conexão pública
/api/v1/public/connect/{token}Resolve um link de conexão para o cliente final
Não usa credencial nenhuma — o que protege esta rota é o próprio token do link (gerado por POST /channels/{id}/connect-link): tem prazo de 7 dias, é de uso único e some assim que a conexão é concluída ou o link é substituído por outro. Um token inválido, expirado, já usado ou de um canal arquivado/suspenso responde 404, sem distinguir qual desses motivos foi.
- Autenticação
- Público, sem credencial
- Escopo
- Não exige escopo
- Limite
- 20 a cada 15 minutos por IP
Parâmetros de caminho
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| token | string | Sim | Token do link de conexão (hub_link_...), recebido pelo cliente final. |
curl https://crprohub.com/api/v1/public/connect/hub_link_EXEMPLO_NAO_REAL
{
"data": {
"channel_id": "9f6a9c1e-2f3d-4a5b-8c7d-1e2f3a4b5c6d",
"channel_name": "Atendimento",
"channel_type": "whatsapp",
"status": "draft",
"can_connect": true,
"platform_name": "WhatsApp Business"
}
}/api/v1/public/connect/{token}/completeConclui a conexão iniciada pelo link
Não usa credencial nenhuma — o que protege esta rota é o mesmo token do link, de uso único e com prazo, validado de novo aqui. O corpo aceita dois formatos: o primeiro envio, com code (o código OAuth devolvido pela Meta) e wabaId; e o envio final, com selectionToken e phoneNumberId, usado para escolher o número e para informar o PIN. O PIN é pedido no FIM da conexão, e só quando o número ainda não está registrado na Cloud API: se a Meta já reporta o número como CONNECTED/CLOUD_API, ele conecta direto e nenhum PIN é pedido. Quando há mais de um número e phoneNumberId não veio no primeiro envio, a resposta pede a escolha (selection_required: true, com a lista de numbers e um selection_token válido por 20 minutos). Quando o número escolhido ainda precisa de registro, a resposta pede o PIN (pin_required: true, com selection_token, phone_number_id e tentativas_restantes) e nada é gravado no canal — se o cliente desistir ali, o link continua não usado. PIN divergente responde pin_incorreto: true com tentativas_restantes, e a sessão continua válida para uma nova tentativa; esgotadas as 3, ou com semPin: true, o vínculo é salvo assim mesmo (connected: false, registration_pending: true, canal no status connected, sem emitir channel.connected) e o registro pode ser retomado sem refazer a autorização na Meta. Um número que já está conectado a outro canal responde 409 PHONE_ALREADY_CONNECTED.
- Autenticação
- Público, sem credencial
- Escopo
- Não exige escopo
- Limite
- 15 a cada 15 minutos por IP
Parâmetros de caminho
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| token | string | Sim | Token do link de conexão (hub_link_...), o mesmo do GET. |
Corpo
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| code | string | Não | Código OAuth devolvido pela Meta após o cliente autorizar. Obrigatório no primeiro envio; incompatível com selectionToken. |
| wabaId | string | Não | ID da WABA autorizada. Obrigatório junto de code. |
| phoneNumberId | string | Não | ID do número a ativar. Opcional no primeiro envio quando a conta só tem um número elegível; obrigatório no segundo envio, junto de selectionToken. |
| selectionToken | string | Não | Token devolvido por um primeiro envio com selection_required: true ou pin_required: true. Usado no envio final, junto de phoneNumberId, no lugar de code e wabaId. |
| pin | string | Não | PIN da verificação em duas etapas do número, exatamente 6 dígitos. Só é necessário quando a resposta anterior devolveu pin_required: true — número já registrado na Cloud API dispensa. Se o número nunca teve verificação em duas etapas, este valor a define e passa a ser exigido em toda reconexão; se já tinha (número vindo do app WhatsApp Business, ou registrado antes em outro provedor), precisa ser o PIN original — divergir devolve o erro #133005 da Meta. O Hub não guarda cópia. |
| semPin | boolean | Não | Só no envio final. Conclui a conexão sem registrar o número na Cloud API, para o caso de o cliente não ter como recuperar o PIN. O canal é salvo no status connected e o número não envia mensagens até o registro ser refeito. |
curl -X POST https://crprohub.com/api/v1/public/connect/hub_link_EXEMPLO_NAO_REAL/complete \
-H "Content-Type: application/json" \
-d '{"code":"AQD_EXEMPLO_CODE","wabaId":"109876543210987"}'{
"data": {
"connected": true,
"number": "+55 21 99999-9999",
"verified_name": "Minha Empresa",
"coexistence": false
}
}