Individual Holmes

Query official bureaus and Stark Infra's internal datasets to investigate an individual (CPF). Each request targets a specific bureau by type and returns the structured payload of that bureau alongside a paging cursor.

Use Individual Holmes to run KYC, anti-fraud, judicial, sanctions and federal-revenue checks on a person before onboarding, granting credit or releasing a high-risk operation.

Every call is synchronous, scoped to your workspace and logged on Stark Infra's side — there is no resource lifecycle to track.

NOTE: Read Core Concepts before continuing this guide.

RESOURCE SUMMARY
Single GET endpoint that dispatches to one bureau per call and returns its raw, structured payload.

Setup

For each environment (Sandbox and Production):

1. Create an account at Stark Bank.

2. Get in touch with your account manager to enable Individual Holmes on your workspace — each bureau is contracted independently, so let us know which type values you intend to use.

3. Have the CPF you want to investigate ready in unmasked or masked form — Stark Infra normalizes both. For type=internationalPep, use the person's full name instead of a CPF.

4. Generate your ECDSA credentials by following How to Create ECDSA Keys and authenticate every request with the Access-Id, Access-Time and Access-Signature headers.

Individual Holmes Overview

Individual Holmes investigates a person (CPF) against an external bureau or an internal dataset. Every request targets a specific bureau by type; the response wraps the bureau's raw payload under a key named exactly after the type you queried.

All bureaus are queried through the same endpoint signature, with the same validation pipeline and the same paging contract. Only the two JusBrasil bureaus — civil and criminal — return a real cursor; every other bureau returns null (or [] for internationalPep).

Query an Individual Bureau

Path params identify what to look up. The searchKey is a CPF (11 digits, masked or unmasked) for every bureau except internationalPep, where it is the person's full name. The type selects the bureau and the shape of the response.

Query params control paging. Only civil and criminal honour cursor — repeat the request with the returned cursor to fetch the next page.

ENDPOINT
GET /individual-holmes/:searchKey/:type

Response Envelope

Every successful response carries the bureau's payload under a key named after the type queried, plus a cursor field. The concrete envelope for each bureau is shown in the sections below.

Cursor semantics: populated only for civil/criminal. null for every other bureau. [] for internationalPep (it returns an array sentinel instead of a string cursor).

Civil Lawsuits

Civil lawsuits sourced from JusBrasil. Paginated — repeat with the returned cursor until null. Returns a list of processes; typification is always [] for civil.

Python

import starkinfra

result = starkinfra.individualholmes.get(
    search_key="01234567890",
    type="civil",
    limit=50,
)

print(result)
  

Javascript

const starkinfra = require('starkinfra')

const result = await starkinfra.individualHolmes.get({
    searchKey: "01234567890",
    type: "civil",
    limit: 50
})

console.log(result)
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

curl --location --request GET '{{baseUrl}}/individual-holmes/01234567890/civil?limit=50' \
--header 'Access-Id: {{accessId}}' \
--header 'Access-Time: {{accessTime}}' \
--header 'Access-Signature: {{accessSignature}}'
  
RESPONSE

Python

{
    "cursor": "ChsSFWoNZX5zdGFyay1iYW5rcgwLEgVDaXZpbBgBDA==",
    "civil": [
        {
            "processType": "Civil",
            "latestUpdateDate": "2026-05-18",
            "associationConfidence": "ALTA",
            "status": {
                "date": "2026-05-18",
                "inferred": "Ativo",
                "normalized": "Em andamento",
                "court": null
            },
            "identifiedTypification": null,
            "typification": [],
            "occurrenceType": "Procedimento Comum Cível",
            "occurrenceDescription": "Procedimento Comum Cível",
            "legislation": "Lei nº 13.105/2015",
            "nature": "PROCEDIMENTO COMUM CÍVEL",
            "proceduralClass": "OUTROS",
            "subject": "DIREITO CIVIL (899) - Obrigações (10431) - Espécies de Contratos (7681)",
            "processYear": "2025",
            "role": "Autor",
            "processNumber": "1023456-78.2025.8.26.0100",
            "relatedProcesses": null,
            "link": "https://www.jusbrasil.com.br/consulta-pro/processos/1023456-78.2025.8.26.0100"
        }
    ]
}
  

Javascript

