Skip to main content

Documentacion de Integracion API Mint Scan

v1.5 Febrero 2026 REST API
https://rest.mintitv.com
📋
Content-Type
application/json
🔐
Autenticacion
Bearer JWT Token
📦
Limite por peticion
50 MB
1

Introduccion

Mint Scan es un servicio de digitalizacion y gestion de documentos de vehiculos. Ofrece:

  • Procesamiento OCR: Extraccion automatica de datos desde documentos escaneados (PDF, imagenes)
  • Ficha tecnica: Generacion estructurada de datos del vehiculo siguiendo el estandar europeo
  • Editor visual: Interfaz web para revision y edicion de datos extraidos

Esta guia describe como integrar un sistema externo con Mint Scan para enviar documentos, consultar resultados y acceder al editor visual.

2

Requisitos Previos

  • Credenciales de acceso: Usuario y contrasena proporcionados por Mint Scan
  • URL base: https://rest.mintitv.com
  • Content-Type: application/json en todas las peticiones
  • Limite de tamano por peticion: 50MB
3

Autenticacion

3.1 Obtener token de acceso

POST /api/v1/login
JSON Request
{
  "username": "[email protected]",
  "password": "contrasena"
}
JSON Response (200)
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

3.2 Uso del token

Todas las peticiones autenticadas deben incluir los siguientes headers:

HeaderValorRequerido
AuthorizationBearer {token}Si
Content-Typeapplication/jsonSi
X-Trace-Id{uuid}No (recomendado para trazabilidad)
4

Tipos de Documento Soportados

TipoDescripcion
cocCertificado de Conformidad (COC)
titv-oldTarjeta ITV antigua (RD 2140/1985)
titv-newTarjeta ITV nueva (RD 750/2010)
reducedFicha reducida
single-approvalHomologacion individual
cdcCertificado de Caracteristicas
reform-cp Reforma con Proyecto (en desarrollo)
reform-sp Reforma sin Proyecto (en desarrollo)
5

Categorias de Vehiculo

CategoriaDescripcion
M1 Vehiculos de motor para transporte de pasajeros (hasta 8 asientos + conductor)
M3 Vehiculos de motor para transporte de pasajeros (mas de 8 asientos, peso > 5t)
N1 Vehiculos de motor para transporte de mercancias (peso ≤ 3.5t)
N3 Vehiculos de motor para transporte de mercancias (peso > 12t)
L Vehiculos de motor con menos de cuatro ruedas (motocicletas, ciclomotores, etc.)
ORemolques y semirremolques
TTractores agricolas
TRTractores (otra clasificacion)
OSObras y servicios
OSRObras, remolques y servicios
Importante: El campo category es un enum estricto. Solo se aceptan los valores listados en la tabla. Cualquier otro valor sera rechazado con un error 422.
6

Envio de Documentos para Procesamiento

6.1 Envio con procesamiento automatico (OCR)

Envia un documento para procesamiento automatico. El sistema extrae los datos del documento mediante OCR y los estructura en una ficha tecnica.

POST /api/v2/process/pool
JSON Request
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "type": "coc",
  "category": "M1",
  "images": [
    {
      "base64": "JVBERi0xLjQK...",
      "fileName": "coc_vehiculo.pdf",
      "fileType": "application/pdf"
    }
  ],
  "name": "documento_coc.pdf",
  "externalId": "INSP-2026-001",
  "externalData": { "tipoCombustible": "diesel", "lineaInspeccion": 3 },
  "returnRedirectUrl": true
}

Campos del request:

CampoTipoRequeridoDescripcion
idstring (UUID v4)Si Identificador unico del proceso. Debe ser generado por el cliente.
typestringSi Tipo de documento (ver seccion 4)
categorystringSi Categoria del vehiculo (ver seccion 5)
imagesFileBase64[]Si Array de objetos de archivo (ver esquema abajo). Tambien acepta un solo objeto (no array) para un unico archivo.
namestringNo Nombre identificativo del documento. Maximo 100 caracteres.
externalIdstringNo Identificador externo para vincular con el sistema del cliente. Maximo 100 caracteres.
externalDataobjectNo Datos operativos adicionales del sistema cliente. Objeto JSON libre (clave-valor). Se almacena tal cual y se devuelve en consultas de estado.
returnRedirectUrlbooleanNo Si true, la respuesta del modo manual incluye una URL para acceder al editor visual.

Esquema FileBase64:

CampoTipoDescripcion
base64string Contenido del archivo en base64 puro (sin prefijo data:...;base64,). Maximo ~40MB en base64 (equivale a 30MB de archivo real).
fileNamestring Nombre del archivo con extension. Maximo 255 caracteres.
fileTypestring Tipo MIME del archivo. Valores permitidos: image/jpeg, application/pdf, image/tiff, image/png
JSON Response (200)
{
  "success": true,
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "message": "success"
}

Campos de la respuesta:

