Nome da tab
Apresentação
Título
O que é?
Text

A API Face Match valida a biometria facial de uma pessoa através do CPF informado utilizando a base de dados da Claro.

Título
Benefícios
Ícone
Título
Fácil integração
Text

A nossa API é “restful”, ou seja, o nosso protocolo de comunicação foi criado de uma forma que pode interpretar qualquer linguagem de programação. Isso torna o processo de integração do lado dos nossos clientes e parceiros mais flexível e de fácil entendimento. Na página de documentação deixamos alguns exemplos de linguagem, caso seja necessário.

Ícone
Título
Aumento de receita
Text

A utilização da validação biométrica associada a outras medidas protetivas garantem segurança nos resultados e sustentabilidade nos negócios, minimizando riscos de fraudes e tornando as validações mais confiáveis.

Ícone
Título
Diferenciais
Text
  • Agilidade: cruzamento rápido de número de CPF na base Claro;
  • Retorno simples: consulta em tempo real utilizando como input o CPF que retorna o hash biométrico e confirma a validação do perfil;
  • Segurança: retorna mensagens instantâneas sobre o cliente com base nas informações fornecidas, validando seu perfil e prevenindo fraudes.
Título
Dúvidas frequentes

A cobrança é por consulta?

Não, a cobrança é feita por resposta e informação entregue.

Título
Documentação
Text

Nome da tab
Documentação
Título
Claro Identity Facial Biometrics - Trial - Test
Text

Versão: 1.0.1;2023-10-10

Criada por: Logicalis

Data: 10/10/2023

Modificações

  • [Claro API Monetization MVP] Versão inicial
  • [Claro API Monetization] Alteração dos campos versions e biohashs para array
Título
Autenticação
Text

Essa API usa OAuth 2 com o fluxo de concessão de credenciais do cliente.

Tipo de segurança: OAuth2

clientCredentials OAuth Flow: Token URL: https://demo35-test.apigee.net/oauth2/token?grant_type=client_credentials

Título
Resposta

200 - A solicitação foi bem sucedida.

400 - A solicitação não pôde ser entendida pelo servidor devido à sintaxe incorreta. O cliente NÃO DEVE repetir o pedido sem modificações.

401 - A solicitação requer autenticação do usuário.

403 - O servidor entendeu a solicitação, mas está se recusando a atendê-la.

404 - O servidor não encontrou nada que corresponda ao Request-URL.

405 - O método solicitado não é suportado pela API.

406 - Servidor não pode produzir uma resposta que combine com a lista de valores aceitáveis definidos.

414 - O tamanho da URI requisitada é maior do que o tamanho que o servidor aceita interpretar.

422 - O cliente não foi encontrado na base de dados.

429 - O usuário enviou muitas solicitações em um determinado período de tempo.

500 - O servidor falhou ao atender uma solicitação aparentemente válida.

503 - O servidor está indisponível no momento devido uma sobrecarga temporária ou manutenção programada.

Título
Passo a passo
Text

Caso ainda restem dúvidas, baixe o PDF que contém o tutorial de consumo da API, que explica passo a passo como utiliza-la.

Título
Códigos de Exemplo
Título
Curl
Text
!/bin/bash

url_facialbiometrics=https://api.claro.com.br/identity/v1/facialbiometrics
url_token=https://api.claro.com.br/oauth2/v1/token

identificationType=CPF
identificationId=98676489009
key=XXXXXXXXXXXXXXXXXXXXXXXXXXXX
secret=XXXXXXXXXXXXX

senha=$( echo -n $key:$secret | base64)

curl -X POST $url_token \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'cache-control: no-cache' \
-d 'grant_type=client_credentials' \
-H "x-client-auth: Basic $senha" > json
grep 'access_token' json > atributoJson \

token=$(cut -d'"' -f4 atributoJson )

curl -X 'GET' $url_facialbiometrics \
-H 'Content-Type: application/json' \
-H 'X-QueryString: 
identificationType='"$identificationType"'&IdentificationId='"$identificationId"'' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer '"$token"'' \
Título
Java
Text
package client.facialBiometrics;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Base64;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;

public class App {
    private static final String KEY = "XXXXXXXXXXXXXXXXXXXXXXXXX";
    private static final String SECRET = "XXXXXXXXXXXX";
    private static final String GRANT_TYPE = "client_credentials";
    private static final String URL = "https://api.claro.com.br";
    private static final String END_POINT_ACCESS_TOKEN = "/oauth2/v1/token";
    private static final String END_POINT_API_FACIALBIOMETRICS = "/identity/v1/facialbiometrics";

    public static void main( String[] args ) throws URISyntaxException, JsonProcessingException, IOException{
        App app = new App();
        String token = app.getAccessToken();
        String identificationId = "XXXXXXXXXXX";
        System.out.println("Face Match: " + app.getFacialMatch( token , identificationId ));
    }

    public String getFacialMatch(String accessToken, String identificationId) throws RestClientException, URISyntaxException {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.add("cache-control","no-cache");
        headers.add("x-client-auth", "Bearer " + accessToken);
        headers.add("X-QueryString",
"identificationType=CPF&IdentificationId=" + identificationId);

        HttpEntity<String> request = new HttpEntity<>(headers);
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<String> result = restTemplate.getForEntity(new URI(URL + END_POINT_API_FACIALBIOMETRICS), request, String.class);
        return result.getBody();
    }

