Skip to content

Background Check (individual)

This endpoint assembles a full dossier of an individual from their CPF (the Brazilian individual taxpayer number). It is the longest response of the API: identification, addresses, phone numbers, company ownership interests, employment history, tax situation, administrative sanctions, political exposure, lawsuits and criminal history, all in a single body.

For a lean identification lookup — name, mother's name and date of birth — use the Individual Bureau, which is far cheaper and faster.

🚧 The body is passed through from the provider, with no transformation

Unlike the other data endpoints, here the API does not reassemble the response: whatever the provider returns is delivered as is, inside the standard envelope. Three practical consequences:

  • The field names are in Portuguese, in the provider's vocabulary (nome, situacaoCpf, nomeMae), and not in the English camelCase used by the rest of the API.
  • Every block is optional. A block only shows up when the provider has data for it. Never assume a key exists: test before accessing it.
  • There is no type guarantee. Since there is no conversion along the way, the same field may arrive as a number or as text depending on where the data came from. That is why the tables on this page describe the fields but do not pin down types.

Request

GET /background-check/v2/natural-person/{CPF}

Parameters

ParameterDescriptionRequired
CPFCPF of the person being queriedYes

The CPF can be sent with or without the mask (123.456.789-09 or 12345678909), always with all 11 digits, including any leading zeros. A CPF that fails the check-digit validation returns 422 before any lookup is performed.

Headers

http
Authorization: ApiKey <your-api-key>

Query parameters are ignored

This endpoint does not use query parameters. An unknown parameter in the URL does not raise an error: it is simply ignored, and the response comes back 200 as usual.

Example request

bash
curl -i 'https://api.nxcd.app/background-check/v2/natural-person/12345678909' \
  --header 'Authorization: ApiKey YOUR_API_KEY'

Response

The envelope is the API standard:

FieldDescriptionType
idUnique identifier of the requestString
versionAPI version that served the callString
dataThe dossier. Comes back empty ({}) when the CPF is not found.Object
metadataMetadata of the requestObject
metadata.timeSpentProcessing time of the request, in millisecondsNumber

data is assembled from the blocks below. None of them is guaranteed — each one shows up only when there is data.

BlockWhat it brings
IdentificationName, CPF, registration status, parentage, gender, age
DeathDeath indicators
Other recordsCNS, NIS and PIS
Contact and addressesEmail, phone numbers, current address and other addresses
Company ownershipCompanies in which the person appears as a partner
Employment historyEmployment relationships and address of the workplace
Tax situationIncome tax refund and debts registered with the PGFN/DAU
Sanctions and restricted listsCEIS, CNEP, Central Bank, MTE
Politically exposed personClassification as a PEP and first-degree relationships
LawsuitsTotals by type and lawsuits from the CNJ/CNIA
Criminal historyFederal Police certificate and open arrest warrants
_metadataDate and source of each block

Identification

FieldDescription
nomeFull name of the person
cpfCPF queried
situacaoCpfRegistration status of the CPF at the Brazilian Federal Revenue Service, for example REGULAR
cpfDataInscricaoDate the CPF was registered
idadeAge of the person
dataNascimentoDate of birth
sexoGender, for example FEMININO
nomeMaeMother's name
cpfMaeMother's CPF
tagsMarkers assigned to the record by the provider
json
{
  "nome": "MARIA JOAQUINA DE SOUZA",
  "cpf": "12345678909",
  "situacaoCpf": "REGULAR",
  "cpfDataInscricao": "2001-12-20",
  "idade": 34,
  "dataNascimento": "1991-01-01T12:00:00Z",
  "sexo": "FEMININO",
  "nomeMae": "ANA MARIA DE SOUZA",
  "cpfMae": "98765432100"
}

Death

FieldDescription
falecidoIndicates a death record
falecidoConfirmadoIndicates that the death was confirmed — it is the stronger of the two fields
anoFalecimentoYear of death
json
{
  "falecido": false,
  "falecidoConfirmado": false
}

Other records

FieldDescription
cnsNational Health Card (Cartão Nacional de Saúde, CNS)
nisSocial identification number (Número de Identificação Social, NIS)
pisSocial Integration Program (Programa de Integração Social, PIS)