CampoTipoDescripcion
successbooleantrue si el documento fue aceptado correctamente
idstringUUID del proceso creado
messagestring"success" o "ignored_already_queued" si ya existe un proceso identico en cola
Importante: El procesamiento es asincrono. La respuesta confirma que el documento fue aceptado, pero los datos extraidos no estaran disponibles inmediatamente. Use el endpoint de consulta para verificar cuando estan listos.

6.2 Creacion manual (sin OCR)

Crea un expediente directamente sin procesamiento OCR. Util cuando el operador completara los datos manualmente en el editor visual.

POST /api/v2/process/pool
JSON Request
{
  "id": "550e8400-e29b-41d4-a716-446655440001",
  "type": "coc",
  "category": "M1",
  "processType": "manual",
  "externalId": "INSP-2026-002",
  "returnRedirectUrl": true
}

Diferencias con el envio automatico:

CampoProcesamiento automaticoCreacion manual
processType "document" (default, puede omitirse)"manual" (obligatorio)
imagesObligatorioNo requerido
Estado inicialQUEUEDCOMPLETED
Respuesta Minima (success, id, message) Extendida (incluye externalId, redirectUrl, etc.)
JSON Response (200)
{
  "success": true,
  "id": "550e8400-e29b-41d4-a716-446655440001",
  "message": "success",
  "processType": "manual",
  "type": "coc",
  "status": "COMPLETED",
  "externalId": "INSP-2026-002",
  "redirectUrl": "https://scan.mintitv.com?tempToken=xyz789&externalId=INSP-2026-002"
}

6.3 Documentos de Reforma

En desarrollo: Los tipos reform-cp y reform-sp se encuentran actualmente en desarrollo. La especificacion descrita a continuacion es provisional y puede cambiar antes de su disponibilidad.

Para tipos reform-cp (reforma con proyecto) y reform-sp (reforma sin proyecto), se utiliza el campo subdocuments en lugar de images.

JSON Request (reform-cp)
{
  "id": "550e8400-e29b-41d4-a716-446655440002",
  "type": "reform-cp",
  "category": "M1",
  "externalId": "INSP-2026-003",
  "returnRedirectUrl": true,
  "subdocuments": {
    "ic": [{ "base64": "...", "fileName": "informe_conformidad.pdf", "fileType": "application/pdf" }],
    "ct": [{ "base64": "...", "fileName": "certificado_taller.pdf", "fileType": "application/pdf" }],
    "titv": [{ "base64": "...", "fileName": "tarjeta_itv.pdf", "fileType": "application/pdf" }],
    "titv_type": "new",
    "pt": [{ "base64": "...", "fileName": "proyecto_tecnico.pdf", "fileType": "application/pdf" }],
    "cdfo": [{ "base64": "...", "fileName": "certificado_final_obra.pdf", "fileType": "application/pdf" }]
  }
}

Tabla de subdocumentos:

CampoDescripcionreform-cpreform-sp
icInforme de ConformidadObligatorioObligatorio
ctCertificado de TallerObligatorioObligatorio
titvTarjeta ITVObligatorioObligatorio
titv_typeTipo de tarjeta ITV: "new" o "old"ObligatorioObligatorio
pcPermiso de CirculacionOpcionalOpcional
ptProyecto TecnicoObligatorioNo permitido
cdfoCertificado Final de ObraObligatorioNo permitido
cfConjunto FuncionalNo permitidoOpcional
daDocumentacion AdicionalOpcionalOpcional

6.4 Documentos Auxiliares

Se pueden adjuntar documentos auxiliares junto al documento principal usando el campo auxiliaryDocuments.

JSON Request
{
  "id": "...",
  "type": "coc",
  "category": "M1",
  "images": [{ "base64": "...", "fileName": "coc.pdf", "fileType": "application/pdf" }],
  "auxiliaryDocuments": [
    {
      "type": "report",
      "images": [{ "base64": "...", "fileName": "informe.pdf", "fileType": "application/pdf" }]
    }
  ]
}

Los documentos auxiliares se procesan junto al documento principal y quedan asociados al mismo expediente.

6.5 El campo externalId

El campo externalId vincula el expediente Mint Scan con el identificador de inspeccion del sistema cliente.

  • Longitud maxima: 100 caracteres
  • Unicidad: Logica por estacion. No se puede crear un nuevo proceso con un externalId que ya tenga un expediente activo o completado en la misma estacion.
  • Echo: Se devuelve en la respuesta de creacion manual y en consultas de estado para facilitar la correlacion
  • Filtro principal: Es el parametro recomendado para consultas de estado

Reglas de unicidad:

Estado del expediente existenteSe puede crear otro con el mismo externalId?
En procesamiento (QUEUED, STRAIGHTENING, RECOGNIZING)No
Completado (COMPLETED, RETRIEVED)No
Guardado (CONVERTED_TO_SCANNING)No
Fallido (FAILED) o Cancelado (ABORTED)Si (reintento permitido)

6.6 URL de Redireccion (returnRedirectUrl)

