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

# Tax ID Formats by Country

> Complete guide to accepted Tax ID formats for each country and entity type — in the gu1 universal entity model for KYC, KYB, and risk analysis.

## Overview

This guide provides detailed information about the Tax ID formats accepted by the platform for each country and entity type. The system **automatically normalizes** all Tax IDs to the standard format for each country.

<Note>
  **Important**: You can send Tax IDs with or without formatting characters (dots, dashes, slashes, spaces). The system will automatically clean and normalize them before validation.
</Note>

## Birth date in tax IDs (rules)

Some tax identifiers embed a birth date; others do not. This matters for **rule operators** `tax_id_age_*` (derive age from the field value and compare to a threshold).

| Country | Format                        | Embeds birth date?                 | Rule operators                                                                                                                                                     |
| ------- | ----------------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| MX      | RFC persona física (13 chars) | Yes (YYMMDD segment)               | `tax_id_age_less_than`, `tax_id_age_greater_than_or_equal`, etc.                                                                                                   |
| MX      | CURP (18 chars)               | Yes (YYMMDD segment)               | Same                                                                                                                                                               |
| MX      | RFC persona moral (12 chars)  | Incorporation date, not person DOB | Not for person age rules                                                                                                                                           |
| AR      | CUIT/CUIL/DNI                 | No (DNI is sequential, not DOB)    | `tax_id_age_*` with `taxIdCountry: AR` — **estimated age** from DNI cohort (range midpoint; typical margin ±6–10 years). Does not use `dateOfBirth` or enrichment. |
| BR      | CPF                           | No                                 | Use `dateOfBirth` or enrichment `age`                                                                                                                              |
| CL      | RUT persona                   | No                                 | Use `dateOfBirth` or enrichment `age`                                                                                                                              |
| CO / PE | Cédula / DNI                  | No                                 | Use `dateOfBirth` or enrichment `age`                                                                                                                              |

Applicable fields include `taxId`, `originTaxId`, `destinationTaxId`, `userEvent.taxId`, `userEvent.destinationCuit`, and custom paths such as `metadata.*` when the value is an MX RFC or CURP.

***

## 🇧🇷 Brazil (BR)

### Person - CPF

**Document**: CPF (Cadastro de Pessoas Físicas)

**Accepted digits**: **9, 10, or 11 digits**

<CodeGroup>
  ```text Numbers only theme={null}
  ✅ 12345678901    (11 digits)
  ✅ 1234567890     (10 digits)
  ✅ 123456789      (9 digits)
  ```

  ```text With format (dots and dashes) theme={null}
  ✅ 123.456.789-01 (11 digits formatted)
  ✅ 12.345.678-90  (10 digits formatted)
  ✅ 1.234.567-89   (9 digits formatted)
  ```
</CodeGroup>

**Normalization format**:

* 11 digits → `XXX.XXX.XXX-XX`
* 10 digits → `XX.XXX.XXX-XX`
* 9 digits → `X.XXX.XXX-XX`

<Tip>
  **Can I send only numbers without dots or dashes?**

  ✅ **YES** - The system accepts pure numbers and formats them automatically.
</Tip>

<Warning>
  **Important**: As of the latest update (January 2026), the system now accepts CPF with 9, 10, or 11 digits. Previously, only 10 or 11 digits were accepted.
</Warning>

***

### Company - CNPJ

**Document**: CNPJ (Cadastro Nacional da Pessoa Jurídica)

**Accepted digits**: **13 or 14 digits**

<CodeGroup>
  ```text Numbers only theme={null}
  ✅ 12345678000190  (14 digits)
  ✅ 1234567000190   (13 digits)
  ```

  ```text With format (dots, slash, and dashes) theme={null}
  ✅ 12.345.678/0001-90 (14 digits formatted)
  ✅ 1.234.567/0001-90  (13 digits formatted)
  ```
</CodeGroup>

**Normalization format**:

* 14 digits → `XX.XXX.XXX/XXXX-XX`
* 13 digits → `X.XXX.XXX/XXXX-XX`

<Tip>
  **Can I send only numbers without dots, slashes, or dashes?**

  ✅ **YES** - The system accepts pure numbers and formats them automatically.
</Tip>

***

## 🇦🇷 Argentina (AR)

### Person - DNI/CUIL

#### DNI (Documento Nacional de Identidad)

**Accepted digits**: **8 digits**

<CodeGroup>
  ```text Numbers only theme={null}
  ✅ 12345678       (8 digits)
  ```

  ```text With format (dots) theme={null}
  ✅ 12.345.678     (8 digits formatted)
  ```
