Consulta vehicular SUNARP por placa: la ficha del vehículo peruano vía API REST

PlacApi expone /api/vehiculo-pe, una API REST que devuelve en JSON la ficha de un vehículo peruano a partir de su placa: marca, línea, año del modelo, color y número de VIN, tal como los publica el Registro de Propiedad Vehicular de la SUNARP. La respuesta usa los mismos trece campos canónicos que la consulta vehicular de Colombia, así que quien ya integró un país no cambia su parser: los campos que el registro peruano no publica llegan en null y quedan enumerados en cobertura.noPublicados, para que un hueco nunca haya que interpretarlo. No devuelve datos del propietario ni exige su documento: basta la placa.

Qué problema resuelve

La consulta vehicular peruana vive en un portal web con captcha que entrega la ficha como una imagen renderizada, no como texto: no hay JSON, no hay API pública y no hay nada que un backend pueda leer directo. Quien necesita verificar un vehículo peruano desde su sistema —una compraventa, una aseguradora, un marketplace, una flota— termina copiando datos a mano o manteniendo una automatización con reconocimiento óptico que se rompe cada vez que el portal cambia de plantilla. PlacApi hace ese recorrido completo, lectura de la imagen incluida, y entrega un JSON estable con el mismo contrato que el resto del catálogo.

Para quién sirve

Plataformas de compraventa de usados y marketplaces con inventario peruano, aseguradoras y corredores que suscriben en Perú, operadores de flota y de leasing con vehículos matriculados allá, empresas de rastreo satelital que dan de alta unidades, y equipos de producto colombianos que ya integraron PlacApi y quieren cubrir Perú sin escribir un segundo cliente.

Datos requeridos

  • placa — la placa peruana del vehículo. Se aceptan guiones: ABC-123 y ABC123 son la misma consulta.
  • refresh — opcional: salta la caché de 30 días y vuelve a preguntarle al registro. Una consulta refrescada con datos cobra.

Fuentes y cobertura

  • SUNARP — Registro de Propiedad VehicularFicha del vehículo por placa: marca, modelo (la línea), color, año de fabricación y número de serie o VIN. Es el registro donde se inscribe la propiedad vehicular en Perú y la misma ficha que devuelve su consulta pública, con la diferencia de que allí llega como imagen y aquí como JSON.

¿Por qué llegan 5 campos de 13 y por qué eso no es un error?

PlacApi usa un contrato único de trece campos canónicos para la ficha de vehículo de todos los países: clase, tipo, carrocería, marca, línea, capacidad de pasajeros, capacidad de carga, color, modelo, servicio público, VIN, combustible y cilindraje. El contrato no cambia según el país; lo que cambia es cuántos de esos campos publica cada registro. En Perú son cinco: marca, línea, color, año del modelo y VIN. Los otros ocho llegan en null.

La razón es física, no de diseño. La consulta vehicular peruana no devuelve un formulario de datos sino una ficha renderizada como imagen, y de esa imagen se puede leer lo que está impreso, ni un campo más. El registro simplemente no imprime el cilindraje ni la capacidad de carga en esa vista. Nosotros preferimos decirlo a inventarlo: un cilindraje deducido de la línea sería un número plausible y falso, y un integrador que lo use para calcular una prima o un impuesto no tiene forma de saber que se lo inventamos.

Por eso cada respuesta trae un bloque cobertura con dos listas: disponibles, los campos que el registro sí publicó para esa placa, y noPublicados, los que no. Es la instrucción de integración más útil de toda la respuesta, porque convierte una decisión de producto en una condición que se puede programar: si el campo está en noPublicados, tu interfaz debe ocultarlo o pedirlo por otra vía, no mostrar un guion y dejar al usuario pensando que el dato se perdió.

Cómo se programa contra cobertura en vez de contra null

Un null solo no distingue entre «el registro no publica ese campo» y «lo publica pero para esta placa vino vacío». Las dos situaciones se ven idénticas en el JSON y se resuelven distinto: la primera es permanente y no vale la pena reintentar, la segunda puede cambiar mañana. Leer cobertura.noPublicados antes de decidir qué mostrar separa las dos sin heurísticas y sin una tabla de países escrita a mano en tu código.

El mismo parser para Colombia y Perú: qué cambia y qué no

El sobre de la respuesta es el mismo del resto del catálogo —source, status, data, mode, fetchedAt— y dentro de data el primer campo es pais, con el código ISO del país que respondió. Un cliente que ya lee la ficha colombiana solo tiene que aceptar nulls donde antes siempre había valor; no hay un segundo esquema, ni un segundo SDK, ni un segundo formato de fechas.

La diferencia de entrada sí es real y conviene tenerla presente al diseñar el formulario: la consulta colombiana exige placa más el documento del propietario, porque el RUNT no responde sin esa pareja. La peruana va con la placa sola. Eso simplifica el flujo —no hay que pedirle al usuario un dato que muchas veces no tiene— y también significa que esta consulta no verifica titularidad: responde por el vehículo, no por quién lo tiene.