Si se envia returnRedirectUrl: true, la respuesta incluye una URL que permite abrir el editor visual de Mint Scan sin necesidad de login manual.

Caracteristicas de la URL:

  • Contiene un token temporal de autenticacion
  • Valida durante aproximadamente 5 minutos
  • Un solo uso: una vez utilizada, no puede reutilizarse
  • Uso tipico: abrir en el navegador del operador para revision o edicion de los datos extraidos
JAVA Ejemplo de uso
// Abrir el editor visual en el navegador del operador
Desktop.browse(new URI(response.getRedirectUrl()));
7

Consulta de Estado

7.1 Endpoint

GET /api/v1/scan-process?externalId={id}

Parametros de busqueda (al menos uno requerido):

ParametroTipoDescripcion
externalIdstringIdentificador externo del sistema cliente (recomendado)
vinstringNumero de bastidor (VIN) del vehiculo
vehicleLicensestringMatricula del vehiculo

Parametro opcional:

ParametroTipoDescripcion
licenseIdstring (UUID) Identificador unico de la licencia. Una licencia esta asociada a un usuario y a una estacion. Cada estacion puede tener varias licencias (idealmente una por operador). Se obtiene automaticamente del token.

7.2 Estructura de respuesta

JSON Response (200)
{
  "processes": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "externalId": "INSP-2026-001",
      "externalData": { "tipoCombustible": "diesel", "lineaInspeccion": 3 },
      "status": "COMPLETED",
      "phase": "draft",
      "accessible": true,
      "redirectUrl": "https://scan.mintitv.com?tempToken=abc123&externalId=INSP-2026-001",
      "vehicleLicense": "1234ABC",
      "vin": "WVWZZZ3CZWE123456",
      "documentType": "coc",
      "category": "M1",
      "model": "Golf VIII 2.0 TDI",
      "expedient": "EXP-2026-001",
      "ict": true,
      "serialNumber": null,
      "createdAt": "2026-01-28T10:00:00Z",
      "technicalCard": {
        "E": "WVWZZZ3CZWE123456",
        "D.1": "VOLKSWAGEN",
        "D.2": "GOLF",
        "D.3": "Golf VIII 2.0 TDI",
        "J": "M1",
        "matricula": "1234ABC",
        "certificado": "e1*2018/858*00123",
        "reformas": [],
        "observaciones": ["Vehiculo con enganche homologado"],
        "homologaciones": [],
        "F.1": "2050",
        "F.2": "2350",
        "G": "1450"
      },
      "documents": [
        {
          "type": "original",
          "filename": "coc.pdf",
          "mimeType": "application/pdf",
          "downloadUrl": "https://storage.mintitv.com/signed-url..."
        },
        {
          "type": "processed",
          "filename": "page_1.jpg",
          "mimeType": "image/jpeg",
          "downloadUrl": "https://storage.mintitv.com/signed-url..."
        }
      ]
    }
  ]
}
Nota: La busqueda puede devolver multiples procesos para los mismos criterios (reintentos, historial, multiples expedientes del mismo vehiculo). Los resultados se ordenan por fecha de creacion, del mas reciente al mas antiguo.
Importante sobre errores: Si se produce un error interno al consultar procesos, se recibira un 503 Service Unavailable con un campo retryAfter indicando los segundos recomendados de espera antes de reintentar.

7.3 Estados del proceso

EstadoDescripcionAccion recomendada
QUEUEDEn cola de procesamientoSeguir polling
STRAIGHTENINGProcesando imagenes (rotacion, mejora)Seguir polling
RECOGNIZINGExtrayendo datos mediante OCRSeguir polling
COMPLETEDDatos disponibles para consultaConsultar resultados
RETRIEVEDDatos ya consultados previamenteConsultar resultados
CONVERTED_TO_SCANNINGExpediente guardado definitivamenteConsultar resultados
FAILEDError en el procesamientoReintentar o contactar soporte
ABORTEDCanceladoNo requiere accion
FINALIZEDExpediente validado, guardado definitivamente e impreso. Este valor de status aparece exclusivamente cuando phase es "finalized".Consultar resultados

7.4 Campos clave de la respuesta

CampoTipoDescripcion
idstringUUID del proceso
externalIdstring | nullIdentificador externo (null si no se proporciono)
externalDataobject | nullDatos operativos del sistema cliente (null si no se proporcionaron). Objeto JSON libre tal como fue enviado en la creacion.
statusstringEstado actual del proceso
phase"draft" | "finalized""draft" mientras esta en procesamiento, "finalized" cuando se ha validado, guardado e impreso como expediente definitivo
accessiblebooleantrue cuando los datos estan disponibles para consulta
redirectUrlstring | nullURL para acceder al editor visual. null si el proceso esta en estado FAILED o ABORTED
vehicleLicensestring | nullMatricula extraida del documento
vinstring | nullVIN extraido del documento
documentTypestringTipo de documento procesado
categorystringCategoria del vehiculo
modelstring | nullModelo del vehiculo
expedientstring | nullNumero de expediente
ictboolean | nullIndica si el vehiculo ha pasado la ITV
serialNumberstring | nullNumero de serie (solo disponible en expedientes finalizados, null en drafts)
createdAtstringFecha de creacion en formato ISO 8601
technicalCardobject | undefinedDatos de la ficha tecnica (ver seccion 11). Puede no estar presente si aun no se han extraido datos.
documentsarray | undefinedLista de documentos con URLs de descarga firmadas. Puede no estar presente si aun no hay documentos.