</CodeGroup>

**Normalization format**: 8 digits → `XX.XXX.XXX`

***

#### CUIL (Código Único de Identificación Laboral)

**Accepted digits**: **11 digits**

<CodeGroup>
  ```text Numbers only theme={null}
  ✅ 20123456789    (11 digits)
  ```

  ```text With format (dashes) theme={null}
  ✅ 20-12345678-9  (11 digits formatted)
  ```
</CodeGroup>

**Normalization format**: 11 digits → `XX-XXXXXXXX-X`

<Tip>
  **Can I send only numbers without dots or dashes?**

  ✅ **YES** - The system accepts pure numbers and formats them automatically.
</Tip>

***

### Company - CUIT

**Document**: CUIT (Clave Única de Identificación Tributaria)

**Accepted digits**: **11 digits**

<CodeGroup>
  ```text Numbers only theme={null}
  ✅ 30123456789    (11 digits)
  ```

  ```text With format (dashes) theme={null}
  ✅ 30-12345678-9  (11 digits formatted)
  ```
</CodeGroup>

**Normalization format**: 11 digits → `XX-XXXXXXXX-X`

<Tip>
  **Can I send only numbers without dashes?**

  ✅ **YES** - The system accepts pure numbers and formats them automatically.
</Tip>

***

## 🇲🇽 Mexico (MX)

### Person - RFC Persona Física

**Document**: RFC (Registro Federal de Contribuyentes)

**Accepted characters**: **13 alphanumeric characters**

```text Format Structure theme={null}
✅ AAAA######XXX
   └─┬─┘└──┬─┘└┬┘
     │    │   └─ 3 characters (homoclave)
     │    └───── 6 numbers (date: YYMMDD)
     └────────── 4 letters (name/surnames)

Example: GOCG850101A12
         └─┬─┘└──┬─┘└┬┘
           │    │   └─ A12 (homoclave)
           │    └───── 850101 (Jan 1, 1985)
           └────────── GOCG (García Ochoa Carlos Gerardo)
```

<Warning>
  **Can I send only numbers without letters?**

  ❌ **NO** - RFC requires letters AND numbers in the specific format. You cannot send only numbers.
</Warning>

***

### Company - RFC Persona Moral

**Document**: RFC (Registro Federal de Contribuyentes)

**Accepted characters**: **12 alphanumeric characters**

```text Format Structure theme={null}
✅ AAA######XXX
   └┬┘└──┬─┘└┬┘
    │   │   └─ 3 characters (homoclave)
    │   └───── 6 numbers (date: YYMMDD)
    └─────────3 letters (company name)

Example: GOC850101A12
         └┬┘└──┬─┘└┬┘
          │   │   └─ A12 (homoclave)
          │   └───── 850101 (Jan 1, 1985)
          └─────────GOC (García Ochoa Company)
```

<Warning>
  **Can I send only numbers without letters?**

  ❌ **NO** - RFC requires letters AND numbers in the specific format.
</Warning>

***

## 🇨🇱 Chile (CL)

### Person - RUT

**Document**: RUT (Rol Único Tributario)

**Accepted digits**: **7-8 digits + 1 verification digit**

<CodeGroup>
  ```text Numbers and verifier theme={null}
  ✅ 12345678K     (8 digits + verifier)
  ✅ 1234567K      (7 digits + verifier)
  ✅ 123456789     (8 digits + numeric verifier)
  ```

  ```text With format (dots and dash) theme={null}
  ✅ 12.345.678-K  (8 digits formatted)
  ✅ 1.234.567-K   (7 digits formatted)
  ```
</CodeGroup>

**Normalization format**:

* 8 digits → `XX.XXX.XXX-X`
* 7 digits → `X.XXX.XXX-X`

<Note>
  **Important**: The verification digit can be a number (0-9) or the letter **K** (uppercase or lowercase).
</Note>

<Tip>
  **Can I send only numbers without dots or dashes?**

  ✅ **YES** - The system accepts pure numbers and formats them automatically.
</Tip>

***

### Company - RUT Empresa

**Document**: RUT (Rol Único Tributario)

**Accepted digits**: **8-9 digits + 1 verification digit**

<CodeGroup>
  ```text Numbers and verifier theme={null}
  ✅ 123456789K    (9 digits + verifier)
  ✅ 12345678K     (8 digits + verifier)
  ```

  ```text With format (dots and dash) theme={null}
  ✅ 12.345.678-9  (8 digits formatted)
  ✅ 1.234.567-8   (7 digits formatted)
  ```
