# Documentación API de Clasificar

Esta es la documentación completa de integración para agentes, LLMs y desarrolladores.

## Introducción

Clasificar API expone datos vehiculares argentinos para consulta de patentes, datos registrales normalizados y reportes inteligentes asincrónicos.

Base URLs:
- Producción: `https://api.clasific.ar`
- Sandbox: `https://sandbox.clasific.ar`

Formatos de patente aceptados:
- `ABC123`: formato viejo, 3 letras + 3 números.
- `AB123CD`: formato Mercosur, 2 letras + 3 números + 2 letras.

Las patentes son case-insensitive. La API normaliza a mayúsculas.

En sandbox se acepta cualquier patente no vacía para facilitar pruebas end-to-end.

Versionado:
- Todos los endpoints públicos están bajo `/v1`.

## Primeros pasos

1. Crear una cuenta en Clasificar.
2. Activar un plan desde la cuenta.
3. Crear una API key en la sección de llaves API.
4. Enviar requests con el header `x-api-key`.

Límites visibles en la página:
- 25 consultas por día.
- 100 consultas por mes.
- 5 requests por minuto.

## Precios API

Existe un plan gratuito para pruebas iniciales y planes pagos para mayor volumen. La tabla actualizada de precios,
límites mensuales, reportes inteligentes y RPM está disponible en `/precios-api`.

Resumen:
- Gratis: activación self-service, sin tarjeta, con cuota para pruebas iniciales.
- Planes pagos: checkout online, mayor volumen mensual y más capacidad por minuto.
- Todos los planes usan la misma autenticación por `x-api-key` y métricas de uso visibles.

## Autenticación

Todos los endpoints privados requieren:

```http
x-api-key: clk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```

Notas:
- Las API keys tienen prefijo `clk_`.
- La key completa se muestra una sola vez al crearla.
- Externamente se identifican por `prefix` y `last4`.

## Sistema de cuotas

Las cuotas se rastrean a nivel owner y por key:

- Cuotas diarias por owner: `fast`, `intelligent`, `miss`.
- Múltiples API keys comparten las cuotas diarias del owner.
- Rotar keys no resetea el uso.
- Rate limits por key: RPM total y RPM intelligent.

Consumo:
- Vehículo encontrado: consume `fast`.
- Vehículo no encontrado: consume `miss`.
- Reporte inteligente aceptado o servido desde cache: consume `intelligent` + cuota mensual.
- Polling de reporte inteligente: solo analytics, no consume cuota.

Importante:
- Cuando se alcanza el límite diario de `miss`, todas las búsquedas se bloquean, incluso fast.
- El reset diario ocurre a medianoche UTC.
- `/v1/status` devuelve `resetAt`.

## Sandbox

Sandbox usa el host `https://sandbox.clasific.ar` y el mismo header `x-api-key`. Cualquier API key válida puede llamar todos los endpoints documentados en sandbox, incluso si el owner está en plan gratuito.

Reglas de sandbox:
- No consulta información real ni crea reportes reales en la base productiva.
- Devuelve placeholders determinísticos a partir de `sandbox_seed` cuando se envía.
- La configuración de webhooks de sandbox está separada de producción.
- `POST /v1/reports` queda en estado `generating` durante una demora realista de 1 a 3 minutos antes de completar o fallar.
- El webhook de reporte se dispara al terminar esa demora. `POST /v1/webhooks/test` sigue siendo un test inmediato de conectividad.
- El query param `sandbox_scenario` permite forzar respuestas: `default`, `clean`, `debt`, `partial`, `unavailable`, `failed`.
- `sandbox_delay_ms` existe para pruebas controladas, pero en el sandbox público se normaliza a la ventana realista de demora.

Walkthrough recomendado:

1. Activar el plan gratuito desde `/account/activate` y crear una key en `/account/keys`.
2. Configurar el webhook de sandbox:

```bash
curl -X PATCH "https://sandbox.clasific.ar/v1/webhooks/config" \
  -H "x-api-key: clk_tu_api_key" \
  -H "content-type: application/json" \
  -d '{
    "url": "https://webhook.site/tu-url-unica",
    "enabled": true,
    "rotate_secret": false
  }'
```

3. Enviar un webhook de prueba:

```bash
curl -X POST "https://sandbox.clasific.ar/v1/webhooks/test" \
  -H "x-api-key: clk_tu_api_key"
```

4. Probar consulta básica:

```bash
curl -G "https://sandbox.clasific.ar/v1/vehicles/basic" \
  -H "x-api-key: clk_tu_api_key" \
  --data-urlencode "plate=CLIENTE-123" \
  --data-urlencode "classification=true" \
  --data-urlencode "sandbox_scenario=debt" \
  --data-urlencode "sandbox_seed=demo-cliente"
```

Respuesta básica de sandbox:
```json
{
  "success": true,
  "data": {
    "plate": "CLIENTE123",
    "make": "TOYOTA",
    "model": "COROLLA XEI CVT",
    "year": 2021,
    "firstRegistered": "2021-04-18",
    "totalOwners": 2,
    "currentOwners": 1,
    "currentLocation": {
      "city": "CABA",
      "province": "Ciudad Autónoma de Buenos Aires"
    },
    "locations": [
      "CABA, Ciudad Autónoma de Buenos Aires",
      "LA PLATA, Buenos Aires"
    ],
    "sourceDate": "2026-07-07",
    "classification": {
      "vehicleType": "AUTOMOTOR",
      "bodyType": "SEDAN",
      "vehicleCategory": "auto",
      "confidence": "high",
      "source": "sandbox",
      "matchedModel": "COROLLA XEI CVT 4 PUERTAS",
      "matchedYear": 2021,
      "approximateMatch": false,
      "description": "Respuesta mock de sandbox",
      "cacheHit": false
    },
    "sandbox": {
      "enabled": true,
      "scenario": "debt",
      "seed": "demo-cliente"
    }
  }
}
```

5. Crear un reporte completo:

```bash
curl -X POST "https://sandbox.clasific.ar/v1/reports?sandbox_scenario=debt&sandbox_seed=demo-cliente" \
  -H "x-api-key: clk_tu_api_key" \
  -H "content-type: application/json" \
  -H "Idempotency-Key: demo-cliente-001" \
  -d '{
    "plate": "CLIENTE-123"
  }'
```

Respuesta inicial:
```json
{
  "success": true,
  "data": {
    "reportRequestId": "sandbox_rr_123456",
    "plate": "CLIENTE123",
    "status": "generating",
    "pollUrl": "/v1/reports/sandbox_rr_123456",
    "pollCount": 0,
    "currentPass": 1,
    "maxPasses": 1,
    "passes": [
      {
        "pass": 1,
        "status": "running",
        "sources": null
      }
    ],
    "progress": {
      "total": 45,
      "completed": 0,
      "success": 0,
      "failed": 0,
      "pending": 45,
      "sources": []
    },
    "report": null,
    "sandbox": {
      "enabled": true,
      "scenario": "debt",
      "seed": "demo-cliente",
      "readyAfterMs": 104000
    },
    "createdAt": "2026-07-07T12:00:00.000Z",
    "updatedAt": "2026-07-07T12:00:00.000Z",
    "completedAt": null,
    "error": null
  }
}
```

6. Poll hasta completar:

```bash
curl "https://sandbox.clasific.ar/v1/reports/sandbox_rr_123456" \
  -H "x-api-key: clk_tu_api_key"
```