Estructura de cada documento:

CampoTipoDescripcion
type"original" | "processed""original" para el documento subido, "processed" para paginas procesadas
filenamestringNombre del archivo
mimeTypestringTipo MIME (application/pdf, image/jpeg, etc.)
downloadUrlstringURL firmada para descargar el archivo (temporal)

7.5 Patron de polling recomendado

Pseudocodigo Flujo de polling
1. Enviar documento (POST /api/v2/process/pool)
2. Esperar 5 segundos
3. Consultar estado (GET /api/v1/scan-process?externalId=...)
4. Si accessible === true  → datos disponibles, detener polling
5. Si status === "FAILED" o "ABORTED" → error, detener polling
6. Si no → volver al paso 2

Parametros recomendados:

ParametroValor
Intervalo entre peticiones5 segundos
Condicion de exitoaccessible === true
Condicion de errorstatus es FAILED o ABORTED
Timeout maximo5 minutos
8

Cancelacion de Procesos

Permite cancelar un proceso que esta en cola o en procesamiento.

POST /api/v1/process/pool/abort/{id}

{id}: el UUID devuelto al enviar el documento

JSON Response exitosa (200)
{
  "success": true,
  "message": "Proceso 550e8400-e29b-41d4-a716-446655440000 abortado"
}
JSON Response no encontrado (404)
{
  "success": false,
  "message": "Proceso 550e8400-e29b-41d4-a716-446655440000 no encontrado o ya finalizado"
}
Nota: Solo aplica a procesos activos (en cola o procesando). No se puede cancelar un proceso ya completado, fallido o abortado.
9

Duplicacion de Expedientes (Reinspeccion)

Permite duplicar un expediente existente (en fase "finalized") como un nuevo borrador para reinspecciones. Se copian los datos de la ficha tecnica y los documentos del expediente original al nuevo borrador.

9.1 Endpoint

POST /api/v1/duplicate-scanning
Nota: Este endpoint requiere un token de tipo LICENSE. Tokens de tipo CUSTOMER o ADMIN seran rechazados con un error 401.

9.2 Request

CampoTipoRequeridoDescripcion
scanningIdstring (UUID)CondicionalID del expediente origen. Requerido si no se envia externalId.
externalIdstring (max 100)CondicionalExternalId del expediente origen. Requerido si no se envia scanningId.
draftIdstring (UUID)NoID personalizado para el nuevo borrador. Si no se envia, se genera automaticamente.
newExternalIdstring (max 100)NoExternalId para el nuevo borrador.
vinstringNoVIN del vehiculo. Sobrescribe el valor del expediente origen.
vehicleLicensestringNoMatricula del vehiculo. Sobrescribe el valor del expediente origen.
expedientstringNoNumero de expediente. Sobrescribe el valor del expediente origen.
externalDataobjectNoDatos operativos para el nuevo borrador. Si no se envia, se hereda del expediente origen. Objeto JSON libre.
returnRedirectUrlbooleanNoSi true, la respuesta incluye una URL de redireccion temporal. Default: false.
Importante: Al menos uno de scanningId o externalId es obligatorio para identificar el expediente origen.
JSON Ejemplo de request
{
  "externalId": "INSP-2026-00123",
  "newExternalId": "INSP-2026-00456",
  "vin": "WVWZZZ3CZWE123456",
  "returnRedirectUrl": true
}

9.3 Respuestas

201 - Borrador duplicado exitosamente:

JSON Response (201)
{
  "success": true,
  "message": "Draft duplicado exitosamente",
  "draftId": "f1e2d3c4-b5a6-7890-abcd-ef0987654321",
  "scanningId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "externalId": "INSP-2026-00456",
  "externalData": null,
  "redirectUrl": "https://scan.mintitv.com?tempToken=xyz789&externalId=INSP-2026-00456"
}

Campos de la respuesta:

CampoTipoDescripcion
successbooleantrue si la duplicacion fue exitosa
draftIdstringUUID del nuevo borrador creado
scanningIdstringUUID del expediente origen
externalIdstring | nullExternalId asignado al nuevo borrador (newExternalId del request)
externalDataobject | nullDatos operativos asignados al nuevo borrador (del request o heredados del expediente origen)
redirectUrlstring | nullURL temporal para acceder al editor visual. Solo presente si se envio returnRedirectUrl: true y el borrador tiene externalId.

401 - No autorizado:

JSON 401 Unauthorized
{
  "title": "Not Authorized",
  "detail": "Token no autorizado",
  "code": "NOT_AUTHORIZED",
  "status": 401
}

403 - Acceso denegado:

JSON 403 Forbidden
{
  "title": "Forbidden",
  "detail": "No tiene permisos para duplicar este scanning",
  "code": "FORBIDDEN"
}

404 - Expediente no encontrado:

JSON 404 Not Found
{
  "title": "Not Found",
  "detail": "Scanning no encontrado",
  "code": "SCANNING_NOT_FOUND"
}

422 - Error de validacion:

JSON 422 Unprocessable Entity
{
  "title": "Validation Error",
  "detail": "Al menos uno de scanningId o externalId es requerido",
  "code": "VALIDATION_ERROR"
}

503 - Servicio no disponible:

JSON 503 Service Unavailable
{
  "title": "Servicio no disponible",
  "detail": "Backend service is currently unavailable",
  "code": "SERVICE_UNAVAILABLE",
  "retryAfter": 30
}
Nota: Los codigos y mensajes exactos de los errores 403, 404 y 422 dependen del caso concreto; los ejemplos muestran la estructura general.
10

Generacion de PDF Preview

Permite generar un documento PDF a partir de un proceso de escaneo existente. El contenido del PDF varia segun la fase del proceso:

  • Draft (phase: "draft"): PDF con marca de agua "BORRADOR"
  • Finalized (phase: "finalized"): PDF definitivo sin marca de agua

10.1 Endpoint

GET /api/v1/scan-process/pdf?externalId={id}
Nota: Este endpoint requiere un token de tipo LICENSE. Tokens de tipo CUSTOMER o ADMIN seran rechazados con un error 401.

10.2 Parametros

ParametroTipoRequeridoDescripcion
externalIdstringSiIdentificador externo del proceso (inspeccion_id del sistema cliente)

10.3 Respuestas

200 - PDF generado correctamente:

La respuesta es un archivo PDF binario con los siguientes headers:

HeaderValor
Content-Typeapplication/pdf
Content-Dispositioninline; filename=preview-{externalId}.pdf

401 - No autorizado:

JSON 401 Unauthorized
{
  "title": "Not Authorized",
  "detail": "Token no autorizado",
  "code": "NOT_AUTHORIZED",
  "status": 401
}

422 - Error de validacion o negocio:

CasoCodigoDescripcion
Proceso no encontradoDOCUMENT_NOT_FOUNDNo existe un proceso con el externalId indicado
Proceso no accesibleCONFLICT_ERROREl proceso no esta en un estado que permita generar el PDF
Sin datos de ficha tecnicaCONFLICT_ERROREl proceso no tiene datos de ficha tecnica (technicalCard)
JSON 422 Ejemplo
{
  "title": "Proceso no encontrado",
  "detail": "No se encontro ningun proceso con externalId: INSP-2026-00123",
  "code": "DOCUMENT_NOT_FOUND",
  "status": 422
}

500 - Error interno del servidor

503 - Servicio no disponible

10.4 Requisitos del proceso

Para generar el PDF, el proceso debe cumplir:

  • Existir: Debe haber un proceso asociado al externalId proporcionado
  • Ser accesible: El campo accessible debe ser true (estados COMPLETED, RETRIEVED, CONVERTED_TO_SCANNING o FINALIZED)
  • Tener ficha tecnica: El proceso debe tener datos en technicalCard
Nota: Si el proceso esta en fase "draft", el PDF generado incluira una marca de agua "BORRADOR" para indicar que los datos aun no han sido validados definitivamente.
11

Ficha Tecnica (technicalCard)

El objeto technicalCard contiene los datos extraidos del documento, normalizados y estructurados segun los campos de la ficha tecnica europea. Todos los valores son de tipo string | null, excepto los campos de tipo array que son string[] | null. Los campos no encontrados tendran valor null.

Nota sobre normalizacion: Los valores se normalizan automaticamente: numeros se convierten a string, objetos internos se resuelven a su valor textual, y arrays se extraen a listas de strings.

11.1 Identificacion y datos generales

ClaveDescripcion
EVIN / Numero de bastidor
matriculaMatricula del vehiculo
certificadoNumero de certificado
fechaEmisionFecha de emision del documento

11.2 Marca, modelo y categoria

ClaveDescripcion
D.1Marca
D.2Tipo / Variante / Version
D.3Denominacion comercial
D.6Numero de fabricacion
JCategoria del vehiculo
J.1Subcategoria del vehiculo
J.2Carroceria
J.3Codigo de carroceria

11.3 Homologacion

ClaveDescripcion
KContrasena de homologacion
K.1Numero de homologacion de tipo
K.2Numero de extension de homologacion
A.1Numero de homologacion (campo A.1)
A.2Numero de homologacion (campo A.2)
B.1Fabricante (campo B.1)
B.2Representante del fabricante (campo B.2)

11.4 Masas

