ConduceDocs
Referencia de la API · v1

API de Conduce

Precio Real e Inspección 360: el valor de mercado de carros y motos en Venezuela, con cada comparable que lo respalda, y el resultado de las inspecciones de tus vehículos.

Introducción

La API de Conduce te da dos cosas. Precio Real: el valor de mercado de un carro o una moto en Venezuela, en dólares, con el rango en que se mueve y cada uno de los comparables que lo respaldan. E Inspección 360: el resultado completo de las inspecciones que Conduce hace a tus vehículos, con su informe en PDF.

Es una API REST: recibe y devuelve JSON, usa los códigos HTTP de siempre y se autentica con una llave secreta. Toda petición va por HTTPS.

El precio sale de una base de más de 15.000 comparables: carros vendidos y publicados en Conduce, y publicaciones de carros en portales de clasificados y redes sociales de Venezuela. Cada precio usa los de su modelo, y cada comparable se lleva al año y al kilometraje de tu vehículo antes de calcular.

URL base
https://api.conduceapp.com/v1
Lo que necesitas
Tu llave secreta, que empieza con cnd_live_.
Un servidor que pueda hacer peticiones HTTPS.
Nada más: no hay SDK de Conduce.

Autenticación

Cada petición lleva tu llave secreta en el encabezado Authorization, como Bearer. Las llaves empiezan con cnd_live_ y te las entrega Conduce.

Tu llave gasta tu cupo: guárdala en tu servidor, en una variable de entorno. Nunca la pongas en una app, en una página web ni en un repositorio.

Si falta o no es válida, la respuesta es 401. Si crees que se filtró, pídenos una nueva y que revoquemos la anterior: crear una llave nueva no apaga la anterior; Conduce la revoca cuando se lo pides.

GET/v1/usage
curl "https://api.conduceapp.com/v1/usage" \
-H "Authorization: Bearer $CONDUCE_API_KEY"

Errores

Los códigos 2xx son éxito; los 4xx, un problema con la petición, y el mensaje dice cuál; los 5xx, una falla de Conduce, que es poco común.

CódigoQué significa
200Todo salió bien.
400La petición está mal formada: el JSON no se pudo leer.
401Falta la llave o no es válida.
403Tu acceso está suspendido.
404Lo que pides no existe, no es tuyo o el informe todavía no ha llegado.
413El cuerpo de la petición pasa de 1 MB.
422Un dato no es válido: param dice cuál y message, por qué.
429Pasaste el límite por minuto o el cupo del mes.
500, 503Falla de Conduce. Reintenta en un momento.

Los códigos de error

codeHTTPCuándo
invalid_json400El cuerpo no es un JSON válido.
body_too_large413El cuerpo de la petición pasa de 1 MB.
parameter_missing422Falta un dato obligatorio.
parameter_invalid422Un dato no cumple su regla.
brand_not_found422La marca no está en el catálogo: message trae las más parecidas.
resource_missing404El id no existe o no es tuyo, o la ruta no existe.
report_not_ready404El informe en PDF de esa inspección todavía no ha llegado.
api_key_missing401No mandaste la llave.
api_key_invalid401La llave no es válida o fue revocada.
client_suspended403Tu acceso está suspendido.
rate_limited429Pasaste el límite de peticiones por minuto.
monthly_quota_exceeded429Llegaste al cupo de valuaciones del mes.
api_error500, 503Falla de Conduce.

El objeto de error

typetexto

La familia del error: invalid_request_error, authentication_error, permission_error, rate_limit_error o api_error.

codetexto

El error exacto, para tu código: parameter_missing, parameter_invalid, brand_not_found, monthly_quota_exceeded…

paramtexto o null

El parámetro con el problema, o null si no es de un parámetro.

messagetexto

Qué pasó, en español, para que lo leas tú.

doc_urltexto

La parte de esta documentación que lo explica.

Objeto de error
{
"error": {
"type": "invalid_request_error",
"code": "parameter_missing",
"param": "mileage_km",
"message": "Falta mileage_km: el kilometraje, en km.",
"doc_url": "https://docs.conduceapp.com/api#errores"
}
}

Límites de uso

Cada llave tiene un límite de peticiones por minuto: 60, si no acordamos otro. Si te pasas, la respuesta es 429 rate_limited: espera los segundos que dice Retry-After y reintenta.

Las valuaciones no tienen tope mensual, salvo que tu plan diga otra cosa. Si lo tiene, solo cuentan las de POST /v1/valuations que dan precio, el mes va del día 1 al último en hora de Venezuela y, al llegar al tope, crear una valuación responde 429 monthly_quota_exceeded mientras el resto sigue funcionando. Ese 429 no trae Retry-After: el cupo vuelve el día 1.

No gastan cupo consultar el catálogo, tu uso o una valuación que ya pediste, ni una valuación sin datos suficientes. Las inspecciones tampoco: ni pedirlas ni la valuación que traen.

Cada respuesta te dice cómo vas, menos los 401 y 403: esos no traen los RateLimit-*.