Respuesta completa:
```json
{
  "success": true,
  "data": {
    "reportRequestId": "sandbox_rr_123456",
    "plate": "CLIENTE123",
    "status": "completed",
    "pollUrl": "/v1/reports/sandbox_rr_123456",
    "pollCount": 3,
    "currentPass": 1,
    "maxPasses": 1,
    "passes": [
      {
        "pass": 1,
        "status": "running",
        "sources": null
      }
    ],
    "progress": {
      "total": 45,
      "completed": 45,
      "success": 42,
      "failed": 3,
      "pending": 0,
      "sources": []
    },
    "report": {
      "plate": "CLIENTE123",
      "timestamp": "2026-07-07T12:01:44.000Z",
      "total": 45,
      "completed": 45,
      "summary": {
        "totalSources": 45,
        "successfulSources": 42,
        "unavailableSources": 3,
        "sourcesWithFindings": 4
      },
      "vehicle": {
        "plate": "CLIENTE123",
        "make": "TOYOTA",
        "model": "COROLLA XEI CVT",
        "year": 2021,
        "vehicleType": "AUTOMOTOR",
        "registryOffice": "02044 - CAPITAL FEDERAL N 044",
        "currentLocation": {
          "city": "CABA",
          "province": "CAPITAL FEDERAL"
        },
        "queryDate": "15/05/2026",
        "quote": null
      },
      "vehicleSummary": {
        "plate": "CLIENTE123",
        "make": "TOYOTA",
        "model": "COROLLA XEI CVT",
        "year": 2021,
        "firstRegistered": "2010-09-07",
        "totalOwners": 2,
        "currentOwners": 3,
        "currentLocation": {
          "city": "CABA",
          "province": "CAPITAL FEDERAL"
        },
        "locations": [
          "C.AUTONOMA DE BS.AS, Ciudad Autonoma de Buenos Aires",
          "CABA, CAPITAL FEDERAL"
        ],
        "sourceDate": "2026-05-15"
      },
      "possibleOwner": {
        "name": "V******, S*",
        "id": {
          "type": "CUIT",
          "value": "30*"
        },
        "sources": [
          "agipImpuestos"
        ]
      },
      "possibleOwners": [
        {
          "name": "V******, S*",
          "id": {
            "type": "CUIT",
            "value": "30*"
          },
          "sources": [
            "agipImpuestos"
          ]
        }
      ],
      "consultedSources": [
        "ezeizaMultas",
        "lanusMultas",
        "trelewSemMultas",
        "saltaMultas",
        "lomasDeZamoraMultas",
        "bahiaBlancaMultas",
        "neuquenCapitalMultas",
        "misionesMultas",
        "sanJuanMultas",
        "avellanedaMultas",
        "vicenteLopezMultas",
        "cordobaMultas",
        "jujuyCapitalMultas",
        "laMatanzaMultas",
        "necocheaSemMultas",
        "cabaMultas",
        "gbaMultas",
        "rosarioMultas",
        "entreRioMultas",
        "santaFeMultas",
        "santaRosaMultas",
        "mendozaMultas",
        "marDelPlataMultas",
        "corrientesMultas",
        "pergaminoImpuestos",
        "morenoImpuestos",
        "sanMartinImpuestos",
        "saltaImpuestos",
        "catamarcaImpuestos",
        "arbaImpuestos",
        "cordobaImpuestos",
        "agipImpuestos",
        "santaFeImpuestos",
        "bahiaBlancaImpuestos",
        "enargas",
        "rtoCordoba",
        "rtoNacional",
        "vtvGba",
        "vtvCaba",
        "rtoSantaFe",
        "dnrpa2",
        "dnrpa"
      ],
      "unavailableSources": [
        "chacoMultas",
        "mendozaProvinciaMultas",
        "cordobaCapitalImpuestos"
      ],
      "results": {
        "taxes": {
          "total": 1,
          "totalAmount": 235757.86,
          "items": [
            {
              "date": null,
              "plate": "JFK106",
              "agency": null,
              "amount": 235757.86,
              "source": "agipImpuestos",
              "status": "vencido",
              "dueDate": "22/06/2026",
              "reference": "POSICION",
              "description": "POSICION",
              "jurisdiction": "CABA",
              "discountedAmount": null
            }
          ]
        },
        "tickets": {
          "total": 2,
          "totalAmount": 854991,
          "items": [
            {
              "date": "2023-09-24 08:48",
              "plate": "JFK106",
              "agency": null,
              "amount": 427495.5,
              "source": "cabaMultas",
              "status": "Pago Voluntario",
              "dueDate": null,
              "reference": "Q29775884",
              "description": "Exceso de velocidad de 10% a 30% mas de la velocidad permitida",
              "jurisdiction": "CABA",
              "discountedAmount": null
            },
            {
              "date": "2023-09-30 11:20",
              "plate": "JFK106",
              "agency": null,
              "amount": 427495.5,
              "source": "cabaMultas",
              "status": "Pago Voluntario",
              "dueDate": null,
              "reference": "Q29823593",
              "description": "Exceso de velocidad de 10% a 30% mas de la velocidad permitida",
              "jurisdiction": "CABA",
              "discountedAmount": null
            }
          ]
        },
        "gas": {
          "total": 1,
          "totalAmount": 0,
          "items": [
            {
              "source": "enargas",
              "plate": "JFK106",
              "operationDate": "2024-03-12",
              "workshop": "Taller GNC Ejemplo",
              "workshopTaxId": "30-00000000-0",
              "workshopCode": "GNC-123",
              "wafer": "12345678",
              "previousWafer": "87654321"
            }
          ]
        },
        "technicalInspections": {
          "total": 2,
          "totalAmount": 0,
          "items": [
            {
              "source": "vtvCaba",
              "jurisdiction": "CABA",
              "type": "VTV",
              "plate": "JFK106",
              "result": "Aprobado",
              "status": "Verificacion",
              "date": "26/08/2024",
              "dueDate": "01/06/2025",
              "facility": "9 de Julio Sur",
              "certificate": "6227143",
              "sticker": "4581967",
              "detail": "Particulares"
            }
          ]
        },
        "digest": {
          "summary": "El historial registra infracciones en CABA y una deuda de patente en CABA.",
          "headline": "Multas y deuda de patente detectadas",
          "riskLevel": "high",
          "highlights": [
            "2 infracciones en CABA por al menos $854.991.",
            "Deuda de patente en CABA por aproximadamente $235.758."
          ],
          "issues": [
            {
              "title": "Infracciones en CABA",
              "severity": "high",
              "detail": "Registra 2 infracciones por al menos $854.991 en pago voluntario."
            }
          ],
          "positives": [],
          "coverageGaps": [
            "Chaco no estuvo disponible durante la consulta."
          ],
          "noRecords": [],
          "ownershipEstimate": {
            "estimatedOwners": 2,
            "confidence": "medium",
            "basis": "El resumen registral consolidado muestra 2 titulares historicos."
          },
          "recommendation": "Pedi el detalle actualizado de multas y deuda antes de avanzar."
        }
      }
    },
    "sandbox": {
      "enabled": true,
      "scenario": "debt",
      "seed": "demo-cliente",
      "readyAfterMs": 104000
    },
    "createdAt": "2026-07-07T12:00:00.000Z",
    "updatedAt": "2026-07-07T12:01:44.000Z",
    "completedAt": "2026-07-07T12:01:44.000Z",
    "error": null
  }
}
```

7. Revisar entregas de webhook:

```bash
curl "https://sandbox.clasific.ar/v1/webhooks/deliveries?limit=10" \
  -H "x-api-key: clk_tu_api_key"
```

