CRPRO HubEntrar no painel

Canais

GET
/api/v1/channels

Lista os canais da organização

Devolve os canais ativos da organização, mais recentes primeiro. Canais arquivados não aparecem aqui nem em nenhuma outra rota de canal — depois do DELETE, o id passa a responder 404 em todo o resto da API.

Autenticação
Sessão do painel, Chave de API
Escopo
channels:read
Limite
120 requisições por minuto por organização e credencial
Requisição
curl https://crprohub.com/api/v1/channels \
  -H "Authorization: Bearer hub_pk_EXEMPLO_NAO_REAL"
Resposta
{
  "data": {
    "channels": [
      {
        "id": "9f6a9c1e-2f3d-4a5b-8c7d-1e2f3a4b5c6d",
        "name": "Atendimento",
        "external_id": null,
        "type": "whatsapp",
        "status": "active",
        "waba_id": "109876543210987",
        "phone_number_id": "123456789012345",
        "display_phone_number": "+55 21 99999-9999",
        "verified_name": "Minha Empresa",
        "quality_rating": "GREEN",
        "coexistence": false,
        "subscribed_ok": true,
        "created_at": "2026-08-01T12:00:00.000Z",
        "updated_at": "2026-08-20T09:30:00.000Z"
      }
    ]
  }
}
POST
/api/v1/channels

Cria um canal e emite o token do canal uma única vez

O canal nasce em draft, sem WABA nem número — a conexão com a Meta acontece depois, pelo link de /connect-link. O channel_token (hub_ch_...) vem só nesta resposta: não é reemitido, e perdê-lo obriga a rotacionar com /regenerate-token. Responde 402 se a assinatura não permite criar canais e 403 se o limite de canais do plano já foi atingido.

Autenticação
Sessão do painel, Chave de API
Escopo
channels:write
Limite
120 requisições por minuto por organização e credencial

Corpo

ParâmetroTipoObrigatórioDescrição
namestringSimNome do canal, de 1 a 100 caracteres.
typeenumNãoSó aceita "whatsapp". Pode ser omitido.
external_idstringNãoIdentificador externo opcional, até 200 caracteres. Precisa ser único na organização; duplicado responde 409.
Requisição
curl -X POST https://crprohub.com/api/v1/channels \
  -H "Authorization: Bearer hub_pk_EXEMPLO_NAO_REAL" \
  -H "Content-Type: application/json" \
  -d '{"name":"Atendimento"}'
Resposta
{
  "data": {
    "channel": {
      "id": "9f6a9c1e-2f3d-4a5b-8c7d-1e2f3a4b5c6d",
      "name": "Atendimento",
      "external_id": null,
      "type": "whatsapp",
      "status": "draft",
      "waba_id": null,
      "phone_number_id": null,
      "display_phone_number": null,
      "verified_name": null,
      "quality_rating": null,
      "coexistence": false,
      "subscribed_ok": false,
      "created_at": "2026-08-21T12:00:00.000Z",
      "updated_at": "2026-08-21T12:00:00.000Z"
    },
    "channel_token": "hub_ch_EXEMPLO_NAO_REAL"
  }
}
GET
/api/v1/channels/{id}

Consulta um canal

Um id de outro canal, de outra organização ou de um canal já arquivado responde 404 — não 403.

Autenticação
Sessão do painel, Chave de API
Escopo
channels:read
Limite
120 requisições por minuto por organização e credencial

Parâmetros de caminho

ParâmetroTipoObrigatórioDescrição
idUUIDSimIdentificador do canal.
Requisição
curl https://crprohub.com/api/v1/channels/CHANNEL_UUID \
  -H "Authorization: Bearer hub_pk_EXEMPLO_NAO_REAL"
Resposta
{
  "data": {
    "channel": {
      "id": "9f6a9c1e-2f3d-4a5b-8c7d-1e2f3a4b5c6d",
      "name": "Atendimento",
      "external_id": null,
      "type": "whatsapp",
      "status": "active",
      "waba_id": "109876543210987",
      "phone_number_id": "123456789012345",
      "display_phone_number": "+55 21 99999-9999",
      "verified_name": "Minha Empresa",
      "quality_rating": "GREEN",
      "coexistence": false,
      "subscribed_ok": true,
      "created_at": "2026-08-01T12:00:00.000Z",
      "updated_at": "2026-08-20T09:30:00.000Z"
    }
  }
}
PATCH
/api/v1/channels/{id}

Atualiza o nome e as configurações do canal

É preciso enviar name ou external_id — corpo vazio ({}) responde 400. Campos omitidos ficam como estavam; enviar external_id: null remove o valor atual.

Autenticação
Sessão do painel, Chave de API
Escopo
channels:write
Limite
120 requisições por minuto por organização e credencial

Parâmetros de caminho

ParâmetroTipoObrigatórioDescrição
idUUIDSimIdentificador do canal.

Corpo

ParâmetroTipoObrigatórioDescrição
namestringNãoNovo nome, de 1 a 100 caracteres.
external_idstringNãoNovo identificador externo, até 200 caracteres, ou null para remover o atual.
Requisição
curl -X PATCH https://crprohub.com/api/v1/channels/CHANNEL_UUID \
  -H "Authorization: Bearer hub_pk_EXEMPLO_NAO_REAL" \
  -H "Content-Type: application/json" \
  -d '{"name":"Atendimento — Loja 2"}'
