Equipamentos

Gerencia os dispositivos físicos de reconhecimento — Totens (tablet dedicado), Câmeras Intelbras (DVR/NVR com reconhecimento facial via nuvem) e a integração com catracas de acesso (apenas provisionamento, não configurável via API).

:::info
Suporte por tipo

TipoProvisionamento via APIObservação
Totem (reconhecimento facial no app)✅ CompletoGera QR Code de pareamento. O totem escaneia o QR e se conecta automaticamente.
DVR/NVR Intelbras (CFTV IP via nuvem)✅ CompletoRequer teste de conexão bem-sucedido antes de criar/atualizar.
Catraca de acesso❌ Não expostoRequer app integrador próprio. Apenas leitura, sync, regeneração de token e mapeamento são acessíveis.
:::

Endpoints

MétodoRotaScopeDescrição
GET/v1/equipmentsequipment:readListar equipamentos da unidade
POST/v1/equipmentsequipment:writeCriar equipamento (totem ou DVR/NVR Intelbras)
GET/v1/equipments/:idequipment:readDetalhar equipamento
PUT/v1/equipments/:idequipment:writeAtualizar equipamento
DELETE/v1/equipments/:idequipment:writeExcluir equipamento (desfaz vínculos)
POST/v1/equipments/intelbras/test-connectionequipment:writeTestar conexão com DVR/NVR Intelbras
GET/v1/equipments/:id/mappings/searchequipment:readBuscar pessoas sincronizadas com a catraca
GET/v1/equipments/:id/sync-statusequipment:readStatus de sincronização (catraca)
POST/v1/equipments/:id/sync-usersequipment:writeDisparar sincronização (catraca)
POST/v1/equipments/:id/access-syncequipment:writeReenviar permissões de acesso (catraca)
GET/v1/equipments/:id/push-queueequipment:readFila de comandos pendentes (catraca)
POST/v1/equipments/:id/regenerate-tokenequipment:writeRegenerar token de webhook (catraca)

GET /v1/equipments

Lista os equipamentos da unidade.

Parâmetros (query)

ParamTipoDefaultDescrição
searchstringBusca por nome, ID do dispositivo ou número de série.
typeGDREDU_TOTEM | CONTROLID_DEVICE | INTELBRAS_P2PFiltra por tipo.
pagenumber1
limitnumber20Max 100.

Exemplo

curl "https://api.gdredu.com/v1/equipments?type=INTELBRAS_P2P&search=bloco" \
  -H "Authorization: Bearer gdredu_live_..." \
  -H "x-branch-id: 770e8400-e29b-41d4-a716-446655440000"

Resposta (200)

{
  "data": [
    {
      "id": "660e8400-e29b-41d4-a716-446655440000",
      "name": "Câmera Bloco A",
      "type": "INTELBRAS_P2P",
      "recognitionType": "BOTH",
      "deviceId": null,
      "serialNumber": "ABCD1234567890",
      "version": null,
      "model": null,
      "branchId": "770e8400-e29b-41d4-a716-446655440000",
      "lastConnection": "2026-06-20T15:30:00.000Z",
      "lastSync": "2026-06-20T15:35:00.000Z",
      "recognitionAddPresenceAuto": false,
      "controlIdBaseId": 1,
      "p2pClientId": "intelbras-p2p-uuid",
      "username": "admin",
      "remotePortIntelbras": 37777,
      "devTypeIntelbras": "iM7",
      "detailTypeIntelbras": "Face Recognition Camera",
      "swVersionIntelbras": "1.0.0",
      "hwVersionIntelbras": "1.0",
      "createdAt": "2026-06-01T10:00:00.000Z",
      "updatedAt": "2026-06-20T15:35:00.000Z",
      "online": true,
      "_count": { "presences": 15234 }
    }
  ],
  "pagination": {
    "page": 1, "limit": 20, "total": 8, "totalPages": 1, "hasNext": false, "hasPrev": false
  }
}
CampoDescrição
typeGDREDU_TOTEM (tablet), INTELBRAS_P2P (câmera) ou CONTROLID_DEVICE (catraca).
recognitionTypeLado do reconhecimento: ENTRY (entrada), EXIT (saída) ou BOTH.
onlinetrue se o dispositivo conectou nos últimos 5 minutos.
lastConnectionÚltima vez que o dispositivo fez heartbeat / poll.
lastSyncÚltima sincronização de dados (presenças, mapeamentos).