Entrega de sandbox:
```json
{
  "success": true,
  "data": {
    "deliveries": [
      {
        "id": "whd_sandbox_123",
        "report_request_id": null,
        "owner_ref": "user_cliente",
        "plate": "CLIENTE123",
        "report_status": "completed",
        "event_type": "report.completed",
        "is_test": false,
        "url": "https://webhook.site/tu-url-unica",
        "status": "processed",
        "attempts": 1,
        "max_attempts": 5,
        "response_status": 200,
        "last_error": null,
        "payload": {
          "success": true,
          "status": {
            "id": "sandbox_rr_123456",
            "state": "completed",
            "plate": "CLIENTE123",
            "result": {
              "plate": "CLIENTE123",
              "timestamp": "2026-07-07T12:01:44.000Z",
              "total": 45,
              "completed": 45,
              "summary": {
                "totalSources": 45,
                "successfulSources": 42,
                "unavailableSources": 3,
                "sourcesWithFindings": 4
              },
              "vehicle": {
                "plate": "CLIENTE123",
                "make": "TOYOTA",
                "model": "COROLLA XEI CVT",
                "year": 2021,
                "vehicleType": "AUTOMOTOR",
                "registryOffice": "02044 - CAPITAL FEDERAL N 044",
                "currentLocation": {
                  "city": "CABA",
                  "province": "CAPITAL FEDERAL"
                },
                "queryDate": "15/05/2026",
                "quote": null
              },
              "vehicleSummary": {
                "plate": "CLIENTE123",
                "make": "TOYOTA",
                "model": "COROLLA XEI CVT",
                "year": 2021,
                "firstRegistered": "2010-09-07",
                "totalOwners": 2,
                "currentOwners": 3,
                "currentLocation": {
                  "city": "CABA",
                  "province": "CAPITAL FEDERAL"
                },
                "locations": [
                  "C.AUTONOMA DE BS.AS, Ciudad Autonoma de Buenos Aires",
                  "CABA, CAPITAL FEDERAL"
                ],
                "sourceDate": "2026-05-15"
              },
              "possibleOwner": {
                "name": "V******, S*",
                "id": {
                  "type": "CUIT",
                  "value": "30*"
                },
                "sources": [
                  "agipImpuestos"
                ]
              },
              "possibleOwners": [
                {
                  "name": "V******, S*",
                  "id": {
                    "type": "CUIT",
                    "value": "30*"
                  },
                  "sources": [
                    "agipImpuestos"
                  ]
                }
              ],
              "consultedSources": [
                "ezeizaMultas",
                "lanusMultas",
                "trelewSemMultas",
                "saltaMultas",
                "lomasDeZamoraMultas",
                "bahiaBlancaMultas",
                "neuquenCapitalMultas",
                "misionesMultas",
                "sanJuanMultas",
                "avellanedaMultas",
                "vicenteLopezMultas",
                "cordobaMultas",
                "jujuyCapitalMultas",
                "laMatanzaMultas",
                "necocheaSemMultas",
                "cabaMultas",
                "gbaMultas",
                "rosarioMultas",
                "entreRioMultas",
                "santaFeMultas",
                "santaRosaMultas",
                "mendozaMultas",
                "marDelPlataMultas",
                "corrientesMultas",
                "pergaminoImpuestos",
                "morenoImpuestos",
                "sanMartinImpuestos",
                "saltaImpuestos",
                "catamarcaImpuestos",
                "arbaImpuestos",
                "cordobaImpuestos",
                "agipImpuestos",
                "santaFeImpuestos",
                "bahiaBlancaImpuestos",
                "enargas",
                "rtoCordoba",
                "rtoNacional",
                "vtvGba",
                "vtvCaba",
                "rtoSantaFe",
                "dnrpa2",
                "dnrpa"
              ],
              "unavailableSources": [
                "chacoMultas",
                "mendozaProvinciaMultas",
                "cordobaCapitalImpuestos"
              ],
              "results": {
                "taxes": {
                  "total": 1,
                  "totalAmount": 235757.86,
                  "items": [
                    {
                      "date": null,
                      "plate": "JFK106",
                      "agency": null,
                      "amount": 235757.86,
                      "source": "agipImpuestos",
                      "status": "vencido",
                      "dueDate": "22/06/2026",
                      "reference": "POSICION",
                      "description": "POSICION",
                      "jurisdiction": "CABA",
                      "discountedAmount": null
                    }
                  ]
                },
                "tickets": {
                  "total": 2,
                  "totalAmount": 854991,
                  "items": [
                    {
                      "date": "2023-09-24 08:48",
                      "plate": "JFK106",
                      "agency": null,
                      "amount": 427495.5,
                      "source": "cabaMultas",
                      "status": "Pago Voluntario",
                      "dueDate": null,
                      "reference": "Q29775884",
                      "description": "Exceso de velocidad de 10% a 30% mas de la velocidad permitida",
                      "jurisdiction": "CABA",
                      "discountedAmount": null
                    },
                    {
                      "date": "2023-09-30 11:20",
                      "plate": "JFK106",
                      "agency": null,
                      "amount": 427495.5,
                      "source": "cabaMultas",
                      "status": "Pago Voluntario",
                      "dueDate": null,
                      "reference": "Q29823593",
                      "description": "Exceso de velocidad de 10% a 30% mas de la velocidad permitida",
                      "jurisdiction": "CABA",
                      "discountedAmount": null
                    }
                  ]
                },
                "gas": {
                  "total": 1,
                  "totalAmount": 0,
                  "items": [
                    {
                      "source": "enargas",
                      "plate": "JFK106",
                      "operationDate": "2024-03-12",
                      "workshop": "Taller GNC Ejemplo",
                      "workshopTaxId": "30-00000000-0",
                      "workshopCode": "GNC-123",
                      "wafer": "12345678",
                      "previousWafer": "87654321"
                    }
                  ]
                },
                "technicalInspections": {
                  "total": 2,
                  "totalAmount": 0,
                  "items": [
                    {
                      "source": "vtvCaba",
                      "jurisdiction": "CABA",
                      "type": "VTV",
                      "plate": "JFK106",
                      "result": "Aprobado",
                      "status": "Verificacion",
                      "date": "26/08/2024",
                      "dueDate": "01/06/2025",
                      "facility": "9 de Julio Sur",
                      "certificate": "6227143",
                      "sticker": "4581967",
                      "detail": "Particulares"
                    }
                  ]
                },
                "digest": {
                  "summary": "El historial registra infracciones en CABA y una deuda de patente en CABA.",
                  "headline": "Multas y deuda de patente detectadas",
                  "riskLevel": "high",
                  "highlights": [
                    "2 infracciones en CABA por al menos $854.991.",
                    "Deuda de patente en CABA por aproximadamente $235.758."
                  ],
                  "issues": [
                    {
                      "title": "Infracciones en CABA",
                      "severity": "high",
                      "detail": "Registra 2 infracciones por al menos $854.991 en pago voluntario."
                    }
                  ],
                  "positives": [],
                  "coverageGaps": [
                    "Chaco no estuvo disponible durante la consulta."
                  ],
                  "noRecords": [],
                  "ownershipEstimate": {
                    "estimatedOwners": 2,
                    "confidence": "medium",
                    "basis": "El resumen registral consolidado muestra 2 titulares historicos."
                  },
                  "recommendation": "Pedi el detalle actualizado de multas y deuda antes de avanzar."
                }
              }
            },
            "error": null,
            "timing": {
              "startedAt": "2026-07-07T12:00:00.000Z",
              "endedAt": "2026-07-07T12:01:44.000Z",
              "durationMs": 104000,
              "durationMmSs": "1:44"
            },
            "report": {
              "id": null,
              "status": "sandbox",
              "version": null
            }
          }
        },
        "next_attempt_at": null,
        "processed_at": "2026-07-07T12:01:45.000Z",
        "created_at": "2026-07-07T12:01:44.000Z",
        "updated_at": "2026-07-07T12:01:45.000Z"
      }
    ],
    "total": 1
  }
}
```

## Contrato de reporte inteligente

Los endpoints de reportes devuelven camelCase:
- `reportRequestId`
- `pollUrl`
- `pollCount`
- `currentPass`
- `maxPasses`
- `createdAt`
- `updatedAt`
- `completedAt`

También incluyen los mismos campos en snake_case (`report_request_id`, `poll_url`, etc.) para compatibilidad con integraciones existentes, pero esos campos están deprecados.

Estados de reporte:
- `queued`: Solicitud aceptada; aún no comenzó la ejecución.
- `generating`: El reporte está consultando fuentes.
- `healing`: La capa inteligente está reintentando o subsanando fuentes fallidas.
- `completed`: Reporte terminado. report/status.result contiene el contrato final.
- `failed`: Reporte fallido. error/status.error contiene el motivo.

El reporte final vive en `data.report` o en `status.result` para webhooks.

Campos principales del reporte:
- `plate`
- `timestamp`
- `total`
- `completed`
- `summary`
- `vehicle`
- `vehicleSummary`
- `possibleOwner`
- `possibleOwners`
- `consultedSources`: array de strings con IDs públicos de fuentes consultadas.
- `unavailableSources`: array de strings con IDs públicos de fuentes no disponibles.
- `results`: `taxes`, `tickets`, `gas`, `technicalInspections`, `digest`.

El contrato público sólo incluye los campos documentados en esta sección; no dependas de datos auxiliares fuera de este esquema.

Contrato inquebrantable para `results.taxes.items[]` y `results.tickets.items[]`:
- `date`
- `plate`
- `agency`
- `amount`
- `source`
- `status`
- `dueDate`
- `reference`
- `description`
- `jurisdiction`
- `discountedAmount`

Ejemplo de reporte normalizado:
```json
{
  "plate": "JFK106",
  "timestamp": "2026-05-15T09:46:39.093Z",
  "total": 45,
  "completed": 45,
  "summary": {
    "totalSources": 45,
    "successfulSources": 42,
    "unavailableSources": 3,
    "sourcesWithFindings": 4
  },
  "vehicle": {
    "plate": "JFK106",
    "make": "LAND ROVER",
    "model": "RANGE ROVER 3.6 HSE TDV8",
    "year": 2010,
    "vehicleType": "AUTOMOTOR",
    "registryOffice": "02044 - CAPITAL FEDERAL N 044",
    "currentLocation": {
      "city": "CABA",
      "province": "CAPITAL FEDERAL"
    },
    "queryDate": "15/05/2026",
    "quote": null
  },
  "vehicleSummary": {
    "plate": "JFK106",
    "make": "LAND ROVER",
    "model": "RANGE ROVER 3.6 HSE TDV8",
    "year": 2010,
    "firstRegistered": "2010-09-07",
    "totalOwners": 2,
    "currentOwners": 3,
    "currentLocation": {
      "city": "CABA",
      "province": "CAPITAL FEDERAL"
    },
    "locations": [
      "C.AUTONOMA DE BS.AS, Ciudad Autonoma de Buenos Aires",
      "CABA, CAPITAL FEDERAL"
    ],
    "sourceDate": "2026-05-15"
  },
  "possibleOwner": {
    "name": "V******, S*",
    "id": {
      "type": "CUIT",
      "value": "30*"
    },
    "sources": [
      "agipImpuestos"
    ]
  },
  "possibleOwners": [
    {
      "name": "V******, S*",
      "id": {
        "type": "CUIT",
        "value": "30*"
      },
      "sources": [
        "agipImpuestos"
      ]
    }
  ],
  "consultedSources": [
    "cabaMultas",
    "gbaMultas",
    "agipImpuestos",
    "vtvCaba",
    "dnrpa2",
    "dnrpa"
  ],
  "unavailableSources": [
    "chacoMultas",
    "mendozaProvinciaMultas",
    "cordobaCapitalImpuestos"
  ],
  "results": {
    "taxes": {
      "total": 1,
      "totalAmount": 235757.86,
      "items": [
        {
          "date": null,
          "plate": "JFK106",
          "agency": null,
          "amount": 235757.86,
          "source": "agipImpuestos",
          "status": "vencido",
          "dueDate": "22/06/2026",
          "reference": "POSICION",
          "description": "POSICION",
          "jurisdiction": "CABA",
          "discountedAmount": null
        }
      ]
    },
    "tickets": {
      "total": 2,
      "totalAmount": 854991,
      "items": [
        {
          "date": "2023-09-24 08:48",
          "plate": "JFK106",
          "agency": null,
          "amount": 427495.5,
          "source": "cabaMultas",
          "status": "Pago Voluntario",
          "dueDate": null,
          "reference": "Q29775884",
          "description": "Exceso de velocidad de 10% a 30% mas de la velocidad permitida",
          "jurisdiction": "CABA",
          "discountedAmount": null
        },
        {
          "date": "2023-09-30 11:20",
          "plate": "JFK106",
          "agency": null,
          "amount": 427495.5,
          "source": "cabaMultas",
          "status": "Pago Voluntario",
          "dueDate": null,
          "reference": "Q29823593",
          "description": "Exceso de velocidad de 10% a 30% mas de la velocidad permitida",
          "jurisdiction": "CABA",
          "discountedAmount": null
        }
      ]
    },
    "gas": {
      "total": 1,
      "totalAmount": 0,
      "items": [
        {
          "source": "enargas",
          "plate": "JFK106",
          "operationDate": "2024-03-12",
          "workshop": "Taller GNC Ejemplo",
          "workshopTaxId": "30-00000000-0",
          "workshopCode": "GNC-123",
          "wafer": "12345678",
          "previousWafer": "87654321"
        }
      ]
    },
    "technicalInspections": {
      "total": 2,
      "totalAmount": 0,
      "items": [
        {
          "source": "vtvCaba",
          "jurisdiction": "CABA",
          "type": "VTV",
          "plate": "JFK106",
          "result": "Aprobado",
          "status": "Verificacion",
          "date": "26/08/2024",
          "dueDate": "01/06/2025",
          "facility": "9 de Julio Sur",
          "certificate": "6227143",
          "sticker": "4581967",
          "detail": "Particulares"
        }
      ]
    },
    "digest": {
      "summary": "El historial registra infracciones en CABA y una deuda de patente en CABA.",
      "headline": "Multas y deuda de patente detectadas",
      "riskLevel": "high",
      "highlights": [
        "2 infracciones en CABA por al menos $854.991.",
        "Deuda de patente en CABA por aproximadamente $235.758."
      ],
      "issues": [
        {
          "title": "Infracciones en CABA",
          "severity": "high",
          "detail": "Registra 2 infracciones por al menos $854.991 en pago voluntario."
        }
      ],
      "positives": [],
      "coverageGaps": [
        "Chaco no estuvo disponible durante la consulta."
      ],
      "noRecords": [],
      "ownershipEstimate": {
        "estimatedOwners": 2,
        "confidence": "medium",
        "basis": "El resumen registral consolidado muestra 2 titulares historicos."
      },
      "recommendation": "Pedi el detalle actualizado de multas y deuda antes de avanzar."
    }
  }
}
```