{
    "cursor": "ChsSFWoNZX5zdGFyay1iYW5rcgwLEgVDaXZpbBgBDA==",
    "civil": [
        {
            "processType": "Civil",
            "latestUpdateDate": "2026-05-18",
            "associationConfidence": "ALTA",
            "status": {
                "date": "2026-05-18",
                "inferred": "Ativo",
                "normalized": "Em andamento",
                "court": null
            },
            "identifiedTypification": null,
            "typification": [],
            "occurrenceType": "Procedimento Comum Cível",
            "occurrenceDescription": "Procedimento Comum Cível",
            "legislation": "Lei nº 13.105/2015",
            "nature": "PROCEDIMENTO COMUM CÍVEL",
            "proceduralClass": "OUTROS",
            "subject": "DIREITO CIVIL (899) - Obrigações (10431) - Espécies de Contratos (7681)",
            "processYear": "2025",
            "role": "Autor",
            "processNumber": "1023456-78.2025.8.26.0100",
            "relatedProcesses": null,
            "link": "https://www.jusbrasil.com.br/consulta-pro/processos/1023456-78.2025.8.26.0100"
        }
    ]
}
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

{
    "cursor": "ChsSFWoNZX5zdGFyay1iYW5rcgwLEgVDaXZpbBgBDA==",
    "civil": [
        {
            "processType": "Civil",
            "latestUpdateDate": "2026-05-18",
            "associationConfidence": "ALTA",
            "status": {
                "date": "2026-05-18",
                "inferred": "Ativo",
                "normalized": "Em andamento",
                "court": null
            },
            "identifiedTypification": null,
            "typification": [],
            "occurrenceType": "Procedimento Comum Cível",
            "occurrenceDescription": "Procedimento Comum Cível",
            "legislation": "Lei nº 13.105/2015",
            "nature": "PROCEDIMENTO COMUM CÍVEL",
            "proceduralClass": "OUTROS",
            "subject": "DIREITO CIVIL (899) - Obrigações (10431) - Espécies de Contratos (7681)",
            "processYear": "2025",
            "role": "Autor",
            "processNumber": "1023456-78.2025.8.26.0100",
            "relatedProcesses": null,
            "link": "https://www.jusbrasil.com.br/consulta-pro/processos/1023456-78.2025.8.26.0100"
        }
    ]
}
  

Criminal Lawsuits

Same JusBrasil source as civil. Returns a list of processes with the same shape, but the typification field is populated with the criminal codes invoked.

Python

import starkinfra

result = starkinfra.individualholmes.get(
    search_key="01234567890",
    type="criminal",
    limit=50,
)

print(result)
  

Javascript

const starkinfra = require('starkinfra')

const result = await starkinfra.individualHolmes.get({
    searchKey: "01234567890",
    type: "criminal",
    limit: 50
})

console.log(result)
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

curl --location --request GET '{{baseUrl}}/individual-holmes/01234567890/criminal?limit=50' \
--header 'Access-Id: {{accessId}}' \
--header 'Access-Time: {{accessTime}}' \
--header 'Access-Signature: {{accessSignature}}'
  
RESPONSE

Python

{
    "cursor": null,
    "criminal": [
        {
            "processType": "Criminal",
            "latestUpdateDate": "2026-04-02",
            "associationConfidence": "ALTA",
            "status": {
                "date": "2026-04-02",
                "inferred": "Arquivado",
                "normalized": "Extinto",
                "court": "Extinto"
            },
            "identifiedTypification": "Crime contra o patrimônio",
            "typification": [
                {
                    "occurrenceCode": "171",
                    "occurrenceType": "Estelionato",
                    "occurrenceDescription": "Obter, para si ou para outrem, vantagem ilícita, em prejuízo alheio, induzindo ou mantendo alguém em erro",
                    "legislation": [
                        {"lei": "Art. 171 do Código Penal", "pena_prevista": "Reclusão, de 1 a 5 anos, e multa"}
                    ]
                }
            ],
            "occurrenceType": "Ação Penal",
            "occurrenceDescription": "Ação Penal - Procedimento Ordinário",
            "legislation": "Decreto-Lei nº 2.848/1940",
            "nature": "Ação Penal de Competência do Juiz Singular",
            "proceduralClass": "PROCEDIMENTO COMUM CRIMINAL",
            "subject": "DIREITO PENAL (287) - Crimes contra o Patrimônio (3372) - Estelionato (3392)",
            "processYear": "2023",
            "role": "Réu",
            "processNumber": "0098765-43.2023.8.13.0024",
            "relatedProcesses": null,
            "link": "https://www.jusbrasil.com.br/consulta-pro/processos/0098765-43.2023.8.13.0024"
        }
    ]
}
  