POST /v1/equipments

Cria um novo equipamento. O tipo determina os campos obrigatórios.

Body (Totem)

{
  "type": "GDREDU_TOTEM",
  "name": "Totem Recepção",
  "recognitionAddPresenceAuto": true,
  "recognitionType": "BOTH"
}

Body (DVR/NVR Intelbras)

{
  "type": "INTELBRAS_P2P",
  "name": "Câmera Bloco A",
  "recognitionType": "BOTH",
  "recognitionAddPresenceAuto": true,
  "intelbras": {
    "serial": "ABCD1234567890",
    "username": "admin",
    "password": "senha-do-dispositivo",
    "remotePort": 37777
  }
}
CampoTipoObrigatórioDescrição
typeenumsimGDREDU_TOTEM ou INTELBRAS_P2P.
namestringsimNome descritivo (até 200 caracteres).
recognitionTypeenumnãoENTRY, EXIT ou BOTH (default).
recognitionAddPresenceAutobooleannãoSe true, marca o aluno como presente em todas as aulas do dia ao passar no equipamento.
intelbras.serialstringsim*Número de série do DVR/NVR Intelbras.
intelbras.usernamestringsim*Usuário admin do dispositivo.
intelbras.passwordstringsim*Senha do dispositivo.
intelbras.remotePortnumbernãoPorta remota (default 37777).

* Obrigatório apenas para INTELBRAS_P2P.

Fluxo

  1. Totem: o equipamento é criado e um QR Code (campo pairingToken) é retornado. O totem físico escaneia o QR e se conecta.
  2. Intelbras: o sistema testa a conexão antes de criar. Se falhar, retorna 502 com os detalhes do erro. Se sucesso, o equipamento é criado e a sincronização com a nuvem Intelbras começa em até 1 minuto.

Resposta (201)

{
  "id": "660e8400-e29b-41d4-a716-446655440000",
  "name": "Câmera Bloco A",
  "type": "INTELBRAS_P2P",
  "recognitionType": "BOTH",
  "deviceId": null,
  "serialNumber": "ABCD1234567890",
  "username": "admin",
  "remotePortIntelbras": 37777,
  "branchId": "770e8400-e29b-41d4-a716-446655440000",
  "lastConnection": null,
  "lastSync": null,
  "recognitionAddPresenceAuto": true,
  "controlIdBaseId": 1,
  "createdAt": "2026-06-20T16:00:00.000Z",
  "updatedAt": "2026-06-20T16:00:00.000Z",
  "online": false
}

Para Totem, a resposta inclui também:

{
  "pairingToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...."
}

Use esse token para gerar o QR Code no seu app (codificando-o como imagem QR) — o totem escaneia o QR e completa o pareamento.

Erros

StatusCodeQuando
400VALIDATION_ERRORCampos obrigatórios faltando ou inválidos
409CONFLICTJá existe equipamento com o mesmo número de série Intelbras
502INTERNAL_ERRORFalha ao testar conexão Intelbras (credenciais inválidas, dispositivo offline)

GET /v1/equipments/:id

Detalha um equipamento. Retorna os mesmos campos da listagem, mais tokens sensíveis (accessToken, webhookToken).

Exemplo

curl "https://api.gdredu.com/v1/equipments/660e8400-e29b-41d4-a716-446655440000" \
  -H "Authorization: Bearer gdredu_live_..." \
  -H "x-branch-id: 770e8400-e29b-41d4-a716-446655440000"

Resposta (200)

Mesma forma do POST. Para catracas, inclui:

{
  "accessToken": "...",
  "webhookToken": "...",
  "controlIdMonitorConfigured": true,
  "controlIdPushConfigured": true
}
StatusCodeQuando
404NOT_FOUNDEquipamento não encontrado na unidade

PUT /v1/equipments/:id

Atualiza um equipamento.

Body (Totem ou Intelbras)

{
  "name": "Câmera Bloco A (renomeada)",
  "recognitionType": "ENTRY",
  "recognitionAddPresenceAuto": true,
  "intelbras": {
    "username": "newadmin",
    "password": "nova-senha"
  }
}
CampoTipoDescrição
namestringNovo nome.
recognitionTypeenumENTRY, EXIT ou BOTH.
recognitionAddPresenceAutobooleanAtualiza flag de presença automática.
controlIdBaseIdnumberApenas para catracas: ID base usado para gerar IDs internos. Aceita 1 (padrão, IDs a partir de 1) ou 110 (IDs a partir de 110).
intelbras.serialstringNovo número de série. Se diferente do atual, dispara verificação de duplicata.
intelbras.usernamestringNovo usuário.
intelbras.passwordstringNova senha. Atualizar a senha desconecta e reconecta o túnel P2P.
intelbras.remotePortnumberNova porta remota.