## Endpoints

### Consulta Básica de Vehículo

`GET /v1/vehicles/basic`

Retorna datos del vehículo desde la base histórica sin datos personales. Incluye conteo de titulares, historial de ubicaciones y datos de registro.

- Auth: requiere header `x-api-key`
- Cuota: fast (+ miss)
- Planes: free, starter, growth, scale

Parámetros query:
- `plate` (string, requerido): Patente argentina (ABC123 o AB123CD)
- `classification` (string, opcional): Usá true para incluir clasificación inferida y cacheada del vehículo

Body JSON:
No aplica.

Request example:
No aplica.

Response 200 example:
```json
{
  "success": true,
  "data": {
    "plate": "ABC123",
    "make": "TOYOTA",
    "model": "COROLLA 1.8 SE-G CVT",
    "year": 2019,
    "firstRegistered": "2019-03-15",
    "totalOwners": 3,
    "currentOwners": 1,
    "currentLocation": {
      "city": "CAPITAL FEDERAL",
      "province": "Ciudad Autónoma de Buenos Aires"
    },
    "locations": [
      "CAPITAL FEDERAL, Ciudad Autónoma de Buenos Aires",
      "LA PLATA, Buenos Aires"
    ],
    "sourceDate": "2024-08-01",
    "classification": {
      "vehicleType": "AUTOMOTOR",
      "bodyType": "SEDAN",
      "vehicleCategory": "auto",
      "confidence": "medium",
      "source": "afip_model_match",
      "matchedModel": "COROLLA SE-G 1.8 CVT 4 PUERTAS",
      "matchedYear": 2019,
      "approximateMatch": true,
      "description": null,
      "cacheHit": false
    }
  }
}
```

Response 200 not found example:
```json
{
  "found": false
}
```

---

### Crear Reporte Inteligente

`POST /v1/reports`

Crea un reporte inteligente asincrónico. Devuelve un ID pollable; si existe cache lista puede devolver el reporte final en la misma respuesta. Soporta Idempotency-Key para retries sin doble consumo.

- Auth: requiere header `x-api-key`
- Cuota: intelligent
- Planes: starter, growth, scale

Parámetros query:
No aplica.

Body JSON:
- `plate` (string, requerido): Patente argentina (ABC123 o AB123CD)
- `webhook_url` (string, opcional): Override opcional para entregar el resultado de este reporte

Request example:
```json
{
  "plate": "ABC123",
  "webhook_url": "https://tu-app.com/webhooks/clasificar"
}
```

Response 200 example:
```json
{
  "success": true,
  "data": {
    "reportRequestId": "api_rr_123",
    "plate": "ABC123",
    "status": "generating",
    "pollUrl": "/v1/reports/api_rr_123",
    "pollCount": 0,
    "currentPass": 1,
    "maxPasses": 3,
    "passes": [
      {
        "pass": 1,
        "status": "running",
        "sources": null
      }
    ],
    "progress": {
      "total": 45,
      "completed": 12,
      "success": 11,
      "failed": 1,
      "pending": 33,
      "sources": [
        {
          "name": "dnrpa",
          "status": "success"
        },
        {
          "name": "cabaMultas",
          "status": "success"
        },
        {
          "name": "chacoMultas",
          "status": "error",
          "error": "The operation was aborted due to timeout"
        }
      ]
    },
    "report": null,
    "createdAt": "2026-05-15T12:00:00.000Z",
    "updatedAt": "2026-05-15T12:00:03.000Z",
    "completedAt": null,
    "error": null
  }
}
```

---

### Consultar Estado de Reporte

`GET /v1/reports/:id`

Consulta el estado del reporte inteligente. El polling incrementa pollCount para analytics, pero no consume cuota del plan. Al completar, report contiene el informe normalizado completo.

- Auth: requiere header `x-api-key`
- Cuota: analytics-only
- Planes: starter, growth, scale

Parámetros query:
- `id` (string, requerido): reportRequestId devuelto por POST /v1/reports

Body JSON:
No aplica.

Request example:
No aplica.