Encabezados de la respuesta

RateLimit-Limitentero

Peticiones por minuto de tu llave.

RateLimit-Remainingentero

Las que te quedan en este minuto.

RateLimit-Resetentero

Segundos para que el minuto se renueve.

X-Conduce-Quota-Remainingentero

Valuaciones que te quedan este mes. Solo viene si tu plan tiene tope; entonces sale en cada respuesta autenticada, menos en un 429 rate_limited.

Retry-Afterentero

Solo con 429 rate_limited: los segundos que debes esperar antes de reintentar. monthly_quota_exceeded no lo trae: el cupo vuelve el día 1 del mes, en hora de Venezuela.

X-Request-Idtexto

El id de la petición. Si nos escribes por un problema, mándanoslo.

Encabezados de ejemplo
HTTP/1.1 200 OK
Content-Type: application/json
RateLimit-Limit: 60
RateLimit-Remaining: 58
RateLimit-Reset: 41
X-Conduce-Quota-Remaining: 4688
X-Request-Id: req_9fK2mQ7xL1pR3dZw

Versiones

La versión va en la URL. Hoy es v1.

Dentro de v1 solo agregamos: campos nuevos en las respuestas, parámetros opcionales y valores nuevos en las listas. Tu integración debe ignorar los campos que no conoce.

Un cambio que rompa algo sale en una versión nueva, y te avisamos antes. La anterior sigue funcionando mientras migras.

Versión actual
v1Estable

Valuaciones, Inspecciones 360, catálogo, eventos y uso.

VALUACIONES

El objeto Valuación

Una valuación es el precio de mercado de un vehículo en un momento dado, con todo lo que lo respalda. Se guarda: la puedes volver a pedir con su id y no cambia aunque el mercado se mueva.

Atributos

idtexto

Identificador único. Empieza con val_.

objecttexto

Siempre valuation.

statustexto

complete: hay precio. insufficient_data: todavía no hay vehículos parecidos para dar un precio; esa consulta no gasta cupo.

vehicleobjeto

El vehículo valuado, con la marca como quedó en el catálogo.

Ver los 7 campos
typetexto

car o motorcycle.

yearentero

Año del modelo.

brandtexto

La marca, con su nombre del catálogo.

modeltexto

El modelo.

versiontexto o null

La versión, si la mandaste.

mileage_kmentero

Kilómetros recorridos.

conditiontexto

El estado.

priceobjeto o null

El precio de mercado en dólares, en enteros. null si status es insufficient_data.

Ver los 4 campos
estimatedentero

El precio estimado: la mediana de los comparables ya ajustados, movida por el estado del vehículo.

lowentero

El piso del rango.

highentero

El techo del rango.

currencytexto

Siempre USD.

confidenceobjeto

Qué tan sólido es el precio.

Ver los 3 campos
leveltexto o null

high: la misma versión y 8 comparables o más en el cálculo. low: 1 o 2 comparables. medium: el resto. null si no hay precio.

matchtexto o null

version: se comparó con la misma versión. model: con todo el modelo. null si no hay precio.

comparables_usedentero

Cuántos comparables entraron al cálculo: los de la lista con outlier en false, aunque la lista se corte en 100.

comparableslista

Cada vehículo que respalda el precio, hasta 100: primero los que entraron al cálculo, del más parecido a tu vehículo en año y kilometraje al menos parecido, y después los que quedaron fuera por salirse de lo normal.

Ver los 9 campos
sourcetexto

conduce: un carro de Conduce. market: una publicación de carros en portales de clasificados y redes sociales de Venezuela.

statustexto

En Conduce: sold (vendido en Conduce), active (publicado) o inactive (ya no está publicado). En el mercado: listed.

yearentero

Año del modelo.

modeltexto

El modelo del comparable. Si no había suficientes del modelo que pediste (Corolla Cross) y se comparó con el más cercano (Corolla), aquí lo ves.

versiontexto o null

La versión, si se conoce.

mileage_kmentero o null

Kilómetros recorridos. null si la publicación no trae los km o no son creíbles; ese comparable no se ajusta por km.

priceentero

El precio del comparable con el que trabaja el cálculo, en dólares. En Conduce, el precio del carro; en el mercado, el precio pedido ya llevado a precio de venta.

adjusted_priceentero

price llevado al año y al kilometraje de tu vehículo. Es el que entra al cálculo.

outlierbooleano

true si el precio se salía de lo normal para ese vehículo y no entró al cálculo.

messagetexto o null

Una nota sobre el precio cuando la hay, como «Estimación basada en 2 comparables. Tómala como referencia.». Si no, null.

referencetexto o null

Tu referencia, si la mandaste.

created_atfecha

Cuándo se calculó, en ISO 8601 y UTC.

