CRPRO HubEntrar no painel

Conexão pública

GET
/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âmetroTipoObrigatórioDescrição
tokenstringSimToken do link de conexão (hub_link_...), recebido pelo cliente final.
Requisição
curl https://crprohub.com/api/v1/public/connect/hub_link_EXEMPLO_NAO_REAL
Resposta
{
  "data": {
    "channel_id": "9f6a9c1e-2f3d-4a5b-8c7d-1e2f3a4b5c6d",
    "channel_name": "Atendimento",
    "channel_type": "whatsapp",
    "status": "draft",
    "can_connect": true,
    "platform_name": "WhatsApp Business"
  }
}
POST
/api/v1/public/connect/{token}/complete

Conclui 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âmetroTipoObrigatórioDescrição
tokenstringSimToken do link de conexão (hub_link_...), o mesmo do GET.

Corpo

ParâmetroTipoObrigatórioDescrição
codestringNãoCódigo OAuth devolvido pela Meta após o cliente autorizar. Obrigatório no primeiro envio; incompatível com selectionToken.
wabaIdstringNãoID da WABA autorizada. Obrigatório junto de code.
phoneNumberIdstringNãoID 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.
selectionTokenstringNãoToken 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.
pinstringNãoPIN 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.
semPinbooleanNãoSó 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.
Requisição
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"}'
Resposta
{
  "data": {
    "connected": true,
    "number": "+55 21 99999-9999",
    "verified_name": "Minha Empresa",
    "coexistence": false
  }
}