Response 200 example:
```json
{
  "success": true,
  "data": {
    "reportRequestId": "api_rr_123",
    "plate": "JFK106",
    "status": "completed",
    "pollUrl": "/v1/reports/api_rr_123",
    "pollCount": 4,
    "currentPass": 2,
    "maxPasses": 3,
    "passes": [
      {
        "pass": 1,
        "status": "completed"
      },
      {
        "pass": 2,
        "status": "completed"
      }
    ],
    "progress": {
      "total": 45,
      "completed": 45,
      "success": 42,
      "failed": 3,
      "pending": 0,
      "sources": []
    },
    "report": {
      "plate": "JFK106",
      "timestamp": "2026-05-15T09:46:39.093Z",
      "total": 45,
      "completed": 45,
      "summary": {
        "totalSources": 45,
        "successfulSources": 42,
        "unavailableSources": 3,
        "sourcesWithFindings": 4
      },
      "vehicle": {
        "plate": "JFK106",
        "make": "LAND ROVER",
        "model": "RANGE ROVER 3.6 HSE TDV8",
        "year": 2010,
        "vehicleType": "AUTOMOTOR",
        "registryOffice": "02044 - CAPITAL FEDERAL N 044",
        "currentLocation": {
          "city": "CABA",
          "province": "CAPITAL FEDERAL"
        },
        "queryDate": "15/05/2026",
        "quote": null
      },
      "vehicleSummary": {
        "plate": "JFK106",
        "make": "LAND ROVER",
        "model": "RANGE ROVER 3.6 HSE TDV8",
        "year": 2010,
        "firstRegistered": "2010-09-07",
        "totalOwners": 2,
        "currentOwners": 3,
        "currentLocation": {
          "city": "CABA",
          "province": "CAPITAL FEDERAL"
        },
        "locations": [
          "C.AUTONOMA DE BS.AS, Ciudad Autonoma de Buenos Aires",
          "CABA, CAPITAL FEDERAL"
        ],
        "sourceDate": "2026-05-15"
      },
      "possibleOwner": {
        "name": "V******, S*",
        "id": {
          "type": "CUIT",
          "value": "30*"
        },
        "sources": [
          "agipImpuestos"
        ]
      },
      "possibleOwners": [
        {
          "name": "V******, S*",
          "id": {
            "type": "CUIT",
            "value": "30*"
          },
          "sources": [
            "agipImpuestos"
          ]
        }
      ],
      "consultedSources": [
        "cabaMultas",
        "gbaMultas",
        "agipImpuestos",
        "vtvCaba",
        "dnrpa2",
        "dnrpa"
      ],
      "unavailableSources": [
        "chacoMultas",
        "mendozaProvinciaMultas",
        "cordobaCapitalImpuestos"
      ],
      "results": {
        "taxes": {
          "total": 1,
          "totalAmount": 235757.86,
          "items": [
            {
              "date": null,
              "plate": "JFK106",
              "agency": null,
              "amount": 235757.86,
              "source": "agipImpuestos",
              "status": "vencido",
              "dueDate": "22/06/2026",
              "reference": "POSICION",
              "description": "POSICION",
              "jurisdiction": "CABA",
              "discountedAmount": null
            }
          ]
        },
        "tickets": {
          "total": 2,
          "totalAmount": 854991,
          "items": [
            {
              "date": "2023-09-24 08:48",
              "plate": "JFK106",
              "agency": null,
              "amount": 427495.5,
              "source": "cabaMultas",
              "status": "Pago Voluntario",
              "dueDate": null,
              "reference": "Q29775884",
              "description": "Exceso de velocidad de 10% a 30% mas de la velocidad permitida",
              "jurisdiction": "CABA",
              "discountedAmount": null
            },
            {
              "date": "2023-09-30 11:20",
              "plate": "JFK106",
              "agency": null,
              "amount": 427495.5,
              "source": "cabaMultas",
              "status": "Pago Voluntario",
              "dueDate": null,
              "reference": "Q29823593",
              "description": "Exceso de velocidad de 10% a 30% mas de la velocidad permitida",
              "jurisdiction": "CABA",
              "discountedAmount": null
            }
          ]
        },
        "gas": {
          "total": 1,
          "totalAmount": 0,
          "items": [
            {
              "source": "enargas",
              "plate": "JFK106",
              "operationDate": "2024-03-12",
              "workshop": "Taller GNC Ejemplo",
              "workshopTaxId": "30-00000000-0",
              "workshopCode": "GNC-123",
              "wafer": "12345678",
              "previousWafer": "87654321"
            }
          ]
        },
        "technicalInspections": {
          "total": 2,
          "totalAmount": 0,
          "items": [
            {
              "source": "vtvCaba",
              "jurisdiction": "CABA",
              "type": "VTV",
              "plate": "JFK106",
              "result": "Aprobado",
              "status": "Verificacion",
              "date": "26/08/2024",
              "dueDate": "01/06/2025",
              "facility": "9 de Julio Sur",
              "certificate": "6227143",
              "sticker": "4581967",
              "detail": "Particulares"
            }
          ]
        },
        "digest": {
          "summary": "El historial registra infracciones en CABA y una deuda de patente en CABA.",
          "headline": "Multas y deuda de patente detectadas",
          "riskLevel": "high",
          "highlights": [
            "2 infracciones en CABA por al menos $854.991.",
            "Deuda de patente en CABA por aproximadamente $235.758."
          ],
          "issues": [
            {
              "title": "Infracciones en CABA",
              "severity": "high",
              "detail": "Registra 2 infracciones por al menos $854.991 en pago voluntario."
            }
          ],
          "positives": [],
          "coverageGaps": [
            "Chaco no estuvo disponible durante la consulta."
          ],
          "noRecords": [],
          "ownershipEstimate": {
            "estimatedOwners": 2,
            "confidence": "medium",
            "basis": "El resumen registral consolidado muestra 2 titulares historicos."
          },
          "recommendation": "Pedi el detalle actualizado de multas y deuda antes de avanzar."
        }
      }
    },
    "createdAt": "2026-05-15T12:00:00.000Z",
    "updatedAt": "2026-05-15T12:03:00.000Z",
    "completedAt": "2026-05-15T12:03:00.000Z",
    "error": null
  }
}
```

---

### Estado de Cuenta

`GET /v1/status`

Retorna el uso de cuotas a nivel owner y todas las API keys asociadas.

- Auth: requiere header `x-api-key`
- Cuota: fast
- Planes: free, starter, growth, scale

Parámetros query:
No aplica.

Body JSON:
No aplica.

Request example:
No aplica.

Response 200 example:
```json
{
  "success": true,
  "data": {
    "owner": "user_martin",
    "plan": "starter",
    "usage": {
      "fast": {
        "used": 42,
        "limit": 100
      },
      "intelligent": {
        "used": 2,
        "limit": 5
      },
      "miss": {
        "used": 8,
        "limit": 500
      }
    },
    "rateLimits": {
      "rpm_total": 60,
      "rpm_intelligent": 5
    },
    "resetAt": "2026-02-23T00:00:00.000Z",
    "keys": [
      {
        "id": "550e8400-e29b-41d4-a716-446655440000",
        "prefix": "clk_AbCd",
        "last4": "xYzW",
        "name": "Production Key",
        "status": "active",
        "lastUsedAt": "2026-02-22T21:15:00.000Z",
        "createdAt": "2026-02-01T10:00:00.000Z"
      }
    ]
  }
}
```

---

### Ver configuración de Webhook

`GET /v1/webhooks/config`

Obtiene la URL, estado y secret del webhook del owner. No consume cuota de reporte.

- Auth: requiere header `x-api-key`
- Cuota: analytics-only
- Planes: starter, growth, scale

Parámetros query:
No aplica.

Body JSON:
No aplica.

Request example:
No aplica.

Response 200 example:
```json
{
  "success": true,
  "data": {
    "owner_ref": "user_martin",
    "url": "https://tu-app.com/webhooks/clasificar",
    "secret": "whsec_1234567890",
    "enabled": true,
    "updated_at": "2026-05-15T12:00:00.000Z"
  }
}
```

---

### Actualizar Webhook

`PATCH /v1/webhooks/config`

Configura el webhook default para reportes inteligentes. rotate_secret=true rota el secreto de verificación.

- Auth: requiere header `x-api-key`
- Cuota: analytics-only
- Planes: starter, growth, scale

Parámetros query:
No aplica.

Body JSON:
- `url` (string | null, opcional): URL HTTPS que recibirá eventos. null desconfigura la URL.
- `enabled` (boolean, opcional): Activa o desactiva entregas.
- `rotate_secret` (boolean, opcional): Genera un secret nuevo para validar próximos eventos.

Request example:
```json
{
  "url": "https://tu-app.com/webhooks/clasificar",
  "enabled": true,
  "rotate_secret": false
}
```

Response 200 example:
```json
{
  "success": true,
  "data": {
    "owner_ref": "user_martin",
    "url": "https://tu-app.com/webhooks/clasificar",
    "secret": "whsec_1234567890",
    "enabled": true,
    "updated_at": "2026-05-15T12:00:00.000Z"
  }
}
```

---

### Listar entregas de Webhook

`GET /v1/webhooks/deliveries`

Lista entregas recientes. Permite filtrar por status=pending|processed|failed, limit y offset.

- Auth: requiere header `x-api-key`
- Cuota: analytics-only
- Planes: starter, growth, scale

Parámetros query:
- `status` (string, opcional): pending, processed o failed
- `limit` (number, opcional): 1 a 100
- `offset` (number, opcional): Offset de paginación

Body JSON:
No aplica.

Request example:
No aplica.

