Récord de conductor por DNI: las licencias del MTC vía API REST

PlacApi expone /api/licencia-pe, una API REST que devuelve en JSON el récord de un conductor peruano a partir de su DNI o su carné de extranjería, desde el registro del Ministerio de Transportes y Comunicaciones: cada licencia con su número, clase y categoría, estado, fechas de expedición y de revalidación y restricciones, más las sanciones con su resolución, sus fechas de inicio y fin y si siguen en curso. No devuelve el nombre ni ningún dato personal del titular: responde por la licencia, no por la persona. Un documento sin licencia es una respuesta válida, no un error.

Qué problema resuelve

Antes de poner a alguien a manejar hay que saber si puede: si tiene licencia, de qué categoría, si está vigente y si carga una sanción encima. El registro peruano de conductores se consulta documento por documento desde un formulario web, sin API y sin exportación, así que una empresa que contrata veinte conductores al mes hace veinte consultas manuales y las archiva en una carpeta. Este endpoint convierte esa verificación en una llamada REST que se puede correr en el momento de la contratación, repetir cada mes sobre la nómina completa y dejar registrada con su fecha.

Para quién sirve

Empresas de transporte de carga y de pasajeros, operadores logísticos y de última milla, plataformas de movilidad y de reparto que dan de alta conductores, empresas de alquiler de vehículos, áreas de talento humano que verifican requisitos antes de contratar, y aseguradoras que evalúan al conductor y no solo al vehículo.

Datos requeridos

  • documento — DNI de 8 dígitos o carné de extranjería. Alias aceptados: dni y doc.
  • tipoDocumento — opcional: DNI (por defecto) o CE para carné de extranjería. Se puede omitir en el 99 % de las consultas.
  • refresh — opcional: salta la caché de 24 horas y vuelve a preguntarle al registro. Una consulta refrescada con datos cobra.

Fuentes y cobertura

  • MTC — récord del conductorRegistro de licencias de conducir y sanciones del Ministerio de Transportes y Comunicaciones: número de licencia, clase y categoría, estado, fecha de expedición, fecha de revalidación, restricciones, y las sanciones con su número de resolución y sus fechas de inicio y fin. El registro no publica el puntaje del conductor.

Clase y categoría llegan separadas, y esa es la respuesta operativa

La habilitación de un conductor peruano no es un valor único: es una clase y una categoría dentro de ella, y la combinación es la que dice qué puede manejar. Por eso el endpoint las devuelve en dos campos, clase y categoria, en vez de una cadena pegada que después hay que partir con una expresión regular. En el barrido del 1 de septiembre de 2026 sobre 53 documentos reales aparecieron A-I, A-IIa, A-IIb, A-IIIb y A-IIIc.

Para quien contrata, esa distinción es el filtro entero: una categoría que habilita un vehículo particular no habilita un camión ni un bus, y contratar a alguien para conducir algo que su licencia no cubre es un problema laboral y de seguro, no un detalle administrativo. La API entrega el dato crudo y no un veredicto de aptitud, porque qué categoría hace falta depende del vehículo y del servicio, y eso lo sabe el negocio.

Del barrido salió también la proporción, que conviene tener presente al diseñar la interfaz: 40 de 53 documentos tenían licencia. Uno de cada cuatro consultados no la tenía, y esa pantalla —la de tieneLicencia en false— no es un caso raro que se pueda dejar sin diseñar.

Estados compuestos y sanciones: leer el estado como texto, no como enum

El estado de una licencia no siempre es una palabra. El registro publica estados compuestos como CANCELADA/CONDUCTOR INHABILITADO, que dicen a la vez qué pasó con el documento y qué pasa con la persona. Un cliente que trate ese campo como un enum cerrado con tres valores va a caer en el primer conductor sancionado, así que se devuelve tal como lo escribe el registro, en mayúsculas, y el status del sobre resume la lectura: ok con licencia vigente, warn con cualquier otro estado o con una sanción en curso, info cuando no hay licencia.

Las sanciones vienen aparte, en su propia lista, con el número de la resolución que las impuso y sus fechas de inicio y fin. El campo estado de cada sanción se deriva de esas fechas, así que responde «sigue en curso» sin obligar a comparar contra la fecha de hoy en el cliente. Una licencia vigente con una sanción vigente encima es una combinación real y es justo el caso que un filtro ingenuo deja pasar.

