Obtener estadísticas de excesos de velocidad
curl --request POST \
--url https://api.ugps.io/api/reports/speed-excess/stats \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"trackerIds": [
1234,
5678
],
"speedLimit": 80,
"minDuration": 30
}
'import requests
url = "https://api.ugps.io/api/reports/speed-excess/stats"
payload = {
"trackerIds": [1234, 5678],
"speedLimit": 80,
"minDuration": 30
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({trackerIds: [1234, 5678], speedLimit: 80, minDuration: 30})
};
fetch('https://api.ugps.io/api/reports/speed-excess/stats', 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/reports/speed-excess/stats",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'trackerIds' => [
1234,
5678
],
'speedLimit' => 80,
'minDuration' => 30
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.ugps.io/api/reports/speed-excess/stats"
payload := strings.NewReader("{\n \"trackerIds\": [\n 1234,\n 5678\n ],\n \"speedLimit\": 80,\n \"minDuration\": 30\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.ugps.io/api/reports/speed-excess/stats")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"trackerIds\": [\n 1234,\n 5678\n ],\n \"speedLimit\": 80,\n \"minDuration\": 30\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ugps.io/api/reports/speed-excess/stats")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"trackerIds\": [\n 1234,\n 5678\n ],\n \"speedLimit\": 80,\n \"minDuration\": 30\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"results": [
{
"trackerId": 1234,
"summary": {
"totalSpeedExcess": 5,
"totalDuration": 3600,
"averageExcessSpeed": 96,
"maxSpeed": 120
}
}
]
}
}{
"error": "El email es requerido"
}{
"error": "Token inválido o expirado"
}{
"error": "No tiene permisos para realizar esta acción"
}{
"message": "Error interno del servidor"
}Reportes - Excesos de Velocidad
Obtener estadísticas de excesos de velocidad
Recibe N trackers, un límite de velocidad, duración mínima y rango de fechas. Retorna estadísticas de excesos de velocidad por tracker, analizando las posiciones GPS de los viajes para detectar segmentos donde la velocidad supera el límite.
Formatos de fecha aceptados:
DD/MM/YYYY- Solo fecha (desde las 00:00:00 hasta las 23:59:59 del día)DD/MM/YYYY HH:mm- Fecha con hora y minutos específicosDD/MM/YYYY HH:mm:ss- Fecha con hora, minutos y segundos específicos
POST
/
api
/
reports
/
speed-excess
/
stats
Obtener estadísticas de excesos de velocidad
curl --request POST \
--url https://api.ugps.io/api/reports/speed-excess/stats \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"trackerIds": [
1234,
5678
],
"speedLimit": 80,
"minDuration": 30
}
'import requests
url = "https://api.ugps.io/api/reports/speed-excess/stats"
payload = {
"trackerIds": [1234, 5678],
"speedLimit": 80,
"minDuration": 30
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({trackerIds: [1234, 5678], speedLimit: 80, minDuration: 30})
};
fetch('https://api.ugps.io/api/reports/speed-excess/stats', 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/reports/speed-excess/stats",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'trackerIds' => [
1234,
5678
],
'speedLimit' => 80,
'minDuration' => 30
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.ugps.io/api/reports/speed-excess/stats"
payload := strings.NewReader("{\n \"trackerIds\": [\n 1234,\n 5678\n ],\n \"speedLimit\": 80,\n \"minDuration\": 30\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.ugps.io/api/reports/speed-excess/stats")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"trackerIds\": [\n 1234,\n 5678\n ],\n \"speedLimit\": 80,\n \"minDuration\": 30\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ugps.io/api/reports/speed-excess/stats")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"trackerIds\": [\n 1234,\n 5678\n ],\n \"speedLimit\": 80,\n \"minDuration\": 30\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"results": [
{
"trackerId": 1234,
"summary": {
"totalSpeedExcess": 5,
"totalDuration": 3600,
"averageExcessSpeed": 96,
"maxSpeed": 120
}
}
]
}
}{
"error": "El email es requerido"
}{
"error": "Token inválido o expirado"
}{
"error": "No tiene permisos para realizar esta acción"
}{
"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.
Query Parameters
Fecha de inicio. Formatos aceptados - DD/MM/YYYY, DD/MM/YYYY HH:mm, DD/MM/YYYY HH:mm:ss (ejemplo: 01/01/2025 o 01/01/2025 08:30)
Fecha de fin. Formatos aceptados - DD/MM/YYYY, DD/MM/YYYY HH:mm, DD/MM/YYYY HH:mm:ss (ejemplo: 31/01/2025 o 31/01/2025 17:45)
Body
application/json