Comportamento

  • Se qualquer credencial Intelbras mudar (username, password, serial ou remotePort), o túnel P2P atual é encerrado e a sincronização é refeita em até 1 minuto.
  • Atualizar password exige teste de conexão prévio via /v1/equipments/intelbras/test-connection com o equipmentId (caso contrário a alteração é aceita mas o túnel pode falhar).

Erros

StatusCodeQuando
400VALIDATION_ERRORDados inválidos
404NOT_FOUNDEquipamento não encontrado
409CONFLICTOutro equipamento já usa o novo número de série Intelbras

DELETE /v1/equipments/:id

Exclui o equipamento e desvincula todas as presenças, mapeamentos e comandos pendentes associados.

Resposta

204 No Content em caso de sucesso.

:::warning
Presenças não são apagadas — apenas perdem a referência ao equipamento (equipmentId torna-se null). Use isso se quiser manter histórico de detecções.
:::

StatusCodeQuando
404NOT_FOUNDEquipamento não encontrado

POST /v1/equipments/intelbras/test-connection

Testa a conexão com uma DVR/NVR Intelbras antes de criar ou atualizar. Use no wizard de configuração para validar credenciais em tempo real.

Body

{
  "serial": "ABCD1234567890",
  "username": "admin",
  "password": "senha-do-dispositivo",
  "remotePort": 37777,
  "equipmentId": "660e8400-e29b-41d4-a716-446655440000"
}
CampoTipoObrigatórioDescrição
serialstringsimNúmero de série.
usernamestringsimUsuário.
passwordstringsimSenha.
remotePortnumbernãoPorta (default 37777).
equipmentIduuidnãoEm atualização, ID do equipamento atual (para ignorar na verificação de duplicata).

Resposta (200)

{
  "success": true,
  "message": "Conexão estabelecida com sucesso.",
  "deviceInfo": {
    "serial": "ABCD1234567890",
    "devType": "iM7",
    "detailType": "Face Recognition Camera",
    "swVersion": "1.0.0",
    "hwVersion": "1.0"
  }
}

Em caso de falha:

{
  "success": false,
  "message": "Falha na autenticação: usuário ou senha inválidos.",
  "deviceInfo": null
}

Erros

StatusCodeQuando
400VALIDATION_ERRORCampos obrigatórios faltando
404NOT_FOUNDequipmentId informado não existe na unidade
409CONFLICTOutro equipamento já usa este número de série
502INTERNAL_ERRORFalha na comunicação com a nuvem Intelbras

GET /v1/equipments/:id/mappings/search

Busca pessoas (alunos ou usuários) com vinculação conhecida à catraca, retornando o status de sincronização. Disponível apenas para CONTROLID_DEVICE.

Parâmetros (query)

ParamTipoDefaultDescrição
qstringTermo de busca (mínimo 2 caracteres).
takenumber10Max 25.
onlySyncedtruefalseApenas pessoas com foto sincronizada.
onlyRegisteredtruefalseApenas pessoas com vínculo (mesmo sem foto).

Exemplo

curl "https://api.gdredu.com/v1/equipments/660e8400-.../mappings/search?q=joao&onlySynced=true" \
  -H "Authorization: Bearer gdredu_live_..." \
  -H "x-branch-id: 770e8400-..."

Resposta (200)

{
  "results": [
    {
      "kind": "student",
      "id": "880e8400-e29b-41d4-a716-446655440000",
      "name": "João da Silva",
      "email": "[email protected]",
      "avatarUrl": "https://cdn.gdredu.com/photos/students/880e.../foto1.jpg?<sas>",
      "synced": true,
      "registered": true,
      "controlIdUserId": 12,
      "syncedAt": "2026-06-20T14:30:00.000Z",
      "lastSyncError": null
    },
    {
      "kind": "user",
      "id": "990e8400-e29b-41d4-a716-446655440000",
      "name": "Maria Professora",
      "email": "[email protected]",
      "avatarUrl": null,
      "synced": false,
      "registered": true,
      "controlIdUserId": 25,
      "syncedAt": null,
      "lastSyncError": "Qualidade da foto abaixo do mínimo (score 0.42)"
    }
  ],
  "hasMore": false
}
CampoDescrição
kindstudent ou user.
syncedtrue se a foto da pessoa já foi sincronizada com a catraca.
registeredtrue se há um vínculo criado (mesmo sem foto sincronizada).
controlIdUserIdID interno atribuído pela catraca para esta pessoa.
lastSyncErrorMensagem de erro do último sync (se houver).