El objeto Valuación
{
"id": "val_7Qm2xK9pT4sW8vLd",
"object": "valuation",
"status": "complete",
"vehicle": {
"type": "car",
"year": 2020,
"brand": "Toyota",
"model": "Corolla",
"version": "SE",
"mileage_km": 85000,
"condition": "good"
},
"price": {
"estimated": 24589,
"low": 22622,
"high": 26556,
"currency": "USD"
},
"confidence": {
"level": "high",
"match": "version",
"comparables_used": 37
},
"comparables": [
{
"source": "market",
"status": "listed",
"year": 2020,
"model": "Corolla",
"version": "SE",
"mileage_km": 80000,
"price": 25081,
"adjusted_price": 24581,
"outlier": false
},
{
"source": "conduce",
"status": "active",
"year": 2020,
"model": "Corolla",
"version": "SE",
"mileage_km": 73000,
"price": 28900,
"adjusted_price": 27700,
"outlier": false
},
{
"source": "market",
"status": "listed",
"year": 2020,
"model": "Corolla",
"version": "SE",
"mileage_km": 70000,
"price": 23179,
"adjusted_price": 21679,
"outlier": false
}
// … y los otros 34 comparables
],
"message": null,
"reference": "yummer-48213",
"created_at": "2026-10-27T02:01:31Z"
}

Crear una valuación

POST/v1/valuations

Calcula el precio de mercado de un vehículo con sus datos. Usa los nombres del catálogo para marca, modelo y versión: la marca tiene que estar en el catálogo, y el modelo y la versión se comparan por parecido. confidence.match te dice si se comparó con la misma versión o con todo el modelo, y cada comparable trae su modelo.

Parámetros

vehicle_typetexto

Carro o moto. Si no lo mandas, es car.

carCarromotorcycleMoto
yearenteroobligatorio

Año del modelo, de 1950 al año que viene.

brandtextoobligatorio

La marca: su id del catálogo (toyota) o su nombre (Toyota), sin importar mayúsculas ni tildes. Hasta 100 caracteres. Si no está en el catálogo, la respuesta es 422 brand_not_found con las marcas más parecidas.

modeltextoobligatorio

El modelo, como sale en el catálogo de esa marca. Hasta 255 caracteres.

versiontexto

La versión (SE, XEI, LT…). Con versión el precio es más preciso; sin ella se compara con todo el modelo. Hasta 255 caracteres.

mileage_kmenteroobligatorio

Kilómetros recorridos, de 0 a 2.000.000. Si el odómetro marca millas, multiplícalas por 1,609.

conditiontextoobligatorio

El estado del vehículo.

excellentExcelentevery_goodMuy buenogoodBuenofairRegularneeds_repairsNecesita reparación
referencetexto

Tu referencia para amarrar la valuación a tu sistema, como el número de tu conductor o de su expediente. Hasta 100 caracteres.

Devuelve

El objeto Valuación. Si no hay suficientes vehículos parecidos, status es insufficient_data y price viene en null: esa consulta no gasta cupo.

POST/v1/valuations
curl https://api.conduceapp.com/v1/valuations \
-H "Authorization: Bearer $CONDUCE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"vehicle_type": "car",
"year": 2020,
"brand": "Toyota",
"model": "Corolla",
"version": "SE",
"mileage_km": 85000,
"condition": "good",
"reference": "yummer-48213"
}'
Respuesta
{
"id": "val_7Qm2xK9pT4sW8vLd",
"object": "valuation",
"status": "complete",
"vehicle": {
"type": "car",
"year": 2020,
"brand": "Toyota",
"model": "Corolla",
"version": "SE",
"mileage_km": 85000,
"condition": "good"
},
"price": {
"estimated": 24589,
"low": 22622,
"high": 26556,
"currency": "USD"
},
"confidence": {
"level": "high",
"match": "version",
"comparables_used": 37
},
"comparables": [
{
"source": "market",
"status": "listed",
"year": 2020,
"model": "Corolla",
"version": "SE",
"mileage_km": 80000,
"price": 25081,
"adjusted_price": 24581,
"outlier": false
},
{
"source": "conduce",
"status": "active",
"year": 2020,
"model": "Corolla",
"version": "SE",
"mileage_km": 73000,
"price": 28900,
"adjusted_price": 27700,
"outlier": false
},
{
"source": "market",
"status": "listed",
"year": 2020,
"model": "Corolla",
"version": "SE",
"mileage_km": 70000,
"price": 23179,
"adjusted_price": 21679,
"outlier": false
}
// … y los otros 34 comparables
],
"message": null,
"reference": "yummer-48213",
"created_at": "2026-10-27T02:01:31Z"
}

Obtener una valuación

GET/v1/valuations/{id}

Devuelve una valuación, la que pediste o la de una de tus Inspecciones 360, igual a como salió ese día, con sus comparables. No gasta cupo.

Parámetros

idtextoobligatorio

El id de la valuación (val_…), en la ruta.

Devuelve

El objeto Valuación.

