# 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**

Individual HolmesSingle 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

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

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.

### 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.

### 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.

### Fraud Score

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

### Registration Data

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

### Pix User

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

### 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.

### 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).

### Joint Resolution 6

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

### 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 {}.

### Federal Revenue Registry

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

### Deceased Check

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

### Negative Media

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

---

## Other Languages

- [Python](https://docs.starkinfra.com/get-started/individual-holmes-python.md)
- [Node.js](https://docs.starkinfra.com/get-started/individual-holmes-node.md)
- [PHP](https://docs.starkinfra.com/get-started/individual-holmes-php.md)
- [Java](https://docs.starkinfra.com/get-started/individual-holmes-java.md)
- [Ruby](https://docs.starkinfra.com/get-started/individual-holmes-ruby.md)
- [Elixir](https://docs.starkinfra.com/get-started/individual-holmes-elixir.md)
- [.NET](https://docs.starkinfra.com/get-started/individual-holmes-dotnet.md)
- [Go](https://docs.starkinfra.com/get-started/individual-holmes-go.md)
- [Clojure](https://docs.starkinfra.com/get-started/individual-holmes-clojure.md)
- [cURL](https://docs.starkinfra.com/get-started/individual-holmes-curl.md)