Contact and addresses

endereco is the main address. enderecoOutros is a list with the other known addresses, and each item has the same fields as the main one. telefones is a list, and each phone number may come with the address associated with it.

FieldDescription
emailEmail
endereco.logradouroStreet address
endereco.numeroNumber
endereco.complementoAddress complement
endereco.bairroDistrict
endereco.municipioMunicipality
endereco.ufState
endereco.cepZIP code
enderecoOutros[]Other addresses, with the same eight fields as endereco
telefones[].numeroPhone number
telefones[].enderecoAddress associated with the phone number, with the same fields as endereco
json
{
  "endereco": {
    "logradouro": "R SAO BENTO",
    "numero": "1010",
    "bairro": "CENTRO",
    "municipio": "SAO PAULO",
    "uf": "SP",
    "cep": "01010000"
  },
  "enderecoOutros": [{ "uf": "SP" }],
  "telefones": [
    {
      "numero": "1155554444",
      "endereco": { "uf": "SP" }
    }
  ]
}

Company ownership

There are three distinct lists, with the same fifteen fields each. They differ by the source of the data, not by the format:

BlockWhat it is
participacaoSocietariaRF[]Interests according to the ownership structure held by the Federal Revenue Service
participacaoSocietaria[]Interests consolidated by the provider
participacaoSocietariaUnico[]A third view of the interests maintained by the provider

Fields of each item, in all three lists:

FieldDescription
cnpjCNPJ (the Brazilian company taxpayer number) of the company
razaoSocialCorporate name of the company
descricaoCnaeDescription of the company's CNAE (economic activity code)
ramoAtividadeLine of business
dataAberturaDate the company was opened
municipioMunicipality of the company
ufState of the company
situacaoRegistration status of the company
dataEntradaDate the person joined the ownership structure
qualificacaoRole of the partner, for example SOCIO ADMINISTRADOR
valorParticipacaoValue of the interest
capitalSocialEmpresaShare capital of the company
participacaoCapitalSocialThe person's share of the company's capital
faixaFaturamentoPresumidoPresumed revenue bracket of the company
faixaFaturamentoPresumidoGrupoPresumed revenue bracket of the company's economic group

Employment history

FieldDescription
historicoFuncional[].cnpjCNPJ of the employer
historicoFuncional[].razaoSocialCorporate name of the employer
historicoFuncional[].dataAdmissaoDate of hire
historicoFuncional[].dataDesligamentoDate of termination
historicoFuncional[].numeroMesesEmpresaTime at the company, in months
enderecoEmpregoRaisNovo.numeroNumber of the workplace address, according to the RAIS (the annual labor report)
enderecoEmpregoRaisNovo.bairroDistrict
enderecoEmpregoRaisNovo.municipioMunicipality
enderecoEmpregoRaisNovo.ufState
enderecoEmpregoRaisNovo.cepZIP code
enderecoEmpregoRaisNovo.precisaoGeoPrecision of the geolocation of the address
enderecoEmpregoRaisNovo.EnderecoResidencialIndicates whether the address is residential
enderecoEmpregoRaisNovo.telefonePhone number of the workplace address

🚧 EnderecoResidencial starts with a capital letter

Inside enderecoEmpregoRaisNovo, the field is EnderecoResidencial, with a capital E — unlike every neighboring field. That is how it arrives, and the API does not fix it. In the equivalent company block, the same piece of data is called enderecoResidencial, lowercase.

Tax situation

FieldDescription
irpf.anoTax year
irpf.situacaoStatus of the refund
irpf.bancoBank where the refund was credited
irpf.agenciaBranch where the refund was credited
irpf.loteRefund batch
irpf.dataDisponibilidadeDate the refund became available
irpfRestituicao.exercicios[].anoExercicioTax year
irpfRestituicao.exercicios[].situacaoStatus of the refund in that tax year
irpfRestituicao.exercicios[].nomeBancoBank where it was credited
irpfRestituicao.exercicios[].numAgenciaBranch where it was credited
irpfRestituicao.exercicios[].numLoteBatch
irpfRestituicao.exercicios[].dataDisponibilidadeDate it became available
debitosPgfnDau[].inscricaoRegistration number of the debt in the federal outstanding debt registry (PGFN/DAU)
debitosPgfnDau[].naturezaNature of the debt
debitosPgfnDau[].valorTotalTotal amount of the debt
debitosPgfnDau[].dataProcessamentoDate of processing

