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

# Quoter v2 API - Impuestos y regulaciones

> Genera el analisis de impuestos, aranceles, restricciones y RRNA para productos previamente clasificados.

Genera el analisis arancelario de uno o varios productos a partir de su descripcion, fraccion arancelaria de 8 digitos y pais relacionado con la operacion.

```
POST https://api.camtomx.com/api/v3/quoter_v2/new-quote
```

**Costo:** 0.25 creditos por producto. Incluir RRNA no agrega costo.

## Autenticacion

Incluye tu API key en el header:

```
Authorization: Bearer sk_tu_api_key
Content-Type: application/json
```

<Warning>
  Nunca expongas una API key en frontend. Llama este endpoint desde tu backend.
</Warning>

## Query parameters

<ParamField query="country_code" type="string" required>
  Pais cuya tarifa y regulaciones se analizaran. Actualmente, Quoter v2 soporta `MEX`.
</ParamField>

<ParamField query="include_rrna" type="boolean" default="false">
  Si es `true`, agrega las Regulaciones y Restricciones No Arancelarias aplicables. No agrega costo.
</ParamField>

<ParamField query="user_identifier" type="string">
  Identificador opcional para trazabilidad de la integracion.
</ParamField>

## Body

El body usa `application/json`.

<ParamField body="direction" type="string" required>
  Direccion de la operacion. Valores: `import` o `export`.
</ParamField>

<ParamField body="products" type="array" required>
  Lista de 1 a 20 productos. El costo total es `cantidad de productos x 0.25 creditos`.
</ParamField>

Cada producto contiene:

| Campo                 | Tipo   | Requerido | Descripcion                                           |
| --------------------- | ------ | --------- | ----------------------------------------------------- |
| `product_description` | string | Si        | Descripcion clara del producto                        |
| `hscode_8digits`      | string | Si        | Fraccion arancelaria de 8 digitos                     |
| `country`             | string | Si        | Pais de origen o destino relacionado con la operacion |

El campo `language` es opcional. Usa `Spanish` o `English`; el valor predeterminado es `Spanish`.

## Ejemplo

<CodeGroup>
  ```python Python theme={null}
  import requests

  response = requests.post(
      "https://api.camtomx.com/api/v3/quoter_v2/new-quote",
      headers={
          "Authorization": "Bearer sk_tu_api_key",
          "Content-Type": "application/json",
      },
      params={
          "country_code": "MEX",
          "include_rrna": "true",
          "user_identifier": "orden-1042",
      },
      json={
          "direction": "import",
          "language": "Spanish",
          "products": [
              {
                  "product_description": "Microfono alambrico para uso profesional",
                  "hscode_8digits": "85181004",
                  "country": "CHN",
              }
          ],
      },
      timeout=180,
  )

  response.raise_for_status()
  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    "https://api.camtomx.com/api/v3/quoter_v2/new-quote?country_code=MEX&include_rrna=true",
    {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_tu_api_key",
        "Content-Type": "application/json"
      },
      body: JSON.stringify({
        direction: "import",
        language: "Spanish",
        products: [
          {
            product_description: "Microfono alambrico para uso profesional",
            hscode_8digits: "85181004",
            country: "CHN"
          }
        ]
      })
    }
  );

  if (!response.ok) {
    throw new Error(`Quoter v2 respondio ${response.status}`);
  }

  console.log(await response.json());
  ```

  ```bash cURL theme={null}
  curl -X POST \
    "https://api.camtomx.com/api/v3/quoter_v2/new-quote?country_code=MEX&include_rrna=true" \
    -H "Authorization: Bearer sk_tu_api_key" \
    -H "Content-Type: application/json" \
    -d '{
      "direction": "import",
      "language": "Spanish",
      "products": [
        {
          "product_description": "Microfono alambrico para uso profesional",
          "hscode_8digits": "85181004",
          "country": "CHN"
        }
      ]
    }'
  ```
</CodeGroup>

## Respuesta

La respuesta es un arreglo. Cada posicion corresponde al producto enviado en la misma posicion.

<ResponseField name="tariffs" type="array">
  Aranceles aplicables. Cada elemento incluye `rate_type`, `rate`, `name`, `description` y `reason`.
</ResponseField>

<ResponseField name="taxes" type="array">
  Impuestos aplicables, como IVA o IEPS.
</ResponseField>

<ResponseField name="restrictions" type="array">
  Restricciones evaluadas y si aplican al producto.
</ResponseField>

<ResponseField name="trade_agreements" type="string[]">
  Tratados comerciales relevantes para la operacion.
</ResponseField>

<ResponseField name="notes" type="array">
  Notas legales o regulatorias con referencia, ley y detalle.
</ResponseField>

<ResponseField name="unit" type="string">
  Unidad de medida aduanera.
</ResponseField>

<ResponseField name="suggestions" type="string[]">
  Datos que pueden mejorar la precision del analisis.
</ResponseField>

<ResponseField name="ieps" type="boolean">
  Indica si el producto podria estar sujeto a IEPS.
</ResponseField>

<ResponseField name="regulaciones_rrna" type="array">
  Solo aparece cuando `include_rrna=true` y el analisis RRNA termina correctamente. Incluye nombre, clave, permiso o NOM, acotacion, razon, ambiguedades y `applies`.
</ResponseField>

### Ejemplo abreviado

```json theme={null}
[
  {
    "tariffs": [
      {
        "rate_type": "percentage",
        "rate": 0.15,
        "name": "IGI",
        "description": "Impuesto General de Importacion",
        "reason": "Tarifa aplicable a la fraccion"
      }
    ],
    "taxes": [
      {
        "rate_type": "percentage",
        "rate": 0.16,
        "name": "IVA",
        "description": "Impuesto al Valor Agregado",
        "reason": "Importacion a Mexico"
      }
    ],
    "restrictions": [],
    "trade_agreements": [],
    "notes": [],
    "unit": "Pza",
    "suggestions": [],
    "ieps": false,
    "regulaciones_rrna": []
  }
]
```

<Note>
  Las tasas porcentuales usan formato decimal: `0.16` significa 16%.
</Note>

## Creditos

| Productos | Costo         |
| --------- | ------------- |
| 1         | 0.25 creditos |
| 2         | 0.50 creditos |
| 10        | 2.50 creditos |
| 20        | 5.00 creditos |

* El cobro se realiza antes de procesar.
* Si el procesamiento falla, los creditos se reembolsan.
* `include_rrna=true` no agrega costo.
* Las llamadas con API key siempre consumen creditos.

## Errores

| HTTP  | Causa                                    | Accion                                               |
| ----- | ---------------------------------------- | ---------------------------------------------------- |
| `400` | Se enviaron 0 o mas de 20 productos      | Envia entre 1 y 20 productos                         |
| `401` | API key ausente o invalida               | Revisa `Authorization: Bearer ...`                   |
| `403` | Creditos insuficientes o acceso denegado | Revisa saldo y suscripcion                           |
| `422` | Body invalido                            | Revisa campos, tipos y valores permitidos            |
| `500` | Error interno al generar la cotizacion   | Reintenta con backoff; si persiste, contacta soporte |

## Recomendaciones

* Envia una descripcion especifica: material, uso, composicion y presentacion.
* Usa una fraccion de exactamente 8 digitos.
* Conserva el orden del arreglo para relacionar cada respuesta con su producto.
* Configura un timeout de al menos 180 segundos cuando uses `include_rrna=true`.
* Reintenta solo errores `500` con backoff exponencial.