Las restricciones llegan como el texto libre que publica el registro. En el barrido aparecieron dos valores: SIN RESTRICCIONES y CON LENTES. Es información que importa en una verificación de contratación —una restricción de lentes es una condición de conducción, no una nota al pie— y por eso viaja completa en vez de reducida a un booleano.

Qué no devuelve: ni nombre, ni foto, ni puntos

Esta consulta no trae el nombre del titular ni ningún otro dato personal. Describe la licencia y nada más. Eso significa que no sirve para verificar identidad: no confirma que el documento consultado corresponda a la persona que tienes enfrente, solo dice qué licencias hay asociadas a ese número. Si el flujo necesita las dos cosas, la verificación de identidad es un paso aparte.

El campo puntos llega siempre en null, y no es un campo pendiente de implementar: el registro no publica el puntaje del conductor por esta consulta. Está en el contrato para no romperlo si algún día empieza a publicarse, y declarado como null permanente para que nadie construya una regla de negocio sobre un valor que nunca va a llegar. Preferimos el hueco declarado a un cero que se lee como «sin infracciones».

¿Cómo consultar la licencia de conducir de una persona en Perú por API?

Con una llamada POST a /api/licencia-pe enviando documento con el DNI de 8 dígitos, y la API key en el header x-api-key. La respuesta trae tieneLicencia, la lista de licencias con clase, categoría, estado, fechas y restricciones, y la lista de sanciones. Para un carné de extranjería se manda además tipoDocumento en CE.

¿La API devuelve el nombre del conductor?

No. Devuelve lo que describe la licencia: número, clase y categoría, estado, fechas, restricciones y sanciones. No trae nombre, foto ni datos personales, así que no reemplaza una verificación de identidad: confirma qué licencias hay asociadas a un documento, no quién lo presenta.

Ejemplo de solicitud

POST https://placapi.com/api/licencia-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/licencia-pe' \
  -H 'x-api-key: pk_live_TU_CLAVE' \
  -H 'content-type: application/json' \
  -d '{"documento":"12345678"}'

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": "licencia",
  "status": "ok",
  "data": {
    "pais": "PE",
    "documento": "12345678",
    "tipoDocumento": "DNI",
    "tieneLicencia": true,
    "licencias": [
      {
        "numero": "AB0040865",
        "clase": "A",
        "categoria": "I",
        "estado": "VIGENTE",
        "fechaExpedicion": "2019-05-10",
        "fechaRevalidacion": "2029-05-10",
        "restricciones": "SIN RESTRICCIONES"
      }
    ],
    "sanciones": [],
    "puntos": null
  },
  "portalUrl": "https://recordconductor.mtc.gob.pe/",
  "mode": "live",
  "fetchedAt": "2026-07-24T15:04:05.000Z",
  "cost": 1
}

Explicación campo por campo

CampoTipoDescripción
sourcestringQué dato es: "licencia", el mismo valor que usa la consulta de licencias colombiana.
statusstringok con licencia vigente, warn con cualquier otro estado o con una sanción en curso, info cuando no hay licencia. Las tres son HTTP 200.
data.tieneLicenciabooleanRespuesta corta a la pregunta que se vino a hacer. false es un resultado, no un fallo: en el barrido del 1-sep-2026, 40 de 53 documentos tenían licencia.
data.licencias[].clasestringClase de la licencia. Va separada de la categoría a propósito: la habilitación es la combinación de las dos.
data.licencias[].categoriastringCategoría dentro de la clase. En el barrido aparecieron I, IIa, IIb, IIIb y IIIc. Es lo que decide qué vehículo puede conducir el titular.
data.licencias[].estadostringTal como lo escribe el registro, en mayúsculas. Puede ser compuesto, por ejemplo CANCELADA/CONDUCTOR INHABILITADO: tratarlo como un enum cerrado se rompe con el primer conductor sancionado.
data.licencias[].fechaRevalidacionstringHasta cuándo vale la licencia antes de revalidar, en ISO. Es el campo sobre el que se calculan los avisos de vencimiento de una nómina de conductores.
data.licencias[].restriccionesstringTexto libre del registro. En el barrido aparecieron SIN RESTRICCIONES y CON LENTES; se entrega completo porque una restricción es una condición de conducción, no una nota al pie.
data.sanciones[]object[]Sanciones con el número de la resolución que las impuso y sus fechas de inicio y fin. Lista vacía significa sin sanciones registradas.
data.sanciones[].estadostringDerivado de las fechas de la propia sanción, para responder «sigue en curso» sin comparar contra hoy del lado del cliente.
data.puntosnullSiempre null: el registro no publica el puntaje del conductor por esta consulta. Está en el contrato para no romperlo si algún día se publica, y declarado null para que nadie construya una regla sobre un valor que no llega.
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. En una verificación de contratación es lo que queda como constancia de cuándo se comprobó.