Javascript

{
    "cursor": null,
    "criminal": [
        {
            "processType": "Criminal",
            "latestUpdateDate": "2026-04-02",
            "associationConfidence": "ALTA",
            "status": {
                "date": "2026-04-02",
                "inferred": "Arquivado",
                "normalized": "Extinto",
                "court": "Extinto"
            },
            "identifiedTypification": "Crime contra o patrimônio",
            "typification": [
                {
                    "occurrenceCode": "171",
                    "occurrenceType": "Estelionato",
                    "occurrenceDescription": "Obter, para si ou para outrem, vantagem ilícita, em prejuízo alheio, induzindo ou mantendo alguém em erro",
                    "legislation": [
                        {"lei": "Art. 171 do Código Penal", "pena_prevista": "Reclusão, de 1 a 5 anos, e multa"}
                    ]
                }
            ],
            "occurrenceType": "Ação Penal",
            "occurrenceDescription": "Ação Penal - Procedimento Ordinário",
            "legislation": "Decreto-Lei nº 2.848/1940",
            "nature": "Ação Penal de Competência do Juiz Singular",
            "proceduralClass": "PROCEDIMENTO COMUM CRIMINAL",
            "subject": "DIREITO PENAL (287) - Crimes contra o Patrimônio (3372) - Estelionato (3392)",
            "processYear": "2023",
            "role": "Réu",
            "processNumber": "0098765-43.2023.8.13.0024",
            "relatedProcesses": null,
            "link": "https://www.jusbrasil.com.br/consulta-pro/processos/0098765-43.2023.8.13.0024"
        }
    ]
}
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

{
    "cursor": null,
    "criminal": [
        {
            "processType": "Criminal",
            "latestUpdateDate": "2026-04-02",
            "associationConfidence": "ALTA",
            "status": {
                "date": "2026-04-02",
                "inferred": "Arquivado",
                "normalized": "Extinto",
                "court": "Extinto"
            },
            "identifiedTypification": "Crime contra o patrimônio",
            "typification": [
                {
                    "occurrenceCode": "171",
                    "occurrenceType": "Estelionato",
                    "occurrenceDescription": "Obter, para si ou para outrem, vantagem ilícita, em prejuízo alheio, induzindo ou mantendo alguém em erro",
                    "legislation": [
                        {"lei": "Art. 171 do Código Penal", "pena_prevista": "Reclusão, de 1 a 5 anos, e multa"}
                    ]
                }
            ],
            "occurrenceType": "Ação Penal",
            "occurrenceDescription": "Ação Penal - Procedimento Ordinário",
            "legislation": "Decreto-Lei nº 2.848/1940",
            "nature": "Ação Penal de Competência do Juiz Singular",
            "proceduralClass": "PROCEDIMENTO COMUM CRIMINAL",
            "subject": "DIREITO PENAL (287) - Crimes contra o Patrimônio (3372) - Estelionato (3392)",
            "processYear": "2023",
            "role": "Réu",
            "processNumber": "0098765-43.2023.8.13.0024",
            "relatedProcesses": null,
            "link": "https://www.jusbrasil.com.br/consulta-pro/processos/0098765-43.2023.8.13.0024"
        }
    ]
}
  

Fraud Score

Quod anti-fraud score for the CPF. Not paginated.

Python

import starkinfra

result = starkinfra.individualholmes.get(
    search_key="01234567890",
    type="frauds",
)

print(result)
  

Javascript

const starkinfra = require('starkinfra')

const result = await starkinfra.individualHolmes.get({
    searchKey: "01234567890",
    type: "frauds"
})

console.log(result)
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

curl --location --request GET '{{baseUrl}}/individual-holmes/01234567890/frauds' \
--header 'Access-Id: {{accessId}}' \
--header 'Access-Time: {{accessTime}}' \
--header 'Access-Signature: {{accessSignature}}'
  
RESPONSE

Python

