https://developers.gpssoftwarenumberone.com/apiEndpoints disponibles
| Recurso | Endpoint | Descripción |
|---|---|---|
| Dispositivos | /v1/devices | Lista todos los vehículos de tu cuenta |
| Detalle | /v1/devices/:id | Información completa de un dispositivo |
| Ubicación | /v1/devices/:id/location | Última posición GPS conocida |
| Geocercas | /v1/geofences | Lista y consulta geocercas configuradas |
| Eventos | /v1/events | Historial de alertas y eventos de flota |
¿Cómo empezar?
Tu API Key es el mismo user_api_hash que usa la plataforma GPS. No necesitas registro adicional.
curl https://developers.gpssoftwarenumberone.com/api/v1/devices \
-H "Authorization: Bearer TU_API_KEY"
/v1/devices pasando tu API Key como Bearer token.curl https://developers.gpssoftwarenumberone.com/api/v1/devices \
-H "Authorization: Bearer TU_API_KEY"
import requests
API_KEY = "TU_API_KEY"
BASE = "https://developers.gpssoftwarenumberone.com/api"
headers = {"Authorization": f"Bearer {API_KEY}"}
resp = requests.get(f"{BASE}/v1/devices", headers=headers)
devices = resp.json()
print(f"Tienes {devices['count']} dispositivos")
for d in devices['data']:
print(f" {d['id']} — {d['name']} ({d['status']})")
const API_KEY = "TU_API_KEY";
const BASE = "https://developers.gpssoftwarenumberone.com/api";
const resp = await fetch(`${BASE}/v1/devices`, {
headers: { "Authorization": `Bearer ${API_KEY}` }
});
const devices = await resp.json();
console.log(`Tienes ${devices.count} dispositivos`);
devices.data.forEach(d => {
console.log(`${d.id} — ${d.name} (${d.status})`);
});
<?php
$apiKey = "TU_API_KEY";
$base = "https://developers.gpssoftwarenumberone.com/api";
$ch = curl_init("$base/v1/devices");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer $apiKey",
"Accept: application/json"
]);
$resp = curl_exec($ch);
$devices = json_decode($resp, true);
echo "Tienes " . $devices['count'] . " dispositivos\n";
foreach ($devices['data'] as $d) {
echo " {$d['id']} — {$d['name']} ({$d['status']})\n";
}
list con el conteo total y el array de dispositivos.{
"object": "list",
"count": 25,
"data": [
{
"id": 200,
"name": "Camion Principal",
"status": "moving",
"protocol": "teltonika",
"lat": 4.710989,
"lng": -74.072092,
"speed": 68,
"course": 45,
"last_seen": "2026-06-02 10:35:00",
"driver": "Juan Perez",
"address": "Calle 80, Bogota",
"sensors": [...]
}
]
}
user_api_hash de tu cuenta en la plataforma GPS.Bearer Token
Incluye el header Authorization en cada request:
Authorization: Bearer <tu_api_key>
Respuestas de error de autenticación
| Código HTTP | error | Causa |
|---|---|---|
| 401 | unauthorized | No se envió el header Authorization |
| 401 | invalid_token | Token incorrecto o cuenta desactivada |
| 503 | gateway_error | No se pudo validar el token temporalmente |
Dónde obtener tu API Key
Inicia sesión en la plataforma GPS → Menú de perfil → User Settings → campo API Hash. Ese valor es tu API Key.
Retorna todos los dispositivos GPS asociados a tu cuenta, incluyendo estado actual, última posición y sensores.
Respuesta
| Campo | Tipo | Descripción |
|---|---|---|
| object | string | Siempre "list" |
| count | integer | Total de dispositivos |
| data | array | Array de objetos Device |
{
"object": "list",
"count": 3,
"data": [
{
"id": 200,
"name": "Camion Ruta Norte",
"status": "moving",
"protocol": "teltonika",
"lat": 4.710989,
"lng": -74.072092,
"speed": 68,
"course": 45,
"altitude": 2600,
"last_seen": "2026-06-02 10:35:00",
"driver": "Juan Perez",
"address": "Autopista Norte Km 12, Bogota",
"sensors": [
{ "type": "engine_hours", "name": "Horas motor", "value": "1240 h" },
{ "type": "battery", "name": "Bateria", "value": "13.2 V" }
],
"group": "Flota Bogota"
}
]
}
Retorna la información completa de un dispositivo específico.
Parámetros de ruta
| Parámetro | Descripción |
|---|---|
| idrequerido | ID numérico del dispositivo |
{ "error": "not_found", "message": "Dispositivo 999 no encontrado." }
Objeto Device
| Propiedad | Tipo | Descripción |
|---|---|---|
| id | integer | Identificador único del dispositivo |
| name | string | Nombre asignado al vehículo |
| status | string | online · offline · moving |
| protocol | string | Protocolo del GPS (teltonika, gps103, etc.) |
| lat | number | Latitud de última posición |
| lng | number | Longitud de última posición |
| speed | number | Velocidad en km/h |
| course | number | Rumbo en grados (0-360) |
| last_seen | string | Timestamp del último dato recibido |
| driver | string|null | Nombre del conductor asignado |
| sensors | array | Sensores adicionales del dispositivo |
Retorna la última posición GPS registrada del dispositivo, incluyendo coordenadas, velocidad y dirección.
{
"object": "location",
"device_id": 200,
"lat": 4.710989,
"lng": -74.072092,
"speed": 68,
"course": 45,
"altitude": 2600,
"status": "moving",
"address": "Autopista Norte Km 12, Bogota",
"timestamp": 1748870100,
"last_seen": "2026-06-02 10:35:00"
}
Objeto Location
| Propiedad | Tipo | Descripción |
|---|---|---|
| lat | number | Latitud decimal (WGS84) |
| lng | number | Longitud decimal (WGS84) |
| speed | number | Velocidad en km/h |
| course | number | Rumbo 0–360°. 0=Norte, 90=Este |
| altitude | number | Altitud en metros sobre el nivel del mar |
| timestamp | integer | Unix timestamp del dato GPS |
| address | string|null | Dirección aproximada (geocodificación inversa) |
{
"object": "list",
"count": 4,
"data": [
{
"id": 12,
"name": "Bodega Central",
"type": "polygon",
"active": true,
"color": "#FF0000",
"created_at": "2026-01-10 09:00:00"
}
]
}
Parámetros de query
| Parámetro | Descripción |
|---|---|
| device_idopcional | Filtra eventos de un dispositivo específico |
| limitopcional | Máximo de resultados (default: 50, max: 200) |
{
"object": "list",
"count": 12,
"data": [
{
"id": 4501,
"type": "speeding",
"message": "Exceso de velocidad: 95 km/h en zona 60",
"device_id": 200,
"device": "Camion Ruta Norte",
"lat": 4.710989,
"lng": -74.072092,
"timestamp": "2026-06-02 09:12:00"
}
]
}
error es el código de máquina; message es para humanos.Formato de error
{
"error": "not_found",
"message": "Dispositivo 999 no encontrado.",
"docs": "https://developers.gpssoftwarenumberone.com"
}
Códigos HTTP
| Código | error | Cuándo ocurre |
|---|---|---|
| 200 | — | Éxito |
| 401 | unauthorized | Sin header Authorization |
| 401 | invalid_token | Token inválido o expirado |
| 404 | not_found | Recurso no existe o no pertenece a tu cuenta |
| 404 | no_location | Dispositivo sin posición registrada |
| 429 | rate_limit_exceeded | Más de 100 requests por minuto |
| 500 | internal_error | Error interno del servidor |
| 503 | gateway_error | Plataforma GPS no disponible temporalmente |
Rate Limits
La API acepta 100 requests por minuto por IP. Los headers de respuesta indican el estado del límite:
| Header | Descripción |
|---|---|
| RateLimit-Limit | Límite total por ventana (100) |
| RateLimit-Remaining | Requests disponibles en esta ventana |
| RateLimit-Reset | Segundos hasta que se resetea el contador |
demo_gps2024 para probar con datos de muestra sin necesitar una cuenta.
Python — Cliente completo
import requests
from typing import Optional
class GPSClient:
BASE = "https://developers.gpssoftwarenumberone.com/api"
def __init__(self, api_key: str):
self.session = requests.Session()
self.session.headers.update({
"Authorization": f"Bearer {api_key}",
"Accept": "application/json"
})
def get_devices(self) -> list:
resp = self.session.get(f"{self.BASE}/v1/devices")
resp.raise_for_status()
return resp.json()["data"]
def get_location(self, device_id: int) -> dict:
resp = self.session.get(f"{self.BASE}/v1/devices/{device_id}/location")
resp.raise_for_status()
return resp.json()
def get_events(self, device_id: Optional[int] = None, limit: int = 50) -> list:
params = {"limit": limit}
if device_id:
params["device_id"] = device_id
resp = self.session.get(f"{self.BASE}/v1/events", params=params)
resp.raise_for_status()
return resp.json()["data"]
# Uso
client = GPSClient("TU_API_KEY")
devices = client.get_devices()
for d in devices:
loc = client.get_location(d["id"])
print(f"{d['name']}: {loc['lat']}, {loc['lng']} — {loc['speed']} km/h")
JavaScript (Node.js) — Cliente completo
class GPSClient {
constructor(apiKey) {
this.baseUrl = "https://developers.gpssoftwarenumberone.com/api";
this.headers = {
"Authorization": `Bearer ${apiKey}`,
"Content-Type": "application/json"
};
}
async fetch(path, params = {}) {
const url = new URL(this.baseUrl + path);
Object.entries(params).forEach(([k, v]) => url.searchParams.set(k, v));
const res = await fetch(url, { headers: this.headers });
if (!res.ok) throw await res.json();
return res.json();
}
getDevices() { return this.fetch("/v1/devices"); }
getDevice(id) { return this.fetch(`/v1/devices/${id}`); }
getLocation(id) { return this.fetch(`/v1/devices/${id}/location`); }
getEvents(params = {}) { return this.fetch("/v1/events", params); }
getGeofences() { return this.fetch("/v1/geofences"); }
}
// Uso
const client = new GPSClient("TU_API_KEY");
const { data: devices } = await client.getDevices();
for (const device of devices) {
try {
const loc = await client.getLocation(device.id);
console.log(`${device.name}: ${loc.lat}, ${loc.lng}`);
} catch (e) {
if (e.error === "no_location") console.log(`${device.name}: sin posición`);
}
}
v1.0.0 — Junio 2026
Lanzamiento inicial de la API pública GPS Tracking.
- Endpoint
GET /v1/devices— lista de dispositivos - Endpoint
GET /v1/devices/:id— detalle de dispositivo - Endpoint
GET /v1/devices/:id/location— última posición - Endpoint
GET /v1/geofences— lista de geocercas - Endpoint
GET /v1/events— historial de eventos - Autenticación Bearer token
- Rate limiting 100 req/min
- Sandbox interactivo
Selecciona un recurso en el menú lateral para ver su documentación detallada.
platform_hash directo. Si la key se compromete, la revocas y generas una nueva sin cambiar nada en la plataforma GPS.Generar una API Key
Crea una nueva API Key vinculada a tu cuenta. Requiere tu platform_hash (el user_api_hash de tu cuenta en la plataforma GPS). La key generada solo se muestra una vez.
Body (JSON)
| Campo | Tipo | Req. | Descripción |
|---|---|---|---|
platform_hash | string | REQ | Tu user_api_hash de la plataforma GPS |
label | string | OPT | Nombre descriptivo (ej. "Integración ERP") |
expires_in_days | integer | OPT | Días de vigencia. Default: 365. Max: 3650. |
curl -X POST "https://developers.gpssoftwarenumberone.com/api/v1/keys" \
-H "Content-Type: application/json" \
-d '{"platform_hash":"TU_USER_API_HASH","label":"Mi integracion","expires_in_days":365}'
Respuesta
{
"object": "api_key",
"id": "550e8400-e29b-41d4-a716-446655440000",
"key": "gps_live_a1b2c3d4e5f6...",
"label": "Mi integracion",
"created_at": 1748822400000,
"expires_at": 1780358400000,
"platform_email": "usuario@empresa.com",
"message": "Guarda esta clave — no se volvera a mostrar completa."
}
Listar tus API Keys
Retorna todas las keys de tu cuenta. Autenticacion con tu platform_hash en el header Authorization: Bearer. Los valores de las keys se muestran truncados.
curl "https://developers.gpssoftwarenumberone.com/api/v1/keys" \
-H "Authorization: Bearer TU_PLATFORM_HASH"
Revocar una API Key
Revoca una key de forma inmediata e irreversible. Cualquier integración que la use dejara de funcionar al instante.
curl -X DELETE "https://developers.gpssoftwarenumberone.com/api/v1/keys/550e8400-e29b-41d4-a716-446655440000" \
-H "Authorization: Bearer TU_PLATFORM_HASH"
Formato de las keys
Todas las keys generadas tienen el prefijo gps_live_ seguido de 48 caracteres hexadecimales aleatorios:
gps_live_a1b2c3d4e5f6789012345678901234567890123456789012Generar una key ahora
Descargar
Importar en Postman
- Descarga el archivo
gps-tracking-api-openapi.yaml - Abre Postman → Import → arrastra el archivo
- Configura la variable
api_keycon tuuser_api_hash - Usa
demo_gps2024para probar sin cuenta real
Importar en Swagger UI
Pega la URL de la especificación en editor.swagger.io:
https://developers.gpssoftwarenumberone.com/openapi.yaml
Contenido de la colección
- GET /health — Estado del servicio (sin auth)
- GET /v1/devices — Listar todos los dispositivos
- GET /v1/devices/:id — Detalle de un dispositivo
- GET /v1/devices/:id/location — Última posición GPS
- GET /v1/geofences — Listar geocercas
- GET /v1/events — Historial de eventos con filtros
api_key = demo_gps2024 preconfigurada para probar de inmediato.Base URL
https://developers.gpssoftwarenumberone.com/apiMétodos HTTP
| Método | Uso |
|---|---|
GET | Consultar recursos (no modifica datos) |
POST | Crear recursos (en endpoints futuros) |
PUT | Actualizar un recurso completo |
DELETE | Eliminar un recurso |
Formato de respuesta
Todas las respuestas son Content-Type: application/json. Las listas incluyen object, count y data. Los errores incluyen error (código), message (descripción) y docs (enlace a documentación).
{ "object": "list", "count": 3, "data": [...] }{ "error": "not_found", "message": "Dispositivo 999 no encontrado.", "docs": "https://developers.gpssoftwarenumberone.com" }Headers de respuesta
| Header | Descripción |
|---|---|
RateLimit-Limit | Límite máximo de requests por ventana |
RateLimit-Remaining | Requests disponibles en la ventana actual |
RateLimit-Reset | Segundos hasta que se reinicia el contador |
Cuando se supera el límite
El servidor responde con HTTP 429 Too Many Requests:
{ "error": "rate_limit_exceeded", "message": "Demasiadas solicitudes. Maximo 100 por minuto." }Buenas prácticas
- Implementa exponential backoff cuando recibas un 429.
- Usa caching local para datos que no cambian frecuentemente (geocercas, lista de dispositivos).
- Prefiere polling de posiciones a intervalos de 30+ segundos.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
limit | integer | Cantidad de items por página. Default: 50. Máximo: 500. |
offset | integer | Número de items a saltar (para páginas siguientes). |
Ejemplo
curl "https://developers.gpssoftwarenumberone.com/api/v1/events?limit=20&offset=40" \
-H "Authorization: Bearer TU_API_KEY"Cuando count en la respuesta es mayor que limit, hay más páginas disponibles.
Filtros disponibles por endpoint
| Endpoint | Parámetros de filtro |
|---|---|
GET /v1/events | device_id, from, to, type |
GET /v1/devices | status (online/offline/moving) |
Filtros de fecha
Los campos from y to aceptan ISO 8601:
curl "https://developers.gpssoftwarenumberone.com/api/v1/events?from=2026-06-01T00:00:00Z&to=2026-06-01T23:59:59Z" \
-H "Authorization: Bearer TU_API_KEY"Versión actual
Todos los endpoints de la API v1 están bajo el prefijo /v1/:
https://developers.gpssoftwarenumberone.com/api/v1/Política de versiones
- Las versiones mayores (
v1→v2) pueden tener cambios que rompen compatibilidad. - Las versiones anteriores se mantienen activas por mínimo 12 meses después de publicar una nueva.
- Los cambios menores (nuevos campos, nuevos endpoints) se agregan sin cambiar la versión.
- Se notifica por Changelog y correo a integradores registrados con 90 días de anticipación.
Niveles del programa
- Acceso completo a la API
- Token demo para pruebas
- Documentación y SDKs
- 100 req/min
- Todo lo de Developer
- Sandbox privado
- Soporte prioritario
- Certificación de integración
- Visibilidad en marketplace
- Todo lo de Partner
- Rate limits personalizados
- SLA dedicado
- Integración co-branded
- Revenue sharing
Casos de uso de partners
demo_gps2024 en el Sandbox interactivo para explorar la API con datos de muestra sin necesitar una cuenta.Sandbox de Technology Partner
Los partners certificados reciben un sandbox dedicado con:
- Flota simulada de 50 dispositivos con posiciones GPS en movimiento
- Historial de eventos de los últimos 90 días
- Geocercas preconfiguradas para pruebas de alertas
- Credenciales independientes de producción
- Reseteo de datos disponible en cualquier momento
Para solicitar acceso, sigue el proceso de aplicación.
Cómo funcionarán
Registras una URL en tu servidor. Cuando un evento ocurre (posición fuera de geocerca, velocidad excedida, ignición activada), la API envía un POST HTTP a tu URL con el detalle del evento en JSON.
{
"event": "geofence.exit",
"timestamp": "2026-06-02T14:30:00Z",
"device": { "id": 1001, "name": "Camion Bogota-01" },
"geofence": { "id": 42, "name": "Zona Bogota Centro" },
"location": { "lat": 4.7110, "lng": -74.0721, "speed": 68 }
}Tipos de eventos planeados
geofence.enter/geofence.exit— Entrada/salida de geocercaspeed.exceeded— Velocidad excedidaignition.on/ignition.off— Ignicióndevice.offline— Dispositivo sin señalalarm.triggered— Alarma de pánico o robo
Datos disponibles
- Velocidad — campo
speeden km/h en cada posición - Frenadas y aceleraciones bruscas — eventos de tipo
harsh_brakeyharsh_accel - Exceso de velocidad — eventos
speed_exceededcon umbral configurable - Horas de conducción — calculable a partir de eventos de ignición
on/off
Ejemplo — calcular km del día
events = client.get_events(device_id=1001, from_date="2026-06-02T00:00:00Z")
km_today = sum(e.get("distance", 0) for e in events)Patrón recomendado
Consulta GET /v1/events?type=maintenance_due periódicamente y dispara notificaciones en tu sistema cuando el odómetro supere el umbral configurado.
Fuentes de datos
GET /v1/eventscon filtro de fecha — historial completo de posiciones- Campo
distanceen cada evento de posición - Acumula por
device_idpara reporte por vehículo
Flujo típico
- Llama
GET /v1/devicespara obtener el estado actual de la flota - Para cada dispositivo
moving, consulta/locationcon un intervalo de 30 segundos - Usa
GET /v1/geofencespara mostrar zonas en el mapa - Almacena las posiciones en tu base de datos para histórico y reportes
Datos que procesamos vía API
- Posiciones GPS (lat, lng, velocidad, altitud) de dispositivos registrados en tu cuenta
- Eventos de dispositivos (ignición, alertas, geocercas)
- Información de conductores asignados a dispositivos
Tus responsabilidades como integrador
Al usar la API, confirmas que tienes las autorizaciones necesarias de los propietarios y conductores de los vehículos para recopilar y procesar su información de ubicación, de acuerdo con las leyes de protección de datos aplicables en tu jurisdicción.
Para la política completa de privacidad de la plataforma GPS, visita gpssoftwarenumberone.com.
Uso aceptable
- La API es exclusiva para uso con dispositivos registrados en tu cuenta.
- No puedes revender el acceso a la API como un servicio independiente.
- El uso de la API para acceder a datos de otros tenants está prohibido y puede resultar en suspensión inmediata.
- Los integradores deben respetar los rate limits y no implementar mecanismos para eludirlos.
Suspensión de acceso
Nos reservamos el derecho de suspender o revocar credenciales de API en caso de violación de estos términos, abuso del servicio, o actividad que ponga en riesgo la estabilidad de la plataforma.
Mantenimientos programados
Los mantenimientos se notifican con al menos 48 horas de anticipación por correo a integradores registrados. Se realizan preferentemente los domingos entre 02:00-04:00 UTC.
Devuelve el recorrido del día con posiciones GPS, kilometros recorridos y metricas de uso.
Parámetros de query
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
from | string | REQ | Fecha inicio en formato YYYY-MM-DD |
to | string | REQ | Fecha fin en formato YYYY-MM-DD |
Respuesta
| Campo | Tipo | Descripción |
|---|---|---|
distance_km | number | Kilometros totales recorridos en el periodo |
top_speed | number | Velocidad máxima registrada (km/h) |
move_duration | string | Tiempo total en movimiento |
stop_duration | string | Tiempo total detenido |
positions | array | Array de posiciones GPS con time, lat, lng, speed, address |
curl "https://developers.gpssoftwarenumberone.com/api/v1/history/1001?from=2026-06-02&to=2026-06-02" \
-H "Authorization: Bearer demo_gps2024"
Devuelve todas las alertas configuradas con su tipo, estado y dispositivos asignados.
Tipos de alerta
| type | Descripción |
|---|---|
overspeed | Exceso de velocidad |
geofence_in | Entrada a geocerca |
geofence_out | Salida de geocerca |
ignition_on | Ignición encendida |
ignition_off | Ignición apagada |
sos | Pánico / alarma |
device_offline | Dispositivo sin conexión |
curl "https://developers.gpssoftwarenumberone.com/api/v1/alerts" \
-H "Authorization: Bearer demo_gps2024"
expiration_by: odometer (km), engine_hours (horas de motor) o days (días). Ideal para integración con software de mantenimiento como Fleetio, ERPNext o sistemas propios.Devuelve todos los servicios de mantenimiento. Filtra por dispositivo con el parámetro device_id.
Parámetros de query
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
device_id | integer | OPT | Filtrar por dispositivo especifico |
Campos de respuesta
| Campo | Tipo | Descripción |
|---|---|---|
expiration_by | string | odometer, engine_hours o days |
interval | number | Intervalo de mantenimiento (km, horas o días) |
last_service | number | Valor al momento del último servicio |
expires_at | number | Valor al que vence el proximo servicio |
remaining | number | Cantidad restante hasta el vencimiento (negativo = vencido) |
expired | boolean | Si el servicio ya esta vencido |
curl "https://developers.gpssoftwarenumberone.com/api/v1/services?device_id=1001" \
-H "Authorization: Bearer demo_gps2024"
Devuelve todos los conductores con nombre, contacto, RFID y vehículo asignado actualmente.
| Campo | Tipo | Descripción |
|---|---|---|
name | string | Nombre completo del conductor |
phone | string | Teléfono de contacto |
rfid | string | Código RFID de identificación en vehículo |
assigned_device_id | integer | ID del vehículo asignado actualmente |
assigned_device | string | Nombre del vehículo asignado |
curl "https://developers.gpssoftwarenumberone.com/api/v1/drivers" \
-H "Authorization: Bearer demo_gps2024"