> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Brasile - API verifica stato CPF in tempo reale

> Brasile - Verifica stato CPF: validazione su database ufficiale con Didit. Da $0.20 per chiamata, senza contratti né minimi.

Restituisce lo stato del CPF (regolare, sospeso, annullato), il nome, il nome sociale e la data di iscrizione dai dati di Receita Federal tramite SERPRO. La ricerca si basa sul CPF e sulla data di nascita. Didit espone questo servizio tramite `POST /v3/database-validation/`, così puoi verificare i dati inviati rispetto alla fonte autorevole e ricevere risultati di corrispondenza normalizzati. Formato di input: `tax_number` accetta il CPF brasiliano (esattamente 11 cifre).

## Copertura

* **Copertura:** \~ 100%
* **Paese:** Brasile
* **ID servizio:** `bra_cpf`
* **Dominio dei dati:** Identità
* **Categoria:** TaxRegistry

## Input

| Campo | Obbligatorio | Esempio |
| - | -: | - |
| `tax_number` | Sì | `11111111111` |
| `date_of_birth` | Sì | `1990-01-01` |
| `first_name` | No | `John` |
| `last_name` | No | `Doe` |
| `vendor_data` | No | `user-1234` |

* **Input obbligatori:** `tax_number`, `date_of_birth`
* **Input facoltativi:** `first_name`, `last_name`, `vendor_data`
* **Consenso:** Non richiesto
* **Disponibilità nel workflow:** Disponibile nel workflow
* **Copertura:** \~ 100%
* **Prezzo:** \$0.20 per query riuscita

Non tutti i documenti accettati da questo servizio contengono l'identificativo con cui il servizio effettua la ricerca. Quando l'identificativo non viene estratto dal documento, il controllo viene registrato come **non applicabile**: nessuna banca dati viene interrogata e non ti viene addebitato alcun costo. In alcuni paesi questa situazione riguarda una quota importante degli utenti reali. Per coprire questi casi, raccogli l'identificativo anche da una risposta di un Questionario, da un campo di estrazione di Document AI o da un valore che invii al momento della creazione della sessione, e mappalo nel passaggio Validazione su database.

## Parametri del corpo

**issuing\_state** `string` *required* (default: BRA)

Codice paese ISO 3166-1 alpha-3 per questo servizio di banca dati.

Esempio: `BRA`

**services** `string` *required* (default: bra\_cpf)

Array che contiene questo ID servizio. Specificare il servizio limita la richiesta a questa specifica banca dati.

Esempio: `bra_cpf`

**tax\_number** `string` *required* (default: 11111111111)

Numero di identificazione fiscale.

Esempio: `11111111111`

**date\_of\_birth** `string` *required* (default: 1990-01-01)

Data di nascita nel formato `YYYY-MM-DD`.

Esempio: `1990-01-01`

**first\_name** `string`

Nome da validare.

Esempio: `John`

**last\_name** `string`

Cognome da validare.

Esempio: `Doe`

**vendor\_data** `string` (default: user-1234)

Il tuo riferimento utente stabile per questa persona, ad esempio il tuo ID utente interno. Didit lo usa per collegare i controlli indipendenti allo stesso utente finale e ridurre il rumore nel rilevamento dei duplicati.

Esempio: `user-1234`

## Regole di input e note di validazione

* CPF brasiliano (esattamente 11 cifre)
* `tax_number` deve contenere solo cifre; rimuovi spazi, trattini e punteggiatura prima di inviare la richiesta.
* `tax_number` deve essere lungo esattamente 11 caratteri.

## Come effettuare la chiamata

```bash cURL theme={null}
curl -X POST "https://verification.didit.me/v3/database-validation/" \
  -H "x-api-key: YOUR_API_KEY" \
  -F "issuing_state=BRA" \
  -F "services=bra_cpf" \
  -F "vendor_data=user-1234" \
  -F "tax_number=11111111111" \
  -F "date_of_birth=1990-01-01"
```