GET/v1/valuations/{id}
curl "https://api.conduceapp.com/v1/valuations/val_7Qm2xK9pT4sW8vLd" \
-H "Authorization: Bearer $CONDUCE_API_KEY"
Respuesta
{
"id": "val_7Qm2xK9pT4sW8vLd",
"object": "valuation",
"status": "complete",
// … el objeto Valuación completo, igual a como salió ese día
}

Listar valuaciones

GET/v1/valuations

Tus valuaciones, de la más nueva a la más vieja, por páginas. Sirve para encontrar las de un conductor con su referencia. No gasta cupo. Incluye las valuaciones que vienen con tus Inspecciones 360 (es el mismo id de inspection.valuation). Esas no gastan cupo. Tu uso del mes está en GET /v1/usage.

Parámetros

referencetexto

Solo las valuaciones con esa referencia.

limitentero

Cuántas por página, de 1 a 100. Si no lo mandas, 10.

starting_aftertexto

El id de la última que recibiste, para pedir la página siguiente.

Devuelve

Una lista de objetos Valuación.

GET/v1/valuations
curl "https://api.conduceapp.com/v1/valuations?reference=yummer-48213&limit=10" \
-H "Authorization: Bearer $CONDUCE_API_KEY"
Respuesta
{
"object": "list",
"data": [
{
"id": "val_7Qm2xK9pT4sW8vLd",
"object": "valuation",
"status": "complete",
"reference": "yummer-48213",
// … el objeto Valuación completo
}
],
"has_more": false
}
INSPECCIONES 360

El objeto Inspección

Una Inspección 360 es la revisión de 68 puntos que hace Conduce a un vehículo: 14 de precalificación (documentos, extras e inspección estática) y 54 técnicos (interior, frontal, motor, bajo chasis, laterales, trasera y exterior).

Trae los puntajes, cada punto con su resultado, los daños con su foto, el diagnóstico OBD2 y la valuación del vehículo ese día. Solo ves las inspecciones de tus vehículos.

Atributos

idtexto

Identificador único. Empieza con insp_.

objecttexto

Siempre inspection.

statustexto

completed: la inspección terminó.

referencetexto o null

La referencia de tu conductor que se anotó al inspeccionar: la misma de tus valuaciones.

vehicleobjeto

El vehículo inspeccionado.

Ver los 6 campos
vintexto

El serial (VIN) de 17 caracteres.

yearentero o null

Año del modelo. null si la inspección no lo trae.

brandtexto o null

La marca. null si la inspección no la trae.

modeltexto o null

El modelo. null si la inspección no lo trae.

versiontexto o null

La versión.

mileage_kmentero o null

Los kilómetros que marcaba el odómetro. null si la inspección no los trae.

scoreobjeto

Los puntajes de la inspección.

Ver los 3 campos
technicalentero

Puntaje técnico, de 0 a 100: lo que suman los puntos técnicos que cumplen.

prequalificationentero

Puntaje de precalificación, de 0 a 30.

prequalifiedbooleano

true si la precalificación llegó a 25 o más.

ratingtexto o null

Según el puntaje técnico: excellent (91 a 100), good_condition (80 a 90), needs_attention (1 a 79) o in_progress (puntaje técnico 0). null si la inspección no trae calificación.

itemslista

Los 68 puntos del protocolo, cada uno con su resultado.

Ver los 8 campos
keytexto

El punto: compresion_motor, tapiceria, frenos…

labeltexto

Su nombre, en español.

blocktexto

prequalification (14 puntos) o technical (54).

grouptexto

documentos, extras o estatica en la precalificación; interior, frontal, motor, bajo_chasis, laterales, trasera o exterior en los técnicos.

resulttexto o null

En los técnicos: pass (cumple), improve (por mejorar) o fail (no cumple). En la precalificación: yes o no. null si ese punto no se contestó (inspección hecha antes de asignártela).

ownersentero o null

Solo en first_owner: cuántos dueños ha tenido el vehículo. Su result es yes si fue uno solo. null si ese punto no se contestó (inspección hecha antes de asignártela).

weightentero

Lo que pesa en el puntaje.

notetexto o null

Lo que anotó el inspector, si anotó algo.

damageslista

Cada daño marcado en el croquis del vehículo, con su foto.

Ver los 4 campos
idtexto

Identificador del daño dentro de la inspección: dmg_1, dmg_2…

viewtexto o null

front, rear, left, right o top: la vista del croquis. null si no se marcó.

descriptiontexto

El tipo de daño, su severidad si se marcó y la nota del inspector si anotó algo, como «Rayón de severidad leve: puerta trasera».

photo_urltexto o null

La foto del daño. El enlace es público, como en la app: se abre sin tu llave y no vence. null si el daño no tiene foto.

obd2objeto o null

El diagnóstico electrónico OBD2 que se le hizo al vehículo con la inspección. null si no se escaneó.

Ver los 2 campos
scanned_atfecha

Cuándo se escaneó.

codeslista

Los códigos de falla. Vacía si no hay fallas.

interviewobjeto

Lo que contó el dueño del vehículo en la entrevista. Solo trae lo que se contestó.

