curl --request GET \
--url https://{instancia}/api/v1/cpf/{cpf} \
--header 'Authorization: Bearer <token>'import requests
url = "https://{instancia}/api/v1/cpf/{cpf}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{instancia}/api/v1/cpf/{cpf}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{instancia}/api/v1/cpf/{cpf}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{instancia}/api/v1/cpf/{cpf}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{instancia}/api/v1/cpf/{cpf}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{instancia}/api/v1/cpf/{cpf}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"consulta": {
"id": "cmtsr515m1uxzjn04ta469e3q",
"produto": "search-pf",
"documento": "12345678909",
"cache": false,
"consultadoEm": "2023-11-07T05:31:56Z",
"duracaoMs": 609
},
"pessoa": {
"cpf": "<string>",
"nome": "<string>",
"nomeMae": "<string>",
"nascimento": "<string>",
"idade": 123,
"sexo": "<string>",
"escolaridade": "<string>",
"rendaPresumida": "<string>",
"situacaoCadastral": "<string>",
"obito": true,
"telefones": [
{
"numero": "11987654321",
"ddd": "11",
"tipo": "TELEFONE MÓVEL",
"whatsapp": true,
"ranking": 1
}
],
"emails": [
"<string>"
],
"enderecos": [
{
"logradouro": "<string>",
"numero": "<string>",
"complemento": "<string>",
"bairro": "<string>",
"cidade": "<string>",
"uf": "<string>",
"cep": "<string>"
}
]
},
"bruto": {}
}{
"erro": {
"codigo": "nao_encontrado",
"mensagem": "Documento não localizado.",
"detalhe": {}
}
}{
"erro": {
"codigo": "nao_encontrado",
"mensagem": "Documento não localizado.",
"detalhe": {}
}
}{
"erro": {
"codigo": "nao_encontrado",
"mensagem": "Documento não localizado.",
"detalhe": {}
}
}{
"erro": {
"codigo": "nao_encontrado",
"mensagem": "Documento não localizado.",
"detalhe": {}
}
}{
"erro": {
"codigo": "nao_encontrado",
"mensagem": "Documento não localizado.",
"detalhe": {}
}
}{
"erro": {
"codigo": "nao_encontrado",
"mensagem": "Documento não localizado.",
"detalhe": {}
}
}Consultar CPF
Devolve a ficha cadastral de uma pessoa física: identificação, contatos e endereços.
O dígito verificador é conferido antes de qualquer chamada paga, então um CPF inválido volta 400 sem custo. O mesmo CPF consultado nos últimos 30 dias volta do histórico, com cache: true, sem custo e sem consumir o teto da chave.
curl --request GET \
--url https://{instancia}/api/v1/cpf/{cpf} \
--header 'Authorization: Bearer <token>'import requests
url = "https://{instancia}/api/v1/cpf/{cpf}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{instancia}/api/v1/cpf/{cpf}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{instancia}/api/v1/cpf/{cpf}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{instancia}/api/v1/cpf/{cpf}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{instancia}/api/v1/cpf/{cpf}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{instancia}/api/v1/cpf/{cpf}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"consulta": {
"id": "cmtsr515m1uxzjn04ta469e3q",
"produto": "search-pf",
"documento": "12345678909",
"cache": false,
"consultadoEm": "2023-11-07T05:31:56Z",
"duracaoMs": 609
},
"pessoa": {
"cpf": "<string>",
"nome": "<string>",
"nomeMae": "<string>",
"nascimento": "<string>",
"idade": 123,
"sexo": "<string>",
"escolaridade": "<string>",
"rendaPresumida": "<string>",
"situacaoCadastral": "<string>",
"obito": true,
"telefones": [
{
"numero": "11987654321",
"ddd": "11",
"tipo": "TELEFONE MÓVEL",
"whatsapp": true,
"ranking": 1
}
],
"emails": [
"<string>"
],
"enderecos": [
{
"logradouro": "<string>",
"numero": "<string>",
"complemento": "<string>",
"bairro": "<string>",
"cidade": "<string>",
"uf": "<string>",
"cep": "<string>"
}
]
},
"bruto": {}
}{
"erro": {
"codigo": "nao_encontrado",
"mensagem": "Documento não localizado.",
"detalhe": {}
}
}{
"erro": {
"codigo": "nao_encontrado",
"mensagem": "Documento não localizado.",
"detalhe": {}
}
}{
"erro": {
"codigo": "nao_encontrado",
"mensagem": "Documento não localizado.",
"detalhe": {}
}
}{
"erro": {
"codigo": "nao_encontrado",
"mensagem": "Documento não localizado.",
"detalhe": {}
}
}{
"erro": {
"codigo": "nao_encontrado",
"mensagem": "Documento não localizado.",
"detalhe": {}
}
}{
"erro": {
"codigo": "nao_encontrado",
"mensagem": "Documento não localizado.",
"detalhe": {}
}
}search-pf da rota por produto.
Custa uma consulta
cache: true, sem custo e sem consumir o teto da chave.400 de graça. Isso não é só economia: o bureau não valida entrada e chega
a devolver a ficha de outra pessoa para um CPF com dígito errado.
Forçar dado novo:
GET /api/v1/cpf/12345678909?atualizar=true
{
"consulta": {
"id": "cmtsr515m1uxzjn04ta469e3q",
"produto": "search-pf",
"documento": "12345678909",
"cache": false,
"consultadoEm": "2026-09-08T14:15:35.207Z",
"duracaoMs": 609
},
"pessoa": {
"cpf": "12345678909",
"nome": "MARIA APARECIDA DA SILVA",
"nomeMae": "JOANA DA SILVA",
"nascimento": "1984-03-11T00:00:00",
"idade": 42,
"sexo": "F",
"escolaridade": "Superior completo",
"rendaPresumida": "De R$ 5.000 a R$ 10.000",
"situacaoCadastral": "REGULAR",
"obito": false,
"telefones": [
{ "numero": "11987654321", "ddd": "11", "tipo": "TELEFONE MÓVEL", "whatsapp": null, "ranking": 1 }
],
"emails": ["maria@exemplo.com.br"],
"enderecos": [
{
"logradouro": "RUA DAS ACACIAS",
"numero": "204",
"complemento": null,
"bairro": "VILA MARIANA",
"cidade": "SAO PAULO",
"uf": "SP",
"cep": "04101000"
}
]
},
"bruto": {}
}
Authorizations
Chave de API criada em Configurações, Integrações, Chaves de API. Começa com sk_live_ e aparece uma vez só. O cabeçalho X-API-Key também é aceito, com o mesmo valor.
Path Parameters
CPF com 11 dígitos. Pontuação é aceita e ignorada.
"12345678909"
Query Parameters
Ignora o histórico e paga uma consulta nova.
Response
Ficha encontrada.
Metadados da chamada.
Show child attributes
Show child attributes
A ficha em campos estáveis. Campo que o bureau não tem vem null, nunca preenchido por dedução.
Show child attributes
Show child attributes
A resposta original do bureau, sem tratamento. Existe para você não ficar sem informação que já foi paga, e é onde estão as coisas que ainda não têm campo próprio, como latitude do endereço, operadora do telefone e CBO do sócio. Programe contra os campos nomeados, que são o contrato.