```python Python theme={null}
from didit import Didit

# Reads DIDIT_API_KEY.
client = Didit()

result = client.database_validation.validate(
    issuing_state="BRA",
    services=["bra_cpf"],
    date_of_birth="1990-01-01",
    tax_number="11111111111",
    vendor_data="user-1234",
)
print(result)
```

```javascript Node.js theme={null}
import Didit from "@didit-protocol/sdk-node";

// Reads DIDIT_API_KEY.
const didit = new Didit();

const result = await didit.databaseValidation.validate({
  issuing_state: "BRA",
  services: ["bra_cpf"],
  date_of_birth: "1990-01-01",
  tax_number: "11111111111",
  vendor_data: "user-1234",
});
console.log(result);
```

```go Go theme={null}
ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()

result, err := client.DatabaseValidation.Validate(ctx, didit.DatabaseValidationValidateParams{
	IssuingState: "BRA",
	Services:     didit.Some([]string{"bra_cpf"}),
	DateOfBirth:  didit.String("1990-01-01"),
	TaxNumber:    didit.String("11111111111"),
	VendorData:   didit.String("user-1234"),
})
if err != nil {
	log.Fatal(err)
}
fmt.Printf("%+v\n", result)
```

```java Java theme={null}
import java.time.LocalDate;
import java.util.List;
import me.didit.Didit;
import me.didit.types.DatabaseValidationValidateParams;

// Reads DIDIT_API_KEY.
Didit client = new Didit();

var result = client.databaseValidation().validate(DatabaseValidationValidateParams.builder()
        .issuingState("BRA")
        .services(List.of("bra_cpf"))
        .dateOfBirth(LocalDate.parse("1990-01-01"))
        .taxNumber("11111111111")
        .vendorData("user-1234")
        .build());
System.out.println(result);
```

```php PHP theme={null}
<?php

require 'vendor/autoload.php';

use Didit\DiditClient;

// Reads DIDIT_API_KEY.
$didit = new DiditClient();

$result = $didit->databaseValidation->validate([
    'issuing_state' => 'BRA',
    'services' => ['bra_cpf'],
    'date_of_birth' => '1990-01-01',
    'tax_number' => '11111111111',
    'vendor_data' => 'user-1234',
]);
print_r($result->toArray());
```

```ruby Ruby theme={null}
require "didit"

# Reads DIDIT_API_KEY.
didit = Didit::Client.new

result = didit.database_validation.validate(
  issuing_state: "BRA",
  services: ["bra_cpf"],
  date_of_birth: "1990-01-01",
  tax_number: "11111111111",
  vendor_data: "user-1234"
)
puts result.to_h
```

```csharp .NET theme={null}
using System;
using System.Text.Json;
using Didit;

// Reads DIDIT_API_KEY.
using var client = new DiditClient();

var result = await client.DatabaseValidation.ValidateAsync(new DatabaseValidationValidateParams
{
    IssuingState = "BRA",
    Services = new string[] { "bra_cpf" },
    DateOfBirth = "1990-01-01",
    TaxNumber = "11111111111",
    VendorData = "user-1234",
});
Console.WriteLine(JsonSerializer.Serialize(result));
```