</CodeGroup>

**Normalization format**:

* 8 digits → `XX.XXX.XXX-X`
* 7 digits → `X.XXX.XXX-X`

<Tip>
  **Can I send only numbers without dots or dashes?**

  ✅ **YES** - The system accepts pure numbers and formats them automatically.
</Tip>

***

## 🇨🇴 Colombia (CO)

### Person - Cédula/NIT

**Document**: Cédula de Ciudadanía or NIT

**Accepted digits**: **6-10 digits** (variable length)

<CodeGroup>
  ```text Numbers only (all valid) theme={null}
  ✅ 1234567890    (10 digits)
  ✅ 123456789     (9 digits)
  ✅ 12345678      (8 digits)
  ✅ 1234567       (7 digits)
  ✅ 123456        (6 digits)
  ```
</CodeGroup>

<Note>
  **No special format** - Colombian personal IDs don't have a standard formatting pattern.
</Note>

<Tip>
  **Can I send only numbers?**

  ✅ **YES** - The system accepts pure numbers without any special formatting.
</Tip>

***

### Company - NIT

**Document**: NIT (Número de Identificación Tributaria)

**Accepted digits**: **9 digits + 1 verification digit** (10 total)

<CodeGroup>
  ```text Numbers only theme={null}
  ✅ 1234567890    (10 digits - 9 + verifier)
  ```

  ```text With format (dash) theme={null}
  ✅ 123456789-0   (9 digits + verifier with dash)
  ```
</CodeGroup>

**Normalization format**: 10 digits → `XXXXXXXXX-X`

<Tip>
  **Can I send only numbers without dashes?**

  ✅ **YES** - The system accepts pure numbers and formats them automatically.
</Tip>

***

## 🇵🇪 Peru (PE)

### Person - DNI

**Document**: DNI (Documento Nacional de Identidad)

**Accepted digits**: **8 digits** (fixed length)

<CodeGroup>
  ```text Numbers only theme={null}
  ✅ 12345678      (8 digits)
  ```
</CodeGroup>

<Note>
  **No special format** - Peruvian DNI doesn't use dots, dashes, or other formatting characters.
</Note>

<Tip>
  **Can I send only numbers?**

  ✅ **YES** - Only numbers, no special formatting required.
</Tip>

***

### Company - RUC

**Document**: RUC (Registro Único de Contribuyentes)

**Accepted digits**: **11 digits** (fixed length)

<CodeGroup>
  ```text Numbers only theme={null}
  ✅ 20123456789   (11 digits)
  ```
</CodeGroup>

<Note>
  **Format note**: The first 2 digits indicate the taxpayer type:

  * **20** = Companies (Personas Jurídicas)
  * **10** = Natural persons with business activity
</Note>

<Tip>
  **Can I send only numbers?**

  ✅ **YES** - Only numbers, no special formatting required.
</Tip>

***

## 🇺🇾 Uruguay (UY)

### Person - CI

**Document**: CI (Cédula de Identidad)

**Accepted digits**: **7-8 digits**

<CodeGroup>
  ```text Numbers only theme={null}
  ✅ 12345678      (8 digits)
  ✅ 1234567       (7 digits)
  ```
</CodeGroup>

<Note>
  **No special format** - Uruguayan CI doesn't use formatting characters.
</Note>

<Tip>
  **Can I send only numbers?**

  ✅ **YES** - Only numbers, no special formatting required.
</Tip>

***

### Company - RUT

**Document**: RUT (Registro Único Tributario)

**Accepted digits**: **12 digits** (fixed length)

<CodeGroup>
  ```text Numbers only theme={null}
  ✅ 212345670018  (12 digits)
  ```
</CodeGroup>

<Note>
  **No special format** - Uruguayan RUT doesn't use formatting characters.
</Note>

<Tip>
  **Can I send only numbers?**

  ✅ **YES** - Only numbers, no special formatting required.
</Tip>

***

## 🇵🇾 Paraguay (PY)

### Person - CI

**Document**: CI (Cédula de Identidad)

**Accepted digits**: **6-8 digits**

<CodeGroup>
  ```text Numbers only theme={null}
  ✅ 12345678      (8 digits)
  ✅ 1234567       (7 digits)
  ✅ 123456        (6 digits)
  ```
</CodeGroup>

<Note>
  **No special format** - Paraguayan CI doesn't use formatting characters.
