API SOAT Colombia: consulta vigencia y aseguradora por placa

PlacApi expone una API REST para consultar el SOAT (Seguro Obligatorio de Accidentes de Tránsito) de un vehículo colombiano. El SOAT vive dentro de la ficha del RUNT: con la placa y el documento del propietario, el endpoint POST /api/consulta devuelve en JSON el arreglo `data.soat` con el histórico de pólizas (la más reciente primero), incluyendo si está vigente, la entidad que lo expidió y las fechas de vigencia y vencimiento, tal como los reporta el RUNT.

¿No eres desarrollador? Consulta el RUNT por placa aquí sin escribir código.

Qué problema resuelve

Saber si un carro tiene el SOAT al día es clave antes de comprarlo, renovarlo o asegurarlo, pero el dato vive en el RUNT detrás de captcha. Integrarlo en un recordatorio de vencimiento o en un flujo de venta requiere una API estable que devuelva el estado y la fecha de vencimiento en un formato consistente.

Para quién sirve

Aseguradoras e intermediarios, apps de recordatorios de vencimiento, concesionarios y flotas que necesiten monitorear la vigencia del SOAT de muchos vehículos.

Datos requeridos

  • placa — placa del vehículo.
  • docType y docNumber — documento del propietario actual del vehículo.

Fuentes y cobertura

  • SOAT vía RUNTEl estado del SOAT se lee del RUNT dentro de la ficha del vehículo: entidad aseguradora, estado (VIGENTE / NO VIGENTE) y fechas de vigencia y vencimiento, como histórico de pólizas.

¿Por qué aparece sin póliza vigente si lo acabo de pagar?

El pago tarda horas en reflejarse en el RUNT. Espera aproximadamente 24 h y vuelve a consultar; PlacApi refresca el dato desde el RUNT.

¿Hay un endpoint /api/soat separado?

No. El SOAT es un dato del RUNT y viaja dentro de POST /api/consulta, en el arreglo data.soat con el histórico de pólizas.

Ejemplo de solicitud

POST https://placapi.com/api/consulta. 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/consulta' \
  -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).

Ejemplo de respuesta JSON
{
  "data": {
    "documentNumber": "1020304050",
    "plate": "ABC123",
    "vin": "9FB10000001",
    "informacionGeneral": {
      "noPlaca": "ABC123",
      "marca": "MAZDA",
      "linea": "CX-30",
      "modelo": "2023",
      "estadoDelVehiculo": "ACTIVO"
    },
    "soat": [
      {
        "entidadExpideSoat": "SBS SEGUROS",
        "estado": "VIGENTE",
        "noPoliza": "40123456789",
        "fechaVigencia": "20/09/2025",
        "fechaVencimiento": "19/09/2026"
      },
      {
        "entidadExpideSoat": "SBS SEGUROS",
        "estado": "NO VIGENTE",
        "noPoliza": "40098765432",
        "fechaVigencia": "20/09/2024",
        "fechaVencimiento": "19/09/2025"
      }
    ]
  },
  "mode": "live",
  "fetchedAt": "2026-07-11T21:00:00.000Z"
}

Explicación campo por campo

CampoTipoDescripción
data.platestringPlaca consultada.
data.informacionGeneral.marcastringMarca del vehículo según el RUNT (contexto de la ficha).
data.soatarrayHistórico de pólizas SOAT, la más reciente primero.
data.soat[0].entidadExpideSoatstringEntidad aseguradora que expidió el SOAT vigente.
data.soat[0].estadostringEstado de la póliza: VIGENTE o NO VIGENTE.
data.soat[0].noPolizastringNúmero de la póliza SOAT.
data.soat[0].fechaVigenciastring (DD/MM/YYYY)Fecha desde la que rige la póliza.
data.soat[0].fechaVencimientostring (DD/MM/YYYY)Fecha de vencimiento de la póliza.
modestringlive cuando el dato se obtuvo de los portales oficiales.
fetchedAtstring (ISO 8601)Instante en que se resolvió la consulta.

Tiempo de respuesta

Entre 30 y 90 segundos la primera vez —es lo que tardan los portales oficiales en responder—. Reconsultar la misma placa es casi instantáneo porque el resultado queda en 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. 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

Un SOAT vigente se cachea por días; cuando se acerca la fecha de vencimiento el resultado se refresca con más frecuencia para no entregar un dato caduco.

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 SOAT recién pagado tarda algunas horas en reflejarse en el RUNT; hasta entonces la póliza vigente puede no aparecer todavía.
  • Las fechas vienen en formato DD/MM/YYYY tal como las publica el RUNT; el cálculo de días para vencer queda del lado del integrador.
  • El campo data.soat es un histórico: la póliza vigente, cuando existe, es el primer elemento del arreglo con estado VIGENTE.
  • PlacApi no vende SOAT ni es una aseguradora; solo reporta el estado que expone el RUNT.

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

Otras preguntas frecuentes

¿Puedo monitorear el SOAT de una flota?

+

Sí. Consulta cada placa periódicamente y usa data.soat[0].estado y data.soat[0].fechaVencimiento para disparar recordatorios de renovación.

Seguir explorando

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

Contacto