GET /v1/equipments/:id/sync-status

Retorna o status consolidado de sincronização da catraca (totais, comandos pendentes, contadores, erros recentes).

Resposta (200)

{
  "totalMappings": 1500,
  "syncedMappings": 1487,
  "pendingMappings": 8,
  "errorMappings": 5,
  "commandCounts": {
    "pending": 3,
    "sent": 12,
    "confirmed": 1240,
    "failed": 7
  },
  "photoStats": {
    "totalRejected": 14,
    "permanentlyFailed": 2,
    "recentErrors": [
      {
        "controlIdUserId": 12,
        "studentId": "880e8400-...",
        "userId": null,
        "name": "João da Silva",
        "error": "Qualidade da foto abaixo do mínimo",
        "rejectCount": 3
      }
    ]
  },
  "lastSync": "2026-06-20T15:35:00.000Z"
}

POST /v1/equipments/:id/sync-users

Dispara a sincronização completa de todos os alunos e usuários com a catraca. Útil após mudanças em massa (cadastros, fotos) ou ao diagnosticar inconsistências.

Resposta (200)

{
  "commandsCreated": 1532,
  "usersToSync": 1500,
  "usersToRemove": 8,
  "errors": []
}

A sincronização é processada em background. Use o GET /sync-status para acompanhar o progresso.


POST /v1/equipments/:id/access-sync

Reenvia as permissões de acesso para todos os usuários cadastrados na catraca. Use após mudanças nos vínculos ou em reconfiguração do equipamento.

Resposta (200)

{
  "commandsCreated": 11,
  "usersAffected": 1500
}

GET /v1/equipments/:id/push-queue

Lista os comandos pendentes/enviados/erro na fila de push da catraca, para diagnóstico.

Parâmetros (query)

ParamTipoDefaultDescrição
statusstringFiltra por status: PENDING, SENT, CONFIRMED, FAILED, RETRYING, IGNORED.
limitnumber20Max 100.
offsetnumber0

Resposta (200)

{
  "data": [
    {
      "id": "...",
      "equipmentId": "660e8400-...",
      "verb": "POST",
      "endpoint": "create_or_modify_objects",
      "body": "{\"object\":\"users\",\"values\":[...]}",
      "status": "PENDING",
      "priority": 10,
      "attempts": 0,
      "sentAt": null,
      "confirmedAt": null,
      "nextAttemptAt": "2026-06-20T16:05:00.000Z"
    }
  ],
  "total": 3
}

POST /v1/equipments/:id/regenerate-token

Gera um novo webhook token para a catraca. O token anterior é invalidado — o dispositivo precisará ser reconfigurado com o novo token.

Resposta (200)

{
  "webhookToken": "novo-uuid-token"
}
StatusCodeQuando
404NOT_FOUNDEquipamento não é uma catraca

Conceitos importantes

QR Code de pareamento (Totem)

Ao criar um totem, a resposta inclui o campo pairingToken. Para finalizar o pareamento, exiba esse token como QR Code na tela do operador. O totem físico escaneia o QR, decodifica o token e se conecta automaticamente à plataforma.

Teste de conexão (Intelbras)

Câmeras Intelbras só são criadas se o teste de conexão passar. Use POST /v1/equipments/intelbras/test-connection antes de criar para feedback em tempo real no wizard.

Presença automática

Quando recognitionAddPresenceAuto = true, ao passar no equipamento, o aluno é marcado como presente em todas as aulas do dia (não só na aula atual). Útil para totens de entrada que cobrem múltiplas turmas.

Tolerância a falhas

Se uma foto de aluno for rejeitada pela câmera (qualidade baixa, rosto não detectado), a tentativa é repetida em até 3 vezes. Após isso, o vínculo é marcado como permanentlyFailed no sync-status e precisa ser atualizado pelo painel.


Did this page help you?