El costo es idéntico en los dos países, 1 crédito por consulta con datos, y se comparte el mismo saldo, la misma API key y el mismo panel de consumos. No hay un plan aparte para internacional ni un mínimo distinto por país.

Qué no devuelve esta consulta: propietario, papeletas y revisión técnica

Esta es una ficha técnica del vehículo. No trae el nombre del propietario, ni el historial de transferencias, ni gravámenes, ni si el vehículo está reportado. Es una decisión deliberada y también la del propio registro en su consulta pública: los datos personales del titular no viajan en esta respuesta.

Las deudas y los documentos del vehículo viven en registros distintos y por eso son endpoints distintos, cada uno con su crédito: las papeletas de tránsito pendientes están en /api/multas-pe, que une el récord nacional de carreteras con el de Lima Metropolitana, y los certificados de inspección técnica en /api/revision-tecnica-pe. Si tu flujo es «verificar un usado antes de comprarlo», las tres consultas son complementarias y ninguna reemplaza a las otras dos.

¿Cómo consultar un vehículo peruano por placa desde una API?

Con una llamada POST a /api/vehiculo-pe enviando la placa en el cuerpo, y la API key en el header x-api-key. La respuesta llega en JSON con marca, línea, año, color y VIN, y con un bloque cobertura que enumera qué campos publica el registro y cuáles no. No hace falta el documento del propietario: en Perú la consulta va con la placa sola.

¿Por qué muchos campos de la ficha peruana llegan en null?

Porque el Registro de Propiedad Vehicular publica cinco de los trece campos del contrato canónico y el resto no los imprime en la ficha que entrega. Preferimos declararlo en cobertura.noPublicados antes que deducir un cilindraje o una carrocería a partir de la línea: un dato deducido se ve igual que uno real y quien lo recibe no tiene cómo distinguirlos.

Ejemplo de solicitud

POST https://placapi.com/api/vehiculo-pe. Autenticación por API key en el header x-api-key. Los datos del ejemplo son ficticios.

Ejemplo cURL de la solicitud
curl -X POST 'https://placapi.com/api/vehiculo-pe' \
  -H 'x-api-key: pk_live_TU_CLAVE' \
  -H 'content-type: application/json' \
  -d '{"placa":"ABC123"}'

Ejemplo de respuesta

Respuesta JSON (fragmento con los campos de esta consulta; la API integral devuelve todas las fuentes en el mismo objeto).

Ejemplo de respuesta JSON
{
  "source": "vehiculo",
  "status": "ok",
  "data": {
    "pais": "PE",
    "placa": "ABC123",
    "clase": null,
    "tipo": null,
    "carroceria": null,
    "marca": "SUZUKI",
    "linea": "GRAND NOMADE",
    "capacidadPasajeros": null,
    "capacidadCargaKg": null,
    "color": "GRIS",
    "modelo": 2010,
    "servicioPublico": null,
    "vin": "JS3TE04V2A4602091",
    "combustible": null,
    "cilindraje": null
  },
  "cobertura": {
    "disponibles": [
      "marca",
      "linea",
      "color",
      "modelo",
      "vin"
    ],
    "noPublicados": [
      "clase",
      "tipo",
      "carroceria",
      "capacidadPasajeros",
      "capacidadCargaKg",
      "servicioPublico",
      "combustible",
      "cilindraje"
    ]
  },
  "portalUrl": "https://consultavehicular.sunarp.gob.pe/consulta-vehicular/inicio",
  "mode": "live",
  "fetchedAt": "2026-07-24T15:04:05.000Z"
}

Explicación campo por campo

CampoTipoDescripción
sourcestringQué dato es, no de dónde salió. Siempre "vehiculo", igual que en la ficha colombiana: es lo que permite compartir el parser.
statusstringok cuando la ficha llegó. Califica el hallazgo, no la llamada.
data.paisstringCódigo ISO del país que respondió; "PE" en este endpoint. Es lo que distingue una ficha peruana de una colombiana dentro del mismo contrato.
data.placastringLa placa consultada, ya normalizada: sin guiones ni espacios y en mayúsculas.
data.marcastringMarca del vehículo tal como la escribe el registro.
data.lineastringLínea o modelo comercial. En la nomenclatura peruana el registro lo llama «modelo»; aquí va en linea para que el campo modelo signifique el año en los dos países.
data.modelonumberAño del modelo. Nunca la línea: ese es el nombre que el catálogo usa en todos los países.
data.colorstringColor registrado.
data.vinstringNúmero de serie o VIN. Es el campo que permite cruzar el vehículo contra cualquier otra base sin depender de la placa, que puede cambiar.
cobertura.disponiblesstring[]Campos que el registro sí publicó para esta placa. Se lee antes de pintar la interfaz.
cobertura.noPublicadosstring[]Campos que el registro no publica y que por eso llegan en null. Distingue «no hay dato» de «falló la consulta», que es la ambigüedad que un null solo no resuelve.
portalUrlstringDirección pública donde cualquiera puede reproducir la consulta a mano. Va en la respuesta para que un resultado sea auditable por quien lo recibe.
modestringlive si se consultó el registro en ese momento; cache si vino de caché. Un hit de caché no cobra crédito.
fetchedAtstring (ISO 8601)Instante en que se obtuvo el dato. Con una caché de 30 días es la diferencia entre un dato de hoy y uno del mes pasado, y por eso es parte del contrato y no un extra.

