Skip to content

Liveness

O liveness (prova de vida) responde a uma única pergunta: a imagem enviada é de uma pessoa viva, presente no momento da captura? Ele existe para barrar tentativas de fraude por apresentação — foto de foto, print de tela, vídeo reproduzido em um monitor, máscara.

A imagem normalmente vem de um dos nossos SDKs de captura, que rodam no aplicativo ou no navegador do usuário final e conversam com a API usando um token JWT de curta duração.

🚧 O liveness não compara com documento

Este endpoint não compara a face enviada com a foto de um documento e não identifica a pessoa. Ele só diz se há uma pessoa viva na captura. Para comparar a face capturada aqui com outra imagem, use o Face Match for Liveness, encadeando o id desta resposta.

Request

POST /liveness/v2

Parâmetros

ParâmetroDescriçãoObrigatório
versionVersão da API no caminho da URL. Use v2. Veja Versões.Sim

Headers

http
Authorization: ApiKey <sua-chave-de-api>

Este endpoint também aceita o token JWT, no formato Authorization: Bearer <accessToken> — é assim que os SDKs se autenticam. Veja Token JWT.

Arquivos aceitos

ItemValor
Formatosimage/png, image/jpeg
Quantidade por chamada1 arquivo
Tamanho máximo (multipart)15 MB

O nome do campo do formulário é livre — use o que fizer sentido na sua integração. Se mais de um arquivo for enviado, a requisição é recusada com 422.

Além do multipart/form-data, o arquivo pode ser enviado em JSON, no campo base64, como descrito em Envio de arquivos.

Exemplo Request

bash
curl -i -X POST 'https://api-homolog.nxcd.app/liveness/v2' \
  --header 'Authorization: ApiKey SUA_CHAVE_AQUI' \
  --form 'selfie=@./selfie.jpg'

Response

O envelope é o padrão da API:

CampoDescriçãoTipo
idIdentificador único da requisição. É ele que se usa no Face Match for Liveness.String
versionVersão da API que atendeu a chamadaString
dataObjeto com o resultado da análiseObject
data.isAlivetrue quando a imagem é de uma pessoa viva presente na capturaBoolean
metadataObjeto com os metadados da requisiçãoObject
metadata.filesInfoLista com as informações do arquivo enviadoObject[]
metadata.filesInfo[].fieldnameNome do campo usado no envioString
metadata.filesInfo[].nameNome do arquivo enviadoString
metadata.filesInfo[].sizeTamanho do arquivo, em bytesNumber
metadata.filesInfo[].mimetypeTipo do arquivo enviadoString
metadata.filesInfo[].encodingCodificação do arquivo no envioString
metadata.filesInfo[].sha256Hash SHA-256 do arquivo enviadoString
metadata.timeSpentTempo de processamento da requisição, em milissegundosNumber

🚧 Atenção!

isAlive: false não significa necessariamente uma tentativa de fraude. Uma captura ruim — pouca luz, foco errado, rosto parcialmente fora do quadro — também leva a false. A decisão sobre o que fazer nesse caso é sua.

Exemplos JSON

  1. Liveness aprovado
Status Code: 200
json
{
  "id": "13cfec7c-b238-4820-a4d1-5173e4c1418e",
  "version": "v2",
  "data": {
    "isAlive": true
  },
  "metadata": {
    "filesInfo": [
      {
        "fieldname": "selfie",
        "name": "selfie.jpg",
        "size": 184320,
        "mimetype": "image/jpeg",
        "encoding": "7bit",
        "sha256": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
      }
    ],
    "timeSpent": 850
  }
}
  1. Liveness recusado
Status Code: 200
json
{
  "id": "6a1d1e8c-4a7d-4a5e-9f2c-1b0f2a9c7e11",
  "version": "v2",
  "data": {
    "isAlive": false
  },
  "metadata": {
    "filesInfo": [
      {
        "fieldname": "selfie",
        "name": "selfie.jpg",
        "size": 152064,
        "mimetype": "image/jpeg",
        "encoding": "7bit",
        "sha256": "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae"
      }
    ],
    "timeSpent": 790
  }
}

Headers de resposta

HeaderQuando aparece
Nextid-ReqIdEm todas as respostas. Traz o identificador da requisição, o mesmo do campo id do corpo.

Erros

CódigoQuando ocorre
401 UnauthorizedChave de API ou token JWT ausente, inválido, ou sem permissão para o liveness.
404 Not FoundA versão informada na URL não existe.
406 Not AcceptableO corpo foi enviado como JSON, mas sem o campo base64.
413 Payload Too LargeO arquivo enviado em multipart/form-data passa de 15 MB.
415 Unsupported Media TypeO header Content-Type está ausente ou não é suportado.
422 Unprocessable EntityO formato do arquivo não é aceito, ou foi enviado mais de um arquivo na mesma chamada.
500 Internal Server ErrorFalha inesperada durante o processamento.

O formato das respostas de erro está descrito em Códigos HTTP das respostas.

Versões

VersãoSituaçãoO que muda
v2RecomendadaEnvelope padrão da API, com data.isAlive.

A v2 é a versão suportada deste endpoint. Informe sempre a versão no caminho da chamada.

Próximo passo

Guarde o id da resposta: é ele que identifica a sessão de liveness no Face Match for Liveness.

Nextcode | Soluções em Verificação de Identidade