Response 200 example:
```json
{
  "success": true,
  "data": {
    "deliveries": [
      {
        "id": "whd_123",
        "report_request_id": "api_rr_123",
        "owner_ref": "user_martin",
        "plate": "JFK106",
        "report_status": "completed",
        "event_type": "report.completed",
        "is_test": false,
        "url": "https://tu-app.com/webhooks/clasificar",
        "status": "processed",
        "attempts": 1,
        "max_attempts": 5,
        "response_status": 200,
        "last_error": null,
        "payload": {
          "success": true,
          "status": {
            "id": "api_rr_123",
            "state": "completed",
            "plate": "JFK106",
            "result": {
              "plate": "JFK106",
              "timestamp": "2026-05-15T09:46:39.093Z",
              "total": 45,
              "completed": 45,
              "summary": {
                "totalSources": 45,
                "successfulSources": 42,
                "unavailableSources": [
                  "chacoMultas",
                  "mendozaProvinciaMultas",
                  "cordobaCapitalImpuestos"
                ],
                "sourcesWithFindings": 4
              },
              "vehicle": {
                "plate": "JFK106",
                "make": "LAND ROVER",
                "model": "RANGE ROVER 3.6 HSE TDV8",
                "year": 2010,
                "vehicleType": "AUTOMOTOR",
                "registryOffice": "02044 - CAPITAL FEDERAL N 044",
                "currentLocation": {
                  "city": "CABA",
                  "province": "CAPITAL FEDERAL"
                },
                "queryDate": "15/05/2026",
                "quote": null
              },
              "vehicleSummary": {
                "plate": "JFK106",
                "make": "LAND ROVER",
                "model": "RANGE ROVER 3.6 HSE TDV8",
                "year": 2010,
                "firstRegistered": "2010-09-07",
                "totalOwners": 2,
                "currentOwners": 3,
                "currentLocation": {
                  "city": "CABA",
                  "province": "CAPITAL FEDERAL"
                },
                "locations": [
                  "C.AUTONOMA DE BS.AS, Ciudad Autonoma de Buenos Aires",
                  "CABA, CAPITAL FEDERAL"
                ],
                "sourceDate": "2026-05-15"
              },
              "possibleOwner": {
                "name": "V******, S*",
                "id": {
                  "type": "CUIT",
                  "value": "30*"
                },
                "sources": [
                  "agipImpuestos"
                ]
              },
              "possibleOwners": [
                {
                  "name": "V******, S*",
                  "id": {
                    "type": "CUIT",
                    "value": "30*"
                  },
                  "sources": [
                    "agipImpuestos"
                  ]
                }
              ],
              "consultedSources": [
                "cabaMultas",
                "gbaMultas",
                "agipImpuestos",
                "vtvCaba",
                "dnrpa2",
                "dnrpa"
              ],
              "unavailableSources": [
                "chacoMultas",
                "mendozaProvinciaMultas",
                "cordobaCapitalImpuestos"
              ],
              "results": {
                "taxes": {
                  "total": 1,
                  "totalAmount": 235757.86,
                  "items": [
                    {
                      "date": null,
                      "plate": "JFK106",
                      "agency": null,
                      "amount": 235757.86,
                      "source": "agipImpuestos",
                      "status": "vencido",
                      "dueDate": "22/06/2026",
                      "reference": "POSICION",
                      "description": "POSICION",
                      "jurisdiction": "CABA",
                      "discountedAmount": null
                    }
                  ]
                },
                "tickets": {
                  "total": 2,
                  "totalAmount": 854991,
                  "items": [
                    {
                      "date": "2023-09-24 08:48",
                      "plate": "JFK106",
                      "agency": null,
                      "amount": 427495.5,
                      "source": "cabaMultas",
                      "status": "Pago Voluntario",
                      "dueDate": null,
                      "reference": "Q29775884",
                      "description": "Exceso de velocidad de 10% a 30% mas de la velocidad permitida",
                      "jurisdiction": "CABA",
                      "discountedAmount": null
                    },
                    {
                      "date": "2023-09-30 11:20",
                      "plate": "JFK106",
                      "agency": null,
                      "amount": 427495.5,
                      "source": "cabaMultas",
                      "status": "Pago Voluntario",
                      "dueDate": null,
                      "reference": "Q29823593",
                      "description": "Exceso de velocidad de 10% a 30% mas de la velocidad permitida",
                      "jurisdiction": "CABA",
                      "discountedAmount": null
                    }
                  ]
                },
                "gas": {
                  "total": 1,
                  "totalAmount": 0,
                  "items": [
                    {
                      "source": "enargas",
                      "plate": "JFK106",
                      "operationDate": "2024-03-12",
                      "workshop": "Taller GNC Ejemplo",
                      "workshopTaxId": "30-00000000-0",
                      "workshopCode": "GNC-123",
                      "wafer": "12345678",
                      "previousWafer": "87654321"
                    }
                  ]
                },
                "technicalInspections": {
                  "total": 2,
                  "totalAmount": 0,
                  "items": [
                    {
                      "source": "vtvCaba",
                      "jurisdiction": "CABA",
                      "type": "VTV",
                      "plate": "JFK106",
                      "result": "Aprobado",
                      "status": "Verificacion",
                      "date": "26/08/2024",
                      "dueDate": "01/06/2025",
                      "facility": "9 de Julio Sur",
                      "certificate": "6227143",
                      "sticker": "4581967",
                      "detail": "Particulares"
                    }
                  ]
                },
                "digest": {
                  "summary": "El historial registra infracciones en CABA y una deuda de patente en CABA.",
                  "headline": "Multas y deuda de patente detectadas",
                  "riskLevel": "high",
                  "highlights": [
                    "2 infracciones en CABA por al menos $854.991.",
                    "Deuda de patente en CABA por aproximadamente $235.758."
                  ],
                  "issues": [
                    {
                      "title": "Infracciones en CABA",
                      "severity": "high",
                      "detail": "Registra 2 infracciones por al menos $854.991 en pago voluntario."
                    }
                  ],
                  "positives": [],
                  "coverageGaps": [
                    "Chaco no estuvo disponible durante la consulta."
                  ],
                  "noRecords": [],
                  "ownershipEstimate": {
                    "estimatedOwners": 2,
                    "confidence": "medium",
                    "basis": "El resumen registral consolidado muestra 2 titulares historicos."
                  },
                  "recommendation": "Pedi el detalle actualizado de multas y deuda antes de avanzar."
                }
              }
            },
            "error": null,
            "timing": {
              "startedAt": "2026-05-15T09:45:18.323Z",
              "endedAt": "2026-05-15T09:46:39.093Z",
              "durationMs": 80770,
              "durationMmSs": "1:21"
            },
            "report": {
              "id": 98,
              "status": "partial",
              "version": 3
            }
          }
        },
        "next_attempt_at": null,
        "processed_at": "2026-05-15T12:03:04.000Z",
        "created_at": "2026-05-15T12:03:00.000Z",
        "updated_at": "2026-05-15T12:03:04.000Z"
      }
    ],
    "total": 1
  }
}
```

---

### Enviar Webhook de Prueba

`POST /v1/webhooks/test`

Envía un report.completed de prueba usando la configuración actual. Requiere webhook habilitado y URL configurada.

- Auth: requiere header `x-api-key`
- Cuota: analytics-only
- Planes: starter, growth, scale

Parámetros query:
No aplica.

Body JSON:
No aplica.

Request example:
No aplica.

Response 200 example:
```json
{
  "success": true,
  "data": {
    "id": "whd_test_123",
    "event_type": "report.completed",
    "is_test": true,
    "status": "pending",
    "payload": {
      "success": true,
      "status": {
        "id": "api_rr_123",
        "state": "completed",
        "plate": "JFK106",
        "result": {
          "plate": "JFK106",
          "timestamp": "2026-05-15T09:46:39.093Z",
          "total": 45,
          "completed": 45,
          "summary": {
            "totalSources": 45,
            "successfulSources": 42,
            "unavailableSources": [
              "chacoMultas",
              "mendozaProvinciaMultas",
              "cordobaCapitalImpuestos"
            ],
            "sourcesWithFindings": 4
          },
          "vehicle": {
            "plate": "JFK106",
            "make": "LAND ROVER",
            "model": "RANGE ROVER 3.6 HSE TDV8",
            "year": 2010,
            "vehicleType": "AUTOMOTOR",
            "registryOffice": "02044 - CAPITAL FEDERAL N 044",
            "currentLocation": {
              "city": "CABA",
              "province": "CAPITAL FEDERAL"
            },
            "queryDate": "15/05/2026",
            "quote": null
          },
          "vehicleSummary": {
            "plate": "JFK106",
            "make": "LAND ROVER",
            "model": "RANGE ROVER 3.6 HSE TDV8",
            "year": 2010,
            "firstRegistered": "2010-09-07",
            "totalOwners": 2,
            "currentOwners": 3,
            "currentLocation": {
              "city": "CABA",
              "province": "CAPITAL FEDERAL"
            },
            "locations": [
              "C.AUTONOMA DE BS.AS, Ciudad Autonoma de Buenos Aires",
              "CABA, CAPITAL FEDERAL"
            ],
            "sourceDate": "2026-05-15"
          },
          "possibleOwner": {
            "name": "V******, S*",
            "id": {
              "type": "CUIT",
              "value": "30*"
            },
            "sources": [
              "agipImpuestos"
            ]
          },
          "possibleOwners": [
            {
              "name": "V******, S*",
              "id": {
                "type": "CUIT",
                "value": "30*"
              },
              "sources": [
                "agipImpuestos"
              ]
            }
          ],
          "consultedSources": [
            "cabaMultas",
            "gbaMultas",
            "agipImpuestos",
            "vtvCaba",
            "dnrpa2",
            "dnrpa"
          ],
          "unavailableSources": [
            "chacoMultas",
            "mendozaProvinciaMultas",
            "cordobaCapitalImpuestos"
          ],
          "results": {
            "taxes": {
              "total": 1,
              "totalAmount": 235757.86,
              "items": [
                {
                  "date": null,
                  "plate": "JFK106",
                  "agency": null,
                  "amount": 235757.86,
                  "source": "agipImpuestos",
                  "status": "vencido",
                  "dueDate": "22/06/2026",
                  "reference": "POSICION",
                  "description": "POSICION",
                  "jurisdiction": "CABA",
                  "discountedAmount": null
                }
              ]
            },
            "tickets": {
              "total": 2,
              "totalAmount": 854991,
              "items": [
                {
                  "date": "2023-09-24 08:48",
                  "plate": "JFK106",
                  "agency": null,
                  "amount": 427495.5,
                  "source": "cabaMultas",
                  "status": "Pago Voluntario",
                  "dueDate": null,
                  "reference": "Q29775884",
                  "description": "Exceso de velocidad de 10% a 30% mas de la velocidad permitida",
                  "jurisdiction": "CABA",
                  "discountedAmount": null
                },
                {
                  "date": "2023-09-30 11:20",
                  "plate": "JFK106",
                  "agency": null,
                  "amount": 427495.5,
                  "source": "cabaMultas",
                  "status": "Pago Voluntario",
                  "dueDate": null,
                  "reference": "Q29823593",
                  "description": "Exceso de velocidad de 10% a 30% mas de la velocidad permitida",
                  "jurisdiction": "CABA",
                  "discountedAmount": null
                }
              ]
            },
            "gas": {
              "total": 1,
              "totalAmount": 0,
              "items": [
                {
                  "source": "enargas",
                  "plate": "JFK106",
                  "operationDate": "2024-03-12",
                  "workshop": "Taller GNC Ejemplo",
                  "workshopTaxId": "30-00000000-0",
                  "workshopCode": "GNC-123",
                  "wafer": "12345678",
                  "previousWafer": "87654321"
                }
              ]
            },
            "technicalInspections": {
              "total": 2,
              "totalAmount": 0,
              "items": [
                {
                  "source": "vtvCaba",
                  "jurisdiction": "CABA",
                  "type": "VTV",
                  "plate": "JFK106",
                  "result": "Aprobado",
                  "status": "Verificacion",
                  "date": "26/08/2024",
                  "dueDate": "01/06/2025",
                  "facility": "9 de Julio Sur",
                  "certificate": "6227143",
                  "sticker": "4581967",
                  "detail": "Particulares"
                }
              ]
            },
            "digest": {
              "summary": "El historial registra infracciones en CABA y una deuda de patente en CABA.",
              "headline": "Multas y deuda de patente detectadas",
              "riskLevel": "high",
              "highlights": [
                "2 infracciones en CABA por al menos $854.991.",
                "Deuda de patente en CABA por aproximadamente $235.758."
              ],
              "issues": [
                {
                  "title": "Infracciones en CABA",
                  "severity": "high",
                  "detail": "Registra 2 infracciones por al menos $854.991 en pago voluntario."
                }
              ],
              "positives": [],
              "coverageGaps": [
                "Chaco no estuvo disponible durante la consulta."
              ],
              "noRecords": [],
              "ownershipEstimate": {
                "estimatedOwners": 2,
                "confidence": "medium",
                "basis": "El resumen registral consolidado muestra 2 titulares historicos."
              },
              "recommendation": "Pedi el detalle actualizado de multas y deuda antes de avanzar."
            }
          }
        },
        "error": null,
        "timing": {
          "startedAt": "2026-05-15T09:45:18.323Z",
          "endedAt": "2026-05-15T09:46:39.093Z",
          "durationMs": 80770,
          "durationMmSs": "1:21"
        },
        "report": {
          "id": 98,
          "status": "partial",
          "version": 3
        }
      }
    }
  }
}
```


