Skip to main content

Consultar la info de un conductor

[ GET ]

Consulta la información de un conductor sin alterar los valores del mismo.

https://sync.airbagtech.io/driver/{{DRIVER_ID}}

Campos

NombreTipoRequeridoDescripción
DRIVER_IDStringSiID del conductor al que se le va a cambiar el estado.

Headers

Content-TypeAutorization
application/jsonapikey {{API_KEY}}

Ejemplo

curl --location -g 'https://sync.airbagtech.io/driver/{{DRIVER_ID}}' \
--header 'Authorization: apikey {{API_KEY}}'

Respuestas

✅ Respuesta exitosa (200 OK)

Devuelve la ficha completa del conductor junto con su progreso de gamificación (nivel, racha), los indicadores de su primer acceso a la app móvil y los metadatos de la cuenta.

{
"status": true,
"driver": {
"appStatus": "Activo",
"birthdate": "1992-08-14T06:00:00.000Z",
"civilStatus": "single",
"coins": 312,
"company": "Transportes Ejemplo",
"created": "2022-05-18T15:42:00.000Z",
"currentLevel": {
"currentDistance": 1823.4512038172645,
"remainingDistance": 3176.5487961827355,
"to": 10000,
"levelId": "a1B2c3D4e5F6g7H8i9J0",
"maxLevel": 7,
"name": "Nivel 4",
"from": 5001,
"percentageCompleted": 36,
"totalDistanceTravelled": 6823.451203817265,
"targetDistance": 5000
},
"currentStreak": {
"isInStreak": true,
"lastDayWithTrips": "2025-03-10T00:00:00.000Z",
"maxHistoricalStreak": 9,
"totalDaysOfStreak": 3,
"lastWeekDaysStreak": [
{
"date": "2025-03-10T00:00:00.000Z",
"dayCharacter": "L",
"dayOfWeek": "monday",
"streak": "IN_STREAK_ACTIVE"
},
{
"date": "2025-03-09T00:00:00.000Z",
"dayCharacter": "D",
"dayOfWeek": "sunday",
"streak": "IN_STREAK_ACTIVE"
},
{
"date": "2025-03-08T00:00:00.000Z",
"dayCharacter": "S",
"dayOfWeek": "saturday",
"streak": "IN_STREAK_INACTIVE"
},
{
"date": "2025-03-02T00:00:00.000Z",
"dayCharacter": "D",
"dayOfWeek": "sunday",
"streak": "OUT_OF_STREAK"
}
]
},
"email": "[email protected]",
"emailIsVerified": true,
"emailVerified": true,
"emergencyContact": {
"phone": "+525512345678",
"name": "Contacto Ejemplo",
"type": "cellphone"
},
"firstLogin": false,
"firstLoginDate": "2022-05-19T14:03:27.000Z",
"fullName": "Juan Pérez Ramírez",
"gender": "male",
"groups": ["grp_A1b2C3d4E5f6G7h8I9j0"],
"growthStatus": "ok",
"hasActiveSchedule": true,
"hasClaimedFirstTripBonus": true,
"hasClaimedWelcomeBonus": true,
"hasMadeFirstTrip": true,
"hasMarketingNotifications": false,
"hired": "2021-03-01T06:00:00.000Z",
"isDriving": false,
"isResting": false,
"lastName": "Pérez Ramírez",
"license": {
"number": "A1234567",
"type": "federal",
"expiration": "2027-11-30T00:00:00.000Z"
},
"mobileOs": "android",
"name": "Juan",
"nationalId": "PERJ920814HDFRMN03",
"nationality": "mex",
"phone": "+525598765432",
"startStage": "0",
"status": "active",
"redeemCount": 2,
"airbagId": "ab12cd34ef56gh78ij90kl12mn34op56",
"id": "EMP-1042",
"useAirbagTelematics": true
}
}
ℹ️
Los campos sin valor se omiten, no llegan como null

La ficha se arma con los datos que el conductor tiene almacenados. Un campo que nunca fue informado no viaja en el JSON: la clave simplemente no aparece, en lugar de llegar como null o como cadena vacía. Comprueba que la clave exista antes de leerla y no asumas que todos los conductores traen el mismo conjunto de campos. La columna Presencia de las tablas siguientes indica cuáles puedes esperar siempre.

Descripción de campos de respuesta

CampoTipoDescripción
statusBooleanIndica si la operación fue exitosa.
driverObjectObjeto con los datos completos del conductor.

Campos dentro de driver

La ficha se agrupa en tres bloques para facilitar su lectura: identificación y datos personales, estado de la cuenta y de la app, y gamificación. Los tres pertenecen al mismo objeto driver, sin anidamiento adicional.

Identificación y datos personales