irpf and irpfRestituicao cover the same subject

Both bring the income tax refund, with different field names: irpf brings one tax year, and irpfRestituicao.exercicios[] brings the list. Read both — which of the two comes filled in depends on what the provider has for that CPF.

Sanctions and restricted lists

These are independent blocks, one per source register. Each one shows up only when there is a record.

ceis and pessoaCeis — the Register of Disreputable and Suspended Companies (Cadastro de Empresas Inidôneas e Suspensas, CEIS). Two views of the same register, in different formats: ceis is the sanction in flat fields, pessoaCeis groups the sanctions into a list and brings the possuiCeis indicator.

FieldDescription
ceis.codigoProcessoCode of the proceeding
ceis.tipoSancaoType of the sanction
ceis.dataInicioSancaoStart of the sanction
ceis.dataFimSancaoEnd of the sanction
ceis.fundamentacaoLegalLegal grounds
ceis.orgaoSancionadorBody that applied the sanction
ceis.ufOrgaoSancionadorState of the sanctioning body
ceis.origemInformacoesSource of the information
ceis.dataOrigemInformacoesDate of the source of the information
pessoaCeis.possuiCeisIndicates whether there is a record in the CEIS
pessoaCeis.sancoes[].processoNumber of the proceeding
pessoaCeis.sancoes[].tipoSancaoType of the sanction
pessoaCeis.sancoes[].periodoSancao.inicioStart of the sanction period
pessoaCeis.sancoes[].periodoSancao.finalEnd of the sanction period
pessoaCeis.sancoes[].fundamentacaoLegalLegal grounds
pessoaCeis.sancoes[].orgaoSancionadorBody that applied the sanction
pessoaCeis.sancoes[].complementoOrgaoAdditional detail on the sanctioning body
pessoaCeis.sancoes[].ufState
pessoaCeis.sancoes[].origemInformacaoSource of the information
pessoaCeis.sancoes[].dataInformacaoDate of the information

cnep — the National Register of Punished Companies (Cadastro Nacional de Empresas Punidas).

FieldDescription
cnep.processos[].numeroProcessoNumber of the proceeding
cnep.processos[].tipoSancaoType of the sanction
cnep.processos[].valorMultaAmount of the fine
cnep.processos[].dataInicioSancaoStart of the sanction
cnep.processos[].dataFinalSancaoEnd of the sanction
cnep.processos[].orgaoSancionadorBody that applied the sanction
cnep.processos[].ufOrgaoSancionadorState of the sanctioning body

bancoCentral — disqualifications and appellate rulings from the Brazilian Central Bank.

FieldDescription
bancoCentral.inabilitados[].penalidadePenalty applied
bancoCentral.inabilitados[].prazoTerm of the penalty
bancoCentral.inabilitados[].dataPublicacaoDate of publication
bancoCentral.inabilitados[].dataPrazoFinalPenalidadeEnd date of the penalty
bancoCentral.acordaos[].numeroRecursoNumber of the appeal
bancoCentral.acordaos[].numeroProcessoNumber of the proceeding
bancoCentral.acordaos[].numeroAcordaoCRSFNNumber of the ruling at the CRSFN
bancoCentral.acordaos[].recursoIdentification of the appeal
bancoCentral.acordaos[].parteParty involved in the ruling

The individual dossier has one extra block of disqualified people

In the Background Check (company), bancoCentral brings only acordaos[]. Here there is also inabilitados[].

mteCnd and mteTrabalhoEscravo — the Brazilian Ministry of Labor (MTE). mteCnd is the labor debt clearance certificate; mteTrabalhoEscravo is the register of employers caught using work analogous to slavery.