{
    "cursor": null,
    "frauds": {
        "type": "normal",
        "reason": "no-confirmed-fraud",
        "risk": "low",
        "totalConfirmedFrauds": 0,
        "frauds": [
            {"reason": "identity-theft", "date": "2025-09-14", "channel": "pix", "isConfirmed": "SIM"}
        ]
    }
}
  

Javascript

{
    "cursor": null,
    "frauds": {
        "type": "normal",
        "reason": "no-confirmed-fraud",
        "risk": "low",
        "totalConfirmedFrauds": 0,
        "frauds": [
            {"reason": "identity-theft", "date": "2025-09-14", "channel": "pix", "isConfirmed": "SIM"}
        ]
    }
}
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

{
    "cursor": null,
    "frauds": {
        "type": "normal",
        "reason": "no-confirmed-fraud",
        "risk": "low",
        "totalConfirmedFrauds": 0,
        "frauds": [
            {"reason": "identity-theft", "date": "2025-09-14", "channel": "pix", "isConfirmed": "SIM"}
        ]
    }
}
  

Registration Data

BigDataCorp registration data (dataset pessoas/registration_data). Not paginated. Empty result returns [].

Python

import starkinfra

result = starkinfra.individualholmes.get(
    search_key="01234567890",
    type="data",
)

print(result)
  

Javascript

const starkinfra = require('starkinfra')

const result = await starkinfra.individualHolmes.get({
    searchKey: "01234567890",
    type: "data"
})

console.log(result)
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

curl --location --request GET '{{baseUrl}}/individual-holmes/01234567890/data' \
--header 'Access-Id: {{accessId}}' \
--header 'Access-Time: {{accessTime}}' \
--header 'Access-Signature: {{accessSignature}}'
  
RESPONSE

Python

{
    "cursor": null,
    "data": {
        "fullName": "MARIA EDUARDA SILVA OLIVEIRA",
        "birthData": "1991-04-12",
        "motherName": "JOANA MARIA SILVA",
        "address": {
            "primary": {
                "street": "Avenida Brigadeiro Faria Lima",
                "number": "1234",
                "complement": "Apto 502",
                "neighborhood": "Itaim Bibi",
                "city": "São Paulo",
                "state": "SP",
                "zipCode": "04538-132"
            },
            "secondary": {
                "street": "Rua das Palmeiras",
                "number": "87",
                "complement": "",
                "neighborhood": "Centro",
                "city": "Campinas",
                "state": "SP",
                "zipCode": "13010-090"
            }
        },
        "emails": ["maria.eduarda@example.com"],
        "taxIdStatus": "REGULAR",
        "hasObitIndication": false
    }
}
  

Javascript

{
    "cursor": null,
    "data": {
        "fullName": "MARIA EDUARDA SILVA OLIVEIRA",
        "birthData": "1991-04-12",
        "motherName": "JOANA MARIA SILVA",
        "address": {
            "primary": {
                "street": "Avenida Brigadeiro Faria Lima",
                "number": "1234",
                "complement": "Apto 502",
                "neighborhood": "Itaim Bibi",
                "city": "São Paulo",
                "state": "SP",
                "zipCode": "04538-132"
            },
            "secondary": {
                "street": "Rua das Palmeiras",
                "number": "87",
                "complement": "",
                "neighborhood": "Centro",
                "city": "Campinas",
                "state": "SP",
                "zipCode": "13010-090"
            }
        },
        "emails": ["maria.eduarda@example.com"],
        "taxIdStatus": "REGULAR",
        "hasObitIndication": false
    }
}
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

{
    "cursor": null,
    "data": {
        "fullName": "MARIA EDUARDA SILVA OLIVEIRA",
        "birthData": "1991-04-12",
        "motherName": "JOANA MARIA SILVA",
        "address": {
            "primary": {
                "street": "Avenida Brigadeiro Faria Lima",
                "number": "1234",
                "complement": "Apto 502",
                "neighborhood": "Itaim Bibi",
                "city": "São Paulo",
                "state": "SP",
                "zipCode": "04538-132"
            },
            "secondary": {
                "street": "Rua das Palmeiras",
                "number": "87",
                "complement": "",
                "neighborhood": "Centro",
                "city": "Campinas",
                "state": "SP",
                "zipCode": "13010-090"
            }
        },
        "emails": ["maria.eduarda@example.com"],
        "taxIdStatus": "REGULAR",
        "hasObitIndication": false
    }
}
  