## Webhooks

Los webhooks se envían como `POST` al endpoint configurado. Tu endpoint debe devolver cualquier `2xx` para marcar la entrega como procesada.

Config:
- Default webhook URL: `PATCH /v1/webhooks/config`.
- Override por request: body `webhook_url` en `POST /v1/reports`.
- Secret: devuelto por `GET /v1/webhooks/config`.

Headers enviados:
- `x-clasificar-event`: `report.completed` o `report.failed`.
- `x-clasificar-delivery`: ID único de entrega para idempotencia/logs.
- `x-clasificar-webhook-secret`: secret actual de tu configuración.

Validación recomendada:
- Comparar `x-clasificar-webhook-secret` contra el secret actual.
- Procesar cada `x-clasificar-delivery` de forma idempotente.

Eventos:
- `report.completed`: El reporte inteligente terminó correctamente. Payload: success=true, status.state=completed, status.result contiene el reporte normalizado.
- `report.failed`: El reporte inteligente no pudo completarse. Payload: success=false, status.state=failed, status.result=null, status.error contiene el motivo.

Estados de entrega:
- `pending`: Entrega pendiente o esperando reintento.
- `processed`: Tu endpoint respondió 2xx y la entrega quedó confirmada.
- `failed`: Se agotaron los intentos o el endpoint respondió error.

Payload `report.completed`:
```json
{
  "success": true,
  "status": {
    "id": "api_rr_123",
    "state": "completed",
    "plate": "JFK106",
    "result": {
      "plate": "JFK106",
      "timestamp": "2026-05-15T09:46:39.093Z",
      "total": 45,
      "completed": 45,
      "summary": {
        "totalSources": 45,
        "successfulSources": 42,
        "unavailableSources": 3,
        "sourcesWithFindings": 4
      },
      "vehicle": {
        "plate": "JFK106",
        "make": "LAND ROVER",
        "model": "RANGE ROVER 3.6 HSE TDV8",
        "year": 2010,
        "vehicleType": "AUTOMOTOR",
        "registryOffice": "02044 - CAPITAL FEDERAL N 044",
        "currentLocation": {
          "city": "CABA",
          "province": "CAPITAL FEDERAL"
        },
        "queryDate": "15/05/2026",
        "quote": null
      },
      "vehicleSummary": {
        "plate": "JFK106",
        "make": "LAND ROVER",
        "model": "RANGE ROVER 3.6 HSE TDV8",
        "year": 2010,
        "firstRegistered": "2010-09-07",
        "totalOwners": 2,
        "currentOwners": 3,
        "currentLocation": {
          "city": "CABA",
          "province": "CAPITAL FEDERAL"
        },
        "locations": [
          "C.AUTONOMA DE BS.AS, Ciudad Autonoma de Buenos Aires",
          "CABA, CAPITAL FEDERAL"
        ],
        "sourceDate": "2026-05-15"
      },
      "possibleOwner": {
        "name": "V******, S*",
        "id": {
          "type": "CUIT",
          "value": "30*"
        },
        "sources": [
          "agipImpuestos"
        ]
      },
      "possibleOwners": [
        {
          "name": "V******, S*",
          "id": {
            "type": "CUIT",
            "value": "30*"
          },
          "sources": [
            "agipImpuestos"
          ]
        }
      ],
      "consultedSources": [
        "cabaMultas",
        "gbaMultas",
        "agipImpuestos",
        "vtvCaba",
        "dnrpa2",
        "dnrpa"
      ],
      "unavailableSources": [
        "chacoMultas",
        "mendozaProvinciaMultas",
        "cordobaCapitalImpuestos"
      ],
      "results": {
        "taxes": {
          "total": 1,
          "totalAmount": 235757.86,
          "items": [
            {
              "date": null,
              "plate": "JFK106",
              "agency": null,
              "amount": 235757.86,
              "source": "agipImpuestos",
              "status": "vencido",
              "dueDate": "22/06/2026",
              "reference": "POSICION",
              "description": "POSICION",
              "jurisdiction": "CABA",
              "discountedAmount": null
            }
          ]
        },
        "tickets": {
          "total": 2,
          "totalAmount": 854991,
          "items": [
            {
              "date": "2023-09-24 08:48",
              "plate": "JFK106",
              "agency": null,
              "amount": 427495.5,
              "source": "cabaMultas",
              "status": "Pago Voluntario",
              "dueDate": null,
              "reference": "Q29775884",
              "description": "Exceso de velocidad de 10% a 30% mas de la velocidad permitida",
              "jurisdiction": "CABA",
              "discountedAmount": null
            },
            {
              "date": "2023-09-30 11:20",
              "plate": "JFK106",
              "agency": null,
              "amount": 427495.5,
              "source": "cabaMultas",
              "status": "Pago Voluntario",
              "dueDate": null,
              "reference": "Q29823593",
              "description": "Exceso de velocidad de 10% a 30% mas de la velocidad permitida",
              "jurisdiction": "CABA",
              "discountedAmount": null
            }
          ]
        },
        "gas": {
          "total": 1,
          "totalAmount": 0,
          "items": [
            {
              "source": "enargas",
              "plate": "JFK106",
              "operationDate": "2024-03-12",
              "workshop": "Taller GNC Ejemplo",
              "workshopTaxId": "30-00000000-0",
              "workshopCode": "GNC-123",
              "wafer": "12345678",
              "previousWafer": "87654321"
            }
          ]
        },
        "technicalInspections": {
          "total": 2,
          "totalAmount": 0,
          "items": [
            {
              "source": "vtvCaba",
              "jurisdiction": "CABA",
              "type": "VTV",
              "plate": "JFK106",
              "result": "Aprobado",
              "status": "Verificacion",
              "date": "26/08/2024",
              "dueDate": "01/06/2025",
              "facility": "9 de Julio Sur",
              "certificate": "6227143",
              "sticker": "4581967",
              "detail": "Particulares"
            }
          ]
        },
        "digest": {
          "summary": "El historial registra infracciones en CABA y una deuda de patente en CABA.",
          "headline": "Multas y deuda de patente detectadas",
          "riskLevel": "high",
          "highlights": [
            "2 infracciones en CABA por al menos $854.991.",
            "Deuda de patente en CABA por aproximadamente $235.758."
          ],
          "issues": [
            {
              "title": "Infracciones en CABA",
              "severity": "high",
              "detail": "Registra 2 infracciones por al menos $854.991 en pago voluntario."
            }
          ],
          "positives": [],
          "coverageGaps": [
            "Chaco no estuvo disponible durante la consulta."
          ],
          "noRecords": [],
          "ownershipEstimate": {
            "estimatedOwners": 2,
            "confidence": "medium",
            "basis": "El resumen registral consolidado muestra 2 titulares historicos."
          },
          "recommendation": "Pedi el detalle actualizado de multas y deuda antes de avanzar."
        }
      }
    },
    "error": null,
    "timing": {
      "startedAt": "2026-05-15T09:45:18.323Z",
      "endedAt": "2026-05-15T09:46:39.093Z",
      "durationMs": 80770,
      "durationMmSs": "1:21"
    },
    "report": {
      "id": 98,
      "status": "partial",
      "version": 3
    }
  }
}
```

