Aquí encuentras toda la información relevante de como conectarte a nuestras tecnologías:

Versión Producción

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:

URL_BASE = https://prod.tmsolutions.com.co

Verbos HTTP soportados

La API soporta los siguientes verbos, de acuerdo a lo que requiera hacer:

VerboDescripción
GETObtener la información de un recurso
POSTCrear un nuevo recurso en el sistema
PUTModifica completamente un recurso
DELETEElimina 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)

POST ${URL_BASE}/auth/login

Headers

ParámetroObligatorioDescripción
X-Tenant-IdNombre de la empresa. Ejemplo: tmsolutions
Accept-LanguageopcionalValores permitidos: en o es

Body (form-data)

ParámetroTipoObligatorioDescripción
userStringUsuario. Ejemplo: prueba
passwordStringContraseña del usuario. Ejemplo: 1234*
plainBooleanopcionalfalse si la contraseña se encuentra encriptada
appStringopcionalIdentificador de la plataforma donde se hace login. Debe ser diferente a web
sessionIdStringopcionalIdentificador de la sesión del usuario. Ejemplo: userApp123

Respuesta

JSON
{
  "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.

Importante

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.

POST ${URL_BASE}/auth/login/refreshToken

Headers

ParámetroObligatorioDescripción
X-Tenant-IdNombre de la empresa. Ejemplo: tmsolutions
Accept-Languageopcionalen o es

Body (form-data)

ParámetroTipoObligatorioDescripción
refreshTokenStringToken obtenido previamente. Ejemplo: prueba
appStringopcionalIdentificador de la plataforma donde se hace login. Para la plataforma TM Land es web
sessionIdStringopcionalIdentificador 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:

HeaderObligatorioDescripción
Content-Typeapplication/json (requerido excepto en método GET)
AuthorizationBearer {token}
X-Tenant-IdNombre de la empresa. Ejemplo: tmsolutions
Accept-Languageopcionalen o es
X-Tenant-SedeopcionalId de la sede. Ejemplo: 1
Nota sobre modelClass

En los endpoints siguientes, modelClass es el nombre del modelo de la clase que se desea guardar, actualizar, leer o eliminar.

Crear

POST ${URL_BASE}/generic/save?clase=${modelClass}

Body (raw JSON)

Será un JSON con los parámetros requeridos según el modelo. Ejemplo:

JSON
{
  "nombre": "prueba",
  "telefono": "1234567",
  "activo": true
}

Actualizar

PUT ${URL_BASE}/generic/update?clase=${modelClass}

Body (raw JSON)

Se requiere el identificador de la clase para actualizar.

JSON
{
  "id": "123",   // requerido — identificador de la clase
  "nombre": "prueba",
  "telefono": "9876541",
  "activo": true
}

Leer

POST ${URL_BASE}/generic/findAll?clase=${modelClass}

Body (raw JSON)

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)
}
Filtros por relación

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

DELETE ${URL_BASE}/generic/save?clase=${modelClass}

Body (raw JSON)

JSON
{
  "id": "123"   // requerido — identificador de la clase
}

Otros métodos

Get View / Function data

POST ${URL_BASE}/generic/findAllView?view=${view_name}

Body (raw JSON)

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:

matchModeTipo de datoDescripción
CONTAINSStringCase-insensitive en strings
EXACTString / NumberComparación exacta
STARTS_WITHStringÚtil para prefijos
ENDS_WITHStringÚtil para sufijos
GREATER_THANNumberComparación estricta
LESS_THANNumberComparación estricta
INString / NumberLista de valores
NOTINString / NumberLista excluida
BETWEENNumberRango de dos valores
ISNULLString / NumberSolo valores nulos
NOTNULLString / NumberNo nulos
NOTNULLSTRINGStringSolo para texto

Get Enum data

POST ${URL_BASE}/generic/findAllEnum?clase=co.com.tmsolutions.tmland.utilidades.utilidadestm.enumerator.${enum_class}

Body (raw JSON)

JSON
{
  "first": 0,
  "size": 10,
  "filteredBy": {
    "apellido": "Lopez"
  },
  "sortedBy": "apellido",
  "isAscending": true
}

GetHardware

GET ${URL_BASE}/auth/clientes/getLineasUnidadDeRastreo

Respuesta