Pix User

Looks the CPF up on Stark Infra's internal Dict (Pix directory) microservice. Returns the raw user object on success.

Python

import starkinfra

result = starkinfra.individualholmes.get(
    search_key="01234567890",
    type="dict",
)

print(result)
  

Javascript

const starkinfra = require('starkinfra')

const result = await starkinfra.individualHolmes.get({
    searchKey: "01234567890",
    type: "dict"
})

console.log(result)
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

curl --location --request GET '{{baseUrl}}/individual-holmes/01234567890/dict' \
--header 'Access-Id: {{accessId}}' \
--header 'Access-Time: {{accessTime}}' \
--header 'Access-Signature: {{accessSignature}}'
  
RESPONSE

Python

{
    "cursor": null,
    "dict": {
        "name": "MARIA EDUARDA SILVA OLIVEIRA",
        "taxIdNumber": "012.345.678-90",
        "personType": "naturalPerson",
        "keys": [
            {"key": "maria.eduarda@example.com", "type": "email", "status": "registered"},
            {"key": "+5511987654321", "type": "phone", "status": "registered"},
            {"key": "012.345.678-90", "type": "taxId", "status": "registered"}
        ]
    }
}
  

Javascript

{
    "cursor": null,
    "dict": {
        "name": "MARIA EDUARDA SILVA OLIVEIRA",
        "taxIdNumber": "012.345.678-90",
        "personType": "naturalPerson",
        "keys": [
            {"key": "maria.eduarda@example.com", "type": "email", "status": "registered"},
            {"key": "+5511987654321", "type": "phone", "status": "registered"},
            {"key": "012.345.678-90", "type": "taxId", "status": "registered"}
        ]
    }
}
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

{
    "cursor": null,
    "dict": {
        "name": "MARIA EDUARDA SILVA OLIVEIRA",
        "taxIdNumber": "012.345.678-90",
        "personType": "naturalPerson",
        "keys": [
            {"key": "maria.eduarda@example.com", "type": "email", "status": "registered"},
            {"key": "+5511987654321", "type": "phone", "status": "registered"},
            {"key": "012.345.678-90", "type": "taxId", "status": "registered"}
        ]
    }
}
  

KYC & National PEP

Both kyc and nationalPep share the same BigDataCorp pessoas/kyc dataset and return the same payload. Not paginated. Empty result returns {}. The history[] is filtered to entries with matchRate >= 80.

Python

import starkinfra

result = starkinfra.individualholmes.get(
    search_key="01234567890",
    type="kyc",
)

print(result)
  

Javascript

const starkinfra = require('starkinfra')

const result = await starkinfra.individualHolmes.get({
    searchKey: "01234567890",
    type: "kyc"
})

console.log(result)
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

curl --location --request GET '{{baseUrl}}/individual-holmes/01234567890/kyc' \
--header 'Access-Id: {{accessId}}' \
--header 'Access-Time: {{accessTime}}' \
--header 'Access-Signature: {{accessSignature}}'
  
RESPONSE

Python

{
    "cursor": null,
    "kyc": {
        "isPEP": false,
        "wasPreviouslySanctioned": true,
        "isCurrentlySanctioned": false,
        "history": [
            {
                "matchRate": 92,
                "source": "ofac",
                "standardizedSanctionType": "ECONOMIC SANCTIONS",
                "type": "Financial",
                "creationDate": "2019-08-15T00:00:00",
                "endDate": "2023-11-30T00:00:00",
                "charges": "money laundering",
                "sanctionName": "MARIA E. S. OLIVEIRA"
            }
        ]
    }
}
  

Javascript

{
    "cursor": null,
    "kyc": {
        "isPEP": false,
        "wasPreviouslySanctioned": true,
        "isCurrentlySanctioned": false,
        "history": [
            {
                "matchRate": 92,
                "source": "ofac",
                "standardizedSanctionType": "ECONOMIC SANCTIONS",
                "type": "Financial",
                "creationDate": "2019-08-15T00:00:00",
                "endDate": "2023-11-30T00:00:00",
                "charges": "money laundering",
                "sanctionName": "MARIA E. S. OLIVEIRA"
            }
        ]
    }
}
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