</Note>

<Tip>
  **Can I send only numbers?**

  ✅ **YES** - Only numbers, no special formatting required.
</Tip>

***

### Company - RUC

**Document**: RUC (Registro Único de Contribuyentes)

**Accepted digits**: **6-8 digits + 1 verification digit**

<CodeGroup>
  ```text Numbers and verifier theme={null}
  ✅ 123456789     (8 digits + verifier)
  ✅ 12345678      (7 digits + verifier)
  ```

  ```text With format (dash) theme={null}
  ✅ 12345678-9    (with dash)
  ```
</CodeGroup>

**Normalization format**: With verifier → `XXXXXX-X` (minimum 6 digits)

<Tip>
  **Can I send only numbers without dashes?**

  ✅ **YES** - The system accepts pure numbers and formats them automatically.
</Tip>

***

## 🇺🇸 United States (US)

### Company - EIN

**Document**: EIN (Employer Identification Number)

**Accepted digits**: **9 digits** (fixed length)

<CodeGroup>
  ```text Numbers only theme={null}
  ✅ 123456789     (9 digits)
  ```

  ```text With format (dash) theme={null}
  ✅ 12-3456789    (with dash)
  ```
</CodeGroup>

**Normalization format**: 9 digits → `XX-XXXXXXX`

<Note>
  **Format note**: EIN is issued by the IRS for business entities. The first 2 digits indicate the IRS campus where the EIN was issued.
</Note>

<Tip>
  **Can I send only numbers without dashes?**

  ✅ **YES** - The system accepts pure numbers and formats them automatically.
</Tip>

***

## 🇻🇪 Venezuela (VE)

### Company - RIF

**Document**: RIF (Registro de Información Fiscal)

**Accepted characters**: **1 letter + 9 digits** (10 total)

<CodeGroup>
  ```text Letter + numbers theme={null}
  ✅ J123456789    (J/G/V/E/P + 9 digits)
  ```

  ```text With format (dashes) theme={null}
  ✅ J-12345678-9  (with dashes)
  ```
</CodeGroup>

**Normalization format**: Letter + 9 digits → `X-XXXXXXXX-X`

**Valid letters** (first character):

* **J** = Jurídico (Legal entities/companies)
* **G** = Gobierno (Government entities)
* **V** = Venezolano (Venezuelan natural persons)
* **E** = Extranjero (Foreign persons)
* **P** = Pasaporte (Passport)

<Tip>
  **Can I send just the letter and numbers without dashes?**

  ✅ **YES** - The system accepts the format without dashes and formats it automatically.
</Tip>

<Warning>
  **Important**: The letter is **required**. You cannot send only numbers for Venezuelan RIF.
</Warning>

***

## 📊 Complete Summary Table

| Country | Entity  | Document | Digits/Format       | Numbers Only | With Format             |
| ------- | ------- | -------- | ------------------- | ------------ | ----------------------- |
| 🇧🇷 BR | Person  | CPF      | 9-11 digits         | ✅            | ✅ dots and dashes       |
| 🇧🇷 BR | Company | CNPJ     | 13-14 digits        | ✅            | ✅ dots, slash, dashes   |
| 🇦🇷 AR | Person  | DNI      | 8 digits            | ✅            | ✅ dots                  |
| 🇦🇷 AR | Person  | CUIL     | 11 digits           | ✅            | ✅ dashes                |
| 🇦🇷 AR | Company | CUIT     | 11 digits           | ✅            | ✅ dashes                |
| 🇲🇽 MX | Person  | RFC PF   | 13 alphanumeric     | ❌            | ❌ Alphanumeric required |
| 🇲🇽 MX | Company | RFC PM   | 12 alphanumeric     | ❌            | ❌ Alphanumeric required |
| 🇨🇱 CL | Person  | RUT      | 7-8 + K             | ✅            | ✅ dots and dash         |
| 🇨🇱 CL | Company | RUT      | 8-9 + K             | ✅            | ✅ dots and dash         |
| 🇨🇴 CO | Person  | CC/NIT   | 6-10 digits         | ✅            | -                       |
| 🇨🇴 CO | Company | NIT      | 9 + 1 digits        | ✅            | ✅ dash                  |
| 🇵🇪 PE | Person  | DNI      | 8 digits            | ✅            | -                       |
| 🇵🇪 PE | Company | RUC      | 11 digits           | ✅            | -                       |
| 🇺🇾 UY | Person  | CI       | 7-8 digits          | ✅            | -                       |
| 🇺🇾 UY | Company | RUT      | 12 digits           | ✅            | -                       |
| 🇵🇾 PY | Person  | CI       | 6-8 digits          | ✅            | -                       |
| 🇵🇾 PY | Company | RUC      | 6-8 + 1 digit       | ✅            | ✅ dash                  |
| 🇺🇸 US | Company | EIN      | 9 digits            | ✅            | ✅ dash                  |
| 🇻🇪 VE | Company | RIF      | 1 letter + 9 digits | ✅            | ✅ dashes                |