Tiempo de respuesta

Del orden de 5 a 6 segundos en consulta viva. La llamada resuelve el captcha del registro y lee por reconocimiento óptico la ficha que devuelve, así que es más lenta que un endpoint que recibe JSON. A cambio, los datos son estructurales y quedan 30 días en caché: la segunda consulta de la misma placa responde de inmediato y no cobra.

Precio y cobro

1 crédito por consulta con datos, desde 349 COP. El precio por crédito baja por volumen: 349 COP desde 30, 249 COP desde 1.000, 149 COP desde 5.000, 139 COP desde 10.000, 119 COP desde 20.000, 99 COP desde 50.000. Los créditos se compran por adelantado (mínimo 30 = 10.470 COP), no vencen y no hay mensualidad. El mismo precio aplica por la web y por API. Solo se cobra cuando la consulta devuelve datos; por API, las consultas sin resultado (404) tienen 10 gratis al mes por cada tipo de respuesta sin datos y después cobran igual.

Caché y actualización

30 días. Marca, línea, año y VIN son estructurales y no cambian mientras el vehículo sea el mismo; además cada consulta gasta ancho de banda de salida residencial, así que la caché larga ahorra latencia y costo a la vez. Un hit de caché no cobra. Con refresh en true se vuelve a preguntarle al registro, y esa consulta, si trae datos, cobra.

Seguridad y privacidad

La placa y el documento se usan solo para ejecutar la consulta; el resultado queda en caché temporal. No se almacenan datos de tarjetas (los pagos los procesa Wompi). Ver privacidad y seguridad.

Limitaciones y posibles errores

  • El registro publica 5 de los 13 campos canónicos. Clase, tipo, carrocería, capacidad de pasajeros, capacidad de carga, servicio público, combustible y cilindraje llegan en null y quedan enumerados en cobertura.noPublicados. No es un fallo de la consulta: es lo que la fuente imprime.
  • La ficha oficial se entrega como imagen renderizada y se lee por reconocimiento óptico. Cuando el VIN es crítico —un traspaso, una póliza, un alta de flota— conviene contrastarlo contra la tarjeta de propiedad antes de escribirlo en un contrato.
  • No devuelve datos del propietario, ni historial de transferencias, ni gravámenes. Responde por el vehículo, no por su titularidad.
  • Una placa fuera del registro responde 404 con el código no_encontrado y NO cobra crédito. Es un 404 y no un 502 a propósito: el registro sí contestó, y contestó que no la tiene, así que reintentar no va a cambiar la respuesta.
  • No incluye papeletas ni revisión técnica: viven en registros distintos y son endpoints distintos, cada uno con su crédito.

Códigos de error del endpoint (401, 402, 429, 5xx) en la referencia de errores.

Otras preguntas frecuentes

¿La API devuelve el nombre del propietario del vehículo?

+

No. Este endpoint responde por el vehículo: marca, línea, año, color y VIN. No trae titular, historial de transferencias ni gravámenes. La consulta pública peruana tampoco los expone en esa ficha.

¿Sirve la misma API key y el mismo saldo que para Colombia?

+

Sí. Es la misma clave, el mismo saldo de créditos, el mismo panel de consumos y el mismo precio: 1 crédito por consulta con datos. No hay plan internacional aparte ni mínimo distinto por país, y las consultas de los dos países aparecen juntas en el historial.

¿Cuánto cuesta y qué respuestas cobran?

+

1 crédito por consulta con datos. Un hit de caché no cobra, y una placa que no está en el registro tampoco: responde 404 con el código no_encontrado y se devuelve el crédito reservado. Lo que sí cobra es una ficha completa aunque ocho de sus campos vengan en null, porque el registro respondió y esa es la información que publica.

¿Se acepta la placa con guion?

+

Sí. ABC-123 y ABC123 son la misma consulta: la placa se normaliza antes de salir, quitando guiones y espacios y pasando a mayúsculas. En la respuesta viaja ya normalizada, así que sirve como clave sin volver a limpiarla.

Seguir explorando

Última revisión: 1 de septiembre de 2026 · Versión de la API: v1 · Fuentes y metodología

Contacto