{
    "cursor": null,
    "kyc": {
        "isPEP": false,
        "wasPreviouslySanctioned": true,
        "isCurrentlySanctioned": false,
        "history": [
            {
                "matchRate": 92,
                "source": "ofac",
                "standardizedSanctionType": "ECONOMIC SANCTIONS",
                "type": "Financial",
                "creationDate": "2019-08-15T00:00:00",
                "endDate": "2023-11-30T00:00:00",
                "charges": "money laundering",
                "sanctionName": "MARIA E. S. OLIVEIRA"
            }
        ]
    }
}
  

International PEP

Queries Stark's BigQuery PEP table. Unlike every other bureau, the searchKey is a full name, not a CPF — Stark Infra normalises it (uppercase, accents removed) before matching.

The result is an array of raw BigQuery rows. The page size is fixed at 1000 — the limit query param is ignored. The envelope's cursor field is [] (sentinel value).

Python

import starkinfra

result = starkinfra.individualholmes.get(
    search_key="MARIA DA SILVA",
    type="internationalPep",
)

print(result)
  

Javascript

const starkinfra = require('starkinfra')

const result = await starkinfra.individualHolmes.get({
    searchKey: "MARIA DA SILVA",
    type: "internationalPep"
})

console.log(result)
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

curl --location --request GET '{{baseUrl}}/individual-holmes/MARIA%20DA%20SILVA/internationalPep' \
--header 'Access-Id: {{accessId}}' \
--header 'Access-Time: {{accessTime}}' \
--header 'Access-Signature: {{accessSignature}}'
  
RESPONSE

Python

{
    "cursor": [],
    "internationalPep": [
        {
            "name": "MARIA DA SILVA",
            "country": "BRAZIL",
            "position": "Federal Senator",
            "startDate": "2023-02-01",
            "endDate": null,
            "source": "official-gazette"
        }
    ]
}
  

Javascript

{
    "cursor": [],
    "internationalPep": [
        {
            "name": "MARIA DA SILVA",
            "country": "BRAZIL",
            "position": "Federal Senator",
            "startDate": "2023-02-01",
            "endDate": null,
            "source": "official-gazette"
        }
    ]
}
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

{
    "cursor": [],
    "internationalPep": [
        {
            "name": "MARIA DA SILVA",
            "country": "BRAZIL",
            "position": "Federal Senator",
            "startDate": "2023-02-01",
            "endDate": null,
            "source": "official-gazette"
        }
    ]
}
  

Joint Resolution 6

Quod's RUFRA block, used to comply with Brazilian Joint Resolution 6 (BCB/CMN). Not paginated.

Python

import starkinfra

result = starkinfra.individualholmes.get(
    search_key="01234567890",
    type="jointResolution6",
)

print(result)
  

Javascript

const starkinfra = require('starkinfra')

const result = await starkinfra.individualHolmes.get({
    searchKey: "01234567890",
    type: "jointResolution6"
})

console.log(result)
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

curl --location --request GET '{{baseUrl}}/individual-holmes/01234567890/jointResolution6' \
--header 'Access-Id: {{accessId}}' \
--header 'Access-Time: {{accessTime}}' \
--header 'Access-Signature: {{accessSignature}}'
  
RESPONSE

Python

{
    "cursor": null,
    "jointResolution6": {
        "rufra": {
            "isPresent": false,
            "lastUpdate": "2026-06-10T00:00:00",
            "occurrences": []
        }
    }
}
  

Javascript

{
    "cursor": null,
    "jointResolution6": {
        "rufra": {
            "isPresent": false,
            "lastUpdate": "2026-06-10T00:00:00",
            "occurrences": []
        }
    }
}
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

{
    "cursor": null,
    "jointResolution6": {
        "rufra": {
            "isPresent": false,
            "lastUpdate": "2026-06-10T00:00:00",
            "occurrences": []
        }
    }
}
  

UN Security Council

Filters BigDataCorp's pessoas/kyc sanction history down to entries with Source == unsc — UN Security Council sanctions only. Not paginated. Empty result returns {}.

Python

import starkinfra

result = starkinfra.individualholmes.get(
    search_key="01234567890",
    type="csnu",
)

print(result)
  

Javascript

const starkinfra = require('starkinfra')

const result = await starkinfra.individualHolmes.get({
    searchKey: "01234567890",
    type: "csnu"
})