FieldDescription
mteCnd.tipoCertidaoType of the certificate
mteCnd.codigoCode of the certificate
mteCnd.dataEmissaoDate of issue
mteCnd.processos[].numeroNumber of the proceeding
mteCnd.processos[].situacaoProcessoStatus of the proceeding
mteCnd.processos[].categoriaInfracaoCategory of the violation
mteCnd.processos[].capitulacaoInfracaoLegal classification of the violation
mteTrabalhoEscravo.estabelecimentos[].anoAcaoFiscalYear of the enforcement action
mteTrabalhoEscravo.estabelecimentos[].dataDecisaoProcedenciaDate the claim was upheld
mteTrabalhoEscravo.estabelecimentos[].numeroTrabalhadoresEnvolvidosWorkers involved
mteTrabalhoEscravo.estabelecimentos[].estabelecimentoAddress of the establishment, with logradouro, complemento, municipio and uf

mteCnd.situacaoDebito only exists for companies; here the mteCnd block does not bring that field. See the Background Check (company).

Politically exposed person

FieldDescription
pessoaPoliticamenteExposta.funcaoPosition held
pessoaPoliticamenteExposta.orgaoGovernment body
pessoaPoliticamenteExposta.dataInicioExercicioStart of the term
pessoaPoliticamenteExposta.dataFimExercicioEnd of the term
pessoaPoliticamenteExposta.dataFimCarenciaEnd of the cooling-off period after leaving the position
pessoaPoliticamenteExposta.pessoaPEPNivelPrincipalClassification of the person at the main PEP level
pessoaPoliticamenteExposta.primarios[].nomeName of the related PEP
pessoaPoliticamenteExposta.primarios[].cpfCPF of the related PEP
pessoaPoliticamenteExposta.primarios[].funcaoPosition of the related PEP
pessoaPoliticamenteExposta.primarios[].relacaoType of relationship with the person queried
pessoaPoliticamenteExposta.primarios[].dataInicioExercicioStart of the term of the related person
pessoaPoliticamenteExposta.primarios[].dataFimCarenciaEnd of the cooling-off period of the related person

The primarios list is about other people

The fields at the root of pessoaPoliticamenteExposta describe the person queried. primarios[], on the other hand, brings the people in a primary relationship who are PEPs — it is what identifies someone who is a PEP by relationship rather than by holding the position.

Lawsuits

processoJudicialTotalizadores.quantidades[] brings one row per type of lawsuit, with the counts for that type. tipo takes values such as NUMERO DE PROCESSOS (the overall total), CRIMINAL, TRIBUTARIO, TRABALHISTA, ELEITORAL, MILITAR and CIVEL / ADMINISTRATIVO.

FieldDescription
processoJudicialTotalizadores.quantidades[].tipoType of lawsuit the counts refer to
processoJudicialTotalizadores.quantidades[].qtdTotalTotal of lawsuits of that type
processoJudicialTotalizadores.quantidades[].qtdAtivosLawsuits still in progress
processoJudicialTotalizadores.quantidades[].qtdParteAtivaLawsuits in which the person is on the claimant side
processoJudicialTotalizadores.quantidades[].qtdPartePassivaLawsuits in which the person is on the respondent side
processoJudicialTotalizadores.quantidades[].qtdOutrasPartesLawsuits in which the person appears in another position
cnjCnia.processos[].numeroProcessoNumber of the lawsuit at the CNJ/CNIA
cnjCnia.processos[].dataCadastramentoDate of registration
cnjCnia.processos[].esferaSphere of the lawsuit
cnjCnia.processos[].descricaoOrgaoJudicial body hearing the case
cnjCnia.processos[].cargoFuncao.ufState of the position or role related to the lawsuit
cnjCnia.processos[].assuntosRelacionadosSubject matters related to the lawsuit
cnjCnia.processos[].ressarcimentoIntegralDano.valorAmount of the full compensation for the damage
json
{
  "processoJudicialTotalizadores": {
    "quantidades": [
      { "tipo": "NUMERO DE PROCESSOS", "qtdTotal": 65, "qtdAtivos": 4, "qtdParteAtiva": 27, "qtdPartePassiva": 3, "qtdOutrasPartes": 35 },
      { "tipo": "CRIMINAL", "qtdTotal": 21, "qtdAtivos": 1, "qtdParteAtiva": 10, "qtdPartePassiva": 1, "qtdOutrasPartes": 10 },
      { "tipo": "TRIBUTARIO", "qtdTotal": 0, "qtdAtivos": 0, "qtdParteAtiva": 0, "qtdPartePassiva": 0, "qtdOutrasPartes": 0 },
      { "tipo": "CIVEL / ADMINISTRATIVO", "qtdTotal": 44, "qtdAtivos": 3, "qtdParteAtiva": 17, "qtdPartePassiva": 2, "qtdOutrasPartes": 25 }
    ]
  }
}