Ver los 6 campos
usagetexto o null

highway (carretera), urban (ciudad) o cargo (carga). null si la respuesta no es una de esas.

collisionbooleano

true si el vehículo tuvo una colisión.

collision_partstexto o null

Las partes que se afectaron en la colisión. null si el campo quedó vacío.

stolen_or_recoveredbooleano

true si fue robado o recuperado.

sale_reasontexto o null

Por qué lo vende. null si el campo quedó vacío.

owner_estimated_pricenúmero o null

El precio que el dueño cree que vale, en dólares. null si no se anotó.

test_driveobjeto

La prueba de manejo: cada punto en true si salió bien y en false si falló. Solo trae lo que se probó.

Ver los 6 campos
accelerationbooleano

Aceleración.

no_abnormal_noisesbooleano

Sin ruidos anormales.

no_vibrationsbooleano

Sin vibraciones.

abs_respondsbooleano

El ABS responde.

brakingbooleano

Frenado correcto.

overall_feelbooleano

Sensación general.

observationsobjeto

Las observaciones del inspector. Solo trae las que tienen texto.

Ver los 3 campos
relevant_infotexto

Información relevante.

technicaltexto

Observación técnica.

drivingtexto

Observación de manejo.

photoslista

Las fotos de la inspección, incluidas las del VIN y del odómetro. Las firmas no salen: solo van en el PDF.

Ver los 3 campos
kindtexto

section: una foto de la inspección. damage: la foto de un daño.

sectiontexto o null

A qué parte de la inspección pertenece, como photo_vin (el VIN), photo_odometer (el odómetro) o photo_general. null en las fotos de daños.

urltexto

La foto. El enlace es público, como en la app: se abre sin tu llave y no vence.

valuationobjeto o null

La valuación del vehículo del día de la inspección o, si Conduce te la asignó después, del día en que te la asignó: el objeto Valuación completo, con sus comparables. Viene incluida y no gasta cupo. null si no se pudo valuar.

Ver los 10 campos
idtexto

Identificador único. Empieza con val_.

objecttexto

Siempre valuation.

statustexto

complete: hay precio. insufficient_data: todavía no hay vehículos parecidos para dar un precio; esa consulta no gasta cupo.

vehicleobjeto

El vehículo valuado, con la marca como quedó en el catálogo.

priceobjeto o null

El precio de mercado en dólares, en enteros. null si status es insufficient_data.

confidenceobjeto

Qué tan sólido es el precio.

comparableslista

Cada vehículo que respalda el precio, hasta 100: primero los que entraron al cálculo, del más parecido a tu vehículo en año y kilometraje al menos parecido, y después los que quedaron fuera por salirse de lo normal.

messagetexto o null

Una nota sobre el precio cuando la hay, como «Estimación basada en 2 comparables. Tómala como referencia.». Si no, null.

referencetexto o null

Tu referencia, si la mandaste.

created_atfecha

Cuándo se calculó, en ISO 8601 y UTC.

report_urltexto o null

El informe en PDF con el certificado: ver Descargar el informe. null mientras el informe no ha llegado.

locationtexto o null

La ciudad donde se hizo. Por ahora siempre viene en null: el campo queda listo para cuando la tengamos.

inspected_atfecha

Cuándo terminó la inspección, en ISO 8601 y UTC.

El objeto Inspección
{
"id": "insp_4Rk9mT2xQ7vB3nHs",
"object": "inspection",
"status": "completed",
"reference": "yummer-48213",
"vehicle": {
"vin": "JTDBR32E000000000",
"year": 2020,
"brand": "Toyota",
"model": "Corolla",
"version": "SE",
"mileage_km": 85000
},
"score": {
"technical": 86,
"prequalification": 27,
"prequalified": true
},
"rating": "good_condition",
"items": [
{
"key": "first_owner",
"label": "¿Es el primer propietario? (N° de propietarios)",
"block": "prequalification",
"group": "documentos",
"result": "no",
"owners": 2,
"weight": 5,
"note": null
},
{
"key": "compresion_motor",
"label": "Condición general de la compresión del motor",
"block": "technical",
"group": "motor",
"result": "pass",
"weight": 6,
"note": null
},
{
"key": "tapiceria",
"label": "Tapicería interna (asientos, puertas y tableros)",
"block": "technical",
"group": "interior",
"result": "improve",
"weight": 1,
"note": "Desgaste en el asiento del conductor"
}
// … y los otros 65 puntos
],
"damages": [
{
"id": "dmg_1",
"view": "left",
"description": "Rayón de severidad leve: puerta trasera",
"photo_url": "https://conduceapp.com/uploads/verificacion-360/JTDBR32E000000000/v360_damage_3_20261027_141802_8d2e41c7.webp"
}
],
"obd2": {
"scanned_at": "2026-10-27T14:05:12Z",
"codes": []
},
"interview": {
"usage": "urban",
"collision": false,
"stolen_or_recovered": false,
"sale_reason": "Cambio de carro",
"owner_estimated_price": 25000
},
"test_drive": {
"acceleration": true,
"no_abnormal_noises": true,
"no_vibrations": true,
"abs_responds": true,
"braking": true,
"overall_feel": true
},
"observations": {
"relevant_info": "Mantenimientos al día en el concesionario.",
"technical": "Pastillas de freno delanteras a la mitad."
},
"photos": [
{
"kind": "section",
"section": "photo_vin",
"url": "https://conduceapp.com/uploads/verificacion-360/JTDBR32E000000000/v360_section_0_20261027_141130_5c1f09a2.webp"
},
{
"kind": "section",
"section": "photo_odometer",
"url": "https://conduceapp.com/uploads/verificacion-360/JTDBR32E000000000/v360_section_1_20261027_141131_e7b3d950.webp"
},
{
"kind": "damage",
"section": null,
"url": "https://conduceapp.com/uploads/verificacion-360/JTDBR32E000000000/v360_damage_3_20261027_141802_8d2e41c7.webp"
}
],
"valuation": {
"id": "val_9Tc4wE7yU2iO6pAz",
"object": "valuation",
"status": "complete",
// … el objeto Valuación completo
},
"report_url": "https://api.conduceapp.com/v1/inspections/insp_4Rk9mT2xQ7vB3nHs/report",
"location": null,
"inspected_at": "2026-10-27T14:20:03Z"
}

