Identity lookup
CPF lookup
Official individual registry data for a CPF plus date of birth.
/openapi/v3/consultas/cpf/{cpf}/{nascimento}token, timestamp and sign signature headers, see Authentication.Returns individual registry data for an 11-digit personal tax number plus date of birth: name, registration status and date of birth. The upstream source validates CPF and date of birth as a pair; a mismatched pair and a non-existent CPF both return the same code 10016003, deliberately indistinguishable (see Identity lookup).
GET request: the signed body is the empty string and both path variables are part of the signed path. The response is a bare object with no platform envelope.
Path parameters
cpf* | string | CPF |
nascimento* | string | Date of birth |
* Required field
ni | string | CPF |
nome | string | Full name |
| object | Registration status |
nascimento | string | Date of birth |
The upstream source answers by the holder age bracket and the platform passes the upstream status code through unchanged. The message of the blocking tiers is the statutory wording set by the source (Portuguese) and is not translated by the Language header; branch on code.
Billing: 422, 451 and not found / birth date mismatch (400 + 10016003) are billed per call; 428 and upstream outage (503) are not billed. The platform stores nothing for the blocking tiers. Format and check-digit errors are rejected locally and are not billed.
Adult (18 or older): HTTP 200
Name, registration status and date of birth as usual.
{ "ni": "40710536828", "nome": "DANILO HIDEO CORREA", "situacao": { "codigo": "0", "descricao": "REGULAR" }, "nascimento": "09011997" }
16 to 17 years old: HTTP 422
Code 10016005, no personal fields at all. Do not retry: age does not change with a retry and every call is billed.
{ "code": 10016005, "message": "LGPD: menor de idade" }
Under 16: HTTP 451
Code 10016004, no personal fields at all. Do not retry.
{ "code": 10016004, "message": "LGPD: menor de 16 anos (Lei Felca)" }
Age cannot be verified: HTTP 428
Code 10016006, no personal fields at all. The upstream database has no date of birth for the holder; the platform already re-verified once with the date you supplied, within the same call. A persistent 428 means the official source could not verify either; retrying is pointless.
{ "code": 10016006, "message": "LGPD: idade nao verificavel - informe a data de nascimento para completar a verificacao" }
situacao.codigoCPF registration status
When the code is not 0, it is up to you to decide whether the flow continues; the platform relays the status without judging it.
| Values | Meaning |
|---|---|
| 0 | REGULAR: regular |
| 2 | SUSPENSA: suspended |
| 3 | TITULAR FALECIDO: holder deceased |
| 4 | PENDENTE DE REGULARIZACAO: pending regularisation |
| 5 | CANCELADA POR MULTIPLICIDADE: cancelled for duplicate registration |
| 8 | NULA: void |
| 9 | CANCELADA DE OFICIO: cancelled ex officio |
| Code | HTTP | |
|---|---|---|
| 10016000 | 400 | Invalid CPF format (11 digits required). Check for stray formatting characters or wrong length. |
| 10016001 | 400 | Invalid CPF check digits. Validate locally with the mod-11 algorithm first to avoid wasted calls. |
| 10016002 | 400 | Invalid date of birth (valid DDMMYYYY required). Note the day-month-year order, and that the date must actually exist. |
| 10016003 | 400 | CPF not found: the CPF does not exist or the CPF and date of birth do not match (deliberately indistinguishable). Billed per call. |
| 10016005 | 422 | LGPD: menor de idade: holder is 16 to 17 years old. Data lawfully withheld by the upstream source, no personal fields; do not retry. Billed per call. |
| 10016004 | 451 | LGPD: menor de 16 anos (Lei Felca): holder is under 16. Data lawfully withheld, no personal fields; do not retry. Billed per call. |
| 10016006 | 428 | LGPD: idade nao verificavel - informe a data de nascimento para completar a verificacao: age cannot be verified. The platform already re-verified once with the date of birth you supplied; do not retry. Not billed. |
| 10016020 | 503 | Upstream data source is temporarily unavailable. Retry with exponential backoff (start at 1 s, double up to 30 s, add jitter); contact the platform if it persists. Not billed. |
