Canais
/api/v1/channelsLista 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
curl https://crprohub.com/api/v1/channels \ -H "Authorization: Bearer hub_pk_EXEMPLO_NAO_REAL"
{
"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"
}
]
}
}/api/v1/channelsCria 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âmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| name | string | Sim | Nome do canal, de 1 a 100 caracteres. |
| type | enum | Não | Só aceita "whatsapp". Pode ser omitido. |
| external_id | string | Não | Identificador externo opcional, até 200 caracteres. Precisa ser único na organização; duplicado responde 409. |
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"}'{
"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"
}
}/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âmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | UUID | Sim | Identificador do canal. |
curl https://crprohub.com/api/v1/channels/CHANNEL_UUID \ -H "Authorization: Bearer hub_pk_EXEMPLO_NAO_REAL"
{
"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"
}
}
}/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âmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | UUID | Sim | Identificador do canal. |
Corpo
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| name | string | Não | Novo nome, de 1 a 100 caracteres. |
| external_id | string | Não | Novo identificador externo, até 200 caracteres, ou null para remover o atual. |
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"}'{
"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"
}
}
}/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âmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | UUID | Sim | Identificador do canal. |
curl -X DELETE https://crprohub.com/api/v1/channels/CHANNEL_UUID \ -H "Authorization: Bearer hub_pk_EXEMPLO_NAO_REAL"
{
"data": {
"archived": true
}
}/api/v1/channels/{id}/connect-linkGera 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âmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | UUID | Sim | Identificador do canal. |
curl -X POST https://crprohub.com/api/v1/channels/CHANNEL_UUID/connect-link \ -H "Authorization: Bearer hub_pk_EXEMPLO_NAO_REAL"
{
"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"
}
}/api/v1/channels/{id}/diagnosticsValida 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âmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | UUID | Sim | Identificador do canal. |
curl https://crprohub.com/api/v1/channels/CHANNEL_UUID/diagnostics \ -H "Authorization: Bearer hub_ch_EXEMPLO_NAO_REAL"
{
"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": []
}
}
}/api/v1/channels/{id}/regenerate-tokenRotaciona 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âmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | UUID | Sim | Identificador do canal. |
curl -X POST https://crprohub.com/api/v1/channels/CHANNEL_UUID/regenerate-token \ -H "Authorization: Bearer hub_pk_EXEMPLO_NAO_REAL"
{
"data": {
"channel_token": "hub_ch_EXEMPLO_NAO_REAL",
"warning": "O token anterior foi revogado. Guarde este valor agora."
}
}