Listar inspecciones

GET/v1/inspections

Las inspecciones de tus vehículos, de la más nueva a la más vieja, por páginas. Filtra por la referencia del conductor, por el serial o desde una fecha. No gasta cupo.

Parámetros

referencetexto

Solo las inspecciones de ese conductor.

vintexto

Solo las de ese serial (VIN).

inspected_afterfecha

Solo las terminadas después de esa fecha, en ISO 8601.

limitentero

Cuántas por página, de 1 a 100. Si no lo mandas, 10.

starting_aftertexto

El id de la última que recibiste, para pedir la página siguiente.

Devuelve

Una lista de objetos Inspección.

GET/v1/inspections
curl "https://api.conduceapp.com/v1/inspections?reference=yummer-48213&limit=10" \
-H "Authorization: Bearer $CONDUCE_API_KEY"
Respuesta
{
"object": "list",
"data": [
{
"id": "insp_4Rk9mT2xQ7vB3nHs",
"object": "inspection",
"reference": "yummer-48213",
"rating": "good_condition",
"inspected_at": "2026-10-27T14:20:03Z",
// … el objeto Inspección completo
}
],
"has_more": false
}

Obtener una inspección

GET/v1/inspections/{id}

La inspección completa: los 68 puntos con su resultado, los daños con sus fotos, el OBD2 y la valuación de ese día. No gasta cupo.

Parámetros

idtextoobligatorio

El id de la inspección (insp_…), en la ruta.

Devuelve

El objeto Inspección.

GET/v1/inspections/{id}
curl "https://api.conduceapp.com/v1/inspections/insp_4Rk9mT2xQ7vB3nHs" \
-H "Authorization: Bearer $CONDUCE_API_KEY"
Respuesta
{
"id": "insp_4Rk9mT2xQ7vB3nHs",
"object": "inspection",
"status": "completed",
"score": {
"technical": 86,
"prequalification": 27,
"prequalified": true
},
"rating": "good_condition",
// … el objeto Inspección completo
}

Descargar el informe

GET/v1/inspections/{id}/report

El informe en PDF de la Inspección 360, con el certificado: el mismo que entrega Conduce. Responde application/pdf. Si el informe todavía no llegó, la respuesta es 404 report_not_ready. No gasta cupo.

Parámetros

idtextoobligatorio

El id de la inspección (insp_…), en la ruta.

Devuelve

El informe con el certificado.

GET/v1/inspections/{id}/report
curl https://api.conduceapp.com/v1/inspections/insp_4Rk9mT2xQ7vB3nHs/report \
-H "Authorization: Bearer $CONDUCE_API_KEY" \
--fail \
-o informe-360.pdf
Respuesta
200 OK · application/pdf
informe-360.pdf: el informe con el certificado
CATÁLOGO

Listar marcas

GET/v1/brands

Las marcas que la valuadora conoce, con el id que puedes mandar en brand. Cambian poco: guárdalas un día en tu sistema. No gasta cupo.

Parámetros

vehicle_typetexto

car o motorcycle. Si no lo mandas, car.

carCarromotorcycleMoto

Devuelve

Una lista de marcas.

GET/v1/brands
curl "https://api.conduceapp.com/v1/brands?vehicle_type=car" \
-H "Authorization: Bearer $CONDUCE_API_KEY"
Respuesta
{
"object": "list",
"data": [
{ "id": "chevrolet", "name": "Chevrolet" },
{ "id": "ford", "name": "Ford" },
{ "id": "toyota", "name": "Toyota" }
// …
],
"has_more": false
}

Listar modelos

GET/v1/models

