API de licencias de conducción: verifica a tus conductores por cédula
PlacApi (placapi.com) ofrece una API REST para consultar las licencias de conducción de una persona en Colombia con su tipo y número de documento. El endpoint /api/licencia devuelve en JSON, en unos 6 segundos, cada licencia con su categoría, estado (ACTIVA, VENCIDA o SUSPENDIDA), fechas de expedición y vencimiento, organismo que la expidió y restricciones, más el estado del conductor en el RUNT y si tiene multas asociadas. Es un endpoint por persona, no por placa: las licencias son del conductor, no del vehículo.
¿No eres desarrollador? Consulta el RUNT por placa aquí sin escribir código.
Qué problema resuelve
Validar la licencia de un conductor —para vincularlo a una flota, una app de movilidad o un seguro— exige consultar el RUNT ciudadano, que resuelve por captcha y no ofrece API pública. PlacApi lo entrega como un endpoint REST por documento, con la respuesta ya normalizada en JSON.
Para quién sirve
Empresas de transporte y flotas que exigen licencia vigente antes de asignar un vehículo, apps de movilidad y última milla que verifican conductores, aseguradoras, rentadoras de vehículos, y escuelas de conducción y gestores de trámites que confirman cuándo quedó expedida una licencia y en qué categoría.
Datos requeridos
- docType — tipo de documento de la persona (CC, CE…).
- docNumber — número de documento de la persona. No se requiere placa.
- primerApellido — opcional: primer apellido del titular. Con él la consulta cuesta 1 crédito; sin él cuesta 2, porque lo averiguamos a partir del documento.
Fuentes y cobertura
- RUNT ciudadanoLicencias de conducción por persona: categoría, vigencias, estado del conductor, multas asociadas y paz y salvo. Consultado por cédula, sin placa.
¿Cómo consultar por API el estado de una licencia de conducción?
Con una llamada POST a /api/licencia de PlacApi que lleve docType, docNumber y, si lo tienes, primerApellido. La respuesta trae driverStatus, el estado del conductor en el RUNT, y el arreglo licenses con una entrada por categoría: category, status, licenceNumber, otExpide, expeditionDate, dueDate y restrictions, más resolutionNumber, startDateSuspension y endDateSuspension cuando hay una medida sobre la licencia. Para decidir si alguien puede manejar un vehículo hoy se busca en licenses la categoría de ese vehículo y se miran su status y su dueDate: una licencia vigente de moto no habilita para conducir un camión.
En producción responde con una mediana de 6,1 segundos y un percentil 90 de 8,9 segundos, medidos entre el 15 de agosto y el 14 de septiembre de 2026 sin contar caché. Alcanza para validar a un conductor dentro de un registro en línea, y en el alta de una flota completa conviene lanzar las consultas en paralelo.
¿Qué verifica cada sector en la licencia de sus conductores?
La misma respuesta sirve a sectores distintos porque cada uno mira un campo distinto. La regla común es que la licencia se valida por categoría y no por persona: un conductor con B1 vigente no está habilitado para manejar un camión, y uno con A2 vigente no lo está para un carro.
Una licencia puede quedar suspendida después del alta, así que las flotas que revalidan su base de conductores cada cierto tiempo se enteran antes del siguiente despacho y no cuando llega el comparendo. Si además necesitas el detalle de cada multa, la API de comparendos por cédula devuelve cada comparendo con su código, su estado y su valor.
| Sector | Qué verifica | Qué mirar en la respuesta |
|---|---|---|
| Transporte de carga y pasajeros | Que el conductor tenga la categoría del vehículo que va a manejar —B2 o B3 si es particular, C2 o C3 si presta servicio público— y que no esté suspendida. | licenses[].category, status y dueDate |
| Flotas corporativas y rentadoras | Licencia vigente de la categoría del carro antes de entregarlo —B1 si es particular, C1 si presta servicio público— y de nuevo en cada renovación del contrato. | licenses[].status y dueDate |
| Apps de movilidad y última milla | En el alta del conductor: A1 o A2 para moto según el cilindraje, B1 para carro, activa y sin suspensión. | driverStatus y licenses[] |
| Aseguradoras | Que el conductor declarado en la póliza esté habilitado y si tiene multas pendientes. | driverStatus, licenses[] e infractions.tieneMultas |
| Escuelas de conducción y gestores de trámites | Cuándo quedó expedida la licencia y en qué categoría, sin pedirle al cliente que la muestre. | licenses[].expeditionDate y category |
¿Por qué pide el primer apellido y el nombre llega enmascarado?
Desde el 6 de agosto de 2026 el RUNT exige el primer apellido del titular para responder por una persona, y publica el nombre con asteriscos en lugar de la mayoría de las letras. PlacApi absorbió el cambio sin romper el contrato: primerApellido es opcional. Si lo envías, la consulta cuesta 1 crédito; si no, lo averiguamos a partir del documento y cuesta 2. Si no se logra averiguar, la respuesta es 400 con el código apellido_requerido y no cobra; si el registro del que lo averiguamos no responde, es 503 identidad_no_disponible con Retry-After, y tampoco cobra.
El nombre enmascarado no afecta la verificación: la licencia se identifica por el documento, que viaja completo en documentNumber, y fullName sirve para confirmar a simple vista, no como llave.
¿Cómo saber por API si una licencia de conducción está suspendida?
Se ve en dos registros, y para una decisión que importa conviene mirar los dos. En /api/licencia, una licencia con una medida llega dentro de licenses con su status, el número de resolución y las fechas de inicio y fin de la suspensión. En /api/suspension-licencia, que responde desde el SIMIT con una mediana de 2,3 segundos, llegan las banderas suspendida y cancelada con la vigencia de la medida y el organismo de tránsito que la impuso. La primera da el detalle por categoría; la segunda es la verificación rápida para quien solo necesita saber si hay una medida vigente.
¿El RUNT tiene una API pública para consultar licencias?
No para empresas y desarrolladores en general: los servicios web del RUNT están reservados a los actores del sistema de tránsito, como los organismos de tránsito y las aseguradoras. PlacApi es un servicio independiente, sin vínculo con la Concesión RUNT ni con el Ministerio de Transporte, que consulta la información de licencias que el RUNT publica y la entrega en JSON con un contrato estable: el mismo formato hoy y cuando el portal cambie por dentro.
¿Cuánto cuesta consultar una licencia de conducción por API?
1 crédito si la solicitud trae el primer apellido del titular y 2 si no lo trae, porque en ese caso lo averiguamos antes de consultar. El crédito vale 349 COP en el tramo de entrada y baja hasta 99 COP por volumen, sin mensualidad y con créditos que no vencen. Si la fuente no responde, el crédito se devuelve.
¿Se consulta por placa o por cédula?
Por documento de la persona (docType y docNumber). Las licencias son del conductor, no del vehículo, así que no se envía placa.
Ejemplo de solicitud
POST https://placapi.com/api/licencia. Autenticación por API key en el header x-api-key. Los datos del ejemplo son ficticios.
curl -X POST 'https://placapi.com/api/licencia' \
-H 'x-api-key: pk_live_TU_CLAVE' \
-H 'content-type: application/json' \
-d '{"docType":"CC","docNumber":"1020304050"}'Parámetros, errores y ejemplos en cURL, JavaScript y Python: documentación de POST /api/licencia.
Ejemplo de respuesta
Respuesta JSON (fragmento con los campos de esta consulta; la API integral devuelve todas las fuentes en el mismo objeto).
{
"data": {
"documentType": "CC",
"documentNumber": "1020304050",
"fullName": "J**N P***Z",
"driverStatus": "ACTIVO",
"citizenStatus": "ACTIVA",
"inscriptionNumber": "20310213",
"inscriptionDate": "08/02/2021",
"totalLicenses": "1",
"licenses": [
{
"category": "B1",
"status": "ACTIVA",
"licenceNumber": "885466652067",
"otExpide": "INSTITUTO DE MOVILIDAD",
"expeditionDate": "23/04/2025",
"dueDate": "23/04/2035",
"restrictions": null,
"resolutionNumber": null,
"startDateSuspension": null,
"endDateSuspension": null,
"substratum": "12345678"
}
],
"infractions": {
"tieneMultas": "NO",
"nroPazYSalvo": "PS-20310213"
},
"requests": [],
"aptitudeCertificates": [],
"medicalCertificates": []
},
"mode": "live"
}Explicación campo por campo
| Campo | Tipo | Descripción |
|---|---|---|
| data.fullName | string | Nombre del titular, enmascarado (JN P*Z) como lo publica el RUNT desde el 6-ago-2026. |
| data.driverStatus | string | Estado del conductor en el RUNT (ACTIVO, INACTIVO…). |
| data.citizenStatus | string | Estado del ciudadano en el RUNT (ACTIVA, INACTIVA…). |
| data.totalLicenses | string | Cantidad de licencias registradas para la persona. |
| data.licenses[].category | string | Categoría de la licencia (A1, A2, B1, C1…). |
| data.licenses[].status | string | Estado de cada licencia (ACTIVA, VENCIDA, SUSPENDIDA…). |
| data.licenses[].dueDate | string (DD/MM/YYYY) | Fecha de vencimiento de la licencia. |
| data.licenses[].expeditionDate | string (DD/MM/YYYY) | Fecha de expedición de la licencia. |
| data.licenses[].otExpide | string | Organismo de tránsito que expidió la licencia. |
| data.licenses[].restrictions | string|null | Restricciones anotadas en la licencia; null si no tiene. |
| data.licenses[].resolutionNumber | string|null | Número de la resolución cuando hay una medida sobre la licencia; viaja con startDateSuspension y endDateSuspension. |
| data.infractions.tieneMultas | string | "SI"/"NO": si la persona tiene multas asociadas. |
| data.infractions.nroPazYSalvo | string | Número de paz y salvo cuando aplica. |
Tiempo de respuesta
Unos 6 segundos: en producción, mediana de 6,1 s y percentil 90 de 8,9 s entre el 15 de agosto y el 14 de septiembre de 2026, sin contar las respuestas de caché. Reconsultar el mismo documento dentro de las 24 horas siguientes responde al instante desde caché.
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. Por la web, el informe completo por placa cuesta 3 créditos. 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
Una consulta con datos queda en caché 24 horas: el estado de una licencia cambia poco, y un día es el equilibrio entre no repetir la consulta y no servir una suspensión vieja.
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
- La consulta es por persona (documento), no por placa.
- Las fechas vienen en formato DD/MM/YYYY, tal como las expone el RUNT.
- Desde el 6 de agosto de 2026 el nombre del titular llega enmascarado, porque así lo publica el RUNT; la identificación es el documento.
- Si el RUNT ciudadano no responde, la consulta devuelve error y no cobra.
- PlacApi reporta lo que el RUNT expone; no emite, renueva ni gestiona licencias.
Códigos de error del endpoint (401, 402, 429, 5xx) en la referencia de errores.
Otras preguntas frecuentes
¿Necesito el primer apellido del conductor?
+
No es obligatorio en PlacApi, aunque el RUNT lo exige desde el 6 de agosto de 2026. Enviarlo en primerApellido deja la consulta en 1 crédito; sin él la resolvemos a partir del documento y cuesta 2. Si el apellido no se puede averiguar, la respuesta es 400 apellido_requerido y no cobra.
¿Devuelve todas las licencias y categorías?
+
Sí: data.licenses[] lista cada licencia con su categoría (A1, B1, C1…), estado y fechas de expedición y vencimiento. data.totalLicenses indica cuántas hay.
¿Informa si el conductor tiene multas?
+
Sí: data.infractions.tieneMultas devuelve "SI"/"NO" y data.infractions.nroPazYSalvo el número de paz y salvo cuando aplica. El detalle de cada comparendo de la persona está en /api/comparendos, que responde por cédula.
¿Por qué el nombre del conductor llega con asteriscos?
+
Porque así lo publica el RUNT desde el 6 de agosto de 2026: fullName llega enmascarado, con asteriscos en lugar de la mayoría de las letras. La licencia se identifica por el documento, que viaja completo; el nombre sirve para confirmar a simple vista, no como llave.
Seguir explorando
- API de comparendos por cédula
- API de antecedentes judiciales por cédula
- API de consulta vehicular (ficha RUNT)
- API de multas SIMIT
- API RUNT
- Documentación del endpoint
- Precios por consulta
- API de nombre por cédula
- API del Sisbén: grupo y clasificación
- API del RUI: registro de ingresos
- Récord de conductor por DNI: las licencias del MTC
Última revisión: 30 de septiembre de 2026 · Versión de la API: v1 · Fuentes y metodología