**Legend**:

* ✅ = Format accepted
* ❌ = Format not accepted
* `-` = No special formatting

***

## ❓ Frequently Asked Questions

<AccordionGroup>
  <Accordion title="Can I send the taxId with dots, dashes, and other formatting characters?">
    ✅ **YES** - The system automatically cleans all formatting characters (dots, dashes, slashes, spaces) before validation.

    **Examples of accepted formats:**

    ```
    Brazil CPF:
    ✅ 123.456.789-01
    ✅ 123-456-789-01
    ✅ 123 456 789 01
    ✅ 12345678901
    → All become: 123.456.789-01
    ```
  </Accordion>

  <Accordion title="Can I send the taxId with only numbers (no formatting)?">
    ✅ **YES** - For most countries (except Mexico RFC and Venezuela RIF which require letters), you can send only numbers.

    **Exception countries (require letters):**

    * 🇲🇽 Mexico: RFC requires letters + numbers
    * 🇻🇪 Venezuela: RIF requires 1 letter + numbers
  </Accordion>

  <Accordion title="Does the system automatically normalize the format?">
    ✅ **YES** - The system normalizes all taxIds to the standard format for each country.

    **Example for Brazil CPF:**

    ```
    You send:    12345678901
    Saved as:    123.456.789-01

    You send:    123.456.789-01
    Saved as:    123.456.789-01

    You send:    123-456-789-01
    Saved as:    123.456.789-01
    ```

    **Example for Argentina CUIT:**

    ```
    You send:    30123456789
    Saved as:    30-12345678-9

    You send:    30-12345678-9
    Saved as:    30-12345678-9
    ```
  </Accordion>

  <Accordion title="What happens if I send an invalid format?">
    ❌ The system will reject the taxId with a validation error indicating:

    * The expected format
    * The required number of digits
    * Examples of valid formats
    * The country-specific document name (CPF, CNPJ, CUIT, etc.)

    **Example error response:**

    ```json theme={null}
    {
      "success": false,
      "error": {
        "code": "VALIDATION_ERROR",
        "message": "Invalid CPF format. Expected 9-11 digits.",
        "details": {
          "field": "taxId",
          "taxIdName": "CPF",
          "providedValue": "12345",
          "expectedFormat": "9-11 digits (e.g., 123.456.789-01 or 12345678901)"
        }
      }
    }
    ```
  </Accordion>

  <Accordion title="Can I send a 9-digit CPF for Brazil?">
    ✅ **YES** - As of the latest update (January 2026), the system accepts CPF with **9, 10, or 11 digits**.

    **Previously**: Only 10 or 11 digits were accepted.

    **Now accepted:**

    ```
    ✅ 123456789      (9 digits)  → 1.234.567-89
    ✅ 1234567890     (10 digits) → 12.345.678-90
    ✅ 12345678901    (11 digits) → 123.456.789-01
    ```
  </Accordion>

  <Accordion title="Are verification digits validated?">
    ⚠️ **Partial** - The system validates:

    ✅ **Format validation**: Checks that the Tax ID has the correct number of digits and structure

    ❌ **Checksum validation**: The system does NOT validate mathematical checksums (verification digits) for most countries

    **Why?** Checksum validation would reject valid but incorrectly typed IDs. Instead, the system relies on enrichment providers to validate the actual existence and validity of the document.
  </Accordion>

  <Accordion title="What if my country is not listed?">
    For countries not listed above, the system will accept Tax IDs without strict format validation. You can provide the Tax ID in any reasonable format, and it will be stored as-is without normalization.

    **Supported but not strictly validated countries include:**

    * 🇪🇸 Spain (NIF/CIF)
    * 🇵🇹 Portugal (NIF)
    * 🇪🇪 Estonia (Isikukood)
    * 🇧🇴 Bolivia (NIT)
    * 🇪🇨 Ecuador (RUC/Cédula)
    * And others...
  </Accordion>
</AccordionGroup>

***

## 💡 Examples by Use Case