ClaveDescripcion
F.1Masa maxima en carga tecnicamente admisible (kg)
F.1.1Masa maxima en carga tecnicamente admisible - eje 1 (kg)
F.1.5Masa maxima en carga tecnicamente admisible - eje 5 (kg)
F.2Masa maxima en carga admisible del vehiculo en servicio (kg)
F.2.1Masa maxima en carga admisible - eje 1 (kg)
F.3Masa maxima en carga admisible del conjunto (kg)
F.3.1Masa maxima en carga admisible del conjunto - eje 1 (kg)
F.4Masa maxima de la carga que puede transportar (kg)
F.5Masa maxima tecnicamente admisible sobre el punto de acoplamiento (kg)
F.5.1Masa maxima tecnicamente admisible - complementario (kg)
F.6Masa maxima admisible del vehiculo cargado para matriculacion/circulacion (kg)
F.7Masa maxima admisible del conjunto para matriculacion/circulacion (kg)
F.7.1Masa maxima admisible del conjunto - complementario (kg)
F.8Masa maxima admisible del vehiculo cargado - complementario (kg)
GMasa del vehiculo en servicio con carroceria (kg)
G.1Masa del vehiculo en servicio sin carroceria (kg)

11.5 Dimensiones

ClaveDescripcion
LLongitud (mm)
L.0Longitud del voladizo delantero (mm)
L.1Longitud del voladizo trasero (mm)
L.2Longitud del voladizo trasero con caja (mm)
M.1Distancia entre ejes (mm)
M.4Anchura del vehiculo (mm)

11.6 Remolque

ClaveDescripcion
O.1Masa maxima remolque con freno (kg)
O.1.1Masa maxima remolque con freno - tipo 1 (kg)
O.1.2Masa maxima remolque con freno - tipo 2 (kg)
O.1.3Masa maxima remolque con freno - tipo 3 (kg)
O.1.4Masa maxima remolque con freno - tipo 4 (kg)
O.2.1Masa maxima remolque sin freno - tipo 1 (kg)
O.2.2Masa maxima remolque sin freno - tipo 2 (kg)
O.2.3Masa maxima remolque sin freno - tipo 3 (kg)
O.3Masa maxima tecnicamente admisible del conjunto (kg)

11.7 Motor y emisiones

ClaveDescripcion
P.1Cilindrada (cm3)
P.1.1Cilindrada - complementario
P.2Potencia neta maxima (kW)
P.2.1Potencia neta maxima - complementario (kW)
P.3Tipo de combustible
P.5Motor - Numero de identificacion
P.5.1Motor - Numero de identificacion complementario
V.7CO2 (g/km)
V.8Consumo de combustible
V.9Clase medioambiental (Euro)

11.8 Plazas y sonido

ClaveDescripcion
S.1Numero de plazas sentadas (incluido conductor)
S.1.1Numero de plazas sentadas - complementario
S.2Numero de plazas de pie
U.1Nivel sonoro en parado (dB)
U.2Velocidad de rotacion del motor (min-1)

11.9 Neumaticos

ClaveDescripcion
EPNeumaticos - general
EP.1Neumaticos - eje 1
EP.2Neumaticos - eje 2
EP.3Neumaticos - eje 3
EP.4Neumaticos - eje 4

11.10 Otros campos

ClaveDescripcion
QRelacion potencia/peso (kW/kg)
RColor del vehiculo
TVelocidad maxima (km/h)
ZObservaciones especificas
numEjesNumero de ejes
numRuedasNumero de ruedas
numNeumaticosNumero de neumaticos

11.11 Campos de tipo array

ClaveDescripcionTipo
reformasLista de reformas aplicadas al vehiculostring[] | null
observacionesLista de observaciones del documentostring[] | null
homologacionesLista de homologaciones del vehiculostring[] | null
Nota: El contenido exacto de technicalCard depende del tipo de documento procesado. Un COC contendra mas campos que una tarjeta ITV antigua, por ejemplo. El total de campos posibles es 80.
12

Gestion de Errores

12.1 Codigos HTTP

Codigo HTTPSignificado
200Operacion exitosa
201Recurso creado exitosamente (ej: duplicacion de expediente)
401Token invalido, expirado o sin permisos. Debe obtener un nuevo token.
404Recurso no encontrado
413Payload demasiado grande. El cuerpo de la peticion excede el limite de 50MB.
422Error de validacion en los parametros enviados
429Demasiadas peticiones. Se ha superado el limite de rate limiting (1000 peticiones por IP cada 15 minutos).
500Error interno del servidor
503Servicio no disponible temporalmente. Reintente tras unos segundos.

12.2 Formato de errores

JSON Estructura de error
{
  "title": "Titulo del error",
  "detail": "Descripcion detallada del error",
  "code": "CODIGO_ERROR"
}

12.3 Ejemplos comunes

Token no proporcionado (401):

JSON 401 Unauthorized
{
  "title": "Not Authorized",
  "detail": "Token no proporcionado",
  "code": "TOKEN_NOT_PROVIDED"
}

Parametros de validacion invalidos (422):

