Visão geral
O facial360 é a plataforma que controla os equipamentos de reconhecimento facial instalados no cliente. Quando um funcionário é reconhecido, nós registramos o evento e entregamos a batida para a Lanaup.
A divisão de responsabilidade é deliberada: não recalculamos ponto, não aplicamos tolerância, não fechamos espelho. Isso é da Lanaup.
- Captura o reconhecimento facial no equipamento
- Identifica o funcionário e registra data, hora e sentido
- Entrega a batida para a Lanaup, com reenvio automático
- Guarda o histórico técnico para auditoria
- Recebe as batidas em um endpoint HTTPS
- Aplica as regras trabalhistas e de jornada
- Faz fechamento, ajustes e espelho de ponto
- É a fonte do cadastro de funcionários
Como funciona
A decisão de liberar o acesso acontece em cerca de 120 ms, no caminho do equipamento. A entrega para a Lanaup é assíncrona: ela nunca segura a porta nem depende da Lanaup estar no ar.
O endpoint de vocês
Precisamos de uma URL HTTPS que aceite POST com
corpo JSON. É o único requisito de infraestrutura da integração.
Cada requisição carrega uma batida. Não agrupamos em lote — isso mantém o reenvio simples e evita que uma batida ruim derrube as outras.
Payload da batida
Este é o corpo que enviamos. Se vocês precisarem de outro formato, nomes de campos diferentes ou campos adicionais, nos mandem o modelo — nós adaptamos do nosso lado.
{
"employee_external_id": "EMP-042",
"event_time": "2026-08-13T08:03:00-03:00",
"event_type": "time_clock",
"direction": "in",
"correlation_id": "7cddd486-469b-405b-9911-5f0229a892c7",
// identificadores internos, informativos
"tenant_id": "<uuid da empresa>",
"unit_id": "<uuid da unidade>",
"device_id": "<uuid do equipamento>",
"person_id": "<uuid da pessoa>"
}
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
| employee_external_id | string | sim | O código do funcionário na Lanaup. É a chave que liga os dois sistemas. |
| event_time | string | sim | Momento da batida, ISO 8601 com fuso (-03:00). É a hora lida no equipamento, não a hora do envio. |
| event_type | string | sim | Sempre time_clock hoje. Reservado para tipos futuros (intervalo, refeição). |
| direction | string | opcional | in, out ou null. Ver Entrada e saída. |
| correlation_id | uuid | sim | Identificador único desta batida. Estável entre reenvios — use para descartar duplicidade. |
| tenant_id | uuid | informativo | A empresa contratante no facial360. |
| unit_id | uuid | informativo | A unidade física (matriz, filial, obra). |
| device_id | uuid | informativo | O equipamento onde a batida ocorreu. |
| person_id | uuid | informativo | A pessoa no facial360. Útil para suporte cruzado. |
Autenticação
Enviamos a credencial que vocês nos derem. Por padrão, no header Authorization:
POST /ponto HTTP/1.1
Host: api.lanaup.com.br
Content-Type: application/json
Authorization: Bearer <chave que vocês emitirem>
Se preferirem um header próprio — x-api-key, x-token,
qualquer nome — é só informar. É configuração do nosso lado, não precisa de
alteração de código.
A chave é guardada criptografada e nunca aparece em log. Enviem por canal seguro, não por e-mail comum. Aceitamos rotação a qualquer momento, sem janela de manutenção.
Resposta esperada
| Status | Como interpretamos |
|---|---|
| 2xx | Batida aceita. Marcamos como entregue e não reenviamos. |
| 4xx | Recusada. Reenviamos conforme a política abaixo e registramos a resposta de vocês para diagnóstico. |
| 5xx | Falha do lado de vocês. Reenviamos. |
| timeout | Sem resposta em 8 segundos. Reenviamos. |
O corpo da resposta é opcional para nós — guardamos os primeiros 500 caracteres para suporte. Se vocês devolverem um identificador próprio da batida, podemos armazená-lo; digam qual campo.
Reenvio e duplicidade
Se a Lanaup não aceitar, tentamos de novo com espera crescente. Nenhuma batida é descartada silenciosamente.
| Tentativa | Quando | Acumulado |
|---|---|---|
| 1ª | imediata (até 1 min após a batida) | — |
| 2ª | + 30 segundos | 30 s |
| 3ª | + 2 minutos | 2,5 min |
| 4ª | + 10 minutos | 12,5 min |
| 5ª | + 1 hora | ~1,2 h |
| 6ª | + 6 horas | ~7,2 h |
Esgotadas as tentativas, a batida fica marcada como falha e um alerta é disparado para a operação — a batida continua guardada e pode ser reenviada manualmente.
O correlation_id é o mesmo em todas as tentativas da mesma
batida. Se vocês já processaram aquele identificador, respondam
2xx e descartem — assim uma resposta perdida na rede nunca vira
uma batida a mais no espelho do funcionário.
Entrada e saída
O primeiro cliente tem um único equipamento registrando entrada
e saída. O equipamento informa o sentido de cada leitura, e nós repassamos isso
no campo direction.
Precisamos saber como vocês tratam isso: usam o
direction que enviamos, ou deduzem pela ordem
das batidas do dia? Se for pela ordem, o campo é inofensivo e vocês podem
ignorá-lo. Se vocês usam, ele passa a ser a fonte da verdade — e aí vale
combinar o que fazer quando vier null (equipamento não informou).
Cadastro de funcionários
O cadastro dos funcionários é de vocês. O facial360 guarda apenas o mínimo para reconhecer a pessoa: nome, a foto de referência e o código dela na Lanaup.
Esse código é o que aparece em employee_external_id em toda batida.
Sem ele idêntico dos dois lados, a batida chega sem dono.
Três formas de manter isso alinhado
- Vocês nos passam a lista. Um endpoint que liste os funcionários ativos com código e nome, e nós importamos. É o caminho mais simples de operar e o que preferimos.
- Vocês criam direto na nossa API. Quando um funcionário é admitido, a Lanaup chama nosso endpoint de cadastro passando o código. Damos uma chave e a documentação.
- Manual, no nosso painel. Alguém digita o código ao cadastrar a foto. Funciona para poucos funcionários, mas erro de digitação vira batida órfã.
Consultar em vez de receber
Se vocês preferirem buscar as batidas em vez de recebê-las,
nossa API REST expõe o mesmo dado. Autenticação por chave no header
x-api-key.
Aceita filtros por person_id e unit_id, além de
paginação. Cada registro traz o status de entrega e o mesmo
correlation_id do envio. A URL base e a chave são entregues junto
com as credenciais.
Também entregamos eventos por webhook assinado (HMAC-SHA256, com reenvio próprio) caso vocês queiram acompanhar mais do que ponto — acesso liberado, acesso negado, equipamento offline. Documentamos à parte se houver interesse.
O que precisamos de vocês
São estes os pontos que travam a integração. Nada aqui depende de desenvolvimento — é definição.
- URL do endpoint que recebe as batidas Produção e homologação, se houver ambiente separado.
- Como autenticar Bearer, header próprio (qual nome) ou outro esquema.
- O formato acima serve? Se não, o modelo de vocês. Adaptamos do nosso lado.
-
Vocês usam o campo
direction? Ou deduzem entrada/saída pela ordem das batidas. - O que respondem ao aceitar e ao recusar Status e corpo, para diferenciarmos erro nosso de erro de dado.
- Como tratam batida repetida Confirmando que podemos reenviar sem gerar ponto duplicado.
- Qual código identifica o funcionário — e como obtemos a lista É a chave da integração inteira.