Los modelos de una marca, del que más publicaciones tiene al que menos. Con year, solo los que tienen publicaciones de ese año, con un año de margen. No gasta cupo.

Parámetros

brandtextoobligatorio

La marca: su id o su nombre.

yearentero

Solo los modelos con publicaciones de ese año, con un año de margen: con 2020, de 2019 a 2021.

vehicle_typetexto

car o motorcycle. Si no lo mandas, car.

carCarromotorcycleMoto

Devuelve

Una lista de modelos.

GET/v1/models
curl "https://api.conduceapp.com/v1/models?brand=toyota&year=2020" \
-H "Authorization: Bearer $CONDUCE_API_KEY"
Respuesta
{
"object": "list",
"data": [
{ "name": "4Runner" },
{ "name": "Corolla" },
{ "name": "Fortuner" }
// …
],
"has_more": false
}
EVENTOS

Webhooks

Cuando pasa algo con una inspección de tus vehículos, te avisamos: mandamos un POST con el evento a la URL de tu servidor. Así no tienes que preguntar a cada rato.

La URL y tu secreto de webhooks, que empieza con whsec_, los configuramos contigo al darte acceso. La URL tiene que ser https y de un servidor público.

Los eventos

EventoCuándo sale
inspection.completedLa inspección quedó lista. Sale cuando llega su informe en PDF o, si el informe tarda, unos minutos después de terminada, con report_url en null. También sale cuando Conduce te asigna una inspección que ya existía.
inspection.report_readyLlegó el informe en PDF después de inspection.completed, o se reemplazó.
inspection.updatedConduce corrigió la referencia de la inspección; la de su valuación cambia con ella.
inspection.removedLa inspección ya no es tuya: desde ese momento la API responde 404. Su data trae solo id, object y reference.

Cómo verificar la firma

Cada aviso va firmado en el encabezado Conduce-Signature: t es la hora del envío y v1, la firma HMAC-SHA256 de t, un punto y el cuerpo, hecha con tu secreto. Calcúlala con el cuerpo tal como llegó, antes de convertirlo a JSON, y compárala antes de confiar en el aviso. Rechaza también un aviso cuyo t difiera más de 5 minutos de tu reloj: cada reintento sale con su t nuevo.

Para probar tu código: con el secreto whsec_prueba, t igual a 1793110805 y el cuerpo {"id":"evt_8Hn3pW5rK2qT"}, la firma tiene que dar 4bd17dfea4f9b7c1e34d78b32d378a345baca18b6e1eafa9790988a30ae7efee. El aviso de ejemplo de esta sección también va firmado con whsec_prueba, sobre el cuerpo tal como se ve.

Cómo responder

Responde con un 2xx en menos de 10 segundos. Si tu servidor no responde o da un error, reintentamos varias veces, cada vez esperando más. No seguimos redirecciones: un 301 o 302 cuenta como falla. Usa el id del evento para no procesar dos veces el mismo aviso. Si tu servidor estuvo caído, ponte al día con GET /v1/inspections?inspected_after=….

El objeto evento

idtexto

Identificador del aviso. Empieza con evt_: úsalo para no procesar dos veces el mismo.

objecttexto

Siempre event.

typetexto

Qué pasó: inspection.completed, inspection.report_ready, inspection.updated o inspection.removed.

created_atfecha

Cuándo pasó, en ISO 8601 y UTC.

dataobjeto

Un resumen de la inspección: pide el objeto completo con su id. En inspection.removed trae solo id, object y reference.

Ver los 6 campos
idtexto

El id de la inspección.

objecttexto

Siempre inspection.

referencetexto o null

La referencia de tu conductor.

ratingtexto o null

La calificación: la misma de rating en el objeto Inspección, que puede venir en null.

inspected_atfecha

Cuándo terminó la inspección.

report_urltexto o null

El informe en PDF, o null si todavía no llegó.

Aviso de ejemplo: inspection.completed
POST /webhooks/conduce HTTP/1.1
Host: tu-servidor.com
Content-Type: application/json
User-Agent: Conduce-Webhooks/1
Conduce-Event-Id: evt_8Hn3pW5rK2qT6mXa
Conduce-Signature: t=1793110805,v1=5ffe9a04f59022236cf083c595b2b76ce9de504768e5ad324ed4ed8d0f42b7c6
{
"id": "evt_8Hn3pW5rK2qT6mXa",
"object": "event",
"type": "inspection.completed",
"created_at": "2026-10-27T14:20:05Z",
"data": {
"id": "insp_4Rk9mT2xQ7vB3nHs",
"object": "inspection",
"reference": "yummer-48213",
"rating": "good_condition",
"inspected_at": "2026-10-27T14:20:03Z",
"report_url": "https://api.conduceapp.com/v1/inspections/insp_4Rk9mT2xQ7vB3nHs/report"
}
}
Verifica la firma
t=1793110805 # el t de Conduce-Signature
# La firma: t, un punto y el cuerpo crudo, con tu secreto
printf '%s.%s' "$t" '{"id":"evt_8Hn3pW5rK2qT"}' \
| openssl dgst -sha256 -hmac whsec_prueba
# Con el ejemplo de prueba tiene que dar 4bd17dfea4f9b7c1e34d78b32d378a345baca18b6e1eafa9790988a30ae7efee
# Y que t no difiera más de 5 minutos (300 s) de tu reloj: con el t del ejemplo, no pasa
d=$(( $(date +%s) - t )); [ "${d#-}" -le 300 ] || echo "t vencido: rechaza el aviso"
TU CUENTA