Resposta
{
  "data": {
    "channel": {
      "id": "9f6a9c1e-2f3d-4a5b-8c7d-1e2f3a4b5c6d",
      "name": "Atendimento — Loja 2",
      "external_id": null,
      "type": "whatsapp",
      "status": "active",
      "waba_id": "109876543210987",
      "phone_number_id": "123456789012345",
      "display_phone_number": "+55 21 99999-9999",
      "verified_name": "Minha Empresa",
      "quality_rating": "GREEN",
      "coexistence": false,
      "subscribed_ok": true,
      "created_at": "2026-08-01T12:00:00.000Z",
      "updated_at": "2026-08-21T12:05:00.000Z"
    }
  }
}
DELETE
/api/v1/channels/{id}

Arquiva o canal

É um soft delete: o registro continua no banco, mas some de toda a API (GET, mensagens, mídia, templates passam a responder 404 para este id). Não há endpoint para desarquivar — é preciso criar um canal novo.

Autenticação
Sessão do painel, Chave de API
Escopo
channels:write
Limite
120 requisições por minuto por organização e credencial

Parâmetros de caminho

ParâmetroTipoObrigatórioDescrição
idUUIDSimIdentificador do canal.
Requisição
curl -X DELETE https://crprohub.com/api/v1/channels/CHANNEL_UUID \
  -H "Authorization: Bearer hub_pk_EXEMPLO_NAO_REAL"
Resposta
{
  "data": {
    "archived": true
  }
}
POST
/api/v1/channels/{id}/connect-link

Gera um link de conexão para o cliente final

O link expira em 7 dias e serve para o cliente final autorizar o número dele direto na Meta, sem precisar de credencial do painel. Cada chamada gera um connect_token novo e invalida qualquer link anterior ainda não usado — não há como recuperar um link já gerado, só criar outro.

Autenticação
Sessão do painel, Chave de API
Escopo
channels:write
Limite
120 requisições por minuto por organização e credencial

Parâmetros de caminho

ParâmetroTipoObrigatórioDescrição
idUUIDSimIdentificador do canal.
Requisição
curl -X POST https://crprohub.com/api/v1/channels/CHANNEL_UUID/connect-link \
  -H "Authorization: Bearer hub_pk_EXEMPLO_NAO_REAL"
Resposta
{
  "data": {
    "connect_token": "hub_link_EXEMPLO_NAO_REAL",
    "expires_at": "2026-08-28T12:00:00.000Z",
    "connect_url": "https://crprohub.com/connect/hub_link_EXEMPLO_NAO_REAL"
  }
}
GET
/api/v1/channels/{id}/diagnostics

Valida token, número e assinatura de webhooks sem expor segredos

Faz três checagens ao vivo na Meta (validade do token, número acessível, app inscrito na WABA) e nunca devolve o token em si, só checks booleanos e recommendations. Exige que o canal já esteja conectado (com waba_id e phone_number_id); senão responde 409 CHANNEL_NOT_CONNECTED. O token hub_ch_... do próprio canal também autentica esta chamada, mas nunca autoriza consultar outro canal.

Autenticação
Sessão do painel, Chave de API, Token do canal
Escopo
channels:read
Limite
120 requisições por minuto por organização e credencial

Parâmetros de caminho

ParâmetroTipoObrigatórioDescrição
idUUIDSimIdentificador do canal.
Requisição
curl https://crprohub.com/api/v1/channels/CHANNEL_UUID/diagnostics \
  -H "Authorization: Bearer hub_ch_EXEMPLO_NAO_REAL"
Resposta
{
  "data": {
    "diagnostics": {
      "overall": "healthy",
      "checked_at": "2026-08-21T12:10:00.000Z",
      "checks": {
        "token_valid": true,
        "phone_accessible": true,
        "app_subscribed": true
      },
      "channel": {
        "id": "9f6a9c1e-2f3d-4a5b-8c7d-1e2f3a4b5c6d",
        "phone_number_id": "123456789012345",
        "waba_id": "109876543210987",
        "quality_rating": "GREEN",
        "status": "CONNECTED",
        "verified_name": "Minha Empresa"
      },
      "recommendations": []
    }
  }
}
POST
/api/v1/channels/{id}/regenerate-token

Rotaciona o token do canal; o novo valor aparece uma única vez

O token anterior é revogado imediatamente: qualquer integração ainda usando o hub_ch_... antigo passa a responder 401 no mesmo instante. O novo valor só aparece nesta resposta — se você perdê-lo, o único jeito de recuperar é rotacionar de novo.

Autenticação
Sessão do painel, Chave de API
Escopo
channels:write
Limite
120 requisições por minuto por organização e credencial

Parâmetros de caminho

ParâmetroTipoObrigatórioDescrição
idUUIDSimIdentificador do canal.
Requisição
curl -X POST https://crprohub.com/api/v1/channels/CHANNEL_UUID/regenerate-token \
  -H "Authorization: Bearer hub_pk_EXEMPLO_NAO_REAL"
Resposta
{
  "data": {
    "channel_token": "hub_ch_EXEMPLO_NAO_REAL",
    "warning": "O token anterior foi revogado. Guarde este valor agora."
  }
}