CampoTipoPresenciaDescripción
idStringCasi siempreIdentificador único del conductor proporcionado al crearlo. Es el ID que utilizas en tus sistemas y el que viaja en la ruta del resto de endpoints de conductores. Falta únicamente en registros heredados que nunca recibieron un identificador interno.
airbagIdStringSiempreIdentificador interno único en la plataforma Airbag. Útil para referencias cruzadas.
companyStringSiempreNombre de la organización a la que pertenece el conductor.
nameStringSiempreNombre de pila del conductor, normalizado a mayúsculas y sin acentos.
lastNameStringSiempreApellido del conductor, normalizado a mayúsculas y sin acentos.
fullNameStringSiempreNombre completo (name + lastName).
emailStringOpcionalCorreo electrónico del conductor.
emailVerifiedBooleanSiempreIndica si el correo ha sido verificado. Es el campo canónico.
emailIsVerifiedBooleanOpcionalAlias legado de emailVerified. Se mantiene por compatibilidad; usa emailVerified en integraciones nuevas.
phoneStringOpcionalTeléfono con código de país (formato +525555555555).
genderStringOpcionalGénero del conductor. Valores: male, female, other.
birthdateStringOpcionalFecha de nacimiento en formato ISO 8601. Al crear o editar se informa como birthDate.
civilStatusStringOpcionalEstado civil. Valores: single, consensual-union, married, divorced, widowed.
nationalIdStringOpcionalIdentificación nacional (CURP, DNI, etc.). Es de sólo lectura: no puede establecerse desde los endpoints de crear o editar conductor.
nationalityStringOpcionalCódigo ISO 3166-1 de tres letras (por ejemplo mex). Es la nacionalidad de la persona, no el país donde opera: para eso está country.
countryStringOpcionalPaís de operación del conductor. Determina cómo la plataforma normaliza los teléfonos: mex, col y per tienen tratamiento específico de prefijo y longitud. Úsalo, y no nationality, si necesitas validar o formatear phone y emergencyContact.phone en flotas multipaís.
hiredStringOpcionalFecha de contratación en formato ISO 8601. Al crear o editar se informa como companyStartDate.
groupsArray<String>OpcionalIDs de los grupos a los que pertenece el conductor. Ausente cuando no tiene grupo asignado.
licenseObjectOpcionalLicencia de conducir registrada por el conductor desde la app móvil. Ver Campos dentro de license. Es de sólo lectura: no puede establecerse ni modificarse desde esta API.

Estado de la cuenta y de la app

CampoTipoPresenciaDescripción
createdStringSiempreFecha de alta en la plataforma, en formato ISO 8601.
statusStringSiempreEstado de la cuenta. Valores: active o inactive.
appStatusStringSiempreEstado de la aplicación móvil del conductor. Valores: Activo, Pendiente, Inactivo. Se calcula al momento de la consulta, por lo que no puede usarse para ordenar el listado.
growthStatusStringOpcionalClasificación del desempeño y la actividad del conductor. Valores: new, star, meteor, ok, attention, risk, reactivable, reactivated, hbRecoverable, hbPotential, hbInactive, lost1, lost2, inactive, rest, unknown.
startStageStringSiempreEtapa del flujo de onboarding en la que se encuentra el conductor.
firstLoginBooleanSiempretrue si el conductor aún no ha iniciado sesión por primera vez en la app móvil.
firstLoginDateStringOpcionalFecha y hora del primer inicio de sesión en la app móvil, en formato ISO 8601 (UTC). Está ausente mientras el conductor no haya iniciado sesión, y también en registros heredados que ya lo habían hecho antes de que este campo existiera. Para saber si un conductor llegó a usar la app, evalúa firstLogin === false en lugar de la presencia de esta fecha.

Ejemplo: 2022-05-19T14:03:27.000Z
mobileOsStringOpcionalSistema operativo del dispositivo desde el que el conductor usa la app móvil. Valores: android, apple. Se registra durante el inicio de sesión y se actualiza si el conductor cambia de dispositivo, por lo que está ausente mientras no haya iniciado sesión al menos una vez.
isDrivingBooleanSiempreIndica si el conductor está conduciendo en este momento.
isRestingBooleanSiempreIndica si el conductor se encuentra en periodo de descanso.
hasActiveScheduleBooleanSiempreIndica si tiene una jornada laboral activa configurada.
hasMarketingNotificationsBooleanOpcionalPreferencia de notificaciones de marketing.
useAirbagTelematicsBooleanSiempreIndica si la telemetría se captura con el sistema de Airbag. Es false cuando la empresa envía sus propios datos mediante los endpoints de Eventos.
providerStartDateStringOpcionalFecha, en formato ISO 8601, desde la que el conductor opera con un proveedor de telemetría externo. Guarda relación con useAirbagTelematics: false, pero los dos campos se resuelven por separado: no asumas que la presencia de uno determina el valor del otro.
emergencyContactObjectOpcionalContacto de emergencia del conductor. Ver Campos dentro de emergencyContact.
La configuración de la app móvil no forma parte de este contrato

Las preferencias que controlan qué muestra la aplicación del conductor se administran desde el panel de Airbag y no se publican en esta API. Si tu integración necesita consultarlas o modificarlas, escríbenos a soporte.

Gamificación