JSON
[
  {
    "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

POST ${URL_BASE}/maestros/Obj_Vehiculo1/calcularCapacidadCarga

Body

ParámetroTipoObligatorioDescripción
clasevehiculoIntegerId de la clase vehículo
configuracioncabezoteIntegerId de la configuración

Respuesta

JSON
{
  "data": {
    "numeroejes": 2,
    "code": 9,
    "ejesremolque": 0,
    "pesobruto": 1500.0,
    "tiporemolque": "",
    "nombre": "prueba"
  }
}

GetKilometraje

GET ${URL_BASE}/maestros/Obj_Vehiculo1/getKilometraje?placa=${id_placa}

Query Params

ParámetroTipoDescripción
id_placaStringPlaca que desea consultar

Respuesta

JSON
{
  "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:

co.com.tmsolutions.tmland.mantenimiento.model.Obj_Intervalo
ParámetroTipoObligatorioDescripción
kilometrosDouble
horasDouble
registradoraInteger

Crear Vehículo

Se guarda el vehículo con el método Crear y la clase:

co.com.tmsolutions.tmland.maestros.model.Obj_Vehiculo1
ParámetroTipoObl.Descripción
tiempoInicial_dbidIntegerIdentificador (codeintervalo) obtenido del guardado de Obj_Intervalo
reportar_ministerioBoolean
placaInteger
clasevehiculo_dbidIntegerIdentificador de Obj_ClaseVehiculo (codeclase)
tipocarroceria_dbidIntegerIdentificador de Obj_TipoCarroceria (tipocarroceriacode)
numerochasisString
flypassString
numeroInternoString
licenciadetransitoString
manifiestoaduanaString
numeromotorString
cilindrajeBigDecimal
marcamotorString
modelomotorString
linea_dbidIntegerIdentificador de Obj_Linea (code)
niveldeservicio_dbidIntegerIdentificador de Obj_NivelDeServicio (id)
liquidarespecialBooleanDefault: false
retener_producido_intermunicipalBooleanDefault: false
refrigeradoBooleanDefault: false
modeloIntegerDefault: 1999
modelo_reposicionInteger
tipoEquipo_dbidIntegerIdentificador de Obj_TipoEquipo (codigo)
tipo_vinculacionStringItem de Enum_Tipo_Vinculacion. Default: TERCEROS
afiliadorPersona_dbidStringIdentificador de Obj_Persona (codigopersona)
afiliador_dbidIntegerIdentificador de Obj_Organization (code)
financiacionStringItem de Enum_Financiacion
color_dbidIntegerIdentificador de Obj_Color (code)
tipoCombustibleInteger 1=DIESEL-ACPM, 2=Gasolina, 3=GAS, 4=Gas/Gasolina, 5=Eléctrico, 6=GASOELEC
tipo_servicioStringItem de Enum_tipo_Servicio. Default: particular
reg_nal_cargaString
pesovacioDoubleDefault: 0.0
capacidadpasajerosIntegerDefault: 0
catInvias_dbidIntegerIdentificador de Obj_CategoriaAP (codecategoriaap)
catInco_dbidIntegerIdentificador de Obj_CategoriaAP (codecategoriaap)
capacidad_cargaDoubleDefault: 0.0
unidadcapacidadStringDefault: "1"
propietario_dbidStringIdentificador de Obj_Persona (codigopersona)
propietarioorg_dbidIntegerIdentificador de Obj_Organization (code)
tenedor_dbidStringIdentificador de Obj_Persona (codigopersona)
tenedororg_dbidIntegerIdentificador de Obj_Organization (code)
conductores_dbmapArray<Object>Array con {id} donde id es Obj_Persona (codigopersona). Ej: [{"id":"123"},{"id":"456"}]
conductores_auxiliares_dbmapArray<Object>Igual que conductores_dbmap
rutasUrbanas_dbmapArray<Object>Array con {id} de Obj_RutaUrbana (codigo, Long). Ej: [{"id":12455},{"id":58552}]
numerocdaStringNúmero CDA de revisión tecnicomecánica
fechaexpiracdaDateVencimiento CDA. Formato: 2025-10-16 13:40:30
fecha_expedicion_cdaDateExpedición CDA. Formato: 2025-10-16 13:40:30
configuracionesadicionalesJSONObjeto 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
numerotarjetaoperacionString
fechaexpiratarjetaoperacionDateFormato: 2025-10-16 13:40:30
fecha_expedicion_tarjetaoperacionDateFormato: 2025-10-16 13:40:30
numero_tarjeta_propiedadString
rodamientoDateFormato: 2025-10-16 13:40:30
controlarmantenimientoBooleanDefault: false
protecavantelBooleanDefault: false
protecradioBooleanDefault: false
protecotroBooleanDefault: false
proctgpsBooleanDefault: false
camaraBooleanDefault: false
numero_celular_avantelString
proveedorgps_dbidIntegerIdentificador de Obj_Organization (code)
usuariogpsString
contrasenagpsString
paginawebgpsString
imeitrackerString
serie_ospString
tipo_satelitalStringValores: osp, smartone_c, no_instalado
numero_telefonoString
hardwareStringId de la opción obtenida con GetHardware
nombre_hardwareStringNombre de la opción obtenida con GetHardware
grupotracker_dbidStringIdentificador de Obj_GrupoTracker (id)
conductor_tracker_dbidStringIdentificador de Obj_Persona (codigopersona)
contador_pasajerosBooleanDefault: false
fechaingresoDateDefault: fecha actual
fechamatriculaDateFormato: 2025-10-16 13:40:30
fecha_importacionDateFormato: 2025-10-16 13:40:30
declaracion_importacionString
organismodetransitoString
fechacompraDateFormato: 2025-10-16 13:40:30
canonarrendamientoBigDecimalDefault: 0
negociacion_predeterminada_dbidStringIdentificador de Obj_NegociacionVehiculo (id)
origenkmStringItem de Enum_Origen_Kilometraje. Default: INGRESO_COMBUSTIBLE
kmcompraDouble
baseoperaciones_dbidIntegerIdentificador de Obj_City (object_City_Code)
sedebaseoperaciones_dbidIntegerIdentificador de Obj_Sede (id)
observacionesString
configuracion_dbidIntegerSi no es remolque: code obtenido de CalcularCapacidadDeCarga
configuracioncabezote_dbidIntegerId del item seleccionado de la vista tmland_configuracioncabezote_view
configuracion_semiremolque_dbidIntegerSi es remolque: id del item de la vista tmland_configuracioncabezote_view
doccdaStringLink del archivo (pdf o imagen)
doctarjetaoperacionStringLink del archivo (pdf o imagen)
doc_tarjeta_propiedadStringLink del archivo (pdf o imagen)
fotofrontalStringLink del archivo (imagen)
fototraseraStringLink del archivo (imagen)
fotoderechaStringLink del archivo (imagen)
fotoizquierdaStringLink del archivo (imagen)

Crear Seguros

Los seguros se guardan con el método Crear y la clase:

co.com.tmsolutions.tmland.mantenimiento.model.Obj_Seguro

Body para guardar SOAT

ParámetroTipoObl.Descripción
SOATBooleanValor true
seguronumberString
codigo_tarifaInteger
valorBigDecimal
aseguradora_dbidIntegerIdentificador de Obj_Organization (code)
fechaexpiraDateFormato: 2025-10-16 13:40:30
fecha_expedicionDateFormato: 2025-10-16 13:40:30
documentoStringLink del archivo (pdf o imagen)
vehiculosoat1_dbidIntegerIdentificador (id) obtenido al guardar Obj_Vehiculo1

Body para guardar Póliza todo riesgo

ParámetroTipoObl.Descripción
seguronumberString
aseguradora_dbidIntegerIdentificador de Obj_Organization (code)
fechaexpiraDateFormato: 2025-10-16 13:40:30
fecha_expedicionDateFormato: 2025-10-16 13:40:30
documentoStringLink del archivo (pdf o imagen)
vehiculotodoriesgo_dbidIntegerIdentificador (id) obtenido al guardar Obj_Vehiculo1

Body para guardar Responsabilidad Civil Contractual

ParámetroTipoObl.Descripción
seguronumberString
aseguradora_dbidIntegerIdentificador de Obj_Organization (code)
intermediario_dbidIntegerIdentificador de Obj_Organization (code)
fechaexpiraDateFormato: 2025-10-16 13:40:30
fecha_expedicionDateFormato: 2025-10-16 13:40:30
documentoStringLink del archivo (pdf o imagen)
vehiculorespcivil1_dbidIntegerIdentificador (id) obtenido al guardar Obj_Vehiculo1

Body para guardar Responsabilidad Civil Extracontractual

ParámetroTipoObl.Descripción
seguronumberString
aseguradora_dbidIntegerIdentificador de Obj_Organization (code)
intermediario_dbidIntegerIdentificador de Obj_Organization (code)
fechaexpiraDateFormato: 2025-10-16 13:40:30
fecha_expedicionDateFormato: 2025-10-16 13:40:30
documentoStringLink del archivo (pdf o imagen)
vehiculorespcivilextra1_dbidIntegerIdentificador (id) obtenido al guardar Obj_Vehiculo1

Body para guardar Póliza de Hidrocarburos

ParámetroTipoObl.Descripción
seguronumberString
aseguradora_dbidIntegerIdentificador de Obj_Organization (code)
intermediario_dbidIntegerIdentificador de Obj_Organization (code)
fechaexpiraDateFormato: 2025-10-16 13:40:30
fecha_expedicionDateFormato: 2025-10-16 13:40:30
documentoStringLink del archivo (pdf o imagen)
vehiculopolizahidrocarburos1_dbidIntegerIdentificador (id) obtenido al guardar Obj_Vehiculo1

Crear Tanques de combustible

Se guardan los tanques con el método Crear y la clase:

co.com.tmsolutions.tmland.maestros.model.Obj_TanqueCombustible
ParámetroTipoObl.Descripción
variableStringItem de Enum_Variable_Adicional. Default: ANALOG_VOLTAGE1
voltaje_llenoBigDecimalDefault: 0
voltaje_vacioBigDecimalDefault: 0
capacidadBigDecimalDefault: 0
vehiculo_dbidIntegerIdentificador (id) obtenido al guardar Obj_Vehiculo1

Crear Cámaras

Se guardan las cámaras con el método Crear y la clase:

co.com.tmsolutions.tmland.tracker.model.Obj_Camara_Vehiculo
ParámetroTipoObl.Descripción
urlString
vehiculo_dbidIntegerIdentificador (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:

ClaseIdentificadorTipo
Obj_IntervalocodeintervaloInteger
Obj_Vehiculo1idInteger
Obj_SegurocodeseguroInteger
Obj_TanqueCombustibleidString
Obj_Camara_VehiculoidString

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:

co.com.tmsolutions.tmland.maestros.model.Obj_DocumentoControladoxObjeto

Body — Crear documento controlado

ParámetroTipoObl.Descripción
vehiculo_dbidIntegerIdentificador de la clase vehículo
documento_dbidStringId de item de la vista documentocontrolado_view, filtrando por: {"coalesce(codetipoactividad,-100)":[-1,-100],"matchMode_codetipoactividad":"in"}
fechacumplimientoDateFormato: 2025-10-16 13:40:30
fechavencimientoDateFormato: 2025-10-16 13:40:30. El parámetro genericrecurrence del item de documentocontrolado_view indica la diferencia en meses entre fechacumplimiento y fechavencimiento
pathdocumentoStringLink del archivo (pdf o imagen)
observacionesString
excluirBoolean
estadoString

Leer documentos de un vehículo

Se utiliza el método Get View con la vista:

documentocontrolado_x_persona_vehiculo_view
JSON (body)
{
  "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ámetroTipoObl.Descripción
realizar_factura_automaticaBoolean
convertir_factura_automaticaBoolean
aplica_ultimo_dia_facturacionBoolean
ultimo_dia_facturacionIntegerDefault: 25
frecuenciaStringItem de Enum_Frecuencia_Reporte. Default: DIARIO
dias_dbmapArray<String>Items de Enum_Dia. Ej: ["LUNES","JUEVES"]
aplica_ultimo_dia_habilBoolean
agrupacion_origenBoolean
agrupacion_destinoBoolean
agrupacion_doc_referenciaBoolean
agrupacion_fecha_impresionBoolean
agrupacion_sede_clienteBoolean
agrupacion_productoBoolean
agrupacion_tipo_novedadBoolean
agrupacion_tipo_contratoBoolean
customvaluesJSONObjeto 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ámetroTipoObl.Descripción
centordecostos_dbidBooleanObj_CentroDeCostos
regimen_triburarioBooleanItem de Enum_RegimenTributario. Default: NINGUNO
autoretenedorBooleanDefault: false
obligado_facturarBooleanDefault: true
aplicar_retencionBooleanDefault: false
mostrarTotalesDespachoBooleanDefault: false
mostrarValorAseguradoBooleanDefault: true
ocultarTotalesAlDestinatarioBooleanDefault: false
mostrarRemitenteGuiaTransporteBooleanDefault: true
plazo_cuenta_por_pagarIntegerDefault: 30
plazo_anticipoIntegerDefault: 30
forma_de_pago_dbidStringIdentificador de Obj_FormaDePago (id)
actividadeconomica_dbidIntegerIdentificador de Obj_ActividadEconomica (id)
asesor_comercial_dbidStringIdentificador de Obj_Persona (codigopersona)
asesor_cuenta_dbidStringIdentificador de Obj_Persona (codigopersona)
gestor_cartera_dbidStringIdentificador de Obj_Persona (codigopersona)
endoso_dbidStringIdentificador de Obj_DescipcionEndoso (id)
potencial_facturacionBigDecimalDefault: 0
calificacionBigDecimalDefault: 0
monto_autorizadoBigDecimalDefault: 0
como_recibir_informacionStringItem de Enum_ComoRecibirInformacion. Default: CORREO_ELECTRONICO
regimen_fiscalStringItem de RegimenFiscal. Default: IMPUESTO_SOBRE_LAS_VENTAS_IVA
enum_tributo_receptor_vendedorStringItem de Enum_Tributo_Receptor_Vendedor. Default: IVA

3. Guardar relaciones de información comercial

POST ${URL_BASE}/maestros/Obj_OtraInformacionComercial/guardarRelaciones
ParámetroTipoObl.Descripción
idStringId de Obj_OtraInformacionComercial obtenido en el paso 2
responsabilidades_fiscalesJSONObjeto: { 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ámetroTipoObl.Descripción
condiciones_facturacion_dbidStringId de Obj_CondicionesFacturacion (paso 1)
otrainformacion_comercial_dbidStringId de Obj_OtraInformacionComercial (paso 2)
reportar_ministerioBoolean
nameString
typeIDStringItem de Enum_TipoId. Default: N
nitString
digitoverificacionString
numeroMinisterioString
rutString
mailString
observacionesString
informacionadicionalJSONClaves admitidas: cuenta_banco, tipo_cuenta_banco, terceropersona, terceroorg, banco, marcar_pagar_al_ser_destinatario, restringir_productos

5. Guardar relaciones de la organización

POST ${URL_BASE}/maestros/Obj_Organization/guardarRelaciones
ParámetroTipoObl.Descripción
idIntegerId de Obj_Organization (code) del paso 4
actividadesJSONObjeto: { data: { id: Integer }} de la vista tmland_tipoactividad_view

6. Sedes

Clase: co.com.tmsolutions.tmland.maestros.model.Obj_Sede

ParámetroTipoObl.Descripción
organizacion_dbidIntegerId de Obj_Organization (code)
nombreString
sede_principalBoolean
ciudadIntegerId de Obj_City (object_City_Code)
direccionString
zipcodeString
telefonoString
telefono2String
contactoString
autorretenedoricaStringItem de Enum_AutoRetencionIca
configuracion_tipo_asientoJSONClaves: email

7. Plazos por tipo de contrato

Clase: co.com.tmsolutions.tmland.contabilidad.model.Obj_PlazoPorTipoDeContrato

ParámetroTipoObl.Descripción
organizacion_dbidIntegerId de Obj_Organization (code)
plazoInteger
tipocontratoStringId de Obj_TipoContrato (id)

8. Documentos exigidos

Clase: co.com.tmsolutions.tmland.operaciones.carga.model.Obj_DocumentoExigido

ParámetroTipoObl.Descripción
organizacion_dbidIntegerId de Obj_Organization (code)
tipoStringId de Obj_TipoDocumentoExigido (id)
observacionesString
seleccionadoBoolean

9. Otros documentos (anexos)

Clase: co.com.tmsolutions.tmland.gestionhumana.model.Obj_Anexos

ParámetroTipoObl.Descripción
organizacion_dbidIntegerId de Obj_Organization (code)
tipoStringItem de Enum_TipoAnexo. Default: FOTOGRAFIA
observacionesString
documento_pdfStringLink del archivo (pdf)

10. Productos por cliente

Clase: co.com.tmsolutions.tmland.operaciones.carga.model.Obj_ProductoPorCliente

ParámetroTipoObl.Descripción
cliente_dbidIntegerId de Obj_Organization (code)
producto_dbidStringId 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:

ClaseIdentificadorTipo
Obj_CondicionesFacturacionidString
Obj_OtraInformacionComercialidString
Obj_OrganizationcodeInteger
Obj_SedeidInteger
Obj_PlazoPorTipoDeContratoidString
Obj_DocumentoExigidoidString
Obj_AnexosidString
Obj_ProductoPorClienteidString

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ámetroTipoObl.Descripción
reportar_ministerioBoolean
tipo_idStringItem de Enum_TipoId
cedulaString
lugarexpedicionString
nombreString
apellidosString
ciudadpersona_dbidIntegerIdentificador de Obj_City (object_City_Code)
rutString
bancoStringNombre obtenido de getDistinctOrganizationByActivityTypes('banco',true)
cuentabancariaString
tipo_cuentaStringItem de Enum_TipoCuenta
autoretenedorBoolean
obligado_facturarBoolean
centordecostos_dbidIntegerIdentificador de Obj_CentroDeCostos (codigo)
regimen_triburarioStringItem de Enum_RegimenTributario
observacionesString
telefonocelularString
direccionString
emailString
zipcodeString
otros_telefonosString
telefonofijoString
tipospersona_dbmapIntegerIdentificador de Obj_TipoActividad (codetipoactividad)
atributosJSONObjeto 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_dbmapArray<Object>Array con {id} de Obj_Sede (Integer). Ej: [{"id":245},{"id":582}]
talleres_persona_dbmapArray<Object>Array con {id} de Obj_Organization (code). Ej: [{"id":125},{"id":552}]
sede_contacto_dbidIntegerIdentificador de Obj_Sede (id)
sede_dbidIntegerIdentificador de Obj_Sede (id)
mostrarTotalesDespachoBooleanDefault: true
mostrarValorAseguradoBooleanDefault: true
forma_de_pago_dbidStringIdentificador de Obj_FormaDePago (id)
id_ibuttonString
fechaingresoDateFormato: 2025-10-16 13:40:30
fecharetiroDateFormato: 2025-10-16 13:40:30
codigoretiroString
ultimasvacacionesDateFormato: 2025-10-16 13:40:30
nivel_estudio_dbidStringIdentificador de Obj_NivelEstudio (id)
estado_civilStringItem de Enum_EstadoCivil
fechanacimientoDateFormato: 2025-10-16 13:40:30
generoString
tiposangreString
rhpersonaString
cargoString
cargo_gestion_humana_dbidStringIdentificador de Obj_Cargo (id)
porcentajeComisionDouble
salario_depende_del_minimoBoolean
multiplicador_salario_minimoBigDecimalDefault: 1
salarioBigDecimalDefault: 0
grupo_nomina_dbidStringIdentificador de Obj_GrupoNomina (id)
horariodiarioBigDecimalDefault: 8
horariosabadosBigDecimalDefault: 3
trabajadomingoBooleanDefault: false
padre_dbidStringIdentificador de Obj_Persona (codigopersona)
conductorSupernumerarioBoolean
nrolicenciaString
vencelicenciaDateFormato: 2025-10-16 13:40:30
categorialicenciaString
refpersonalaccidenteString
telreferenciaperString
fechainicioexperienciaDateFormato: 2025-10-16 13:40:30
inscritoenelruntBoolean
epsString
arpString
fondopensionString
cajacompensacionString
cesantiasString
fechavencimientoaportesDateFormato: 2025-10-16 13:40:30
autorretenedoricaStringItem de Enum_AutoRetencionIca
fotoStringLink del archivo (imagen)
firmaStringLink del archivo (imagen)
doclicenciaStringLink del archivo (imagen)
hoja_de_vida_pdfStringLink del archivo (pdf)

2. Referencias

Clase: co.com.tmsolutions.tmland.gestionhumana.model.Obj_ReferenciaPersona

ParámetroTipoObl.Descripción
persona_dbidStringIdentificador de Obj_Persona (codigopersona), obtenido en el paso 1
tipoStringItem de Enum_tipo_referencia. Default: LABORAL
parentescoStringSolo si tipo="FAMILIAR". Item de Enum_Parentesco. Default: N_A
persona_grupo_familiar_dbidStringSolo si es grupo familiar. Identificador de Obj_Persona (codigopersona)
identificacionString
nombreString
ciudad_dbidIntegerIdentificador de Obj_City (object_City_Code)
direccionString
telefonoString
telefono2String
contactoStringSolo si es grupo familiar
observacionesString

3. Verificación de antecedentes

Clase: co.com.tmsolutions.tmland.maestros.model.Obj_VerificacionAntecedente

ParámetroTipoObl.Descripción
persona_dbidStringIdentificador de Obj_Persona (codigopersona)
documento_dbidStringIdentificador de Obj_DocumentoAntecedente (id)
documento_pdfString
observacionesString

4. Otros documentos (anexos)

Clase: co.com.tmsolutions.tmland.gestionhumana.model.Obj_Anexos

ParámetroTipoObl.Descripción
persona_dbidStringIdentificador de Obj_Persona (codigopersona)
tipoStringItem de Enum_TipoAnexo. Default: FOTOGRAFIA
documento_pdfString
observacionesString

Actualizar Personas

Se envían los mismos objetos que al crear, más el identificador de cada clase:

ClaseIdentificadorTipo
Obj_PersonacodigopersonaString
Obj_ReferenciaPersonaidString
Obj_VerificacionAntecedenteidString
Obj_AnexosidString

Usuarios — Método CRUD

Previamente debe existir una persona (ver Personas). Luego se crea el usuario con el método Crear y la clase:

co.com.tmsolutions.tmland.maestros.model.Obj_User
ParámetroTipoObl.Descripción
object_User_CodeIntegerPará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_dbidStringParámetro id de la persona previamente creada u obtenida con la función anterior
activoBoolean
superUserBoolean
fecha_vencimientoDateFecha de expiración del acceso. Formato: 2025-10-16 13:40:30
puedemodificarcontableBoolean
restringirvehiculosBoolean
puedefirmarBoolean
usuario_ventas_webBoolean
Nota — Verifique que la persona asociada al usuario tenga un correo electrónico registrado y actualizado en Administración de Personal, ya que este será el medio oficial para el envío de credenciales.

Grupos de seguridad por usuario

POST ${URL_BASE}/maestros/Obj_User/guardarRelaciones

Body raw (JSON):

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:

ClaseIdentificadorTipo
Obj_Userobject_User_CodeString

Planillas de viaje

Leer

Se consume el método genérico Get View/Function data con la siguiente función:

POST ${URL_BASE}/generic/findAllView?view=get_planillas_by_fecha('${fecha_inicial}', '${fecha_final}')

Parámetros de la función

ParámetroTipoObl.Descripción
fecha_inicialDateFormato: 2025-10-16 13:40:30
fecha_finalDateFormato: 2025-10-16 13:40:30

Body

JSON para filtrar por número de viaje:

JSON
{
  "first": 0,
  "size": 10,
  "filteredBy": {
    "viaje": 394,
    "matchMode_viaje": "EXACT"
  },
  "sortedBy": null,
  "isAscending": true
}

Respuesta

JSON
{
  "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"
  }
}
Parte 2

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:

URL_BASE_WS = https://{empresa}.tmsolutions.com.co

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

GET ${URL_BASE_WS}/tmland/webservices/wstiquetes/auth?token={{token_empresa}}&user={{user}}&password={{password}}

Query Params

ParámetroTipoDescripción
token_empresaStringToken de empresa proporcionado por el sistema
userStringUsuario asignado por el personal de la empresa
passwordStringContraseña asignada por el personal de la empresa

Respuesta

JSON
{
  "id_persona": "3b67ede9-fb9 . . .",
  "token_ms": "eyJraWQiOiJJRkx5Sk90d. . .",
  "codeuser": "5219. . .",
  "token": "eyJhbGciOiJIUzI1iOiJ0bXNvbHV0aW9. . .",
  "username": "NOMBRE . . ."
}

Códigos de respuesta

CódigoMensajeDescripción
200OK: Login SuccessCuando se genera correctamente
401Unauthorized: Usuario No Existe / Contraseña InválidaCuando el usuario o la contraseña son incorrectos
Nota — El endpoint genera un token "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

POST ${URL_BASE_WS}/tmland/webservices/wstiquetes/refreshAuth?token=${token_empresa}&token_react=${token}

Query Params

ParámetroTipoDescripción
token_empresaStringToken de empresa proporcionado por el sistema
tokenStringToken obtenido en el método de autenticación anterior

Respuesta

Tendrá la misma estructura del método de login:

JSON
{
  "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.

GET ${URL_BASE_WS}/tmland/webservices/wstiquetes/getCiudades

Headers

ParámetroTipoDescripción
tokenStringToken obtenido en la autenticación

Respuesta 200 OK

JSON
[
  {
    "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.

GET ${URL_BASE_WS}/tmland/webservices/wstiquetes/getRutas

Headers

ParámetroTipoDescripción
tokenStringToken obtenido en la autenticación

Respuesta 200 OK

JSON
[
  { "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.

GET ${URL_BASE_WS}/tmland/webservices/wstiquetes/getViajes?fecha=${fecha}&origin_id=${origin_id}&destination_id=${destination_id}

Headers

ParámetroTipoDescripción
tokenStringToken obtenido en la autenticación

Query Params

ParámetroTipoDescripción
fechaStringFecha del viaje en formato yyyy-MM-dd HH:mm (UTC+5)
origin_idStringIdentificador de la ciudad de origen. Se obtiene de getCiudades / getRutas
destination_idStringIdentificador de la ciudad de destino. Se obtiene de getCiudades / getRutas

Respuesta 200 OK

JSON
[
  {
    "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.

GET ${URL_BASE_WS}/tmland/webservices/wstiquetes/getTiposDeServicio

Headers

ParámetroTipoDescripción
tokenStringToken obtenido en la autenticación

Respuesta 200 OK

JSON
[
  {
    "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.

GET ${URL_BASE_WS}/tmland/webservices/wstiquetes/getMapaBusWS?travel_id=${travel_id}&id_sede=${id_sede}

Headers

ParámetroTipoDescripción
tokenStringToken obtenido en la autenticación

Query Params

ParámetroTipoDescripción
travel_idStringIdentificador del viaje. Se obtiene de getViajes (campo travel_id)
id_sedeIntegerIdentificador de la sede donde se realizará la venta. Asignado por personal de la empresa

Respuesta 200 OK

JSON
[
  {
    "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.

POST ${URL_BASE_WS}/tmland/webservices/wstiquetes/bloquearSillaWS?id_sede=${id_sede}
POST ${URL_BASE_WS}/tmland/webservices/wstiquetes/desbloquearSillaWS?id_sede=${id_sede}

Headers

ParámetroTipoDescripción
tokenStringToken obtenido en la autenticación

Query Params

ParámetroTipoDescripción
id_sedeIntegerIdentificador 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.

JSON
["3d261bf6-b3e5-4be6-96c2-b9963d260e1c", "8caebb74-c793-4910-…"]

Respuesta 200 OK

status: 1 (Éxito) / 0 (Fallido).

JSON
{ "status": 1 }
Nota — El método siempre devuelve un status HTTP 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.

POST ${URL_BASE_WS}/tmland/webservices/wstiquetes/consultarTercero

Headers

ParámetroTipoDescripción
tokenStringToken obtenido en la autenticación

Cuerpo JSON

JSON
{
  "isorganizacion": false,
  "document": "7890"
}
ParámetroTipoDescripción
isorganizacionBooleanIndica si la entidad es una organización (true) o una persona (false)
documentStringNúmero de documento de la persona o NIT de la organización

Respuesta 200 OK — Usuario encontrado

JSON
{
  "address": "r8a",
  "city": 5001000,
  "document": "1234567890",
  "document_type": "C",
  "email": "",
  "last_name": "Ochoa",
  "name": "Juan Carlos",
  "phone": ""
}

Respuesta 200 OK — Usuario no encontrado

JSON
{
  "message": "ER1",
  "status": 200,
  "valores": {}
}

Crear tercero

Crea un cliente en la aplicación TMLand cuando no existe un registro previo.

POST ${URL_BASE_WS}/tmland/webservices/wstiquetes/crearTercero

Headers

ParámetroTipoDescripción
tokenStringToken obtenido en la autenticación

Body

JSON
{
  "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ámetroTipoDescripción
isorganizacionBooleanIndica si la entidad es organización (true) o persona (false)
document_typeStringTipo 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)
documentStringNúmero de documento o NIT
nameStringNombre de la persona o entidad
last_nameStringApellido (solo si isorganizacion=false)
phoneStringNúmero de teléfono de contacto
emailStringCorreo electrónico de contacto
addressStringDirección física
cityIntegerCódigo de la ciudad. Se obtiene de getCiudades

Respuesta 200 OK — Usuario creado

JSON
{ "status": 200, "message": "OK" }

Respuesta 200 OK — Usuario ya registrado

JSON
{ "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.

GET ${URL_BASE_WS}/tmland/webservices/maestros/getCiudades

Headers

ParámetroTipoDescripción
tokenStringToken obtenido en la autenticación

Respuesta 200 OK

JSON
[
  {
    "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.

POST ${URL_BASE_WS}/tmland/webservices/wstiquetes/reservarSillasWS

Headers

ParámetroTipoDescripción
tokenStringToken obtenido en la autenticación

Cuerpo JSON

JSON
{
  "seat": "12345",
  "id_sede": 1,
  "documento": "1001234567",
  "id_transaccion": "TXN123456",
  "facturar_persona": false,
  "organizacion_facturacion": null,
  "persona_facturacion": null,
  "token_talentu": null
}
ParámetroTipoDescripción
seatStringID de la silla en la base de datos
id_sedeIntegerID de la sede donde se realizará la venta
documentoStringDocumento del pasajero que hace la reserva
id_transaccionStringID único de la transacción de la reserva
facturar_personaBooleanIndica si la persona será facturada (true/false)
organizacion_facturacionString|nullNIT de la empresa a facturar (solo si facturar_persona=false)
persona_facturacionString|nullCédula de la persona a facturar (solo si facturar_persona=false)
token_talentuString|nullToken de Talentu (opcional)

Respuestas

CódigoDescripciónEjemplo
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)

POST ${URL_BASE_WS}/tmland/webservices/wstiquetes/generarTiqueteWS?id_us=${id_us}&empresa=${empresa}&id_sede=${id_sede}

Headers

ParámetroTipoDescripción
tokenStringToken obtenido en la autenticación

Query Params

ParámetroTipoDescripción
id_sedeIntegerIdentificador de la sede. Asignado por personal de la empresa
empresaStringBase de datos de la empresa (nombre de la empresa)
id_usStringId del usuario (generalmente la cédula) con el que se realizará la operación

Cuerpo JSON

JSON
{
  "reference": "TXN123456",
  "status": "APPROVED",
  "payment_link_id": null,
  "customer_email": "cliente@email.com"
}
ParámetroTipoDescripción
referenceStringIdentificador enviado en reservarSillasWS (id_transaccion)
statusStringSi es APPROVED se genera el tiquete; de lo contrario no se ejecuta
payment_link_idStringSi está presente, reemplaza el valor de reference
customer_emailStringCorreo electrónico del cliente para el envío del tiquete

Respuesta 200 OK — Tiquete generado correctamente

JSON
{
  "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ódigoDescripción
ER0STATUS DIFERENTE DE APPROVED
ER1_1ID 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
ER6Error 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.

POST ${URL_BASE_WS}/tmland/webservices/wstiquetes/generarTiqueteWompi?id_us=${id_us}&empresa=${empresa}&id_sede=${id_sede}

Headers

ParámetroTipoDescripción
tokenStringToken obtenido en la autenticación

Query Params

ParámetroTipoDescripción
id_sedeIntegerIdentificador de la sede. Asignado por personal de la empresa
empresaStringBase de datos de la empresa (nombre de la empresa)
id_usStringId del usuario (generalmente la cédula)

Cuerpo JSON enviado por Wompi

JSON
{
  "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

JSON
{
  "message": "Tiquete generado exitosamente.",
  "status": 1,
  "valores": {
    "id_tiquete": "TIQ123456"
  }
}
Nota — El método siempre devuelve un status HTTP 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.

GET ${URL_BASE_WS}/tmland/webservices/carga/consultarGuiasPorDocumentoAnexo?documento=${documento_anexo}

Headers

ParámetroTipoDescripción
tokenStringToken obtenido en la autenticación

Query Params

ParámetroTipoDescripción
documento_anexoStringDocumento anexo a consultar

Retorno

Array de guías con los siguientes atributos:

AtributoTipo
ciudadOrigenString
ciudadDestinoString
unidadesInteger
pesoRealDouble
valorDeclaradoBigDecimal
nomRemitenteString
dirRemitenteString
telRemitenteString
idRemitenteString
nomDestinatarioString
dirDestinatarioString
telDestinatarioString
idDestinatarioString
documentoAnexoString
diceContenerString
numeroGuiaString
fechaDate
tipoIdRemString
tipoIdDestString
departamentoDestinoString
departamentoOrigenString
urlImagenCumplidoString
trazabilidadList<TrazabilidadWS>

Las novedades o trazabilidad están dadas por la lista TrazabilidadWS con los siguientes atributos:

AtributoTipo
fechaDate
sedeString
detalleString
cuidadString
tipoString
cunString
estadoString
observacionesString

Generar guía de transporte

POST ${URL_BASE_WS}/tmland/webservices/carga/generarGuia

Body

ParámetroTipo
nmImpresionRemesaString
cdPoblacionOrigenString
cdPoblacionDestinoString
nmPesoDeclaradoString
nmUnidPorEmbalajeString
nmVolumenDeclaradoString
vmValorDeclaradoString
dsNombreRemitenteString
dsDireccionRemitenteString
dsTelefonoRemitenteString
cdTipoDniClienteString
dniClienteString
dniDestinatarioString
dsNombreDestinatarioString
dsDireccionDestinatarioString
dsTelefonoDestinatarioString
dsDocReferenciaString
dsDiceContenerString
dsObservacionesString
nmTipoMciaString
cdTipoDniDestinatarioString

Retorno

CódigoDescripción
200Cuando se genera correctamente
409Cuando hay un conflicto
403Problemas 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.).

GET ${URL_BASE_WS}/tmtracker/webservices/tracker/getUltimasAlertas?empresa=${empresa}&id_usuario=${id_usuario}

Headers

ParámetroTipoDescripción
tokenStringToken obtenido en la autenticación

Query Params

ParámetroTipoDescripción
empresaStringBase de datos de la empresa (nombre de la empresa)
id_usuarioStringId del usuario (generalmente la cédula)

Respuesta 200 OK

JSON
[
  {
    "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.

GET ${URL_BASE_WS}/tmtracker/webservices/tracker/getUltimasPosicionesGson?empresa=${empresa}&id_usuario=${id_usuario}

Headers

ParámetroTipoDescripción
tokenStringToken obtenido en la autenticación

Query Params

ParámetroTipoDescripción
empresaStringBase de datos de la empresa (nombre de la empresa)
id_usuarioStringId del usuario (generalmente la cédula)

Respuesta 200 OK

JSON
[
  {
    "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
  }
]