Payload `report.failed`:
```json
{
  "success": false,
  "status": {
    "id": "api_rr_456",
    "state": "failed",
    "plate": "ABC123",
    "result": null,
    "error": "Report generation failed after retries",
    "timing": {
      "startedAt": "2026-05-15T09:45:18.323Z",
      "endedAt": "2026-05-15T09:46:39.093Z",
      "durationMs": 80770,
      "durationMmSs": "1:21"
    },
    "report": null
  }
}
```

Payload sandbox `report.completed`:
```json
{
  "success": true,
  "status": {
    "id": "sandbox_rr_123456",
    "state": "completed",
    "plate": "CLIENTE123",
    "result": {
      "plate": "CLIENTE123",
      "timestamp": "2026-07-07T12:01:44.000Z",
      "total": 45,
      "completed": 45,
      "summary": {
        "totalSources": 45,
        "successfulSources": 42,
        "unavailableSources": 3,
        "sourcesWithFindings": 4
      },
      "vehicle": {
        "plate": "CLIENTE123",
        "make": "TOYOTA",
        "model": "COROLLA XEI CVT",
        "year": 2021,
        "vehicleType": "AUTOMOTOR",
        "registryOffice": "02044 - CAPITAL FEDERAL N 044",
        "currentLocation": {
          "city": "CABA",
          "province": "CAPITAL FEDERAL"
        },
        "queryDate": "15/05/2026",
        "quote": null
      },
      "vehicleSummary": {
        "plate": "CLIENTE123",
        "make": "TOYOTA",
        "model": "COROLLA XEI CVT",
        "year": 2021,
        "firstRegistered": "2010-09-07",
        "totalOwners": 2,
        "currentOwners": 3,
        "currentLocation": {
          "city": "CABA",
          "province": "CAPITAL FEDERAL"
        },
        "locations": [
          "C.AUTONOMA DE BS.AS, Ciudad Autonoma de Buenos Aires",
          "CABA, CAPITAL FEDERAL"
        ],
        "sourceDate": "2026-05-15"
      },
      "possibleOwner": {
        "name": "V******, S*",
        "id": {
          "type": "CUIT",
          "value": "30*"
        },
        "sources": [
          "agipImpuestos"
        ]
      },
      "possibleOwners": [
        {
          "name": "V******, S*",
          "id": {
            "type": "CUIT",
            "value": "30*"
          },
          "sources": [
            "agipImpuestos"
          ]
        }
      ],
      "consultedSources": [
        "ezeizaMultas",
        "lanusMultas",
        "trelewSemMultas",
        "saltaMultas",
        "lomasDeZamoraMultas",
        "bahiaBlancaMultas",
        "neuquenCapitalMultas",
        "misionesMultas",
        "sanJuanMultas",
        "avellanedaMultas",
        "vicenteLopezMultas",
        "cordobaMultas",
        "jujuyCapitalMultas",
        "laMatanzaMultas",
        "necocheaSemMultas",
        "cabaMultas",
        "gbaMultas",
        "rosarioMultas",
        "entreRioMultas",
        "santaFeMultas",
        "santaRosaMultas",
        "mendozaMultas",
        "marDelPlataMultas",
        "corrientesMultas",
        "pergaminoImpuestos",
        "morenoImpuestos",
        "sanMartinImpuestos",
        "saltaImpuestos",
        "catamarcaImpuestos",
        "arbaImpuestos",
        "cordobaImpuestos",
        "agipImpuestos",
        "santaFeImpuestos",
        "bahiaBlancaImpuestos",
        "enargas",
        "rtoCordoba",
        "rtoNacional",
        "vtvGba",
        "vtvCaba",
        "rtoSantaFe",
        "dnrpa2",
        "dnrpa"
      ],
      "unavailableSources": [
        "chacoMultas",
        "mendozaProvinciaMultas",
        "cordobaCapitalImpuestos"
      ],
      "results": {
        "taxes": {
          "total": 1,
          "totalAmount": 235757.86,
          "items": [
            {
              "date": null,
              "plate": "JFK106",
              "agency": null,
              "amount": 235757.86,
              "source": "agipImpuestos",
              "status": "vencido",
              "dueDate": "22/06/2026",
              "reference": "POSICION",
              "description": "POSICION",
              "jurisdiction": "CABA",
              "discountedAmount": null
            }
          ]
        },
        "tickets": {
          "total": 2,
          "totalAmount": 854991,
          "items": [
            {
              "date": "2023-09-24 08:48",
              "plate": "JFK106",
              "agency": null,
              "amount": 427495.5,
              "source": "cabaMultas",
              "status": "Pago Voluntario",
              "dueDate": null,
              "reference": "Q29775884",
              "description": "Exceso de velocidad de 10% a 30% mas de la velocidad permitida",
              "jurisdiction": "CABA",
              "discountedAmount": null
            },
            {
              "date": "2023-09-30 11:20",
              "plate": "JFK106",
              "agency": null,
              "amount": 427495.5,
              "source": "cabaMultas",
              "status": "Pago Voluntario",
              "dueDate": null,
              "reference": "Q29823593",
              "description": "Exceso de velocidad de 10% a 30% mas de la velocidad permitida",
              "jurisdiction": "CABA",
              "discountedAmount": null
            }
          ]
        },
        "gas": {
          "total": 1,
          "totalAmount": 0,
          "items": [
            {
              "source": "enargas",
              "plate": "JFK106",
              "operationDate": "2024-03-12",
              "workshop": "Taller GNC Ejemplo",
              "workshopTaxId": "30-00000000-0",
              "workshopCode": "GNC-123",
              "wafer": "12345678",
              "previousWafer": "87654321"
            }
          ]
        },
        "technicalInspections": {
          "total": 2,
          "totalAmount": 0,
          "items": [
            {
              "source": "vtvCaba",
              "jurisdiction": "CABA",
              "type": "VTV",
              "plate": "JFK106",
              "result": "Aprobado",
              "status": "Verificacion",
              "date": "26/08/2024",
              "dueDate": "01/06/2025",
              "facility": "9 de Julio Sur",
              "certificate": "6227143",
              "sticker": "4581967",
              "detail": "Particulares"
            }
          ]
        },
        "digest": {
          "summary": "El historial registra infracciones en CABA y una deuda de patente en CABA.",
          "headline": "Multas y deuda de patente detectadas",
          "riskLevel": "high",
          "highlights": [
            "2 infracciones en CABA por al menos $854.991.",
            "Deuda de patente en CABA por aproximadamente $235.758."
          ],
          "issues": [
            {
              "title": "Infracciones en CABA",
              "severity": "high",
              "detail": "Registra 2 infracciones por al menos $854.991 en pago voluntario."
            }
          ],
          "positives": [],
          "coverageGaps": [
            "Chaco no estuvo disponible durante la consulta."
          ],
          "noRecords": [],
          "ownershipEstimate": {
            "estimatedOwners": 2,
            "confidence": "medium",
            "basis": "El resumen registral consolidado muestra 2 titulares historicos."
          },
          "recommendation": "Pedi el detalle actualizado de multas y deuda antes de avanzar."
        }
      }
    },
    "error": null,
    "timing": {
      "startedAt": "2026-07-07T12:00:00.000Z",
      "endedAt": "2026-07-07T12:01:44.000Z",
      "durationMs": 104000,
      "durationMmSs": "1:44"
    },
    "report": {
      "id": null,
      "status": "sandbox",
      "version": null
    }
  }
}
```

Payload sandbox `report.failed`:
```json
{
  "success": false,
  "status": {
    "id": "sandbox_rr_failed_123456",
    "state": "failed",
    "plate": "CLIENTE123",
    "result": null,
    "error": "Sandbox scenario forced report.failed",
    "timing": {
      "startedAt": "2026-07-07T12:00:00.000Z",
      "endedAt": "2026-07-07T12:01:17.000Z",
      "durationMs": 77000,
      "durationMmSs": "1:17"
    },
    "report": null
  }
}
```

## Errores

Formato estándar:
```json
{
  "success": false,
  "error": "Mensaje de error legible"
}
```

Códigos:
- HTTP 401, `INVALID_API_KEY`: API key inválida, revocada o faltante
- HTTP 429, `RATE_LIMIT_EXCEEDED`: Límite RPM total excedido (por key)
- HTTP 429, `INTELLIGENT_RATE_LIMIT_EXCEEDED`: Límite RPM intelligent excedido
- HTTP 429, `QUOTA_EXCEEDED_FAST`: Cuota diaria fast agotada (por owner)
- HTTP 429, `QUOTA_EXCEEDED_INTELLIGENT`: Cuota diaria intelligent agotada
- HTTP 429, `MONTHLY_QUOTA_EXCEEDED`: Cuota mensual agotada
- HTTP 429, `MISS_LIMIT_EXCEEDED`: Límite diario de misses alcanzado - bloquea todas las búsquedas

Ejemplo de error de cuota:
```json
{
  "success": false,
  "error_code": "QUOTA_EXCEEDED_FAST",
  "message": "Fast lookup daily quota exceeded.",
  "reset_at": "2026-02-23T00:00:00.000Z"
}
```


---

Fuente: [Clasificar](https://clasific.ar) — Base de datos vehiculares argentinos.
Contenido informativo. No reemplaza una consulta oficial ni una validación legal.