Tiempo de respuesta

Mediana de 4,6 segundos y percentil 90 de 8,9 segundos, medidos el 1 de septiembre de 2026 sobre 53 documentos reales dentro de un barrido de 173 consultas que terminó sin un solo error. Es el más lento de los cuatro endpoints peruanos, y sigue siendo apto para llamarlo dentro del alta de un conductor.

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

24 horas. Una licencia se suspende o se cancela por resolución y sin aviso previo, así que una caché más larga podría certificar como vigente a un conductor que ya fue inhabilitado, que es exactamente el error que esta consulta existe para evitar. 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 campo puntos llega siempre en null porque el registro no publica el puntaje del conductor. No es un campo pendiente: es un hueco declarado a propósito, y preferimos eso a un cero que se lee como «sin infracciones».
  • No devuelve nombre ni ningún dato personal del titular. No sirve para verificar identidad: dice qué licencias están asociadas a un documento, no que ese documento sea de quien lo presenta.
  • El estado de una licencia puede ser compuesto, como CANCELADA/CONDUCTOR INHABILITADO. Se entrega como texto tal cual lo escribe el registro; tratarlo como un enum cerrado falla con el primer conductor sancionado.
  • Un DNI que no tenga exactamente 8 dígitos se rechaza con 400 y el código consulta_invalida, sin cobrar. Para un carné de extranjería hay que mandar tipoDocumento en CE.
  • Un documento sin licencia es una respuesta válida —tieneLicencia en false— y COBRA 1 crédito: «esta persona no tiene licencia» es justamente lo que se vino a verificar. Lo que no cobra es un fallo del registro o de la salida de red, que devuelve data en null y reembolsa.

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

Otras preguntas frecuentes

¿Por qué el campo puntos siempre llega vacío?

+

Porque el registro no publica el puntaje del conductor en esta consulta. El campo existe en el contrato para no romperlo si algún día empieza a publicarse, y llega en null siempre. Devolver un cero sería peor que devolver nada: un cero se lee como «sin infracciones» y sería un dato inventado.

¿Qué categorías de licencia aparecen en la respuesta?

+

La clase y la categoría llegan en campos separados, porque la habilitación es la combinación de las dos. En un barrido de 53 documentos reales del 1 de septiembre de 2026 aparecieron A-I, A-IIa, A-IIb, A-IIIb y A-IIIc. Qué categoría hace falta para un vehículo concreto lo define el servicio, no la API.

¿Cobra si la persona no tiene licencia?

+

Sí, 1 crédito. «Esta persona no tiene licencia» es el resultado que se vino a verificar antes de contratarla, así que es información y no un error: en el barrido, 13 de 53 documentos consultados no tenían licencia. Lo que no cobra es un DNI mal formado, que se rechaza con 400 antes de consultar, ni un fallo del registro, que reembolsa el crédito reservado.

¿Cada cuánto conviene reverificar a los conductores de una empresa?

+

Una vez al mes cubre el caso habitual, y la caché de 24 horas permite bajar a diario en operaciones donde la habilitación es crítica. La licencia se suspende por resolución y sin aviso, así que la verificación del día de la contratación deja de ser válida al poco tiempo; el valor está en repetirla sobre la nómina, no en hacerla una vez y archivarla.

Seguir explorando

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

Contacto