    public String getAccessToken() throws URISyntaxException, JsonProcessingException, IOException {
        String senha = Base64.getEncoder().encodeToString((App.KEY + ":" + App.SECRET).getBytes());
        HttpHeaders headers = new HttpHeaders();

        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        headers.add("cache-control","no-cache");
        headers.add("x-client-auth", "Basic " + senha);
        MultiValueMap<String, String> parameters = new LinkedMultiValueMap<>();
        parameters.add("grant_type", GRANT_TYPE);
        HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(parameters, headers);
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<String> result = restTemplate.postForEntity(new URI(URL + END_POINT_ACCESS_TOKEN),request, String.class);

        String responseBody = result.getBody();
        if (responseBody != null && !responseBody.isEmpty()) {
            return new
ObjectMapper().readTree(responseBody).get("access_token").asText();
        } else {
            throw new IllegalStateException("Response body is null or empty");
        }
    }
}
Título
PHP
Text
$key = 'XXXXXXXXXXXXXXXXXXX'; 

$secret = 'XXXXXXXXXXXX'; 

$identificationType = 'CPF'; 
$identificationId = '98676489009'; 

$token = getAccessToken(); 

$score = getScore($token , $identificationType, $identificationId); 

function getAccessToken() {    

    try{

     $senha = base64_encode($GLOBALS['key'] . ':' . $GLOBALS['secret']);

         $ch = curl_init();
         curl_setopt($ch, CURLOPT_URL, 
"https://api.claro.com.br/oauth2/v1/token");
         curl_setopt( $ch, CURLOPT_HTTPHEADER, [
             'Content-Type: application/x-www-form-urlencoded',
             'X-CustomerID: claro_exemplo',
             'x-client-auth: Basic ' . $senha

         ]);
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
         curl_setopt($ch, CURLINFO_HEADER_OUT, true);
         curl_setopt($ch, CURLOPT_POST, true);
         curl_setopt($ch, CURLOPT_POSTFIELDS, 
'grant_type=client_credentials');

         $response = curl_exec($ch);

         if (!$response){
             $error = curl_error($ch);
             $info = curl_getinfo($ch);
             die("cURL request failed, error = {$error}; info = " . print_r($info, true));
         }
         if(curl_errno($ch)){
             curl_close($ch);
             echo 'error:' . curl_error($ch);
         } else {
             curl_close($ch);
             return json_decode($response)->access_token;
            }

     } catch (Exception $e) {
         return 'Erro '. $e;
     } 
} 


function getScore($token , $identificationType, $identificationId){

     try {

         $ch = curl_init();
         curl_setopt($ch, CURLOPT_URL, 
"https://api.claro.com.br/identity/v1/facialbiometrics");
         curl_setopt( $ch, CURLOPT_HTTPHEADER, [
             'Content-Type: application/json',
             'X-QueryString: identificationType='.$identificationType.'&IdentificationId='.$identificationId,
            'Accept: application/json',
            'Authorization: Bearer ' . $token
        ]);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLINFO_HEADER_OUT, true);

        $response = curl_exec($ch);

        if (!$response){
            $error = curl_error($ch);
            $info = curl_getinfo($ch);
            die("cURL request failed, error = {$error}; info = " . print_r($info, true));
        }
        if(curl_errno($ch)){
            curl_close($ch);
            echo 'error:' . curl_error($ch);
        } else {
            curl_close($ch);
            return $response;
        }

    } catch (Exception $e) {
        return 'Erro '. $e;
    }
}
Título
Python
Text
import requests, json
import base64

KEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
SECRET="XXXXXXXXXXXXXXXXX"

SENHA = base64.b64encode( (KEY + ':' + SECRET ).encode('ascii') ).decode('ascii')

GRANT_TYPE = "client_credentials";

URL = "https://api.claro.com.br";
END_POINT_ACCESS_TOKEN = "/oauth2/v1/token";
END_POINT_API_FACIALBIOMETRICS = "/identity/v1/facialbiometrics";

headers={'Content-Type':'application/x-www-form-urlencoded','cache-control':'no-cache','x-client-auth': 'Basic {}'.format(SENHA)}

data = {'grant_type': 'client_credentials'}
respToken = requests.post(URL + END_POINT_ACCESS_TOKEN , headers=headers , data= data)

if respToken.status_code != 200:
    print('Erro:' + str( respToken.status_code))
else:
    token = json.loads( respToken.text)['access_token']

identificationId = "98676489009"
identificationType = "CPF"

headers_app = {'Content-Type': 'application/json', 'X-QueryString': 'identificationType=' + identificationType + '&IdentificationId=' + identificationId, 'Accept':'application/json', 'cache-control':'no-cache', 'user-agent':'curl/7.60.0', 'Authorization': 'Bearer {}'.format(token)}


resp = requests.get( URL + END_POINT_API_FACIALBIOMETRICS, 
headers=headers_app)
print(vars(resp))
if resp.status_code != 200:
    print('Erro: ' + str(resp.status_code))
else:
    print('Válida ' + str( resp.text ))

Plano Trial

Teste sem pagar nada

  • 1000 requisições free
  • Período de 3 meses
  • Relatório de consumo
Solicitar

Plano Pay Per Use

A melhor escolha para o seu negócio. Após testar nossa trial, você passa a consumir nosso plano em produção, cobrado por consumo conforme sua solicitação.

  • 5000 requisições
  • Utilização em até 6 meses
  • Relatório para monitoramento
    de consumo
Solicitar