Ogni chiamata riuscita restituisce HTTP `200`. Il campo **`outcome_code`** indica cosa è effettivamente accaduto, distinguendo ad esempio una reale mancata corrispondenza biometrica (`BIOMETRIC_NO_MATCH`) da un selfie che non è stato possibile leggere (`BIOMETRIC_IMAGE_UNUSABLE`). Lo `status` mostrato è lo stato predefinito della funzionalità; le tue [azioni configurate per la corrispondenza parziale o l'assenza di corrispondenza](https://docs.didit.me/it/core-technology/database-validation/database-validation-warnings.md) possono sostituirlo.

**`MATCH`**: Il registro ha confermato l'identità e tutti i campi controllati corrispondono.

```json 200 OK — MATCH theme={null}
{
  "request_id": "req_01H…",
  "status": "Approved",
  "issuing_state": "BRA",
  "match_type": "full_match",
  "validations": [
    {
      "outcome_code": "MATCH",
      "service_id": "bra_cpf",
      "service_name": "Brazil - CPF status check",
      "source_data": {
        "date_of_birth": "1990-01-01",
        "first_name": "John",
        "identification_number": "SAMPLE-ID-12345",
        "last_name": "Doe",
        "lgpd_minor": "sample_value",
        "minor_under_16": "sample_value",
        "minor_under_18": "sample_value",
        "registration_date": "1990-01-01"
      },
      "validation": {
        "date_of_birth": "full_match",
        "identification_number": "full_match"
      }
    }
  ]
}
```

**`PARTIAL_MATCH`**: Il numero di identificazione è stato trovato, ma uno o più campi personali (di solito nome o data di nascita) non corrispondono completamente.

```json 200 OK — PARTIAL_MATCH theme={null}
{
  "request_id": "req_01H…",
  "status": "In Review",
  "issuing_state": "BRA",
  "match_type": "partial_match",
  "validations": [
    {
      "outcome_code": "PARTIAL_MATCH",
      "service_id": "bra_cpf",
      "service_name": "Brazil - CPF status check",
      "source_data": {
        "date_of_birth": "1990-01-01",
        "first_name": "John",
        "identification_number": "SAMPLE-ID-12345",
        "last_name": "Doe",
        "lgpd_minor": "sample_value",
        "minor_under_16": "sample_value",
        "minor_under_18": "sample_value",
        "registration_date": "1990-01-01"
      },
      "validation": {
        "date_of_birth": "no_match",
        "identification_number": "full_match"
      }
    }
  ]
}
```

**`NO_MATCH`**: Il registro non ha restituito alcuna corrispondenza per i dati inviati.

```json 200 OK — NO_MATCH theme={null}
{
  "request_id": "req_01H…",
  "status": "Declined",
  "issuing_state": "BRA",
  "match_type": "no_match",
  "validations": [
    {
      "outcome_code": "NO_MATCH",
      "service_id": "bra_cpf",
      "service_name": "Brazil - CPF status check",
      "source_data": {
        "date_of_birth": "NO_MATCH",
        "identification_number": "NO_MATCH"
      },
      "validation": {
        "date_of_birth": "no_match",
        "identification_number": "no_match"
      }
    }
  ]
}
```

## Dati restituiti

I campi esatti esposti in `source_data` dipendono da ciò che restituisce il registro. L'esempio generato per `bra_cpf` documenta attualmente questa struttura normalizzata:

* `date_of_birth`
* `first_name`
* `identification_number`
* `last_name`
* `lgpd_minor`
* `minor_under_16`
* `minor_under_18`
* `registration_date`

## Prezzi e SLA

Brasile - le query di verifica dello stato del CPF vengono fatturate solo quando Didit riceve un risultato definitivo dalla fonte di validazione.

* **Prezzo per chiamata:** \$0.20 USD.
* **Fatturazione:** per query riuscita. Non ti viene addebitato alcun costo quando il registro non è raggiungibile, quando mancano campi obbligatori o quando la richiesta viene rifiutata prima di raggiungere la fonte.
* **Latenza:** tipicamente p95 \< 2 s.
* **Disponibilità:** 99.9% per trimestre da parte di Didit; la disponibilità delle fonti a valle varia in base al paese e al dataset.

## Continua a leggere

* [Panoramica della Validazione su database per il Brasile](https://docs.didit.me/api-reference/database-validation/brazil.md)
* [Panoramica della Validazione su database](https://docs.didit.me/it/core-technology/database-validation/overview.md)
* [Codici di esito](https://docs.didit.me/it/core-technology/database-validation/database-validation-outcome-codes.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.