Skip to content

Face

Este endpoint recebe uma imagem e devolve a lista das faces encontradas nela. Para cada face, você recebe onde ela está na imagem (boundingBox), o recorte dela em base64 e os atributos estimados pelo detector — idade aparente e gênero.

É um endpoint de análise de uma imagem isolada. Ele não confronta a face com nada.

🚧 Face e Face Match não fazem a mesma coisa

Esta é a confusão mais comum entre os dois endpoints vizinhos:

  • Face (esta página) — recebe uma imagem e descreve as faces que existem nela. Não há comparação.
  • Face Match — recebe duas imagens e responde se a face de uma é a mesma pessoa da outra.

Se o que você quer é comparar uma selfie com a foto de um documento, o endpoint é o Face Match, não este.

Este endpoint também não faz liveness (use o Liveness) e não identifica a pessoa nem consulta bases oficiais.

Request

POST /face/v1

Headers

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

Este endpoint também aceita o token JWT, no formato Authorization: Bearer <accessToken>. Veja Token JWT.

Parâmetros

Todos são opcionais, na query string.

ParâmetroDescriçãoObrigatório
shouldRotateFaceQuando true, o recorte da face é rotacionado antes de ser devolvido. Padrão: false.Não
shouldReturnConfidenceQuando true, cada item de data passa a trazer também o campo confidence da detecção. Padrão: false.Não
faceCropProportionProporção usada no recorte da face. Número decimal, padrão 1.Não

TIP

shouldRotateFace e shouldReturnConfidence são ligados apenas pelo valor exato true. Qualquer outro valor — inclusive 1 ou TRUE — é tratado como false.

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.

🚧 Este endpoint não aceita PDF

Diferente do Face Match, aqui só entram imagens PNG e JPEG. Enviar um PDF resulta em 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/face/v1' \
  --header 'Authorization: ApiKey SUA_CHAVE_AQUI' \
  --form 'foto=@./foto.jpg'

Com os parâmetros opcionais:

bash
curl -i -X POST 'https://api-homolog.nxcd.app/face/v1?shouldReturnConfidence=true&faceCropProportion=1.5' \
  --header 'Authorization: ApiKey SUA_CHAVE_AQUI' \
  --form 'foto=@./foto.jpg'

Response

CampoDescriçãoTipo
idIdentificador único da requisiçãoString
versionVersão da API que atendeu a chamadaString
dataLista com uma entrada por face encontrada na imagem. Vem vazia quando nenhuma face é encontrada.Object[]
data[].confidenceConfiança da detecção da face. Só aparece quando shouldReturnConfidence=true.Number
data[].ageIdade aparente estimada para a faceNumber
data[].genderObjeto com o gênero aparente estimado para a faceObject
data[].gender.valueGênero aparente: Male ou FemaleString
data[].gender.confidenceConfiança da estimativa de gênero, de 0 a 100Number
data[].boundingBoxPosição da face na imagem original. Os quatro valores são proporções da imagem, entre 0 e 1.Object
data[].boundingBox.topInício da face no eixo YNumber
data[].boundingBox.leftInício da face no eixo XNumber
data[].boundingBox.widthLargura da faceNumber
data[].boundingBox.heightAltura da faceNumber
data[].croppedBase64Recorte da face em base64, pronto para uso em HTMLString
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

TIP

data é uma lista, não um objeto: uma foto com três pessoas devolve três entradas. Nenhuma face detectada devolve 200 com "data": [] — não é um erro.

Exemplos JSON

  1. Uma face encontrada
Status Code: 200
json
{
  "id": "13cfec7c-b238-4820-a4d1-5173e4c1418e",
  "version": "v1",
  "data": [
    {
      "age": 34,
      "gender": {
        "value": "Male",
        "confidence": 99.72
      },
      "boundingBox": {
        "top": 0.11424895375967026,
        "left": 0.26937249302864075,
        "width": 0.42325547337532043,
        "height": 0.6968063116073608
      },
      "croppedBase64": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAJYCAMAAA...K5CYII="
    }
  ],
  "metadata": {
    "filesInfo": [
      {
        "fieldname": "foto",
        "name": "foto.jpg",
        "size": 196965,
        "mimetype": "image/jpeg",
        "encoding": "7bit",
        "sha256": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
      }
    ],
    "timeSpent": 1230
  }
}
  1. Nenhuma face encontrada
Status Code: 200
json
{
  "id": "6a1d1e8c-4a7d-4a5e-9f2c-1b0f2a9c7e11",
  "version": "v1",
  "data": [],
  "metadata": {
    "filesInfo": [
      {
        "fieldname": "foto",
        "name": "paisagem.jpg",
        "size": 152064,
        "mimetype": "image/jpeg",
        "encoding": "7bit",
        "sha256": "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae"
      }
    ],
    "timeSpent": 640
  }
}
  1. Com shouldReturnConfidence=true
Status Code: 200
json
{
  "id": "a7f0c3d2-9e51-4b8a-8f31-2d4c6b9e0a77",
  "version": "v1",
  "data": [
    {
      "confidence": 0.97,
      "age": 29,
      "gender": {
        "value": "Female",
        "confidence": 98.4
      },
      "boundingBox": {
        "top": 0.2237228155136108,
        "left": 0.2856607735157013,
        "width": 0.1555942893028259,
        "height": 0.1687679588794708
      },
      "croppedBase64": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAJYCAMAAA...SuQmCC"
    }
  ],
  "metadata": {
    "filesInfo": [
      {
        "fieldname": "foto",
        "name": "foto.png",
        "size": 210433,
        "mimetype": "image/png",
        "encoding": "7bit",
        "sha256": "fcde2b2edba56bf408601fb721fe9b5c338d10ee429ea04fae5511b68fbf8fb9"
      }
    ],
    "timeSpent": 1410
  }
}

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 este endpoint.
404 Not FoundA versão informada na URL não existe. Só a v1 é aceita.
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

Este endpoint tem uma única versão, a v1. Ela é o padrão quando a versão é omitida na URL.

VersãoSituaçãoO que muda
v1RecomendadaÚnica versão. Atende tanto /face quanto /face/v1.

Qualquer outro valor na URL — /face/v2, por exemplo — devolve 404.

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