Consultar tu uso

GET/v1/usage

Cuántas valuaciones llevas este mes, cuántas te quedan si tu plan tiene tope y tu límite por minuto. No lleva parámetros y no gasta cupo.

Devuelve

Tu uso del mes.

GET/v1/usage
curl "https://api.conduceapp.com/v1/usage" \
-H "Authorization: Bearer $CONDUCE_API_KEY"
Respuesta
{
"period": {
"start": "2026-10-01T04:00:00Z",
"end": "2026-11-01T04:00:00Z"
},
"valuations": {
"used": 312,
"limit": null,
"remaining": null
},
"rate_limit": {
"per_minute": 60
}
}

Herramientas

Para integrar más rápido, con o sin un asistente de IA.

Copiar para LLM

cada página tiene su botón para copiarla en Markdown y pegarla en ChatGPT, Claude o el asistente de tu editor, o para abrirla directo en ellos.

llms.txt y llms-full.txt

el índice de toda la documentación para asistentes de IA, y todo el texto en un solo archivo.

Especificación OpenAPI

openapi.json describe cada endpoint, parámetro y respuesta. Con ella generas un cliente en tu lenguaje o tus propias pruebas.

Colección de Postman

impórtala en Postman o Insomnia, pon tu llave en la variable CONDUCE_API_KEY y prueba cada endpoint sin escribir código.

docs.conduceapp.com/llms.txt
# Conduce API
> Precio Real e Inspección 360: el valor de mercado de carros y motos en Venezuela, con cada comparable que lo respalda, y el resultado de las inspecciones de tus vehículos.
URL base: https://api.conduceapp.com/v1. Autenticación: `Authorization: Bearer cnd_live_…`. Para personas: https://docs.conduceapp.com
## Guía
- [Empieza aquí](https://docs.conduceapp.com/guia.md): de la llave a tu primera valuación, y tus Inspecciones 360.
## Empezar
- [Introducción](https://docs.conduceapp.com/api/introduccion.md)
- [Autenticación](https://docs.conduceapp.com/api/autenticacion.md)
- [Errores](https://docs.conduceapp.com/api/errores.md)
- [Límites de uso](https://docs.conduceapp.com/api/limites.md)
- [Versiones](https://docs.conduceapp.com/api/versiones.md)
## Valuaciones
- [El objeto Valuación](https://docs.conduceapp.com/api/objeto-valuacion.md)
- [Crear una valuación](https://docs.conduceapp.com/api/crear-valuacion.md)
- [Obtener una valuación](https://docs.conduceapp.com/api/obtener-valuacion.md)
- [Listar valuaciones](https://docs.conduceapp.com/api/listar-valuaciones.md)
## Inspecciones 360
- [El objeto Inspección](https://docs.conduceapp.com/api/objeto-inspeccion.md)
- [Listar inspecciones](https://docs.conduceapp.com/api/listar-inspecciones.md)
- [Obtener una inspección](https://docs.conduceapp.com/api/obtener-inspeccion.md)
- [Descargar el informe](https://docs.conduceapp.com/api/informe-inspeccion.md)
## Catálogo
- [Listar marcas](https://docs.conduceapp.com/api/marcas.md)
- [Listar modelos](https://docs.conduceapp.com/api/modelos.md)
- [Listar versiones](https://docs.conduceapp.com/api/versiones-catalogo.md)
## Eventos
- [Webhooks](https://docs.conduceapp.com/api/webhooks.md)
## Tu cuenta
- [Consultar tu uso](https://docs.conduceapp.com/api/uso.md)
## Más
- [Herramientas](https://docs.conduceapp.com/api/herramientas.md)
- [Cambios](https://docs.conduceapp.com/api/cambios.md)
## Opcional
- [Toda la referencia en un archivo](https://docs.conduceapp.com/api.md)
- [Todo en un archivo](https://docs.conduceapp.com/llms-full.txt)
- [Especificación OpenAPI](https://docs.conduceapp.com/openapi.json)
- [Colección de Postman](https://docs.conduceapp.com/conduce-api.postman_collection.json)

Cambios

v1
Primera versión

Valuaciones con sus comparables, Inspecciones 360 con su informe, catálogo de marcas, modelos y versiones, avisos por webhook y consulta de uso.

Solicitar acceso

Déjanos tus datos y para qué quieres la API. Las llaves las entrega Conduce: te contactamos para darte la tuya.