Consulta masiva de placas en Colombia: cómo barrer miles de vehículos por API
Un barrido masivo en PlacApi son N llamadas concurrentes contra el mismo endpoint unitario, no un endpoint de lote: hoy no existe una ruta que reciba un array de placas, y así es también como se factura, a 1 crédito por placa con datos. Lo que hace viable el barrido es el resto del contrato: 1.000 consultas por minuto por cada API key, un 429 que llega con la cabecera Retry-After, un 502 que se puede reintentar sin que cueste crédito y un caché que hace que repetir el mismo lote dentro de la ventana no vuelva a cobrar. Esta página documenta el patrón completo: concurrencia, reintentos, costo por tamaño de lote y qué endpoint elegir según lo que estés barriendo.
¿No eres desarrollador? Consulta el RUNT por placa aquí sin escribir código.
Qué problema resuelve
Verificar una flota completa, el inventario de un patio de usados o la cartera de una aseguradora contra el RUNT y el SIMIT es hoy un trabajo manual: los portales oficiales piden captcha, aceptan una placa a la vez y no publican una API para desarrolladores. Quien consulta 300 placas a mano invierte una jornada entera y termina con capturas de pantalla, no con datos. El problema real no es hacer la consulta una vez, sino hacerla cinco mil veces sin que el proceso se caiga a la mitad, sin pagar dos veces la misma placa y sabiendo cuánto va a costar antes de empezar.
Para quién sirve
Administradores de flota y empresas de transporte que revisan SOAT, tecnomecánica y multas de todo su parque; aseguradoras e intermediarios que depuran cartera; concesionarios y patios de usados que barren su inventario antes de publicarlo; empresas de leasing y renting; talleres y centros de diagnóstico con base de clientes; y equipos de datos que necesitan cruzar un archivo de placas contra el registro oficial y devolver un CSV.
Datos requeridos
- placa — la placa de cada vehículo del lote. De 5 a 7 caracteres alfanuméricos; los guiones y espacios se ignoran, así que un CSV exportado de otro sistema no hay que limpiarlo antes.
- docType y docNumber — tipo y número de documento del propietario. Casi todas las fuentes oficiales exigen la pareja placa + documento y no responden solo con la placa. Si el archivo trae el documento del dueño anterior, esa fila devuelve 404 con code propietario_no_coincide.
- refresh — opcional, por defecto false. Salta el caché y vuelve a consultar la fuente. En un barrido se deja en false: con refresh en true cada repetición del lote vuelve a cobrar.
- Nada más. No hay que registrar el lote, ni solicitar una cuota especial, ni subir un archivo: el barrido es tu cliente llamando N veces al mismo endpoint con tu API key en la cabecera x-api-key.
Fuentes y cobertura
- RUNT (runt.gov.co)Alimenta consulta, vehículo básico y apto para traspaso, que derivan de la MISMA ficha y comparten una entrada de caché por placa + documento durante 24 horas: barrer un lote con dos de ellos no cuesta el doble, porque la segunda llamada sale de caché y el crédito se reembolsa. El avalúo y el impuesto vehicular reutilizan esa misma ficha para no volver a consultar el RUNT. Consulta full arma su paquete por otra vía y no comparte esa entrada.
- SIMIT (simit.org.co)Alimenta multas por placa y comparendos por cédula. Consolida la deuda de los organismos de tránsito del país en una sola respuesta, con el detalle de cada comparendo. Una respuesta con datos se cachea 24 horas; una en la que la fuente falló, 30 minutos, para no dejar clavado un error medio día.
- FASECOLDAAvalúo comercial del vehículo e historial de reclamaciones ante aseguradoras. El avalúo cuesta 1 crédito; pérdida total cuesta 2, porque su fuente es lenta y topa las consultas diarias. Cobertura del historial: solo vehículos que estuvieron asegurados desde 2008.
- RGM de ConfecámarasRegistro de garantías mobiliarias: prendas inscritas sobre el vehículo, por placa sola y sin documento del propietario. La cobertura real ronda el 3% del parque, así que en un barrido la inmensa mayoría de las placas responde sin prenda.
¿Cómo consultar 5.000 placas sin que te bloqueen?
El barrido no se bloquea por el número total de placas sino por el ritmo. La regla operativa cabe en una línea: manda las placas en un pool de concurrencia fija, respeta el 429 cuando aparezca, reintenta solo lo que vale la pena reintentar y persiste el resultado de cada placa antes de pasar a la siguiente. Un script que dispare las 5.000 llamadas de golpe no va más rápido: llena la cola, cosecha timeouts y te deja sin saber cuáles se alcanzaron a hacer.
Nada de esto exige coordinación previa con nosotros. No hay que avisar antes de un barrido ni pedir que te suban un límite: el tope está publicado, el 429 dice cuándo volver y el cobro es por placa con datos, así que un lote que se cae a la mitad no deja un cargo abierto por lo que no se consultó.
El límite real: 1.000 consultas por minuto y por API key
El tope de la API pública son 1.000 peticiones por minuto contadas POR API KEY, no por IP. Esa distinción importa cuando el barrido corre desde tu backend: todas tus llamadas salen de la misma dirección, y un límite por IP habría convertido tu servidor entero en un solo cliente compartiendo cuota con cualquier otro que saliera por ahí. La ventana es deslizante, así que el contador no se reinicia en punto: se libera cupo a medida que envejecen las peticiones de hace más de 60 segundos.
Ese número no es el que manda. Los endpoints que golpean una fuente oficial hacen un scrape real, y medidos en agosto de 2026 sobre nuestra propia infraestructura sostuvieron del orden de 6 consultas por segundo, unas 22.000 por hora, con 24 consultas en vuelo. Traducido a lotes: 1.000 placas tardan unos tres minutos, 5.000 alrededor de quince y 50.000 algo más de dos horas. Pedir 1.000 por minuto no acelera nada, solo llena la cola.
Por eso la concurrencia recomendada por cliente es de 8 a 16 llamadas simultáneas. Por debajo de 8 estás desaprovechando el paralelismo y el lote tarda de más; por encima de 24 las peticiones empiezan a esperar turno y, si el turno no llega a tiempo, la respuesta es un 502, que no cobra pero tampoco avanza.
Concurrencia y backoff: qué hacer con un 429
Un 429 llega con el cuerpo error más code igual a rate_limited, y con la cabecera Retry-After en segundos. Ese número es la respuesta: espera exactamente eso antes de reintentar esa placa, en vez de un valor fijo inventado en el cliente. Si tu librería HTTP no lee la cabecera, un backoff exponencial ciego funciona igual, pero tarda más de lo necesario y te hace creer que la API es lenta.
El 429 no consume crédito ni cupo de scrape: se rechaza en la puerta, antes de tocar la fuente. Reintentar es correcto y no cuesta. Lo que sí conviene es bajar la concurrencia mientras dure la racha: si el pool está en 16 y aparece el primer 429, bajar a 8 durante un minuto evita la cascada en la que las 16 llamadas en vuelo chocan a la vez y vuelven a chocar juntas al reintentar.
El 502 source_error: reintentar SÍ sirve y NO cuesta crédito
El contrato de errores separa a propósito lo que se reintenta de lo que no, porque antes todo colapsaba en un mismo 502 y los clientes reintentaban en bucle cosas que nunca iban a funcionar. Un 502 con code source_error significa que la fuente oficial no respondió (captcha agotado, red, portal lento) y que el crédito reservado ya se devolvió: esa llamada no aparece cobrada en tu consumo. Reintentar sirve y es lo esperado; lo práctico es mandarla a una cola de reintentos y volver a correrla al final del lote, cuando la fuente suele estar más suelta.
Hay dos parientes del 502 que conviene distinguir en el barrido. Un 503 con code fuente_no_disponible o captcha_no_configurado dice que ni siquiera llegamos a consultar la fuente porque nos falta una pieza de configuración de nuestro lado: reintentar en bucle no lo arregla hasta que lo corrijamos, y tampoco cobra. Un 500 con code internal_error es un fallo nuestro, también sin cargo. Ninguno de los tres consume crédito, nunca, y ese es justamente el motivo por el que un barrido puede reintentar sin miedo a inflar la factura.
El 404: no reintentes, corrige el dato
Un 404 es una respuesta definitiva de la fuente: el vehículo no tiene información registrada (code vehiculo_no_registrado), el documento no corresponde al propietario activo de esa placa (propietario_no_coincide) o la consulta no arrojó resultados (consulta_sin_resultado). Reintentar con los mismos datos devuelve exactamente lo mismo, así que la regla del barrido es sacar esa placa de la cola y mandarla a un archivo de revisión manual.
El cobro del 404 tiene su propia regla y conviene conocerla antes de barrer un archivo sucio. Cada cuenta tiene 10 consultas sin resultado gratis al mes POR CÓDIGO, con contadores independientes para cada uno de los tres, y a partir de ahí un 404 cobra igual que una consulta con datos. El cuerpo de la respuesta lo declara sin que haya que adivinar: trae charged en true o false, y freeNoResultsLeft con cuántas gratis quedan de ese código este mes. Un 404 servido desde el caché negativo nunca cobra, esté donde esté el contador, y viene marcado con fromCache.
La consecuencia práctica es directa: si tu archivo trae la cédula del dueño anterior en la mitad de las filas, el barrido va a producir cientos de propietario_no_coincide y todos menos los primeros diez se cobran. Vale la pena depurar el archivo antes, o correr una muestra de 50 placas y mirar la tasa de 404 antes de soltar las 5.000. La cortesía existe justamente para que la fase de integración y los errores de dedo no se paguen; no para absorber un archivo entero mal cruzado.
¿Cuánto cuesta un barrido de 1.000, 5.000 y 50.000 placas?
El precio por crédito baja por volumen y el descuento aplica a la compra completa, no de forma marginal por tramo: quien compra 1.000 créditos paga los 1.000 a 249 COP, no los primeros 999 a 349 y el último a 249.
Con un endpoint de 1 crédito por placa (vehículo básico, apto para traspaso, multas SIMIT, avalúo), un barrido de 1.000 placas cuesta 249.000 COP; uno de 5.000 cuesta 745.000 COP; y uno de 50.000, que es el máximo por transacción, cuesta 4.950.000 COP. Por placa eso es 249, 149 y 99 COP respectivamente.
Los endpoints de 2 créditos duplican el consumo, no el precio unitario: barrer 1.000 placas con consulta full son 2.000 créditos, o sea 498.000 COP; 5.000 placas son 10.000 créditos, o sea 1.390.000 COP. Ahí aparece un tope que conviene tener presente antes de planear: la compra máxima por transacción son 50.000 créditos, así que un barrido de 50.000 placas con consulta full (100.000 créditos) se paga en dos compras o se cotiza aparte con factura y NIT.
En el borde de un tramo comprar más cuesta menos, y no es un error de la tabla: 999 créditos valen 348.651 COP y 1.000 valen 249.000; 4.999 valen 1.244.751 y 5.000 valen 745.000. Si tu lote queda a pocas placas de un borde, redondea hacia arriba — los créditos no vencen y el sobrante queda para el barrido siguiente.
Al presupuesto hay que restarle lo que no se cobra, que en un lote grande no es marginal. Los 502, 503 y 500 se reembolsan siempre. Los hits de caché tampoco cobran: si dos endpoints derivan de la misma ficha del RUNT, o si repites el lote dentro de la ventana, la segunda llamada devuelve datos y el crédito se reembolsa con el motivo cache_hit, visible en tu consumo. Y el endpoint de impuesto vehicular no cuesta crédito: es gratis porque no liquida el impuesto, solo resuelve el departamento donde está matriculado el vehículo y el enlace al portal oficial que sí lo liquida.
¿Qué endpoint usar según lo que estés barriendo?
Elegir el endpoint es la decisión que más mueve la factura de un barrido, bastante más que cualquier optimización del cliente. Estos son los cuatro casos que cubren casi todos los lotes reales, con su costo en créditos tal como lo declara el catálogo de la API.
Inventario de vehículos: vehículo básico, 1 crédito
POST /api/vehiculo-basico devuelve exactamente doce campos del RUNT: placa, marca, línea, modelo, cilindraje, color, clase, servicio, combustible, estado, fecha de matrícula y organismo de tránsito. Es la respuesta correcta para poblar o refrescar un catálogo interno, porque el JSON pesa lo mínimo y no arrastra el histórico completo de SOAT y tecnomecánica que sí trae la ficha entera. Mismo precio que la ficha completa, así que la elección es de forma, no de plata: pide lo que vas a guardar.
Deuda y comparendos: multas SIMIT, 1 crédito
POST /api/multas consolida por placa + documento la deuda de todos los organismos: total adeudado, número de multas, el detalle de cada comparendo con fecha, organismo, infracción, código, estado y valor, y cuántos acuerdos de pago hay. Si lo que barres son personas y no vehículos, POST /api/comparendos hace lo mismo por cédula, sin placa. Ojo con una consecuencia del cobro: un vehículo SIN multas también cobra, porque cero deuda certificada es justamente el dato que se vino a comprar.
Compraventa y traspasos: apto para traspaso, 1 crédito
POST /api/apto-traspaso devuelve un semáforo booleano más la lista de bloqueos en texto, derivado de la misma ficha del RUNT. Para un patio que recibe cincuenta vehículos en parte de pago al mes es la llamada más barata que responde la pregunta del negocio sin obligar a leer cuarenta campos. Está documentado en detalle en la página de la API de traspaso.
Ficha completa: consulta 1 crédito, consulta full 2 créditos
POST /api/consulta trae la ficha del RUNT entera con el histórico de SOAT y tecnomecánica. POST /api/consulta-full agrega en la misma llamada multas del SIMIT, impuesto, avalúo FASECOLDA, pico y placa y la licencia del propietario, y por eso cuesta 2 créditos. Para un barrido conviene la aritmética simple: si vas a usar tres o más de esas fuentes por placa, consulta full sale más barato que tres llamadas; si solo necesitas una, no.
Hay un ahorro que aparece solo en los barridos y que vale conocer: consulta, vehículo básico y apto para traspaso derivan de la MISMA ficha del RUNT y comparten la entrada de caché por placa + documento durante 24 horas. Consultar apto para traspaso y después vehículo básico de la misma placa dentro de esa ventana cuesta 1 crédito, no 2: la segunda respuesta sale de caché, se entrega igual y el crédito se reembolsa. El avalúo y el impuesto vehicular se apoyan en esa misma ficha para no volver a consultar el RUNT, aunque el avalúo cobra por su propia consulta a FASECOLDA. Consulta full no entra en el trato: arma su paquete por otra vía y tiene su propio caché.
¿Cómo se ve el bucle de barrido en Node?
El patrón completo son cinco decisiones. Van aquí como líneas sueltas de Node con p-limit, que es la librería más corta para poner un techo de concurrencia sin escribir una cola a mano.
1. El pool. const limite = pLimit(12); — doce llamadas en vuelo, dentro del rango recomendado de 8 a 16. Es el único número que hay que tocar si el lote va lento o si aparecen 429.
2. El disparo. const resultados = await Promise.allSettled(placas.map((fila) => limite(() => consultar(fila)))); — allSettled y no all, porque un rechazo con all aborta la lectura de las demás promesas y te deja sin saber cuáles terminaron.
3. La llamada. const r = await fetch(URL, { method: 'POST', headers: { 'x-api-key': KEY, 'content-type': 'application/json' }, body: JSON.stringify(fila) }); — la misma que ves en el ejemplo cURL de abajo, una por placa.
4. El reparto por código de estado. if (r.status === 429) { await esperar(Number(r.headers.get('Retry-After') ?? 5) * 1000); return consultar(fila); } — el 429 se espera lo que diga la cabecera y se repite. if (r.status >= 500) return reintentar(fila); — los 5xx van a la cola de reintentos, con backoff y un tope de tres intentos. if (r.status === 404) return aRevision(fila); — el 404 no se reintenta nunca, se archiva. if (r.status === 402) throw new Error('sin creditos'); — el 402 detiene el lote entero: seguir llamando sin saldo solo genera ruido.
5. La persistencia. Escribe el resultado de cada placa apenas llega, con su placa como clave, y arranca el barrido saltando las que ya estén escritas. Así un lote interrumpido se reanuda sin volver a pagar, y aunque se repitiera, el caché de 24 horas devolvería los datos sin cobrar.
Un detalle que ahorra soporte: guarda también fromCache y el código HTTP junto a cada fila. Cuando alguien pregunte por qué el barrido de 5.000 placas descontó 4.812 créditos y no 5.000, la respuesta va a estar ahí — hits de caché, 404 dentro de la cortesía y 5xx reembolsados — y coincidirá con lo que muestra tu página de consumos.
¿Hay un endpoint de lote que reciba un array de placas?
No. Hoy no existe una ruta que acepte un array de placas ni un archivo: un barrido masivo son N llamadas concurrentes contra el endpoint unitario, y así es exactamente como se factura, a 1 crédito por placa con datos. Lo decimos de frente porque es la primera pregunta de todo el que llega buscando consulta masiva, y prometer un batch que no existe sale más caro que no tenerlo. El patrón que sí funciona está documentado en esta página: un pool de 8 a 16 llamadas concurrentes, respetar el Retry-After de los 429 y reintentar únicamente los 5xx.
¿Cuántas placas por minuto se pueden consultar?
El tope publicado son 1.000 peticiones por minuto y por API key, en ventana deslizante. Ese no es el número que manda: los endpoints que hacen un scrape real contra una fuente oficial sostuvieron del orden de 6 consultas por segundo, unas 22.000 por hora, en la medición de agosto de 2026, así que 5.000 placas se barren en unos 15 minutos con 8 a 16 llamadas en vuelo. Subir la concurrencia por encima de 24 no acelera el lote: solo hace que las peticiones esperen turno y que algunas terminen en 502, que no cobra pero tampoco avanza.
Ejemplo de solicitud
POST https://placapi.com/api/multas. Autenticación por API key en el header x-api-key. Los datos del ejemplo son ficticios.
curl -X POST 'https://placapi.com/api/multas' \
-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": "multas",
"status": "warn",
"data": {
"totalDeuda": 522700,
"totalMultas": 1,
"multas": [
{
"comparendoId": "11001000000012345678",
"fecha": "2025-03-15",
"organismo": "SECRETARÍA DISTRITAL DE MOVILIDAD DE BOGOTÁ",
"infraccion": "No respetar pico y placa",
"codigo": "C14",
"estado": "pendiente",
"valor": 522700
}
],
"acuerdosPago": 0
},
"mode": "live",
"fetchedAt": "2026-07-24T15:04:05.000Z"
}Explicación campo por campo
| Campo | Tipo | Descripción |
|---|---|---|
| status | string | ok sin multas, warn con multas y danger si la deuda pasa de 1.000.000 COP. Califica el HALLAZGO, no la llamada: una consulta correcta sobre un vehículo con deuda responde 200 con status warn. |
| data.totalDeuda | number | Deuda consolidada en pesos. Es el campo que se suma para sacar el total de una flota. |
| data.totalMultas | number | Cuántos comparendos trae la respuesta. Cero es un dato válido y cobra igual: es la certificación de que esa placa está limpia. |
| data.multas[].comparendoId | string | Número del comparendo. Sirve de clave para no duplicar filas entre dos corridas del mismo lote. |
| data.multas[].estado | string | pendiente, acuerdo o pagada. En un barrido de cartera es el campo que separa lo cobrable de lo ya negociado. |
| data.multas[].valor | number | Valor del comparendo en pesos, sin intereses. |
| data.acuerdosPago | number | Cuántos acuerdos de pago reporta el SIMIT para esa consulta. Un acuerdo vigente cambia la gestión de cobro: la deuda existe pero ya está negociada. |
| fromCache | boolean | Presente y en true solo cuando la respuesta salió del caché. En un barrido es el campo que explica por qué esa placa no descontó crédito: un hit de caché entrega datos y el crédito se reembolsa con el motivo cache_hit. |
| fetchedAt | string | Instante ISO 8601 en UTC en que se obtuvo el dato. Con fromCache en true es la fecha del scrape original, no la de tu llamada. |
| mode | string | live cuando el dato viene de la fuente oficial. Solo es demo en entornos sin credenciales. |
Tiempo de respuesta
El SIMIT responde en menos de 2 segundos por placa (p50 medido de 1,9 s en agosto de 2026) y la ficha del RUNT entre 2 y 4 segundos. Lo que decide el tiempo de un barrido no es esa latencia unitaria sino la concurrencia: con 8 a 16 llamadas en vuelo, 1.000 placas tardan unos 3 minutos y 5.000 alrededor de 15.
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
Cada fuente tiene su ventana y en un barrido eso es dinero, no latencia. La ficha del RUNT —de la que derivan consulta, vehículo básico, apto para traspaso, avalúo e impuestos— vive 24 horas por la combinación placa + documento; las multas del SIMIT, 24 horas cuando hay datos y 30 minutos cuando la fuente falló; la ficha técnica y el avalúo, 30 días. Un hit de caché entrega datos y NO cobra: el crédito se reembolsa con el motivo cache_hit y queda visible en tu consumo. Las consultas sin resultado se guardan 90 días en un caché negativo y desde ahí nunca cobran. refresh en true salta todo eso y siempre 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
- No existe un endpoint de lote. No aceptamos un array de placas ni un archivo: el barrido son N llamadas al endpoint unitario, y así se factura. Si tu caso necesita un batch asíncrono con webhook de resultado, escríbenos antes de diseñar alrededor de algo que hoy no está.
- 1.000 consultas por minuto por API key es un tope duro. Por encima llega 429 con Retry-After, y no hay forma de comprar un tope mayor desde la web.
- El techo real lo pone la fuente, no el tope. Los endpoints que hacen scrape sostienen del orden de 6 consultas por segundo; pedir más solo alarga la cola y aumenta los 502 por espera de turno.
- Un archivo con documentos equivocados sale caro: pasadas las 10 consultas sin resultado gratis del mes para ese código, cada 404 cobra igual que una consulta con datos.
- El máximo por transacción son 50.000 créditos (4.950.000 COP). Un lote más grande se paga en varias compras o se cotiza con factura.
- Los créditos se compran por adelantado: no hay postpago ni facturación por consumo a fin de mes. Si el saldo se acaba a mitad del barrido, las llamadas siguientes responden 402 con code no_credits y hay que recargar para continuar.
- El cobro es por consulta con datos, no por placa única. Consultar dos veces la misma placa con refresh en true cobra dos veces, aunque el dato sea idéntico.
Códigos de error del endpoint (401, 402, 429, 5xx) en la referencia de errores.
Otras preguntas frecuentes
¿Se cobra una placa que no aparece en el registro?
+
Depende de dos cosas. Cada cuenta tiene 10 consultas sin resultado gratis al mes por cada código de 404 (vehiculo_no_registrado, propietario_no_coincide y consulta_sin_resultado llevan contadores separados); pasadas esas diez, el 404 cobra igual que una consulta con datos. Un 404 servido desde el caché negativo no cobra nunca. La respuesta lo declara en el mismo cuerpo, con los campos charged y freeNoResultsLeft, para que puedas conciliar el gasto sin adivinar la regla.
¿Si vuelvo a correr el mismo lote mañana, pago dos veces?
+
Dentro de la ventana de caché no. La ficha del RUNT y las multas del SIMIT se guardan 24 horas por la combinación consultada; una repetición dentro de ese plazo devuelve los mismos datos y el crédito se reembolsa con el motivo cache_hit. Pasada la ventana sí vuelve a cobrar, porque vuelve a consultar la fuente. Y con refresh en true cobra siempre, incluso a los cinco minutos: es la palanca para forzar dato fresco cuando sabes que algo cambió.
¿Qué pasa si se acaban los créditos a mitad del barrido?
+
Las llamadas siguientes responden 402 con code no_credits y no consultan nada. El cobro es reserva-primero: el crédito se aparta atómicamente antes del scrape y se devuelve si la consulta no resulta facturable, así que no queda un cargo por un trabajo a medio hacer ni dos llamadas concurrentes gastando el último crédito. Lo práctico en el cliente es tratar el 402 como una parada del lote, no como un error de una placa.
¿Cómo audito cuánto me cobró un barrido?
+
Cada llamada queda registrada con su endpoint, la placa consultada, si fue facturable y el motivo cuando no lo fue (cache_hit, sin_resultado_gratis, sin_resultado_cobrado, source_error). Eso es lo que ves en tu página de consumos, y es lo que hace que la diferencia entre las placas del archivo y los créditos descontados sea explicable línea por línea en vez de una cifra que hay que creer.
¿Hay descuento por volumen para un barrido grande?
+
Sí, y es automático: el precio por crédito arranca en 349 COP y baja por tramos — 249 COP desde 1.000 créditos, 149 COP desde 5.000 créditos, 139 COP desde 10.000 créditos, 119 COP desde 20.000 créditos, 99 COP desde 50.000 créditos —, aplicado a la compra completa. No hay que negociar nada ni firmar un contrato de volumen; se compra la cantidad y el precio unitario se ajusta solo. Por encima de 50.000 créditos, que es el máximo por transacción, se cotiza aparte con factura y NIT.
¿Hay que avisar antes de correr un barrido grande?
+
No hace falta. El tope está publicado, el 429 indica cuándo reintentar y el cobro es por consulta con datos, así que un barrido dentro de esos límites es tráfico normal. Sí conviene, la primera vez, correr una muestra de 50 placas del archivo real: mide la tasa de 404 (que revela cruces malos de placa y documento) y la de 5xx antes de comprometer los créditos del lote completo.
Seguir explorando
Última revisión: 20 de agosto de 2026 · Versión de la API: v1 · Fuentes y metodología