JSON 422 Unprocessable Entity
{
  "title": "Formato de Peticion Invalida.",
  "detail": "At least one search parameter is required: externalId, vin, or vehicleLicense",
  "code": "INVALID_FORMAT"
}

Error interno (500):

JSON 500 Internal Server Error
{
  "title": "Error interno del servidor",
  "detail": "Error interno del servidor. Pongase en contacto con soporte.",
  "code": "INTERNAL_SERVER_ERROR"
}

Payload demasiado grande (413):

JSON 413 Payload Too Large
{
  "title": "Payload Too Large",
  "detail": "El cuerpo de la peticion excede el limite de 50MB",
  "code": "PAYLOAD_TOO_LARGE",
  "status": 413
}

Demasiadas peticiones (429):

JSON 429 Too Many Requests
{
  "title": "Too Many Requests",
  "detail": "Too many requests, please try again later.",
  "code": "TOO_MANY_REQUESTS",
  "status": 429
}

Servicio no disponible (503):

JSON 503 Service Unavailable
{
  "title": "Service Unavailable",
  "detail": "Backend returned status 500",
  "code": "SERVICE_UNAVAILABLE",
  "retryAfter": 30
}
Nota: El campo retryAfter indica los segundos recomendados de espera antes de reintentar la peticion.
13

Flujo Completo de Integracion

Autenticacion
POST /api/v1/login con username y password
Recibir el token JWT de acceso.
Enviar documento
POST /api/v2/process/pool con id, type, category, images, externalId, returnRedirectUrl
Recibir confirmacion: { success, id, message }
Polling cada 5 segundos
GET /api/v1/scan-process?externalId=INSP-2026-001
Verificar: accessible === true para datos disponibles, status === "FAILED" o "ABORTED" para error.
Recibir resultados
Obtener technicalCard con los datos extraidos, documents con URLs de descarga y redirectUrl para el editor visual.
(Opcional) Abrir editor visual
Usar la redirectUrl para abrir el editor en el navegador del operador. Token valido ~5 minutos, un solo uso.
(Opcional) Generar PDF preview
GET /api/v1/scan-process/pdf?externalId=INSP-2026-001
Recibir archivo PDF binario (application/pdf).
(Opcional) Duplicar expediente para reinspeccion
POST /api/v1/duplicate-scanning con externalId, newExternalId, returnRedirectUrl
Recibir: { success, draftId, scanningId, externalId, redirectUrl }
(Opcional) Abrir editor visual del duplicado
Usar la redirectUrl del borrador duplicado para abrir el editor.
14

Limites y Restricciones

ConceptoLimite
Tamano maximo por peticion50 MB
Tamano maximo por archivo30 MB de archivo real (~40 MB en base64)
Longitud maxima de externalId100 caracteres
Longitud maxima de name100 caracteres (truncado automatico)
Longitud maxima de fileName255 caracteres
Validez del token temporal (redirectUrl)~5 minutos, un solo uso
Tipos MIME aceptados (fileType)application/pdf, image/jpeg, image/png, image/tiff
categoryEnum estricto: M1, M3, N1, N3, L, O, T, TR, OS, OSR
15

Ejemplos Completos con cURL

Ejemplo 1: Flujo completo con COC

Paso 1 - Autenticacion:

bash Login
curl -X POST https://rest.mintitv.com/api/v1/login \
  -H "Content-Type: application/json" \
  -d '{
    "username": "[email protected]",
    "password": "contrasena"
  }'

Paso 2 - Enviar documento:

bash Envio con OCR
curl -X POST https://rest.mintitv.com/api/v2/process/pool \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer eyJhbGciOi..." \
  -d '{
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "coc",
    "category": "M1",
    "images": [{"base64": "JVBERi0xLjQK...", "fileName": "coc_vehiculo.pdf", "fileType": "application/pdf"}],
    "name": "coc_vehiculo.pdf",
    "externalId": "INSP-2026-001",
    "returnRedirectUrl": true
  }'

Paso 3 - Consultar estado:

bash Consulta
curl -X GET "https://rest.mintitv.com/api/v1/scan-process?externalId=INSP-2026-001" \
  -H "Authorization: Bearer eyJhbGciOi..."

Ejemplo 2: Creacion manual (sin OCR)

bash Creacion manual
curl -X POST https://rest.mintitv.com/api/v2/process/pool \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer eyJhbGciOi..." \
  -d '{
    "id": "550e8400-e29b-41d4-a716-446655440001",
    "type": "titv-new",
    "category": "M1",
    "processType": "manual",
    "externalId": "INSP-2026-002",
    "returnRedirectUrl": true
  }'

Ejemplo 3: Envio de reforma con proyecto

