API de traspaso de vehículos en Colombia: saber si un carro se puede traspasar
POST /api/apto-traspaso responde con un semáforo: aptoTraspaso en true o false, el estado del registro y la lista de bloqueos concretos que impiden el traspaso, en texto listo para mostrar. Se deriva de la ficha del RUNT del vehículo —no de una fuente aparte— y mira cinco condiciones: gravámenes, prendas, limitaciones a la propiedad, garantías mobiliarias y que el registro esté ACTIVO. Cuesta 1 crédito, responde entre 2 y 4 segundos y necesita la placa junto con el documento del propietario actual.
¿No eres desarrollador? Consulta el RUNT por placa aquí sin escribir código.
Qué problema resuelve
Un traspaso que se cae en la ventanilla del organismo de tránsito ya costó plata: el comprador giró, el vendedor firmó y el registro no deja. Los bloqueos que lo impiden están publicados en el RUNT, pero su portal pide captcha, se consulta de a una placa y devuelve una ficha de cuarenta campos donde hay que saber cuáles cinco importan y cómo se llaman. Este endpoint hace esa lectura por ti: pregunta lo que pregunta el trámite y responde sí o no, con el motivo. La alternativa —integrar la ficha completa y escribir la regla en cada cliente— funciona hasta que dos equipos la escriben distinto.
Para quién sirve
Concesionarios y patios de usados que revisan un vehículo antes de recibirlo en parte de pago; plataformas de compraventa que validan una publicación antes de aceptarla; gestores y trámites de traspaso; aseguradoras; empresas de leasing y renting que necesitan saber si su garantía es transferible; fintechs de crédito vehicular; y cualquier aplicación que prefiera mostrarle a un usuario un semáforo en vez de una ficha técnica.
Datos requeridos
- placa — la placa del vehículo, carro o moto. De 5 a 7 caracteres alfanuméricos; los guiones y espacios se ignoran.
- docType — tipo de documento del propietario: CC, CE, NIT, PA, TI, CD, PPT o RC. Se aceptan alias comunes (PAS y PASAPORTE se normalizan a PA; P.P.T. y P.P., como lo abrevia la tarjeta de propiedad, se normalizan a PPT).
- docNumber — número de documento del propietario ACTIVO. No sirve el del comprador ni el del dueño anterior: con esos la respuesta es 404 con code propietario_no_coincide, que no es lo mismo que un aptoTraspaso en false.
- refresh — opcional. Salta el caché de 24 horas y vuelve a consultar el RUNT. Es la palanca para verificar un levantamiento de prenda registrado hoy mismo; una consulta refrescada con datos siempre cobra.
Fuentes y cobertura
- RUNT (runt.gov.co)De la ficha del vehículo salen las cinco señales: los campos tieneGravamenes y prendas de informacionGeneral, el arreglo de limitaciones a la propiedad, el de garantías mobiliarias y estadoDelVehiculo. El endpoint no hace un scrape adicional: reutiliza la misma consulta que alimenta la ficha completa, y por eso comparte su caché.
- RGM de ConfecámarasEl RUNT marca la bandera de prenda, pero no dice quién es el acreedor. Ese detalle —acreedor, deudor o garante con su documento, folio electrónico, fecha de inscripción y última operación— está en el registro de garantías mobiliarias y se consulta aparte con /api/garantias-rgm, que cuesta 1 crédito y solo pide la placa.
¿Qué bloquea un traspaso en Colombia?
El endpoint marca aptoTraspaso en false cuando encuentra al menos una de cinco condiciones. Cada una llega dos veces en la respuesta, a propósito: como una frase en el arreglo bloqueos, lista para mostrarle a una persona sin reescribirla, y como un dato estructurado dentro de detalle, para decidir en código sin hacer coincidencia de texto. Si no hay ninguna, bloqueos llega vacío y aptoTraspaso es true.
Gravámenes sobre el vehículo
detalle.tieneGravamenes en true, con el bloqueo Tiene gravámenes registrados. Sale del campo del RUNT que marca si el vehículo soporta un gravamen inscrito. Es la señal más gruesa de las cinco: el registro dice que existe, no cuál es ni a favor de quién, y para el trámite basta con eso porque el gravamen hay que levantarlo antes de traspasar.
Prenda vigente
detalle.tienePrendas en true, con el bloqueo Tiene prenda vigente. Es el caso más común y el más fácil de resolver: la garantía típica de un carro financiado. Mientras el banco no registre el levantamiento, el vehículo no se traspasa. Aquí el semáforo se queda corto a propósito —solo dice que hay prenda— y quien necesite el acreedor, el folio y la fecha de inscripción tiene /api/garantias-rgm, que responde por placa sola y sin documento del propietario.
Limitaciones a la propiedad (embargos)
detalle.limitaciones es un CONTEO, no un booleano: dice cuántas limitaciones a la propiedad tiene inscritas el vehículo, y el bloqueo se emite como Limitación a la propiedad seguido de ese número entre paréntesis. En esta categoría entran los embargos ordenados por un juzgado o por una autoridad de cobro coactivo. Que sea un conteo importa para el cliente: un vehículo con tres limitaciones necesita tres levantamientos, y esa diferencia cambia por completo el tiempo estimado del trámite.
Garantías mobiliarias del RGM
detalle.garantias, también un conteo, con el bloqueo Garantía mobiliaria sobre el vehículo y el número entre paréntesis. Se distingue de la prenda porque son registros distintos: la bandera de prenda vive en la ficha del RUNT y las garantías mobiliarias llegan como un arreglo propio. Un mismo vehículo puede levantar los dos bloqueos a la vez, y en la práctica suele hacerlo cuando el crédito se inscribió en el registro de garantías además de anotarse en el registro automotor.
Estado del registro distinto de ACTIVO
detalle.estadoDelVehiculo trae el estado tal como lo publica el RUNT y, si no es ACTIVO, el bloqueo sale como Estado del vehículo seguido de ese valor. Aquí caben situaciones muy distintas entre sí —un registro cancelado, uno inactivo, uno en trámite— y por eso este es el único de los cinco que baja el semáforo a warn y no a danger: no siempre significa que el vehículo esté comprometido, a veces significa que su registro no está en condiciones de recibir el trámite. Un estado vacío no bloquea: si el RUNT no lo reporta, no se inventa un impedimento.
¿Cómo leer status: ok, warn y danger?
status califica el HALLAZGO, no la llamada. Las tres respuestas son HTTP 200 y las tres cobran 1 crédito, porque en las tres se entregó el dato que se vino a comprar. Confundir esto es el error de integración más común: tratar warn o danger como un fallo y reintentar la consulta produce un segundo cargo por el mismo resultado.
status ok significa aptoTraspaso en true y bloqueos vacío: ninguna de las cinco condiciones apareció y el registro está ACTIVO. Es la respuesta que deja pasar el flujo.
status danger significa que el bloqueo es patrimonial: gravamen, prenda, limitación a la propiedad o garantía mobiliaria. Alguien tiene un derecho inscrito sobre ese vehículo y hay que levantarlo antes de traspasar. Es el caso que conviene frenar en seco en un flujo de compraventa.
status warn queda para el caso en el que no hay derechos de terceros pero el estado del registro no es ACTIVO. No es un vehículo comprometido; es un registro que hay que revisar en el organismo de tránsito antes de intentar el trámite. Separar warn de danger permite que una plataforma muestre una advertencia en un caso y un bloqueo duro en el otro, sin leer el texto de los bloqueos.
Y hay un cuarto caso que no es un status sino un código HTTP: el 404 con code propietario_no_coincide. Significa que el documento enviado no corresponde a un propietario activo de esa placa. En un flujo de compraventa eso suele ser información valiosa por sí sola —quien dice ser el dueño no figura como tal— pero no es un aptoTraspaso en false, y tratarlo así le pondría un impedimento inventado a un vehículo que quizá esté limpio.
¿Qué NO responde este endpoint?
El semáforo mira cinco cosas del registro automotor y nada más. Decirlo explícitamente evita la peor forma de fallar: que alguien lea aptoTraspaso en true como una garantía de que el trámite va a salir.
No mira multas ni comparendos: eso lo consolida /api/multas por placa más documento, a 1 crédito. No verifica el SOAT ni la tecnomecánica, que vienen con su histórico completo en la ficha de /api/consulta. No liquida el impuesto vehicular —ningún departamento lo expone por API— aunque /api/impuestos resuelve gratis dónde está matriculado el vehículo y enlaza al portal que sí lo liquida. No consulta el historial de pérdida total, que vive en /api/perdida-total con datos de FASECOLDA desde 2008 y cuesta 2 créditos. Y no valida la identidad ni la capacidad de las partes.
Tampoco es un certificado de tradición. Es la lectura, en el momento de la consulta, de lo que el RUNT publica en la ficha del vehículo. Los requisitos exactos del traspaso los fija el organismo de tránsito donde se haga el trámite, y pueden incluir documentos que ningún registro expone por consulta.
¿Cómo saber si un carro se puede traspasar en Colombia?
Hay que revisar cinco cosas en el registro automotor del RUNT: que no tenga gravámenes, que no tenga prenda vigente, que no tenga limitaciones a la propiedad (los embargos entran aquí), que no tenga garantías mobiliarias inscritas y que el estado del vehículo sea ACTIVO. Este endpoint hace esas cinco lecturas en una llamada por placa y documento del propietario, y devuelve aptoTraspaso en true o false con la lista de los bloqueos que encontró. Cuesta 1 crédito y responde entre 2 y 4 segundos.
¿Qué significa que un vehículo tenga prenda?
Que hay una garantía inscrita sobre el vehículo, típicamente porque se compró financiado y el acreedor la registró para respaldar el crédito. Mientras esa prenda esté vigente el registro no permite el traspaso, aunque el vendedor esté al día y el vehículo no tenga ningún otro problema. En la respuesta aparece como detalle.tienePrendas en true y como el bloqueo Tiene prenda vigente. El RUNT solo marca la bandera; para saber quién es el acreedor, el folio electrónico y la fecha de inscripción hay que consultar el registro de garantías mobiliarias con /api/garantias-rgm.
Ejemplo de solicitud
POST https://placapi.com/api/apto-traspaso. Autenticación por API key en el header x-api-key. Los datos del ejemplo son ficticios.
curl -X POST 'https://placapi.com/api/apto-traspaso' \
-H 'x-api-key: pk_live_TU_CLAVE' \
-H 'content-type: application/json' \
-d '{"placa":"ABC123","docType":"CC","docNumber":"1020304050"}'Ejemplo de respuesta
Respuesta JSON (fragmento con los campos de esta consulta; la API integral devuelve todas las fuentes en el mismo objeto).
{
"source": "vehiculo",
"status": "danger",
"data": {
"placa": "ABC123",
"aptoTraspaso": false,
"estado": "ACTIVO",
"bloqueos": [
"Tiene prenda vigente",
"Garantía mobiliaria sobre el vehículo (1)"
],
"detalle": {
"tieneGravamenes": false,
"tienePrendas": true,
"limitaciones": 0,
"garantias": 1,
"estadoDelVehiculo": "ACTIVO"
}
},
"mode": "live",
"fetchedAt": "2026-07-24T15:04:05.000Z"
}Explicación campo por campo
| Campo | Tipo | Descripción |
|---|---|---|
| data.aptoTraspaso | boolean | true solo si el arreglo bloqueos llegó vacío. Es la lectura de una línea: si es false, el motivo está en bloqueos y el desglose en detalle. |
| data.estado | string | Estado del vehículo en el RUNT, tal como lo publica (ACTIVO y variantes). Puede llegar vacío si el registro no lo reporta, y un estado vacío no bloquea. |
| data.bloqueos | string[] | Motivos concretos, en texto listo para mostrar: Tiene gravámenes registrados, Tiene prenda vigente, Limitación a la propiedad (N), Garantía mobiliaria sobre el vehículo (N) o Estado del vehículo: X. Vacío cuando el vehículo está apto. |
| data.detalle.tieneGravamenes | boolean | Bandera de gravamen del RUNT. Dice que existe, no cuál es ni a favor de quién. |
| data.detalle.tienePrendas | boolean | Bandera de prenda del RUNT. Para el acreedor, el folio y la fecha, la fuente es /api/garantias-rgm. |
| data.detalle.limitaciones | number | CUÁNTAS limitaciones a la propiedad (embargos) tiene inscritas el vehículo. Es un conteo, no una descripción: tres limitaciones son tres levantamientos. |
| data.detalle.garantias | number | CUÁNTAS garantías mobiliarias figuran sobre el vehículo. También conteo, y distinto de la bandera de prenda: son registros diferentes y pueden aparecer los dos. |
| data.detalle.estadoDelVehiculo | string | El mismo valor de estado, repetido dentro de detalle para que un cliente pueda leer todo el desglose de un solo objeto. |
| status | string | ok si está apto; danger si el bloqueo es patrimonial (gravamen, prenda, limitación o garantía); warn si lo único que falla es que el registro no está ACTIVO. |
| fromCache | boolean | Presente y en true cuando la respuesta salió del caché de 24 horas. Esa llamada entregó datos y NO cobró: el crédito se reembolsa con el motivo cache_hit. |
Tiempo de respuesta
Entre 2 y 4 segundos en la primera consulta de una placa, que es lo que tarda la consulta del RUNT por HTTP directo con resolución del captcha por OCR. Las repeticiones de la misma placa y documento dentro de las 24 horas siguientes salen del caché en milisegundos y no cobran.
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 por la combinación de placa y documento del propietario, en la MISMA entrada que usan consulta y vehículo básico: los tres derivan de la misma ficha del RUNT (el avalúo y el impuesto vehicular también se apoyan en ella para no volver a consultar el registro). La consecuencia práctica es que consultar apto para traspaso y después vehículo básico de la misma placa dentro de esa ventana cuesta 1 crédito y no 2 — la segunda respuesta se entrega desde caché y el crédito se reembolsa con el motivo cache_hit, visible en tu página de consumos. Una consulta sin resultado se guarda 90 días en un caché negativo y desde ahí nunca cobra. refresh en true salta el caché, vuelve a consultar el RUNT y vuelve a cobrar.
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
- No es un certificado de tradición ni de libertad. Es la lectura, en el momento de la consulta, de lo que el RUNT publica en la ficha del vehículo.
- aptoTraspaso en true no promete que el trámite salga. No mira multas, impuesto, SOAT, tecnomecánica ni la documentación de las partes; el organismo de tránsito donde se haga el traspaso fija sus propios requisitos.
- El documento tiene que ser el del propietario ACTIVO. Con el del dueño anterior o el del comprador la respuesta es 404 con code propietario_no_coincide, no un aptoTraspaso en false.
- detalle.limitaciones y detalle.garantias son conteos, no descripciones: dicen cuántas hay, no cuál es cada una ni a favor de quién. El detalle de las prendas está en /api/garantias-rgm.
- Si el RUNT no responde, la respuesta es 502 con code source_error y no cobra crédito; ahí reintentar sí sirve. Un 404 es definitivo y reintentarlo devuelve lo mismo.
- El caché es de 24 horas por placa + documento. Un levantamiento de prenda registrado hoy puede tardar hasta un día en verse, y el escape es refresh en true, que vuelve a consultar el RUNT y vuelve a cobrar.
Códigos de error del endpoint (401, 402, 429, 5xx) en la referencia de errores.
Otras preguntas frecuentes
¿El endpoint dice quién es el acreedor de la prenda?
+
No. Devuelve la bandera y el conteo, que es lo que la ficha del RUNT publica. El acreedor, el deudor o garante con su documento, el folio electrónico, la fecha de inscripción y la última operación están en /api/garantias-rgm, que consulta el registro de Confecámaras por placa sola, sin documento del propietario, y cuesta 1 crédito. Son dos llamadas distintas a propósito: la mayoría de los vehículos no tiene prenda y no tiene sentido pagar el detalle de algo que no existe.
¿Se puede consultar sin la cédula del propietario?
+
Con este endpoint no: el RUNT exige la pareja placa + documento del propietario activo para devolver la ficha, y de esa ficha deriva el semáforo. Si tienes el VIN y no la cédula, /api/consulta-por-vin devuelve la ficha completa del RUNT sin pedir documento, incluidas las garantías y las limitaciones, y ahí puedes aplicar la misma regla en tu código; lo que no obtienes por esa vía es el semáforo ya calculado ni el texto de los bloqueos.
¿Sirve para motos?
+
Sí. La consulta es la misma para carros y motos: cambia la clase del vehículo en el registro, no las condiciones que bloquean el traspaso. Gravámenes, prendas, limitaciones a la propiedad, garantías mobiliarias y estado del registro se leen igual en los dos casos.
¿Un vehículo con multas se puede traspasar?
+
Este endpoint no mira multas, así que un aptoTraspaso en true no dice nada sobre la deuda de tránsito. Si necesitas ese dato, /api/multas lo consolida por placa y documento en una llamada de 1 crédito, con el total adeudado y el detalle de cada comparendo. Los requisitos exactos del trámite los fija el organismo de tránsito donde se haga el traspaso.
¿Cómo se verifica un lote de vehículos de una vez?
+
Llamando al endpoint una vez por placa, en paralelo con un tope de concurrencia. No hay una ruta que reciba un array de placas, y el cobro es por consulta con datos, así que un lote de 500 vehículos son 500 llamadas y 500 créditos. El patrón completo —cuánta concurrencia, qué reintentar, cuánto cuesta cada tamaño de lote— está en la página de consulta masiva de placas.
¿Cuánto cuesta y cómo se cobra?
+
1 crédito por consulta con datos, incluidas las respuestas en las que el vehículo NO está apto: un aptoTraspaso en false es exactamente el dato que se vino a comprar. No cobran los errores de fuente (502), los de configuración nuestra (503) ni los fallos internos (500), y tampoco los hits de caché. Un 404 solo cobra pasadas las 10 consultas sin resultado gratis del mes para ese código.
Seguir explorando
Última revisión: 20 de agosto de 2026 · Versión de la API: v1 · Fuentes y metodología