console.log(result)
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

curl --location --request GET '{{baseUrl}}/individual-holmes/01234567890/csnu' \
--header 'Access-Id: {{accessId}}' \
--header 'Access-Time: {{accessTime}}' \
--header 'Access-Signature: {{accessSignature}}'
  
RESPONSE

Python

{
    "cursor": null,
    "csnu": {
        "history": []
    }
}
  

Javascript

{
    "cursor": null,
    "csnu": {
        "history": []
    }
}
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

{
    "cursor": null,
    "csnu": {
        "history": []
    }
}
  

Federal Revenue Registry

BigDataCorp pessoas/basic_data dataset, used to confirm the CPF's status with the Receita Federal. Not paginated.

Python

import starkinfra

result = starkinfra.individualholmes.get(
    search_key="01234567890",
    type="federalRevenueRegistry",
)

print(result)
  

Javascript

const starkinfra = require('starkinfra')

const result = await starkinfra.individualHolmes.get({
    searchKey: "01234567890",
    type: "federalRevenueRegistry"
})

console.log(result)
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

curl --location --request GET '{{baseUrl}}/individual-holmes/01234567890/federalRevenueRegistry' \
--header 'Access-Id: {{accessId}}' \
--header 'Access-Time: {{accessTime}}' \
--header 'Access-Signature: {{accessSignature}}'
  
RESPONSE

Python

{
    "cursor": null,
    "federalRevenueRegistry": {
        "taxIdStatus": "REGULAR"
    }
}
  

Javascript

{
    "cursor": null,
    "federalRevenueRegistry": {
        "taxIdStatus": "REGULAR"
    }
}
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

{
    "cursor": null,
    "federalRevenueRegistry": {
        "taxIdStatus": "REGULAR"
    }
}
  

Deceased Check

BigDataCorp pessoas/basic_data dataset. Not paginated. Empty result returns {}.

Python

import starkinfra

result = starkinfra.individualholmes.get(
    search_key="01234567890",
    type="deceased",
)

print(result)
  

Javascript

const starkinfra = require('starkinfra')

const result = await starkinfra.individualHolmes.get({
    searchKey: "01234567890",
    type: "deceased"
})

console.log(result)
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

curl --location --request GET '{{baseUrl}}/individual-holmes/01234567890/deceased' \
--header 'Access-Id: {{accessId}}' \
--header 'Access-Time: {{accessTime}}' \
--header 'Access-Signature: {{accessSignature}}'
  
RESPONSE

Python

{
    "cursor": null,
    "deceased": {
        "hasObitIndication": false
    }
}
  

Javascript

{
    "cursor": null,
    "deceased": {
        "hasObitIndication": false
    }
}
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

{
    "cursor": null,
    "deceased": {
        "hasObitIndication": false
    }
}
  

Negative Media

BigDataCorp pessoas/media_profile_and_exposure dataset. Not paginated. Empty result returns {}.

Python

import starkinfra

result = starkinfra.individualholmes.get(
    search_key="01234567890",
    type="negativeMedia",
)

print(result)
  

Javascript

const starkinfra = require('starkinfra')

const result = await starkinfra.individualHolmes.get({
    searchKey: "01234567890",
    type: "negativeMedia"
})

console.log(result)
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

curl --location --request GET '{{baseUrl}}/individual-holmes/01234567890/negativeMedia' \
--header 'Access-Id: {{accessId}}' \
--header 'Access-Time: {{accessTime}}' \
--header 'Access-Signature: {{accessSignature}}'
  
RESPONSE

Python

{
    "cursor": null,
    "negativeMedia": {
        "mediaProfileAndExposure": {
            "totalMatches": 0,
            "lastUpdate": "2026-06-12T00:00:00",
            "matches": []
        }
    }
}
  

Javascript

{
    "cursor": null,
    "negativeMedia": {
        "mediaProfileAndExposure": {
            "totalMatches": 0,
            "lastUpdate": "2026-06-12T00:00:00",
            "matches": []
        }
    }
}
  

PHP

Java

Ruby

Elixir

C#

Go

Clojure

Curl

{
    "cursor": null,
    "negativeMedia": {
        "mediaProfileAndExposure": {
            "totalMatches": 0,
            "lastUpdate": "2026-06-12T00:00:00",
            "matches": []
        }
    }
}