### Creating a Person in Brazil

<CodeGroup>
  ```json With formatted CPF theme={null}
  {
    "type": "person",
    "name": "João Silva",
    "taxId": "123.456.789-01",
    "countryCode": "BR"
  }
  // ✅ System normalizes to: 123.456.789-01
  ```

  ```json With unformatted CPF theme={null}
  {
    "type": "person",
    "name": "João Silva",
    "taxId": "12345678901",
    "countryCode": "BR"
  }
  // ✅ System normalizes to: 123.456.789-01
  ```

  ```json With 9-digit CPF theme={null}
  {
    "type": "person",
    "name": "João Silva",
    "taxId": "123456789",
    "countryCode": "BR"
  }
  // ✅ System normalizes to: 1.234.567-89
  ```
</CodeGroup>

***

### Creating a Company in Brazil

<CodeGroup>
  ```json With formatted CNPJ theme={null}
  {
    "type": "company",
    "name": "Exemplo Ltda",
    "taxId": "12.345.678/0001-90",
    "countryCode": "BR"
  }
  // ✅ System normalizes to: 12.345.678/0001-90
  ```

  ```json With unformatted CNPJ theme={null}
  {
    "type": "company",
    "name": "Exemplo Ltda",
    "taxId": "12345678000190",
    "countryCode": "BR"
  }
  // ✅ System normalizes to: 12.345.678/0001-90
  ```
</CodeGroup>

***

### Creating a Company in Argentina

<CodeGroup>
  ```json With formatted CUIT theme={null}
  {
    "type": "company",
    "name": "Ejemplo SA",
    "taxId": "30-12345678-9",
    "countryCode": "AR"
  }
  // ✅ System normalizes to: 30-12345678-9
  ```

  ```json With unformatted CUIT theme={null}
  {
    "type": "company",
    "name": "Ejemplo SA",
    "taxId": "30123456789",
    "countryCode": "AR"
  }
  // ✅ System normalizes to: 30-12345678-9
  ```
</CodeGroup>

***

### Creating a Person in Mexico

<CodeGroup>
  ```json RFC with correct format theme={null}
  {
    "type": "person",
    "name": "García Ochoa Carlos Gerardo",
    "taxId": "GOCG850101A12",
    "countryCode": "MX"
  }
  // ✅ RFC must include letters
  ```

  ```json ❌ INVALID - Numbers only theme={null}
  {
    "type": "person",
    "name": "García Ochoa Carlos Gerardo",
    "taxId": "850101012",
    "countryCode": "MX"
  }
  // ❌ ERROR: RFC requires letters AND numbers
  ```
</CodeGroup>

***

### Creating a Person in Chile

<CodeGroup>
  ```json With formatted RUT theme={null}
  {
    "type": "person",
    "name": "María González",
    "taxId": "12.345.678-K",
    "countryCode": "CL"
  }
  // ✅ System normalizes to: 12.345.678-K
  ```

  ```json With unformatted RUT theme={null}
  {
    "type": "person",
    "name": "María González",
    "taxId": "12345678K",
    "countryCode": "CL"
  }
  // ✅ System normalizes to: 12.345.678-K
  ```

  ```json With numeric verifier theme={null}
  {
    "type": "person",
    "name": "María González",
    "taxId": "123456789",
    "countryCode": "CL"
  }
  // ✅ System normalizes to: 12.345.678-9
  ```
</CodeGroup>

***

## 🔍 Best Practices

<CardGroup cols={2}>
  <Card title="Always Provide Country Code" icon="flag">
    Always include the `countryCode` field when creating entities. This allows the system to apply the correct validation rules for that country.
  </Card>

  <Card title="Send Clean Data" icon="broom">
    While the system cleans formatting characters, sending clean data reduces processing time and potential errors.
  </Card>

  <Card title="Handle Validation Errors" icon="triangle-exclamation">
    Implement proper error handling for Tax ID validation errors. The error response includes helpful details about the expected format.
  </Card>

  <Card title="Test Before Production" icon="vial">
    Test your Tax ID inputs in the sandbox environment before going to production, especially for countries with strict format requirements.
  </Card>
</CardGroup>

***

<Note>
  **Last updated**: January 28, 2026 • **Version**: 5.0

  **Changes in this version**:

  * ✨ Added support for 9-digit CPF in Brazil
  * 📋 Expanded coverage to include all Latin American countries
  * 🔍 Added detailed format explanations and examples
  * ❓ Enhanced FAQ section with common scenarios
</Note>
