Aquí encuentras toda la información relevante de como conectarte a nuestras tecnologías:
Biblioteca de Webservices
Manual técnico para la correcta implementación y consumo de la API de TM Land y los Webservices de TM Solutions. Incluye autenticación, estructura de solicitudes, respuestas y ejemplos prácticos para facilitar la integración en los sistemas del cliente.
API TM Land — Introducción
El propósito de este manual es guiar al usuario en la correcta implementación y uso de la API, proporcionando detalles sobre su configuración, autenticación, estructura de las solicitudes y respuestas, así como ejemplos prácticos para facilitar su integración en los sistemas del cliente.
A lo largo de este documento se hará referencia a la variable URL_BASE, la cual corresponde al siguiente endpoint base de producción:
Verbos HTTP soportados
La API soporta los siguientes verbos, de acuerdo a lo que requiera hacer:
| Verbo | Descripción |
|---|---|
| GET | Obtener la información de un recurso |
| POST | Crear un nuevo recurso en el sistema |
| PUT | Modifica completamente un recurso |
| DELETE | Elimina completamente un recurso del sistema |
Autenticación
Todo endpoint de la API requiere el header Authorization en el estándar Bearer. Para obtenerlo deberá consumir nuestro servicio de autenticación.
Método para autenticación (Login)
Headers
| Parámetro | Obligatorio | Descripción |
|---|---|---|
X-Tenant-Id | ✔ | Nombre de la empresa. Ejemplo: tmsolutions |
Accept-Language | opcional | Valores permitidos: en o es |
Body (form-data)
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
user | String | ✔ | Usuario. Ejemplo: prueba |
password | String | ✔ | Contraseña del usuario. Ejemplo: 1234* |
plain | Boolean | opcional | false si la contraseña se encuentra encriptada |
app | String | opcional | Identificador de la plataforma donde se hace login. Debe ser diferente a web |
sessionId | String | opcional | Identificador de la sesión del usuario. Ejemplo: userApp123 |
Respuesta
{
"code": 200,
"message": "Login Success",
"result": {
"refresh_token": "1234",
"token_empresa": "abcd",
"cedula": "us123",
"user": {
"activo": true,
"fechaAceptacion": "2018-12-09T22:22:19.802Z[UTC]",
"fecha_renovar_pass": "2025-10-13Z",
"id": "111US",
"object_User_Code": "tms-prueba",
"object_User_Email": "prueba@correo.com",
"object_user_Password": "123",
"persona": "111",
"puedefirmar": true,
"puedemodificarcontable": false,
"restringirvehiculos": false,
"selected": false,
"superUser": true,
"terminosCondiciones": true,
"usuario_ventas_web": false,
"usuariotracker": false
},
"token": "e5ACb2JYqcDnAQMU750miTB3Lopdb_tTBCw"
}
}
Códigos de respuesta
200 OK Login Success — cuando se genera correctamente.
401 Unauthorized Usuario No Existe / Contraseña Inválida — cuando el usuario o la contraseña son incorrectos.
El token tiene una duración de 60 minutos, por lo cual debe refrescarse con el método siguiente.
Método para refrescar el token
Este método recibe un refresh_token previamente generado en el método anterior.
Headers
| Parámetro | Obligatorio | Descripción |
|---|---|---|
X-Tenant-Id | ✔ | Nombre de la empresa. Ejemplo: tmsolutions |
Accept-Language | opcional | en o es |
Body (form-data)
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
refreshToken | String | ✔ | Token obtenido previamente. Ejemplo: prueba |
app | String | opcional | Identificador de la plataforma donde se hace login. Para la plataforma TM Land es web |
sessionId | String | opcional | Identificador del usuario. Ejemplo: user123 |
Respuesta
Tendrá una respuesta con la misma estructura del método de Login.
Métodos Genéricos CRUD
Generalidades
Los datos de tipo Date se enviarán en el siguiente formato: año-mes-día hora:minutos:segundos. Ejemplo: "2025-10-16 13:40:30".
Todos los métodos llevarán los siguientes headers:
| Header | Obligatorio | Descripción |
|---|---|---|
Content-Type | ✔ | application/json (requerido excepto en método GET) |
Authorization | ✔ | Bearer {token} |
X-Tenant-Id | ✔ | Nombre de la empresa. Ejemplo: tmsolutions |
Accept-Language | opcional | en o es |
X-Tenant-Sede | opcional | Id de la sede. Ejemplo: 1 |
En los endpoints siguientes, modelClass es el nombre del modelo de la clase que se desea guardar, actualizar, leer o eliminar.
Crear
Body (raw JSON)
Será un JSON con los parámetros requeridos según el modelo. Ejemplo:
{
"nombre": "prueba",
"telefono": "1234567",
"activo": true
}
Actualizar
Body (raw JSON)
Se requiere el identificador de la clase para actualizar.
{
"id": "123", // requerido — identificador de la clase
"nombre": "prueba",
"telefono": "9876541",
"activo": true
}
Leer
Body (raw JSON)
{
"first": 0, // requerido — index del primer item a traer
"size": 10, // requerido — número total de items a traer
"filteredBy": {
"apellido": "Lopez" // Parámetro:Valor para filtrar
},
"sortedBy": "apellido", // parámetro para ordenar
"isAscending": true // orden ascendente (true) o descendente (false)
}
Cuando el parámetro a filtrar es una relación con otra tabla, se coloca el nombre del parámetro seguido de un punto y el identificador de la clase (id, code, …). Ejemplo: filteredBy: { "vehiculo.id": 123 }
Eliminar
Body (raw JSON)
{
"id": "123" // requerido — identificador de la clase
}
Otros métodos
Get View / Function data
Body (raw JSON)
{
"first": 0,
"size": 10,
"filteredBy": {
"apellido": "Lopez",
"matchMode_apellido": "EXACT"
},
"sortedBy": "apellido",
"isAscending": true
}
El nombre del parámetro matchMode debe ser seguido del nombre del parámetro. Ejemplo: matchMode_nombre. Sus valores posibles son:
| matchMode | Tipo de dato | Descripción |
|---|---|---|
CONTAINS | String | Case-insensitive en strings |
EXACT | String / Number | Comparación exacta |
STARTS_WITH | String | Útil para prefijos |
ENDS_WITH | String | Útil para sufijos |
GREATER_THAN | Number | Comparación estricta |
LESS_THAN | Number | Comparación estricta |
IN | String / Number | Lista de valores |
NOTIN | String / Number | Lista excluida |
BETWEEN | Number | Rango de dos valores |
ISNULL | String / Number | Solo valores nulos |
NOTNULL | String / Number | No nulos |
NOTNULLSTRING | String | Solo para texto |
Get Enum data
Body (raw JSON)
{
"first": 0,
"size": 10,
"filteredBy": {
"apellido": "Lopez"
},
"sortedBy": "apellido",
"isAscending": true
}
GetHardware
Respuesta
[
{
"descripcion": "EQUIPO PORTATIL",
"firmware": "H02",
"id": "1458",
"nombre": "G200",
"parser": "H02",
"protocolo": "GPRS",
"puerto": 5013,
"sensor_bateria": false,
"sensor_combustible": false,
"sensor_ignicion": false,
"sensor_temperatura1": false,
"soporte_can": false,
"soporte_ping": false,
"soporte_pnd": false,
"soporte_video": false,
"umbral_de_ignicion": 0.00,
"usar_hora_motor_dispositivo": false,
"usar_odometro_dispositivo": false,
"uuid": "3c0ecee7-f10e-4aab-8aa9-ed67abc1234"
}
]
CalcularCapacidadDeCarga
Body
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
clasevehiculo | Integer | ✔ | Id de la clase vehículo |
configuracioncabezote | Integer | ✔ | Id de la configuración |
Respuesta
{
"data": {
"numeroejes": 2,
"code": 9,
"ejesremolque": 0,
"pesobruto": 1500.0,
"tiporemolque": "",
"nombre": "prueba"
}
}
GetKilometraje
Query Params
| Parámetro | Tipo | Descripción |
|---|---|---|
id_placa | String | Placa que desea consultar |
Respuesta
{
"odometro": 0.0,
"placa": "GTY086"
}
Vehículos — Métodos CRUD
Un vehículo se compone de múltiples entidades relacionadas que deben guardarse secuencialmente usando los métodos genéricos: Intervalo, Vehículo, Seguros (SOAT, todo riesgo, responsabilidad civil contractual y extracontractual, hidrocarburos), Tanques de combustible y Cámaras.
Crear Intervalo
Se guarda el intervalo con el método Crear y la clase:
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
kilometros | Double | — | |
horas | Double | — | |
registradora | Integer | — |
Crear Vehículo
Se guarda el vehículo con el método Crear y la clase:
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
tiempoInicial_dbid | Integer | — | Identificador (codeintervalo) obtenido del guardado de Obj_Intervalo |
reportar_ministerio | Boolean | — | |
placa | Integer | ✔ | |
clasevehiculo_dbid | Integer | ✔ | Identificador de Obj_ClaseVehiculo (codeclase) |
tipocarroceria_dbid | Integer | ✔ | Identificador de Obj_TipoCarroceria (tipocarroceriacode) |
numerochasis | String | ✔ | |
flypass | String | — | |
numeroInterno | String | — | |
licenciadetransito | String | ✔ | |
manifiestoaduana | String | — | |
numeromotor | String | ✔ | |
cilindraje | BigDecimal | — | |
marcamotor | String | — | |
modelomotor | String | — | |
linea_dbid | Integer | — | Identificador de Obj_Linea (code) |
niveldeservicio_dbid | Integer | — | Identificador de Obj_NivelDeServicio (id) |
liquidarespecial | Boolean | — | Default: false |
retener_producido_intermunicipal | Boolean | — | Default: false |
refrigerado | Boolean | — | Default: false |
modelo | Integer | ✔ | Default: 1999 |
modelo_reposicion | Integer | — | |
tipoEquipo_dbid | Integer | — | Identificador de Obj_TipoEquipo (codigo) |
tipo_vinculacion | String | ✔ | Item de Enum_Tipo_Vinculacion. Default: TERCEROS |
afiliadorPersona_dbid | String | — | Identificador de Obj_Persona (codigopersona) |
afiliador_dbid | Integer | — | Identificador de Obj_Organization (code) |
financiacion | String | — | Item de Enum_Financiacion |
color_dbid | Integer | ✔ | Identificador de Obj_Color (code) |
tipoCombustible | Integer | ✔ | 1=DIESEL-ACPM, 2=Gasolina, 3=GAS, 4=Gas/Gasolina, 5=Eléctrico, 6=GASOELEC |
tipo_servicio | String | ✔ | Item de Enum_tipo_Servicio. Default: particular |
reg_nal_carga | String | — | |
pesovacio | Double | — | Default: 0.0 |
capacidadpasajeros | Integer | — | Default: 0 |
catInvias_dbid | Integer | — | Identificador de Obj_CategoriaAP (codecategoriaap) |
catInco_dbid | Integer | — | Identificador de Obj_CategoriaAP (codecategoriaap) |
capacidad_carga | Double | — | Default: 0.0 |
unidadcapacidad | String | — | Default: "1" |
propietario_dbid | String | — | Identificador de Obj_Persona (codigopersona) |
propietarioorg_dbid | Integer | — | Identificador de Obj_Organization (code) |
tenedor_dbid | String | — | Identificador de Obj_Persona (codigopersona) |
tenedororg_dbid | Integer | — | Identificador de Obj_Organization (code) |
conductores_dbmap | Array<Object> | — | Array con {id} donde id es Obj_Persona (codigopersona). Ej: [{"id":"123"},{"id":"456"}] |
conductores_auxiliares_dbmap | Array<Object> | — | Igual que conductores_dbmap |
rutasUrbanas_dbmap | Array<Object> | — | Array con {id} de Obj_RutaUrbana (codigo, Long). Ej: [{"id":12455},{"id":58552}] |
numerocda | String | — | Número CDA de revisión tecnicomecánica |
fechaexpiracda | Date | — | Vencimiento CDA. Formato: 2025-10-16 13:40:30 |
fecha_expedicion_cda | Date | — | Expedición CDA. Formato: 2025-10-16 13:40:30 |
configuracionesadicionales | JSON | — | Objeto clave:valor. Claves admitidas: cat_vehiculo, kilometraje_maximo_permitido_por_dia_alistamiento_vehiculo, convenio, opcion_desvinculacion, id_gestor_logistico, activo_en_operacion, tarjeta_es, refpersonalaccidente, telreferenciaper, empresacda (id), costo_kilometro |
numerotarjetaoperacion | String | — | |
fechaexpiratarjetaoperacion | Date | — | Formato: 2025-10-16 13:40:30 |
fecha_expedicion_tarjetaoperacion | Date | — | Formato: 2025-10-16 13:40:30 |
numero_tarjeta_propiedad | String | — | |
rodamiento | Date | — | Formato: 2025-10-16 13:40:30 |
controlarmantenimiento | Boolean | — | Default: false |
protecavantel | Boolean | — | Default: false |
protecradio | Boolean | — | Default: false |
protecotro | Boolean | — | Default: false |
proctgps | Boolean | — | Default: false |
camara | Boolean | — | Default: false |
numero_celular_avantel | String | — | |
proveedorgps_dbid | Integer | — | Identificador de Obj_Organization (code) |
usuariogps | String | — | |
contrasenagps | String | — | |
paginawebgps | String | — | |
imeitracker | String | — | |
serie_osp | String | — | |
tipo_satelital | String | — | Valores: osp, smartone_c, no_instalado |
numero_telefono | String | — | |
hardware | String | — | Id de la opción obtenida con GetHardware |
nombre_hardware | String | — | Nombre de la opción obtenida con GetHardware |
grupotracker_dbid | String | — | Identificador de Obj_GrupoTracker (id) |
conductor_tracker_dbid | String | — | Identificador de Obj_Persona (codigopersona) |
contador_pasajeros | Boolean | — | Default: false |
fechaingreso | Date | — | Default: fecha actual |
fechamatricula | Date | — | Formato: 2025-10-16 13:40:30 |
fecha_importacion | Date | — | Formato: 2025-10-16 13:40:30 |
declaracion_importacion | String | — | |
organismodetransito | String | — | |
fechacompra | Date | — | Formato: 2025-10-16 13:40:30 |
canonarrendamiento | BigDecimal | — | Default: 0 |
negociacion_predeterminada_dbid | String | — | Identificador de Obj_NegociacionVehiculo (id) |
origenkm | String | ✔ | Item de Enum_Origen_Kilometraje. Default: INGRESO_COMBUSTIBLE |
kmcompra | Double | — | |
baseoperaciones_dbid | Integer | — | Identificador de Obj_City (object_City_Code) |
sedebaseoperaciones_dbid | Integer | — | Identificador de Obj_Sede (id) |
observaciones | String | — | |
configuracion_dbid | Integer | ✔ | Si no es remolque: code obtenido de CalcularCapacidadDeCarga |
configuracioncabezote_dbid | Integer | ✔ | Id del item seleccionado de la vista tmland_configuracioncabezote_view |
configuracion_semiremolque_dbid | Integer | ✔ | Si es remolque: id del item de la vista tmland_configuracioncabezote_view |
doccda | String | — | Link del archivo (pdf o imagen) |
doctarjetaoperacion | String | — | Link del archivo (pdf o imagen) |
doc_tarjeta_propiedad | String | — | Link del archivo (pdf o imagen) |
fotofrontal | String | — | Link del archivo (imagen) |
fototrasera | String | — | Link del archivo (imagen) |
fotoderecha | String | — | Link del archivo (imagen) |
fotoizquierda | String | — | Link del archivo (imagen) |
Crear Seguros
Los seguros se guardan con el método Crear y la clase:
Body para guardar SOAT
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
SOAT | Boolean | ✔ | Valor true |
seguronumber | String | — | |
codigo_tarifa | Integer | — | |
valor | BigDecimal | — | |
aseguradora_dbid | Integer | — | Identificador de Obj_Organization (code) |
fechaexpira | Date | — | Formato: 2025-10-16 13:40:30 |
fecha_expedicion | Date | — | Formato: 2025-10-16 13:40:30 |
documento | String | — | Link del archivo (pdf o imagen) |
vehiculosoat1_dbid | Integer | ✔ | Identificador (id) obtenido al guardar Obj_Vehiculo1 |
Body para guardar Póliza todo riesgo
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
seguronumber | String | — | |
aseguradora_dbid | Integer | — | Identificador de Obj_Organization (code) |
fechaexpira | Date | — | Formato: 2025-10-16 13:40:30 |
fecha_expedicion | Date | — | Formato: 2025-10-16 13:40:30 |
documento | String | — | Link del archivo (pdf o imagen) |
vehiculotodoriesgo_dbid | Integer | ✔ | Identificador (id) obtenido al guardar Obj_Vehiculo1 |
Body para guardar Responsabilidad Civil Contractual
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
seguronumber | String | — | |
aseguradora_dbid | Integer | — | Identificador de Obj_Organization (code) |
intermediario_dbid | Integer | — | Identificador de Obj_Organization (code) |
fechaexpira | Date | — | Formato: 2025-10-16 13:40:30 |
fecha_expedicion | Date | — | Formato: 2025-10-16 13:40:30 |
documento | String | — | Link del archivo (pdf o imagen) |
vehiculorespcivil1_dbid | Integer | ✔ | Identificador (id) obtenido al guardar Obj_Vehiculo1 |
Body para guardar Responsabilidad Civil Extracontractual
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
seguronumber | String | — | |
aseguradora_dbid | Integer | — | Identificador de Obj_Organization (code) |
intermediario_dbid | Integer | — | Identificador de Obj_Organization (code) |
fechaexpira | Date | — | Formato: 2025-10-16 13:40:30 |
fecha_expedicion | Date | — | Formato: 2025-10-16 13:40:30 |
documento | String | — | Link del archivo (pdf o imagen) |
vehiculorespcivilextra1_dbid | Integer | ✔ | Identificador (id) obtenido al guardar Obj_Vehiculo1 |
Body para guardar Póliza de Hidrocarburos
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
seguronumber | String | — | |
aseguradora_dbid | Integer | — | Identificador de Obj_Organization (code) |
intermediario_dbid | Integer | — | Identificador de Obj_Organization (code) |
fechaexpira | Date | — | Formato: 2025-10-16 13:40:30 |
fecha_expedicion | Date | — | Formato: 2025-10-16 13:40:30 |
documento | String | — | Link del archivo (pdf o imagen) |
vehiculopolizahidrocarburos1_dbid | Integer | ✔ | Identificador (id) obtenido al guardar Obj_Vehiculo1 |
Crear Tanques de combustible
Se guardan los tanques con el método Crear y la clase:
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
variable | String | ✔ | Item de Enum_Variable_Adicional. Default: ANALOG_VOLTAGE1 |
voltaje_lleno | BigDecimal | — | Default: 0 |
voltaje_vacio | BigDecimal | — | Default: 0 |
capacidad | BigDecimal | — | Default: 0 |
vehiculo_dbid | Integer | ✔ | Identificador (id) obtenido al guardar Obj_Vehiculo1 |
Crear Cámaras
Se guardan las cámaras con el método Crear y la clase:
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
url | String | ✔ | |
vehiculo_dbid | Integer | ✔ | Identificador (id) obtenido al guardar Obj_Vehiculo1 |
Actualizar Vehículo
Para actualizar, se deben enviar los mismos objetos enviados al crear, más el identificador de cada clase. Ejemplo de identificadores por clase:
| Clase | Identificador | Tipo |
|---|---|---|
Obj_Intervalo | codeintervalo | Integer |
Obj_Vehiculo1 | id | Integer |
Obj_Seguro | codeseguro | Integer |
Obj_TanqueCombustible | id | String |
Obj_Camara_Vehiculo | id | String |
Documentos Vehículos — CRUD
Previamente se crean el vehículo y sus seguros con los genéricos (ver sección Vehículos). Posteriormente, otros documentos se crean con el método Crear y la clase:
Body — Crear documento controlado
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
vehiculo_dbid | Integer | ✔ | Identificador de la clase vehículo |
documento_dbid | String | ✔ | Id de item de la vista documentocontrolado_view, filtrando por: {"coalesce(codetipoactividad,-100)":[-1,-100],"matchMode_codetipoactividad":"in"} |
fechacumplimiento | Date | — | Formato: 2025-10-16 13:40:30 |
fechavencimiento | Date | — | Formato: 2025-10-16 13:40:30. El parámetro genericrecurrence del item de documentocontrolado_view indica la diferencia en meses entre fechacumplimiento y fechavencimiento |
pathdocumento | String | — | Link del archivo (pdf o imagen) |
observaciones | String | — | |
excluir | Boolean | — | |
estado | String | — |
Leer documentos de un vehículo
Se utiliza el método Get View con la vista:
{
"first": 0,
"size": 10,
"filteredBy": {
"vehiculo": 123
}
}
Actualizar documentos
Se envían los mismos objetos del crear + el identificador de la clase. El id se obtiene de la vista documentocontrolado_x_persona_vehiculo_view filtrando por el id del vehículo.
Organizaciones — Métodos CRUD
Para crear una organización se deben guardar secuencialmente varias entidades: condiciones de facturación, otra información comercial, la organización propiamente dicha, sus relaciones, sedes, plazos, documentos exigidos y anexos.
1. Condiciones de facturación
Clase: co.com.tmsolutions.tmland.contabilidad.model.Obj_CondicionesFacturacion
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
realizar_factura_automatica | Boolean | — | |
convertir_factura_automatica | Boolean | — | |
aplica_ultimo_dia_facturacion | Boolean | — | |
ultimo_dia_facturacion | Integer | — | Default: 25 |
frecuencia | String | — | Item de Enum_Frecuencia_Reporte. Default: DIARIO |
dias_dbmap | Array<String> | — | Items de Enum_Dia. Ej: ["LUNES","JUEVES"] |
aplica_ultimo_dia_habil | Boolean | — | |
agrupacion_origen | Boolean | — | |
agrupacion_destino | Boolean | — | |
agrupacion_doc_referencia | Boolean | — | |
agrupacion_fecha_impresion | Boolean | — | |
agrupacion_sede_cliente | Boolean | — | |
agrupacion_producto | Boolean | — | |
agrupacion_tipo_novedad | Boolean | — | |
agrupacion_tipo_contrato | Boolean | — | |
customvalues | JSON | — | Objeto clave:valor donde las claves son el id del item de la vista tipo_contrato_view |
2. Otra información comercial
Clase: co.com.tmsolutions.tmland.operaciones.carga.model.Obj_OtraInformacionComercial
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
centordecostos_dbid | Boolean | — | Obj_CentroDeCostos |
regimen_triburario | Boolean | — | Item de Enum_RegimenTributario. Default: NINGUNO |
autoretenedor | Boolean | — | Default: false |
obligado_facturar | Boolean | — | Default: true |
aplicar_retencion | Boolean | — | Default: false |
mostrarTotalesDespacho | Boolean | — | Default: false |
mostrarValorAsegurado | Boolean | — | Default: true |
ocultarTotalesAlDestinatario | Boolean | — | Default: false |
mostrarRemitenteGuiaTransporte | Boolean | — | Default: true |
plazo_cuenta_por_pagar | Integer | ✔ | Default: 30 |
plazo_anticipo | Integer | ✔ | Default: 30 |
forma_de_pago_dbid | String | — | Identificador de Obj_FormaDePago (id) |
actividadeconomica_dbid | Integer | — | Identificador de Obj_ActividadEconomica (id) |
asesor_comercial_dbid | String | — | Identificador de Obj_Persona (codigopersona) |
asesor_cuenta_dbid | String | — | Identificador de Obj_Persona (codigopersona) |
gestor_cartera_dbid | String | — | Identificador de Obj_Persona (codigopersona) |
endoso_dbid | String | — | Identificador de Obj_DescipcionEndoso (id) |
potencial_facturacion | BigDecimal | — | Default: 0 |
calificacion | BigDecimal | — | Default: 0 |
monto_autorizado | BigDecimal | — | Default: 0 |
como_recibir_informacion | String | — | Item de Enum_ComoRecibirInformacion. Default: CORREO_ELECTRONICO |
regimen_fiscal | String | — | Item de RegimenFiscal. Default: IMPUESTO_SOBRE_LAS_VENTAS_IVA |
enum_tributo_receptor_vendedor | String | — | Item de Enum_Tributo_Receptor_Vendedor. Default: IVA |
3. Guardar relaciones de información comercial
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
id | String | ✔ | Id de Obj_OtraInformacionComercial obtenido en el paso 2 |
responsabilidades_fiscales | JSON | ✔ | Objeto: { data: { id: String, nombre: String }} de la clase Obj_ResponsabilidadFiscal |
4. Guardar la organización
Clase: co.com.tmsolutions.tmland.maestros.model.Obj_Organization
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
condiciones_facturacion_dbid | String | ✔ | Id de Obj_CondicionesFacturacion (paso 1) |
otrainformacion_comercial_dbid | String | ✔ | Id de Obj_OtraInformacionComercial (paso 2) |
reportar_ministerio | Boolean | — | |
name | String | ✔ | |
typeID | String | ✔ | Item de Enum_TipoId. Default: N |
nit | String | ✔ | |
digitoverificacion | String | — | |
numeroMinisterio | String | — | |
rut | String | — | |
mail | String | — | |
observaciones | String | — | |
informacionadicional | JSON | — | Claves admitidas: cuenta_banco, tipo_cuenta_banco, terceropersona, terceroorg, banco, marcar_pagar_al_ser_destinatario, restringir_productos |
5. Guardar relaciones de la organización
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
id | Integer | ✔ | Id de Obj_Organization (code) del paso 4 |
actividades | JSON | ✔ | Objeto: { data: { id: Integer }} de la vista tmland_tipoactividad_view |
6. Sedes
Clase: co.com.tmsolutions.tmland.maestros.model.Obj_Sede
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
organizacion_dbid | Integer | ✔ | Id de Obj_Organization (code) |
nombre | String | ✔ | |
sede_principal | Boolean | — | |
ciudad | Integer | ✔ | Id de Obj_City (object_City_Code) |
direccion | String | ✔ | |
zipcode | String | — | |
telefono | String | — | |
telefono2 | String | — | |
contacto | String | — | |
autorretenedorica | String | — | Item de Enum_AutoRetencionIca |
configuracion_tipo_asiento | JSON | — | Claves: email |
7. Plazos por tipo de contrato
Clase: co.com.tmsolutions.tmland.contabilidad.model.Obj_PlazoPorTipoDeContrato
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
organizacion_dbid | Integer | ✔ | Id de Obj_Organization (code) |
plazo | Integer | ✔ | |
tipocontrato | String | ✔ | Id de Obj_TipoContrato (id) |
8. Documentos exigidos
Clase: co.com.tmsolutions.tmland.operaciones.carga.model.Obj_DocumentoExigido
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
organizacion_dbid | Integer | ✔ | Id de Obj_Organization (code) |
tipo | String | — | Id de Obj_TipoDocumentoExigido (id) |
observaciones | String | — | |
seleccionado | Boolean | — |
9. Otros documentos (anexos)
Clase: co.com.tmsolutions.tmland.gestionhumana.model.Obj_Anexos
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
organizacion_dbid | Integer | ✔ | Id de Obj_Organization (code) |
tipo | String | — | Item de Enum_TipoAnexo. Default: FOTOGRAFIA |
observaciones | String | — | |
documento_pdf | String | — | Link del archivo (pdf) |
10. Productos por cliente
Clase: co.com.tmsolutions.tmland.operaciones.carga.model.Obj_ProductoPorCliente
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
cliente_dbid | Integer | ✔ | Id de Obj_Organization (code) |
producto_dbid | String | ✔ | Id del item de la vista tmland_producto_client_view |
Actualizar Organizaciones
Se envían los mismos objetos que al crear + el identificador de cada clase:
| Clase | Identificador | Tipo |
|---|---|---|
Obj_CondicionesFacturacion | id | String |
Obj_OtraInformacionComercial | id | String |
Obj_Organization | code | Integer |
Obj_Sede | id | Integer |
Obj_PlazoPorTipoDeContrato | id | String |
Obj_DocumentoExigido | id | String |
Obj_Anexos | id | String |
Obj_ProductoPorCliente | id | String |
Personas — Métodos CRUD
Una persona se compone de cuatro entidades que se guardan secuencialmente con los métodos genéricos: la persona propiamente dicha, sus referencias (laborales/familiares), verificaciones de antecedentes y anexos.
1. Persona
Clase: co.com.tmsolutions.tmland.maestros.model.Obj_Persona
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
reportar_ministerio | Boolean | — | |
tipo_id | String | ✔ | Item de Enum_TipoId |
cedula | String | ✔ | |
lugarexpedicion | String | — | |
nombre | String | ✔ | |
apellidos | String | ✔ | |
ciudadpersona_dbid | Integer | ✔ | Identificador de Obj_City (object_City_Code) |
rut | String | — | |
banco | String | — | Nombre obtenido de getDistinctOrganizationByActivityTypes('banco',true) |
cuentabancaria | String | — | |
tipo_cuenta | String | — | Item de Enum_TipoCuenta |
autoretenedor | Boolean | — | |
obligado_facturar | Boolean | — | |
centordecostos_dbid | Integer | — | Identificador de Obj_CentroDeCostos (codigo) |
regimen_triburario | String | — | Item de Enum_RegimenTributario |
observaciones | String | — | |
telefonocelular | String | — | |
direccion | String | ✔ | |
email | String | ✔ | |
zipcode | String | — | |
otros_telefonos | String | — | |
telefonofijo | String | — | |
tipospersona_dbmap | Integer | ✔ | Identificador de Obj_TipoActividad (codetipoactividad) |
atributos | JSON | — | Objeto clave:valor. Claves admitidas: terceropersona, terceroorg, personas_a_cargo, tenencia_vivienda (Enum_TipoVivienda), promedio_ingresos (Enum_PromedioIngresos), estrato_socio_economico (Enum_EstratoSocioEconomico), actividades_en_tiempo_libre (nombres separados por ;), medios_de_transporte (nombres separados por ;), enviar_novedades_por_correo, recibir_correos_novedades_masivos, Contacto_fel, sedes_contacto_adicional (contactos separados por -), contrato_laboral (Enum_Tipo_Contrato_Laboral), reingreso, fechaingresocargoactual, parentescoaccidente (Enum_Parentesco), plazo_cuenta_por_pagar |
sedes_persona_dbmap | Array<Object> | — | Array con {id} de Obj_Sede (Integer). Ej: [{"id":245},{"id":582}] |
talleres_persona_dbmap | Array<Object> | — | Array con {id} de Obj_Organization (code). Ej: [{"id":125},{"id":552}] |
sede_contacto_dbid | Integer | — | Identificador de Obj_Sede (id) |
sede_dbid | Integer | — | Identificador de Obj_Sede (id) |
mostrarTotalesDespacho | Boolean | — | Default: true |
mostrarValorAsegurado | Boolean | — | Default: true |
forma_de_pago_dbid | String | — | Identificador de Obj_FormaDePago (id) |
id_ibutton | String | — | |
fechaingreso | Date | — | Formato: 2025-10-16 13:40:30 |
fecharetiro | Date | — | Formato: 2025-10-16 13:40:30 |
codigoretiro | String | — | |
ultimasvacaciones | Date | — | Formato: 2025-10-16 13:40:30 |
nivel_estudio_dbid | String | — | Identificador de Obj_NivelEstudio (id) |
estado_civil | String | — | Item de Enum_EstadoCivil |
fechanacimiento | Date | — | Formato: 2025-10-16 13:40:30 |
genero | String | — | |
tiposangre | String | — | |
rhpersona | String | — | |
cargo | String | — | |
cargo_gestion_humana_dbid | String | — | Identificador de Obj_Cargo (id) |
porcentajeComision | Double | — | |
salario_depende_del_minimo | Boolean | — | |
multiplicador_salario_minimo | BigDecimal | — | Default: 1 |
salario | BigDecimal | — | Default: 0 |
grupo_nomina_dbid | String | — | Identificador de Obj_GrupoNomina (id) |
horariodiario | BigDecimal | — | Default: 8 |
horariosabados | BigDecimal | — | Default: 3 |
trabajadomingo | Boolean | — | Default: false |
padre_dbid | String | — | Identificador de Obj_Persona (codigopersona) |
conductorSupernumerario | Boolean | — | |
nrolicencia | String | — | |
vencelicencia | Date | — | Formato: 2025-10-16 13:40:30 |
categorialicencia | String | — | |
refpersonalaccidente | String | — | |
telreferenciaper | String | — | |
fechainicioexperiencia | Date | — | Formato: 2025-10-16 13:40:30 |
inscritoenelrunt | Boolean | — | |
eps | String | — | |
arp | String | — | |
fondopension | String | — | |
cajacompensacion | String | — | |
cesantias | String | — | |
fechavencimientoaportes | Date | — | Formato: 2025-10-16 13:40:30 |
autorretenedorica | String | — | Item de Enum_AutoRetencionIca |
foto | String | — | Link del archivo (imagen) |
firma | String | — | Link del archivo (imagen) |
doclicencia | String | — | Link del archivo (imagen) |
hoja_de_vida_pdf | String | — | Link del archivo (pdf) |
2. Referencias
Clase: co.com.tmsolutions.tmland.gestionhumana.model.Obj_ReferenciaPersona
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
persona_dbid | String | ✔ | Identificador de Obj_Persona (codigopersona), obtenido en el paso 1 |
tipo | String | ✔ | Item de Enum_tipo_referencia. Default: LABORAL |
parentesco | String | — | Solo si tipo="FAMILIAR". Item de Enum_Parentesco. Default: N_A |
persona_grupo_familiar_dbid | String | — | Solo si es grupo familiar. Identificador de Obj_Persona (codigopersona) |
identificacion | String | ✔ | |
nombre | String | ✔ | |
ciudad_dbid | Integer | ✔ | Identificador de Obj_City (object_City_Code) |
direccion | String | — | |
telefono | String | — | |
telefono2 | String | — | |
contacto | String | — | Solo si es grupo familiar |
observaciones | String | — |
3. Verificación de antecedentes
Clase: co.com.tmsolutions.tmland.maestros.model.Obj_VerificacionAntecedente
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
persona_dbid | String | ✔ | Identificador de Obj_Persona (codigopersona) |
documento_dbid | String | ✔ | Identificador de Obj_DocumentoAntecedente (id) |
documento_pdf | String | — | |
observaciones | String | — |
4. Otros documentos (anexos)
Clase: co.com.tmsolutions.tmland.gestionhumana.model.Obj_Anexos
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
persona_dbid | String | ✔ | Identificador de Obj_Persona (codigopersona) |
tipo | String | ✔ | Item de Enum_TipoAnexo. Default: FOTOGRAFIA |
documento_pdf | String | — | |
observaciones | String | — |
Actualizar Personas
Se envían los mismos objetos que al crear, más el identificador de cada clase:
| Clase | Identificador | Tipo |
|---|---|---|
Obj_Persona | codigopersona | String |
Obj_ReferenciaPersona | id | String |
Obj_VerificacionAntecedente | id | String |
Obj_Anexos | id | String |
Usuarios — Método CRUD
Previamente debe existir una persona (ver Personas). Luego se crea el usuario con el método Crear y la clase:
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
object_User_Code | Integer | ✔ | Parámetro cedula de la persona previamente creada u obtenida con getDistinctPeopleByActivityTypes('propietario,tenedor,conductor,empleado,contacto,proveedor', null, true, true, false, null, '${User_Code}'). Solo se pueden crear usuarios para registros de Personas con los tipos descritos en la función. User_Code es el object_User_Code del usuario logueado. |
user_per_dbid | String | ✔ | Parámetro id de la persona previamente creada u obtenida con la función anterior |
activo | Boolean | ✔ | |
superUser | Boolean | — | |
fecha_vencimiento | Date | — | Fecha de expiración del acceso. Formato: 2025-10-16 13:40:30 |
puedemodificarcontable | Boolean | — | |
restringirvehiculos | Boolean | — | |
puedefirmar | Boolean | — | |
usuario_ventas_web | Boolean | — |
Grupos de seguridad por usuario
Body raw (JSON):
{
"id": "<object_User_Code del usuario creado>",
"gruposdeseguridad": [
{ "data": { "id": 15 } },
{ "data": { "id": 25 } }
]
}
Actualizar usuario
Se envían los mismos objetos del crear + el identificador de la clase:
| Clase | Identificador | Tipo |
|---|---|---|
Obj_User | object_User_Code | String |
Planillas de viaje
Leer
Se consume el método genérico Get View/Function data con la siguiente función:
Parámetros de la función
| Parámetro | Tipo | Obl. | Descripción |
|---|---|---|---|
fecha_inicial | Date | ✔ | Formato: 2025-10-16 13:40:30 |
fecha_final | Date | ✔ | Formato: 2025-10-16 13:40:30 |
Body
JSON para filtrar por número de viaje:
{
"first": 0,
"size": 10,
"filteredBy": {
"viaje": 394,
"matchMode_viaje": "EXACT"
},
"sortedBy": null,
"isAscending": true
}
Respuesta
{
"data": {
"DATOS PROPIETARIO": "ALEJANDRO MORENO",
"codigo": "000066",
"CIUDAD ORIGEN": "MEDELLIN",
"CREADOR": "TM SOLUTIONS S.A.S",
"NOMBRE SEDE": "PRINCIPAL MEDELLIN",
"valor": 9540.00,
"PLACA": "GVV062",
"CANTIDAD TIQUETES": 6,
"NUMERO INTERNO": "MIMOTO",
"detalle": "DEDUCCION FONDO DE REPOSICION",
"fecha planilla": "2024-02-20T19:27:43.523Z[UTC]",
"fecha viaje": "2024-02-21T03:19:00Z[UTC]",
"viaje": 394,
"id": "77475eb3-896c-46d5-91f9-f5d3baa51f47",
"CIUDAD DESTINO": "CARTAGENA",
"DATOS CONDUCTOR": "ALEJANDRO MORENO"
}
}
Webservices
A lo largo de esta sección se hará referencia a la variable URL_BASE_WS, la cual corresponde al siguiente endpoint base de producción:
Donde {empresa} corresponde al nombre de la empresa cliente (ejemplo: tmsolutions).
Autenticación Webservices
Todo endpoint requiere el header Authorization en estándar Bearer. Para obtenerlo debe consumir el servicio de autenticación.
Método para autenticación
Query Params
| Parámetro | Tipo | Descripción |
|---|---|---|
token_empresa | String | Token de empresa proporcionado por el sistema |
user | String | Usuario asignado por el personal de la empresa |
password | String | Contraseña asignada por el personal de la empresa |
Respuesta
{
"id_persona": "3b67ede9-fb9 . . .",
"token_ms": "eyJraWQiOiJJRkx5Sk90d. . .",
"codeuser": "5219. . .",
"token": "eyJhbGciOiJIUzI1iOiJ0bXNvbHV0aW9. . .",
"username": "NOMBRE . . ."
}
Códigos de respuesta
| Código | Mensaje | Descripción |
|---|---|---|
| 200 | OK: Login Success | Cuando se genera correctamente |
| 401 | Unauthorized: Usuario No Existe / Contraseña Inválida | Cuando el usuario o la contraseña son incorrectos |
"token" con una vigencia de 1 hora. Este token debe enviarse en el header de todas las peticiones posteriores.
Método para refrescar el token
Query Params
| Parámetro | Tipo | Descripción |
|---|---|---|
token_empresa | String | Token de empresa proporcionado por el sistema |
token | String | Token obtenido en el método de autenticación anterior |
Respuesta
Tendrá la misma estructura del método de login:
{
"id_persona": "3b67ede9-fb9 . . .",
"token": "eyJhbGciOiJIUzI1iOiJ0bXNvbHV0aW9. . .",
"username": "NOMBRE . . ."
}
Venta de tiquetes web
La venta de tiquetes se compone de un flujo de métodos de consulta, gestión de sillas, gestión de pasajeros y generación final del tiquete. A continuación se describen todos los endpoints en el orden recomendado de consumo.
Obtener ciudades disponibles
Devuelve las ciudades disponibles para venta de tiquetes.
Headers
| Parámetro | Tipo | Descripción |
|---|---|---|
token | String | Token obtenido en la autenticación |
Respuesta 200 OK
[
{
"city": "BOBAL",
"department": "Antioquia",
"id": 3,
"state": "Antioquia"
},
{
"city": "SANTAFE DE ANTIOQUIA",
"department": "Antioquia",
"id": 5042000,
"state": "Antioquia"
}
]
Obtener rutas disponibles
Devuelve las rutas posibles para un viaje.
Headers
| Parámetro | Tipo | Descripción |
|---|---|---|
token | String | Token obtenido en la autenticación |
Respuesta 200 OK
[
{ "destination_id": 5042000, "origin_id": 5001000 },
{ "destination_id": 5656000, "origin_id": 5837000 },
{ "destination_id": 5042000, "origin_id": 5172000 }
]
Obtener viajes disponibles
Devuelve información del viaje.
Headers
| Parámetro | Tipo | Descripción |
|---|---|---|
token | String | Token obtenido en la autenticación |
Query Params
| Parámetro | Tipo | Descripción |
|---|---|---|
fecha | String | Fecha del viaje en formato yyyy-MM-dd HH:mm (UTC+5) |
origin_id | String | Identificador de la ciudad de origen. Se obtiene de getCiudades / getRutas |
destination_id | String | Identificador de la ciudad de destino. Se obtiene de getCiudades / getRutas |
Respuesta 200 OK
[
{
"arrival_date": "2025-03-21",
"arrival_time": "07:55",
"available_sits": 18,
"capacity_sits": 19,
"company_id": "1",
"company_name": "TM SOLUTIONS S.A.S",
"departire_time": "08:30",
"departure_date": "2025-03-20",
"numero_interno": "7854",
"placa": "WBF508",
"price": 160000.0,
"price_id": 9,
"service_type": 17794,
"travel_id": "1019-5001000-13001000"
}
]
Obtener tipos de servicio de bus
Trae información sobre el vehículo y sus características.
Headers
| Parámetro | Tipo | Descripción |
|---|---|---|
token | String | Token obtenido en la autenticación |
Respuesta 200 OK
[
{
"aireacondicionado": 1,
"bano": 1,
"comida": 0,
"dosconductores": 0,
"id": 156,
"nombre": "PRUEBA TMLAND 3",
"pantalla": 0,
"sillareclinable": 0,
"tomacorriente": 0,
"tvambiental": 0,
"wifi": 1
}
]
Obtener mapa del bus
Devuelve información detallada del viaje incluyendo las sillas disponibles para posteriormente reservar y comprar el tiquete.
Headers
| Parámetro | Tipo | Descripción |
|---|---|---|
token | String | Token obtenido en la autenticación |
Query Params
| Parámetro | Tipo | Descripción |
|---|---|---|
travel_id | String | Identificador del viaje. Se obtiene de getViajes (campo travel_id) |
id_sede | Integer | Identificador de la sede donde se realizará la venta. Asignado por personal de la empresa |
Respuesta 200 OK
[
{
"destination_id": 13001000,
"origin_id": 5001000,
"sectors": [
{
"category": "",
"category_name": "",
"cells": [
{
"category_id": "",
"column": 1,
"label": "2",
"orientation": "",
"price": 160000.0,
"row": 1,
"seat_id": "8caebb74-c793-4910…",
"state": "disponible",
"type": "asiento"
}
],
"columns": 4,
"floor": "1",
"id": "1019-1",
"name": "PISO1",
"rows": 5
}
],
"travel_id": "1019-5001000-13001000"
}
]
Bloquear silla / Desbloquear silla
Permite que, una vez seleccionada la silla, esta permanezca bloqueada durante el proceso (reserva y compra del tiquete) para evitar que paralelamente se realice el mismo proceso sobre la misma silla.
Headers
| Parámetro | Tipo | Descripción |
|---|---|---|
token | String | Token obtenido en la autenticación |
Query Params
| Parámetro | Tipo | Descripción |
|---|---|---|
id_sede | Integer | Identificador de la sede donde se bloqueará/desbloqueará la silla. Asignado por personal de la empresa |
Cuerpo JSON
Array de seat_id. Cada seat_id se obtiene de getMapaBusWS.
["3d261bf6-b3e5-4be6-96c2-b9963d260e1c", "8caebb74-c793-4910-…"]
Respuesta 200 OK
status: 1 (Éxito) / 0 (Fallido).
{ "status": 1 }
200 OK.
Consultar tercero
Consulta si el cliente cuenta con un registro previo en la aplicación TMLand. Si el usuario ya está en la base de datos, se retorna su información para posteriormente crear el usuario.
Headers
| Parámetro | Tipo | Descripción |
|---|---|---|
token | String | Token obtenido en la autenticación |
Cuerpo JSON
{
"isorganizacion": false,
"document": "7890"
}
| Parámetro | Tipo | Descripción |
|---|---|---|
isorganizacion | Boolean | Indica si la entidad es una organización (true) o una persona (false) |
document | String | Número de documento de la persona o NIT de la organización |
Respuesta 200 OK — Usuario encontrado
{
"address": "r8a",
"city": 5001000,
"document": "1234567890",
"document_type": "C",
"email": "",
"last_name": "Ochoa",
"name": "Juan Carlos",
"phone": ""
}
Respuesta 200 OK — Usuario no encontrado
{
"message": "ER1",
"status": 200,
"valores": {}
}
Crear tercero
Crea un cliente en la aplicación TMLand cuando no existe un registro previo.
Headers
| Parámetro | Tipo | Descripción |
|---|---|---|
token | String | Token obtenido en la autenticación |
Body
{
"isorganizacion": false,
"document_type": "C",
"document": "1234567890",
"name": "Juan",
"last_name": "Pérez",
"phone": "3001234567",
"email": "juan.perez@email.com",
"address": "Calle 123 #45-67",
"city": 5001000
}
| Parámetro | Tipo | Descripción |
|---|---|---|
isorganizacion | Boolean | Indica si la entidad es organización (true) o persona (false) |
document_type | String | Tipo de documento: C (Cédula de Ciudadanía), N (NIT), NN (NN), P (Pasaporte), E (Cédula de Extranjería), T (Tarjeta de Identidad), U (NUIP), D (Carnet Diplomático), PPT (Permiso de Protección Temporal), NIT_OP (NIT de otro país) |
document | String | Número de documento o NIT |
name | String | Nombre de la persona o entidad |
last_name | String | Apellido (solo si isorganizacion=false) |
phone | String | Número de teléfono de contacto |
email | String | Correo electrónico de contacto |
address | String | Dirección física |
city | Integer | Código de la ciudad. Se obtiene de getCiudades |
Respuesta 200 OK — Usuario creado
{ "status": 200, "message": "OK" }
Respuesta 200 OK — Usuario ya registrado
{ "status": 200, "message": "ER0" }
Obtener ciudades (maestro)
Obtiene el listado completo de todas las ciudades disponibles en el sistema. Se utiliza principalmente para la recopilación de información de terceros.
Headers
| Parámetro | Tipo | Descripción |
|---|---|---|
token | String | Token obtenido en la autenticación |
Respuesta 200 OK
[
{
"city": "BOBAL",
"codigomintransport": "",
"department": "Antioquia",
"id": 3,
"state": "Antioquia"
},
{
"city": "SANTAFE DE ANTIOQUIA",
"codigomintransport": "5042000",
"department": "Antioquia",
"id": 5042000,
"state": "Antioquia"
}
]
Reservar sillas
Permite reservar sillas para un pasajero en el sistema de tiquetes.
Headers
| Parámetro | Tipo | Descripción |
|---|---|---|
token | String | Token obtenido en la autenticación |
Cuerpo JSON
{
"seat": "12345",
"id_sede": 1,
"documento": "1001234567",
"id_transaccion": "TXN123456",
"facturar_persona": false,
"organizacion_facturacion": null,
"persona_facturacion": null,
"token_talentu": null
}
| Parámetro | Tipo | Descripción |
|---|---|---|
seat | String | ID de la silla en la base de datos |
id_sede | Integer | ID de la sede donde se realizará la venta |
documento | String | Documento del pasajero que hace la reserva |
id_transaccion | String | ID único de la transacción de la reserva |
facturar_persona | Boolean | Indica si la persona será facturada (true/false) |
organizacion_facturacion | String|null | NIT de la empresa a facturar (solo si facturar_persona=false) |
persona_facturacion | String|null | Cédula de la persona a facturar (solo si facturar_persona=false) |
token_talentu | String|null | Token de Talentu (opcional) |
Respuestas
| Código | Descripción | Ejemplo |
|---|---|---|
| 200 | Reserva exitosa | { "status": 1 } |
| 403 | No se encontró un pasajero con el documento proporcionado | { "message": "ER1", "status": 0, "valores": {} } |
| 400 | Se alcanzó el límite de intentos para reservar (viaje bloqueado) | { "message": "Viaje Bloqueado", "status": 0, "valores": {} } |
| 400 | No se envió el campo documento |
{ "message": "ER2", "status": 0, "valores": {} } |
Generar tiquete (generarTiqueteWS)
Headers
| Parámetro | Tipo | Descripción |
|---|---|---|
token | String | Token obtenido en la autenticación |
Query Params
| Parámetro | Tipo | Descripción |
|---|---|---|
id_sede | Integer | Identificador de la sede. Asignado por personal de la empresa |
empresa | String | Base de datos de la empresa (nombre de la empresa) |
id_us | String | Id del usuario (generalmente la cédula) con el que se realizará la operación |
Cuerpo JSON
{
"reference": "TXN123456",
"status": "APPROVED",
"payment_link_id": null,
"customer_email": "cliente@email.com"
}
| Parámetro | Tipo | Descripción |
|---|---|---|
reference | String | Identificador enviado en reservarSillasWS (id_transaccion) |
status | String | Si es APPROVED se genera el tiquete; de lo contrario no se ejecuta |
payment_link_id | String | Si está presente, reemplaza el valor de reference |
customer_email | String | Correo electrónico del cliente para el envío del tiquete |
Respuesta 200 OK — Tiquete generado correctamente
{
"data": [
{
"arrival_date": "2025-12-31",
"arrival_time": "09:25",
"departire_time": "10:00",
"departure_date": "2025-12-30",
"document": "14336...",
"number": "0000002840",
"price": 160000.0,
"seat": "69ba0628-447e-454f-bb7a-...",
"travel_id": "1038-...-13001000",
"url": ""
}
],
"dataImpresion": [
{
"cajero": "TM SOLUTIONS S.A.S",
"cedula": "1143363015",
"codigo_barras": "00000...02025",
"codigo_viaje": "1038",
"destino": "CARTAGENA (BOLIVAR)",
"empresa": "TM SOLUTIONS S.A.S",
"fecha_compra": "01/04/2025 02:16 PM",
"fecha_viaje": "30/12/2025 10:00 AM",
"id": 2840,
"nit": "9003124053",
"numero": "0000002840",
"observaciones": "https://tmsolutions.tmsolutions.com.co/tmland",
"origen": "MEDELLIN (Antioquia)",
"pasajero": "MARCELA TORRES",
"puesto": "1",
"punto_venta": "PRINCIPAL CARTAGENA(CARTAGENA CARTAGENA)",
"telefono": "",
"valor": "160,000",
"valorcontado": true
}
],
"errores": {}
}
Códigos de error
Cuando hay algún error, la respuesta sigue siendo 200 OK pero el objeto errores contiene alguna de las siguientes claves:
| Código | Descripción |
|---|---|
ER0 | STATUS DIFERENTE DE APPROVED |
ER1_1 | ID TRANSACCION NO ENCONTRADA (no se encontró una reserva con el reference) |
ER2_(intentos)_(numeroreservas) | FECHA INVALIDA (la fecha del viaje ya pasó) |
ER3_(intentos)_(numeroreservas) | SILLA NO SE PUEDE VENDER (la silla ya fue vendida) |
ER4_(intentos)_(numeroreservas) | Viaje Bloqueado (se alcanzó el límite de intentos para reservar) |
ER5_(intentos) | Error después de varios intentos: could not extract ResultSet |
ER6 | Error general procesando reserva: Error desconocido |
Generar tiquete (generarTiqueteWompi)
Procesa la respuesta de WOMPI. Solo es necesario para la integración con WOMPI y genera un tiquete si el pago fue aprobado.
Headers
| Parámetro | Tipo | Descripción |
|---|---|---|
token | String | Token obtenido en la autenticación |
Query Params
| Parámetro | Tipo | Descripción |
|---|---|---|
id_sede | Integer | Identificador de la sede. Asignado por personal de la empresa |
empresa | String | Base de datos de la empresa (nombre de la empresa) |
id_us | String | Id del usuario (generalmente la cédula) |
Cuerpo JSON enviado por Wompi
{
"event": "transaction.updated",
"data": {
"transaction": {
"id": "1119196-1731682339-79955",
"amount_in_cents": 160000,
"reference": "53661bc6b9256e824d5432f3793c…",
"customer_email": "customer@correo.com",
"currency": "COP",
"payment_method_type": "NEQUI",
"redirect_url": "https://mystore.com.co/payments/redirect",
"status": "APPROVED",
"shipping_address": null,
"payment_link_id": null,
"payment_source_id": null
}
},
"sent_at": "2025-01-08T16:45:05.000Z"
}
Respuesta 200 OK
{
"message": "Tiquete generado exitosamente.",
"status": 1,
"valores": {
"id_tiquete": "TIQ123456"
}
}
200 OK. En caso de error, la respuesta contiene el objeto errores con la misma notación de generarTiqueteWS.
Carga
Consultar guías por documento anexo
Retorna una lista de guías que coinciden con el documento anexo ingresado y la empresa a la que pertenece el usuario autenticado.
Headers
| Parámetro | Tipo | Descripción |
|---|---|---|
token | String | Token obtenido en la autenticación |
Query Params
| Parámetro | Tipo | Descripción |
|---|---|---|
documento_anexo | String | Documento anexo a consultar |
Retorno
Array de guías con los siguientes atributos:
| Atributo | Tipo |
|---|---|
ciudadOrigen | String |
ciudadDestino | String |
unidades | Integer |
pesoReal | Double |
valorDeclarado | BigDecimal |
nomRemitente | String |
dirRemitente | String |
telRemitente | String |
idRemitente | String |
nomDestinatario | String |
dirDestinatario | String |
telDestinatario | String |
idDestinatario | String |
documentoAnexo | String |
diceContener | String |
numeroGuia | String |
fecha | Date |
tipoIdRem | String |
tipoIdDest | String |
departamentoDestino | String |
departamentoOrigen | String |
urlImagenCumplido | String |
trazabilidad | List<TrazabilidadWS> |
Las novedades o trazabilidad están dadas por la lista TrazabilidadWS con los siguientes atributos:
| Atributo | Tipo |
|---|---|
fecha | Date |
sede | String |
detalle | String |
cuidad | String |
tipo | String |
cun | String |
estado | String |
observaciones | String |
Generar guía de transporte
Body
| Parámetro | Tipo |
|---|---|
nmImpresionRemesa | String |
cdPoblacionOrigen | String |
cdPoblacionDestino | String |
nmPesoDeclarado | String |
nmUnidPorEmbalaje | String |
nmVolumenDeclarado | String |
vmValorDeclarado | String |
dsNombreRemitente | String |
dsDireccionRemitente | String |
dsTelefonoRemitente | String |
cdTipoDniCliente | String |
dniCliente | String |
dniDestinatario | String |
dsNombreDestinatario | String |
dsDireccionDestinatario | String |
dsTelefonoDestinatario | String |
dsDocReferencia | String |
dsDiceContener | String |
dsObservaciones | String |
nmTipoMcia | String |
cdTipoDniDestinatario | String |
Retorno
| Código | Descripción |
|---|---|
| 200 | Cuando se genera correctamente |
| 409 | Cuando hay un conflicto |
| 403 | Problemas de autenticación |
TM Tracker
Obtener últimas alertas
Obtiene las últimas alertas generadas por los vehículos asociados a una empresa y un usuario específico. Las alertas se crean en el software TMLand y deben ser configuradas previamente en el dispositivo GPS de cada vehículo (por ejemplo: exceso de velocidad, llegada tarde, abandono de ruta, etc.).
Headers
| Parámetro | Tipo | Descripción |
|---|---|---|
token | String | Token obtenido en la autenticación |
Query Params
| Parámetro | Tipo | Descripción |
|---|---|---|
empresa | String | Base de datos de la empresa (nombre de la empresa) |
id_usuario | String | Id del usuario (generalmente la cédula) |
Respuesta 200 OK
[
{
"icono": "https://tmland-amazon-store.s3-us-west-2.amazonaws.com/tmland_resources/images/tracker/iconos_movimiento/Ambulance.png",
"placa": "FNL609",
"numeroInterno": "4357",
"fecha": "20250827162039",
"descripcion": "Abandono de ruta",
"id": "b6baa58b-ae1c-497d-a5ce-3f65e3fffe98",
"cliente": "rapidoochoa",
"sonido": "Alarm-Synth.wav",
"disparador": "Abandono de ruta",
"velocidad": 46.0,
"imei": "866750062483139"
}
]
Obtener últimas posiciones
Consulta las últimas posiciones reportadas por los dispositivos GPS asociados a los vehículos de una empresa y usuario específico. La información incluye coordenadas, velocidad, estado de ignición, kilometraje, nivel de combustible, entre otros detalles que permiten monitorear en tiempo real la ubicación y condición del vehículo.
Headers
| Parámetro | Tipo | Descripción |
|---|---|---|
token | String | Token obtenido en la autenticación |
Query Params
| Parámetro | Tipo | Descripción |
|---|---|---|
empresa | String | Base de datos de la empresa (nombre de la empresa) |
id_usuario | String | Id del usuario (generalmente la cédula) |
Respuesta 200 OK
[
{
"Odometer": "480.95",
"PositionGUID": "589299d4-7…….",
"PositionID": "589299d4-7ce6-4…….",
"MessageID": "589299d4-7ce6-40…….",
"SessionID": "",
"ClientID": "prueba",
"ItemID": "456",
"Lat": "10.376427",
"Lon": "-75.496518",
"Speed": "0.00",
"Direction": "Punto Frío Vista Hermosa, Diagonal 29, Cartagena, Bolívar, Colombia",
"BatteryLevel": "",
"ActualDate": "20250710113837",
"IsValid": "true",
"Created": "20250710114146",
"IgnitionStatus": "0",
"FuelLevel": "",
"ActualDateUTC": "20250710163837",
"head": "0.00",
"grupo": "NUEVO GRUPO PRUEBA",
"placa": "MOO231",
"numeroInterno": "N1I2",
"icono": "https://tmland-amazon-store.s3-us-west-2.amazonaws.com/tmland_resources/images/tracker/dir-stop.png",
"markerLabel": " N1I2 MOO231 Vel: 0",
"markerTitle": "2025-07-10 11:38:37 ",
"protocol": "osmand",
"tiene_despacho": "N",
"fuera_zona_disponibilidad": "N",
"idVehiculo": 159
}
]
TM Solutions S.A.S — Biblioteca oficial de Webservices · Versión Producción
Este documento técnico es propiedad de TM Solutions. Para soporte técnico, contactar al equipo de integraciones.