bash reform-cp
curl -X POST https://rest.mintitv.com/api/v2/process/pool \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer eyJhbGciOi..." \
  -d '{
    "id": "550e8400-e29b-41d4-a716-446655440002",
    "type": "reform-cp",
    "category": "M1",
    "externalId": "INSP-2026-003",
    "returnRedirectUrl": true,
    "subdocuments": {
      "ic": [{"base64": "...", "fileName": "informe_conformidad.pdf", "fileType": "application/pdf"}],
      "ct": [{"base64": "...", "fileName": "certificado_taller.pdf", "fileType": "application/pdf"}],
      "titv": [{"base64": "...", "fileName": "tarjeta_itv.pdf", "fileType": "application/pdf"}],
      "titv_type": "new",
      "pt": [{"base64": "...", "fileName": "proyecto_tecnico.pdf", "fileType": "application/pdf"}],
      "cdfo": [{"base64": "...", "fileName": "certificado_final_obra.pdf", "fileType": "application/pdf"}]
    }
  }'

Ejemplo 4: Duplicar expediente para reinspeccion

bash Duplicar expediente
curl -X POST https://rest.mintitv.com/api/v1/duplicate-scanning \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer eyJhbGciOi..." \
  -d '{
    "externalId": "INSP-2026-001",
    "newExternalId": "INSP-2026-004",
    "vin": "WVWZZZ3CZWE123456",
    "returnRedirectUrl": true
  }'

Ejemplo 5: Script de polling

bash Polling automatico
#!/bin/bash
# Ejemplo de polling en bash

TOKEN="eyJhbGciOi..."
EXTERNAL_ID="INSP-2026-001"
MAX_ATTEMPTS=60  # 5 minutos con intervalo de 5 segundos
INTERVAL=5

for i in $(seq 1 $MAX_ATTEMPTS); do
  RESPONSE=$(curl -s -X GET \
    "https://rest.mintitv.com/api/v1/scan-process?externalId=$EXTERNAL_ID" \
    -H "Authorization: Bearer $TOKEN")

  ACCESSIBLE=$(echo "$RESPONSE" | jq -r '.processes[0].accessible // false')
  STATUS=$(echo "$RESPONSE" | jq -r '.processes[0].status // "UNKNOWN"')

  echo "Intento $i: status=$STATUS, accessible=$ACCESSIBLE"

  if [ "$ACCESSIBLE" = "true" ]; then
    echo "Datos disponibles:"
    echo "$RESPONSE" | jq '.processes[0].technicalCard'
    exit 0
  fi

  if [ "$STATUS" = "FAILED" ] || [ "$STATUS" = "ABORTED" ]; then
    echo "El proceso ha terminado con estado: $STATUS"
    exit 1
  fi

  sleep $INTERVAL
done

echo "Timeout: el proceso no se completo en el tiempo esperado"
exit 1

Ejemplo 6: Generar PDF preview de un proceso

bash PDF Preview
# Generar PDF preview y guardarlo en un archivo
curl -X GET "https://rest.mintitv.com/api/v1/scan-process/pdf?externalId=INSP-2026-001" \
  -H "Authorization: Bearer eyJhbGciOi..." \
  --output preview-INSP-2026-001.pdf
Nota: Si el proceso esta en fase "draft", el PDF incluira marca de agua "BORRADOR". Si esta en fase "finalized", sera el PDF definitivo.
16

Glosario

COC

Certificate of Conformity. Certificado de Conformidad emitido por el fabricante del vehiculo.

Ficha tecnica

Conjunto de datos tecnicos del vehiculo segun la normativa europea.

Tarjeta ITV

Documento oficial emitido tras pasar la Inspeccion Tecnica de Vehiculos.

VIN

Vehicle Identification Number. Numero de identificacion del vehiculo (bastidor), compuesto por 17 caracteres.

externalId

Identificador del sistema cliente que se vincula con el expediente Mint Scan. Permite correlacionar procesos entre ambos sistemas.

OCR

Optical Character Recognition. Tecnologia de reconocimiento optico de caracteres usada para extraer datos de documentos escaneados.

Draft

Borrador de expediente en proceso de creacion o pendiente de revision.

Scanning

Expediente validado, guardado definitivamente e impreso tras la revision y aprobacion de los datos. En la API de consulta aparece con phase: "finalized" y status: "FINALIZED".

redirectUrl

URL con autenticacion temporal que permite acceder directamente al editor visual sin login adicional.

polling

Patron de consulta periodica para verificar el estado de un proceso asincrono.

Homologacion individual

Proceso de aprobacion de un vehiculo unitario que no ha sido fabricado en serie.

Reforma

Modificacion realizada sobre un vehiculo ya matriculado que requiere nueva homologacion.

PDF Preview

Documento PDF generado a partir de los datos de la ficha tecnica de un proceso. En fase draft incluye marca de agua "BORRADOR"; en fase finalized es el PDF definitivo.

Reinspeccion

Nueva inspeccion de un vehiculo que ya cuenta con un expediente previo. Se realiza duplicando el expediente existente para reutilizar sus datos.

Duplicacion de expediente

Proceso de crear un nuevo borrador (draft) a partir de un expediente existente (scanning), copiando los datos de la ficha tecnica y documentos.