curl --request GET \
--url https://api.ugps.io/api/trips/open/{tripId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.ugps.io/api/trips/open/{tripId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.ugps.io/api/trips/open/{tripId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ugps.io/api/trips/open/{tripId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.ugps.io/api/trips/open/{tripId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.ugps.io/api/trips/open/{tripId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ugps.io/api/trips/open/{tripId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"positions": [
{
"lat": 123,
"lng": 123,
"timestamp": 123,
"alt": 123,
"dir": 123,
"speed": 123
}
],
"route": "<string>",
"id": "<string>",
"status": "open",
"flespiDeviceId": 123,
"assetId": "<string>",
"tripConfig": "ignition",
"begin": 123,
"startAddress": "<string>",
"startPosition": {
"latitude": 123,
"longitude": 123,
"timestamp": 123
},
"lastPosition": {
"latitude": 123,
"longitude": 123,
"timestamp": 123
},
"lastPositionAt": 123
}{
"error": "El email es requerido"
}{
"error": "Token inválido o expirado"
}{
"error": "Recurso no encontrado"
}{
"message": "Error interno del servidor"
}Obtener el recorrido de un viaje en curso
Devuelve un viaje en curso (status: open) del engine de intervalos con su recorrido
completo: el mismo contrato parcial de GET /api/trips/open más positions (todas las
posiciones acumuladas hasta la última conocida, con la misma forma que las de un viaje
finalizado) y route (polyline codificada con el algoritmo de Google, precisión 1e-5,
igual que la route de un viaje finalizado).
Se pide al seleccionar el viaje, no en el polling de la lista: el documento abierto acumula posiciones en vivo y puede pesar cientos de KB. La última posición no es un destino; el trazo crece mientras el viaje siga abierto.
Mismos guards que la lista: tenant del usuario y scope de activos del rol. Un viaje
inexistente, de otro cliente, fuera del scope del rol o que ya cerró responde 404
sin distinguir el caso.
curl --request GET \
--url https://api.ugps.io/api/trips/open/{tripId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.ugps.io/api/trips/open/{tripId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.ugps.io/api/trips/open/{tripId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ugps.io/api/trips/open/{tripId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.ugps.io/api/trips/open/{tripId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.ugps.io/api/trips/open/{tripId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ugps.io/api/trips/open/{tripId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"positions": [
{
"lat": 123,
"lng": 123,
"timestamp": 123,
"alt": 123,
"dir": 123,
"speed": 123
}
],
"route": "<string>",
"id": "<string>",
"status": "open",
"flespiDeviceId": 123,
"assetId": "<string>",
"tripConfig": "ignition",
"begin": 123,
"startAddress": "<string>",
"startPosition": {
"latitude": 123,
"longitude": 123,
"timestamp": 123
},
"lastPosition": {
"latitude": 123,
"longitude": 123,
"timestamp": 123
},
"lastPositionAt": 123
}{
"error": "El email es requerido"
}{
"error": "Token inválido o expirado"
}{
"error": "Recurso no encontrado"
}{
"message": "Error interno del servidor"
}Authorizations
Token de sesión Better Auth o API token (atk_...) en el header Authorization: Bearer <token>. Los JWT legacy ya no son válidos.
Path Parameters
_id de Mongo del viaje en curso (el id de GET /api/trips/open)
Response
Viaje en curso con su recorrido
Viaje en curso con su recorrido completo (GET /api/trips/open/{tripId}). Hereda el contrato parcial de OpenTrip; positions conserva la forma de las posiciones de un viaje finalizado y route se codifica igual que la de un viaje finalizado, para que los lectores del mapa no cambien.
Posiciones acumuladas desde el inicio hasta la última conocida, en orden
Show child attributes
Show child attributes
Polyline codificada (algoritmo Google, precisión 1e-5); vacía sin posiciones
_id de Mongo del viaje
open ID del tracker en Flespi
Null si el tracker no tiene Asset linkeado
Configuración de viajes con la que se abrió
ignition, no_config, motion Unix timestamp (segundos) de inicio
Dirección de inicio si ya fue geocodificada
Coordenada de un viaje en curso
Show child attributes
Show child attributes
Última posición registrada; no es el destino del viaje
Show child attributes
Show child attributes
Unix timestamp (segundos) de la última posición registrada