Criminal history

Brings the lookup at the National Criminal Information System (Sistema Nacional de Informações Criminais, SINIC) and the open arrest warrants.

FieldDescription
historicoCriminal.statusResult of the lookup, for example CERTIDAO EMITIDA
historicoCriminal.situacaoText of the certificate issued by the Brazilian Federal Police
historicoCriminal.protocoloProtocol number of the lookup
historicoCriminal.dataConsultaDate the lookup was performed
historicoCriminal.possuiMandadosIndicates whether there are open warrants
historicoCriminal.mandados[].numeroMandadoNumber of the warrant
historicoCriminal.mandados[].numeroProcessoNumber of the lawsuit behind the warrant
historicoCriminal.mandados[].situacaoMandadoStatus of the warrant
historicoCriminal.mandados[].classeClass of the warrant
historicoCriminal.mandados[].dataMandadoDate of issue
historicoCriminal.mandados[].dataValidadeExpiry date
json
{
  "historicoCriminal": {
    "status": "CERTIDAO EMITIDA",
    "situacao": "A POLICIA FEDERAL CERTIFICA APOS PESQUISA NO SISTEMA NACIONAL DE INFORMACOES CRIMINAIS SINIC QUE ATE A PRESENTE DATA NAO CONSTA DECISAO JUDICIAL CONDENATORIA COM TRANSITO EM JULGADO",
    "protocolo": "25467342019",
    "dataConsulta": "2025-04-23T21:01:12"
  }
}

_metadata

Apart from the metadata of the envelope, data itself brings a _metadata with the provenance of each block: when the data was collected, which source it came from, and whether the lookup found nothing.

The keys of _metadata are the internal names of the sources (pessoas, pessoa-ceis, pessoa-cnep, pessoa-banco-central, pessoa-historico-criminal, pessoa-mte-trabalho-escravo…), and they vary with the blocks that came filled in. Each one brings some of these fields:

FieldDescription
noMatchFoundtrue when the source was queried and found no record
sourceList with the origin sources of the data
processingTimestampWhen the source processed the data
lastUpdateLast update of the data in the provider's database
insertDateWhen the data entered the provider's database
updatedAtWhen the record was last updated

noMatchFound is the difference between "there is none" and "it was not queried"

A block missing from data can mean two things. If the corresponding source appears in _metadata with noMatchFound: true, the lookup was performed and nothing was found — a clean result. If the source does not appear in _metadata, there is no such guarantee.

json
{
  "_metadata": {
    "pessoas": {
      "_metadata": {
        "pessoas": {
          "processingTimestamp": "2025-05-07T07:07:11Z",
          "source": ["RECEITA FEDERAL"]
        }
      },
      "lastUpdate": "2025-10-05T08:44:10.434Z",
      "updatedAt": "2025-10-05T10:33:04.887Z"
    },
    "pessoa-ceis": { "noMatchFound": true },
    "pessoa-cnep": { "noMatchFound": true },
    "pessoa-banco-central": { "noMatchFound": true },
    "pessoa-mte-trabalho-escravo": { "noMatchFound": true },
    "pessoa-historico-criminal": {
      "insertDate": "2025-04-23T21:01:13.057Z",
      "lastUpdate": "2025-04-23T21:01:13Z",
      "processingTimestamp": "2025-04-23T21:01:12Z",
      "source": ["cac-dpf"],
      "updatedAt": "2025-04-23T21:01:14.019Z"
    }
  }
}

Full example

A response with the most common blocks filled in. Blocks with no data simply do not appear — in a real lookup, expecting all of them is the most frequent integration mistake.

