FK Face Service
Documentação pública de integração

Integre em minutos, sem fluxo complexo.

O Face Service foi desenhado para integração rápida. Você recebe um token, aponta o seu sistema para a base URL, envia imagens em Base64 e começa a usar os endpoints de cadastro, verificação, identificação e comparação.

Visão geral da integração

A autenticação é feita por Bearer Token. Não existe mais bootstrap HMAC no cliente. Basta enviar o token no header Authorization e usar JSON com as imagens codificadas em Base64.

Autenticação

Header simples: Authorization: Bearer SEU_TOKEN.

Transporte

Use HTTPS quando o serviço estiver com SOLICITACAO_HTTPS=true.

Formato

Requests em JSON com campos como image_base64, selfie_base64 e image_a_base64.

Resposta

Os endpoints retornam success, indicadores de match, confidence, threshold e token de reconhecimento quando aplicável.

Passo a passo

Passo 1

Solicite seu painel e o token da aplicação pelo WhatsApp.

Passo 2

Configure FACE_SERVICE_BASE_URL e FACE_SERVICE_TOKEN no seu projeto.

Passo 3

Envie a selfie ou imagem em Base64 para os endpoints que precisa usar.

Passo 4

Consuma o resultado no seu fluxo de negócio e armazene o recognition_token quando houver match.

Configuração Laravel

Exemplo de configuração mínima no cliente Laravel:

// config/services.php
'face_service' => [
    'base_url' => env('FACE_SERVICE_BASE_URL'),
    'token' => env('FACE_SERVICE_TOKEN'),
],

// .env
FACE_SERVICE_BASE_URL=http://seu-face-service.com
FACE_SERVICE_TOKEN=TOKEN_GERADO_NO_PAINEL

Exemplo simples de chamada com o client HTTP do Laravel:

use Illuminate\Support\Facades\Http;

$response = Http::baseUrl(config('services.face_service.base_url'))
    ->withToken(config('services.face_service.token'))
    ->acceptJson()
    ->post('/api/v1/faces/compare', [
        'tenant_uuid' => '00000000-0000-0000-0000-000000000000',
        'image_a_base64' => $imagemA,
        'image_b_base64' => $imagemB,
    ])
    ->json();

Endpoints principais

POST /api/v1/faces/enroll

Cadastra a face de um usuário dentro da collection do tenant.

POST /api/v1/faces/verify

Verifica se a selfie enviada pertence ao usuário informado.

POST /api/v1/faces/identify

Identifica o usuário correspondente a uma selfie dentro do tenant.

POST /api/v1/faces/compare

Compara duas imagens e retorna matched, confidence e recognition_token quando houver match.

Payloads de exemplo

Comparação facial:

{
  "tenant_uuid": "00000000-0000-0000-0000-000000000000",
  "image_a_base64": "data:image/jpeg;base64,...",
  "image_b_base64": "data:image/jpeg;base64,..."
}

Verificação facial:

{
  "tenant_uuid": "00000000-0000-0000-0000-000000000000",
  "user_id": 123,
  "selfie_base64": "data:image/jpeg;base64,..."
}

Exemplos prontos para copiar

Use os exemplos abaixo como base inicial. Basta trocar a URL, o token e os dados das imagens.

Exemplo em curl para comparação:

curl -X POST "http://seu-face-service.com/api/v1/faces/compare" \
  -H "Authorization: Bearer TOKEN_GERADO_NO_PAINEL" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "tenant_uuid": "00000000-0000-0000-0000-000000000000",
    "image_a_base64": "data:image/jpeg;base64,...",
    "image_b_base64": "data:image/jpeg;base64,..."
  }'

Exemplo em PHP puro com cURL:

<?php

$payload = [
    'tenant_uuid' => '00000000-0000-0000-0000-000000000000',
    'user_id' => 123,
    'selfie_base64' => 'data:image/jpeg;base64,...',
];

$ch = curl_init('http://seu-face-service.com/api/v1/faces/verify');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer TOKEN_GERADO_NO_PAINEL',
        'Accept: application/json',
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE),
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

var_dump($httpCode, json_decode($response, true));

Exemplo em JavaScript com fetch:

const response = await fetch('http://seu-face-service.com/api/v1/faces/identify', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer TOKEN_GERADO_NO_PAINEL',
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    tenant_uuid: '00000000-0000-0000-0000-000000000000',
    selfie_base64: 'data:image/jpeg;base64,...'
  })
});

const data = await response.json();
console.log(response.status, data);

Resposta típica de sucesso em comparação com match:

{
  "success": true,
  "matched": true,
  "confidence": 98.42,
  "threshold": 80,
  "recognition_token": "550e8400-e29b-41d4-a716-446655440000",
  "recognition_limit": null,
  "recognition_count": 12,
  "recognition_remaining": null
}

FAQ rápido

Preciso implementar HMAC?

Não. A integração atual usa bearer token simples.

Posso integrar em ambiente local?

Sim. Se o servidor estiver com SOLICITACAO_HTTPS=false, você pode usar http:// em desenvolvimento.

Como recebo acesso?

Solicite seu painel no WhatsApp e enviamos o token e as orientações iniciais.