CampoTipoPresenciaDescripción
coinsNumberSiempreMonedas acumuladas por el conductor en el sistema de gamificación.
redeemCountNumberOpcionalNúmero de canjes realizados por el conductor.
hasMadeFirstTripBooleanOpcionaltrue cuando el conductor ya completó su primer viaje. Se inicializa en false al crear el conductor, por lo que está ausente sólo en registros heredados anteriores al programa de bonos.
hasClaimedWelcomeBonusBooleanOpcionaltrue cuando el conductor ya reclamó el bono de bienvenida, las monedas que otorga el primer inicio de sesión. Se inicializa en false al crear el conductor. Ausente en registros heredados, donde la plataforma lo interpreta como bono ya reclamado.
hasClaimedFirstTripBonusBooleanOpcionaltrue cuando el conductor ya reclamó el bono por su primer viaje. Sólo puede reclamarse si hasMadeFirstTrip es true. Se inicializa en false al crear el conductor. Ausente en registros heredados, donde la plataforma lo interpreta como bono ya reclamado.
currentLevelObjectOpcionalNivel actual del conductor en el sistema de gamificación. Ver Campos dentro de currentLevel. Ausente mientras no tenga distancia acumulada.
currentStreakObjectOpcionalRacha de días activos del conductor. Ver Campos dentro de currentStreak. Ausente mientras no tenga actividad registrada.
⚠️
Los indicadores de bono describen progreso, no saldo

hasMadeFirstTrip, hasClaimedWelcomeBonus y hasClaimedFirstTripBonus sólo indican si el conductor alcanzó el hito y si reclamó las monedas correspondientes. El monto de cada bono lo define la empresa y no viaja en esta respuesta; el saldo vigente está en coins. Los reclamos se realizan desde la app móvil, así que los tres campos son de sólo lectura y no pueden modificarse desde esta API.

Campos dentro de license

Presente sólo cuando el conductor registró su licencia desde la app móvil. Los tres subcampos viajan juntos.

CampoTipoDescripción
numberStringNúmero o folio impreso en la licencia de conducir.

Ejemplo: A1234567
typeStringTipo o categoría de la licencia, tal como la capturó el conductor. Es texto libre y su valor depende de la nomenclatura del país que la emite (por ejemplo federal, A, B).
expirationStringFecha de vencimiento de la licencia en formato ISO 8601.

Ejemplo: 2027-11-30T00:00:00.000Z

Campos dentro de emergencyContact

CampoTipoDescripción
nameStringNombre de la persona de contacto.
phoneStringTeléfono del contacto con código de país.
typeStringTipo de teléfono. Valores: cellphone o landphone.

Campos dentro de currentLevel

CampoTipoDescripción
levelIdStringIdentificador único del nivel actual.
nameStringNombre legible del nivel (por ejemplo Nivel 3).
maxLevelNumberNúmero total de niveles disponibles en el programa.
fromNumberDistancia (en km) que marca el inicio del nivel.
toNumberDistancia (en km) que marca el final del nivel.
targetDistanceNumberDistancia objetivo a recorrer dentro del nivel actual.
currentDistanceNumberDistancia recorrida dentro del nivel actual.
remainingDistanceNumberDistancia restante para completar el nivel.
totalDistanceTravelledNumberDistancia total acumulada por el conductor desde el inicio del programa.
percentageCompletedNumberPorcentaje de avance del nivel actual (0–100).

Campos dentro de currentStreak

CampoTipoDescripción
isInStreakBooleantrue si el conductor mantiene una racha activa.
totalDaysOfStreakNumberDías consecutivos que conforman la racha actual.
maxHistoricalStreakNumberRacha más larga alcanzada históricamente.
lastDayWithTripsStringÚltimo día con viajes registrados (ISO 8601).
lastWeekDaysStreakArray<Object>Detalle día a día de la actividad reciente. Ver tabla abajo.

Campos dentro de cada elemento de lastWeekDaysStreak

CampoTipoDescripción
dateStringFecha del día en formato ISO 8601.
dayCharacterStringInicial del día en español (L, M, X, J, V, S, D).
dayOfWeekStringDía de la semana en inglés y minúsculas (monday, tuesday, …).
streakStringEstado de la racha para ese día. Valores: IN_STREAK_ACTIVE (día dentro de la racha, con viajes), IN_STREAK_INACTIVE (día dentro de la racha, sin viajes, tolerado por el programa) y OUT_OF_STREAK (día fuera de la racha).
note

Los registros anteriores a la normalización de este bloque pueden traer una clave adicional, completeDescriptionDay, remanente de un formato previo en el que dayOfWeek guardaba sólo la inicial del día. El sistema la elimina al recalcular la racha del conductor. No forma parte del contrato: ignórala.

⚠️
Ignora las claves que no aparezcan en estas tablas

El contrato público de este endpoint es el conjunto de campos documentado arriba. La respuesta puede incluir además claves de uso interno de la plataforma, como identificadores de integraciones con terceros o marcas de procesos de migración, que no forman parte del contrato: pueden cambiar de forma, renombrarse o desaparecer sin aviso previo. Descártalas y no construyas lógica sobre ellas.

❌ Respuesta con error (400 Bad Request)

Se devuelve cuando el DRIVER_ID no corresponde a ningún conductor de tu empresa.

{
"status": false,
"message": "Error: Driver ID was not found",
"errorId": "sentry_error_id_123"
}