Status Code: 200
json
{
  "id": "13cfec7c-b238-4820-a4d1-5173e4c1418e",
  "version": "v2",
  "data": {
    "_metadata": {
      "pessoas": {
        "lastUpdate": "2025-10-05T08:44:10.434Z",
        "updatedAt": "2025-10-05T10:33:04.887Z"
      },
      "pessoa-ceis": { "noMatchFound": true },
      "pessoa-cnep": { "noMatchFound": true },
      "pessoa-banco-central": { "noMatchFound": true },
      "pessoa-mte-trabalho-escravo": { "noMatchFound": true }
    },
    "nome": "MARIA JOAQUINA DE SOUZA",
    "cpf": "12345678909",
    "situacaoCpf": "REGULAR",
    "cpfDataInscricao": "2001-12-20",
    "idade": 34,
    "dataNascimento": "1991-01-01T12:00:00Z",
    "sexo": "FEMININO",
    "nomeMae": "ANA MARIA DE SOUZA",
    "cpfMae": "98765432100",
    "falecido": false,
    "falecidoConfirmado": false,
    "endereco": {
      "logradouro": "R SAO BENTO",
      "numero": "1010",
      "bairro": "CENTRO",
      "municipio": "SAO PAULO",
      "uf": "SP",
      "cep": "01010000"
    },
    "enderecoOutros": [{ "uf": "SP" }],
    "telefones": [
      {
        "numero": "1155554444",
        "endereco": { "uf": "SP" }
      }
    ],
    "historicoCriminal": {
      "status": "CERTIDAO EMITIDA",
      "situacao": "A POLICIA FEDERAL CERTIFICA APOS PESQUISA NO SISTEMA NACIONAL DE INFORMACOES CRIMINAIS SINIC QUE ATE A PRESENTE DATA NAO CONSTA DECISAO JUDICIAL CONDENATORIA COM TRANSITO EM JULGADO",
      "protocolo": "25467342019",
      "dataConsulta": "2025-04-23T21:01:12"
    },
    "processoJudicialTotalizadores": {
      "quantidades": [
        { "tipo": "NUMERO DE PROCESSOS", "qtdTotal": 65, "qtdAtivos": 4, "qtdParteAtiva": 27, "qtdPartePassiva": 3, "qtdOutrasPartes": 35 },
        { "tipo": "CRIMINAL", "qtdTotal": 21, "qtdAtivos": 1, "qtdParteAtiva": 10, "qtdPartePassiva": 1, "qtdOutrasPartes": 10 },
        { "tipo": "CIVEL / ADMINISTRATIVO", "qtdTotal": 44, "qtdAtivos": 3, "qtdParteAtiva": 17, "qtdPartePassiva": 2, "qtdOutrasPartes": 25 }
      ]
    }
  },
  "metadata": {
    "timeSpent": 4200
  }
}

When the CPF is not found

data comes back empty. The response is still 200.

Status Code: 200
json
{
  "id": "13cfec7c-b238-4820-a4d1-5173e4c1418e",
  "version": "v2",
  "data": {},
  "metadata": {
    "timeSpent": 1100
  }
}

Response headers

HeaderWhen it appears
Nextid-ReqIdOn every response. Carries the request identifier, the same one as the id field of the body.

Errors

CodeWhen it happens
401 UnauthorizedAPI key missing, invalid, or without the nextid.bureaus.backgroundCheckPerson permission.
404 Not FoundThe version informed in the URL does not exist. Only v2 is accepted.
422 Unprocessable EntityCPF that fails the check-digit validation.
500 Internal Server ErrorUnexpected failure during processing.

Example of a response with an invalid CPF:

Status Code: 422
json
{
  "id": "13cfec7c-b238-4820-a4d1-5173e4c1418e",
  "error": {
    "statusCode": 422,
    "error": "Unprocessable Entity",
    "message": "Invalid Federal Revenue Number"
  }
}

The format of the error responses is described in HTTP response codes.

Versions

The only version is v2, and it is the one that answers when the version is omitted from the URL. /background-check/natural-person/{CPF} and /background-check/v2/natural-person/{CPF} are equivalent.

VersionStatusWhat changes
v2RecommendedThe only version. It is what answers when the version is omitted from the URL.

Any other value in place of v2 returns 404.

For the dossier of a company, see Background Check (company).

Nextcode | Identity Verification Solutions