EasyTrack API-Referenz
Alle Endpoints, die Sie in Ihr eigenes System oder eine externe App integrieren können: Authentifizierung, Tracker, GPS-Positionen in Echtzeit, Fahrzeuge, Geofences, Agentenzuweisungen, Alarme, Berichte und Share-Links.
Überblick
Die EasyTrack-API ist eine JSON-REST-API, gehostet auf Cloudflare (Edge, Region EU).
Alle Anfragen erfolgen über HTTPS. Antworten sind application/json (außer CSV/PDF-Exporte).
Echtzeit-Trackingdaten stammen von Teltonika- / FMC-Trackern und sind wenige Sekunden nach
dem Servereingang verfügbar.
| Domain | https://api.easytrack.ch |
|---|---|
| Format | JSON UTF-8 |
| Auth | Bearer-Token (per E-Mail-OTP erhalten) |
| Methoden | GET, POST, PUT, PATCH, DELETE |
| CORS | Aktiviert (Access-Control-Allow-Origin: * auf den Hauptressourcen) |
Basis-URL & Formate
https://api.easytrack.ch
Jeder Endpoint unten ist relativ zu dieser Basis. Beispiel:
GET /devices → https://api.easytrack.ch/devices.
Authentifizierung
Fast alle Endpoints benötigen einen Bearer-Token. Sie erhalten den Token in zwei
Schritten: OTP-Code per E-Mail anfordern, dann den Code verifizieren. Fügen Sie anschließend den
Authorization-Header zu jeder Anfrage hinzu:
Authorization: Bearer <Ihr_Token>
Content-Type: application/json
401 mit {"error":"Token manquant"} oder
{"error":"Session invalide ou expirée"} zurück. Als
Public markierte Endpoints benötigen keinen Token.
Erster Aufruf
1 · Code anfordern
curl -X POST https://api.easytrack.ch/auth/request-code \
-H "Content-Type: application/json" \
-d '{"email":"sie@beispiel.ch","lang":"de"}'
2 · Code verifizieren und Token erhalten
curl -X POST https://api.easytrack.ch/auth/verify-code \
-H "Content-Type: application/json" \
-d '{"email":"sie@beispiel.ch","code":"123456"}'
# => { "success": true, "token": "…", "expires_at": "…", "user": { … } }
3 · Ihre Tracker auflisten
curl https://api.easytrack.ch/devices \
-H "Authorization: Bearer <token>"
In JavaScript (fetch):
const res = await fetch("https://api.easytrack.ch/devices", {
headers: { Authorization: `Bearer ${token}` }
});
const { devices } = await res.json();
Endpoint-Familien
Authentifizierung — Login & Session
Sendet einen 6-stelligen OTP-Code per E-Mail (oder SMS).
Body
{
"email": "sie@beispiel.ch",
"lang": "de" // optional (fr, de, en, it…)
}
Antwort
{ "success": true, "message": "Code gesendet", "expires_in": 600 }
Verifiziert das OTP und gibt einen Bearer-Token zurück. Ist 2FA aktiviert, wird requires_2fa zurückgegeben.
Body
{ "email": "sie@beispiel.ch", "code": "123456" }
Antwort (ohne 2FA)
{
"success": true,
"token": "…",
"expires_at": "2026-08-01T10:00:00.000Z",
"user": { "id": 42, "email": "sie@beispiel.ch", "role": "client", "two_factor_enabled": false }
}
Antwort (2FA erforderlich)
{ "success": true, "requires_2fa": true, "pending_token": "…" }
Schließt den Login mit dem TOTP-Code (oder einem Backup-Code) und dem pending_token ab.
Body
{ "pending_token": "…", "code": "654321" }
Sendet einen einmaligen Login-Link per E-Mail.
Body
{ "email": "sie@beispiel.ch" }
Gibt den zum aktuellen Token gehörenden Nutzer zurück (nützlich zur Session-Validierung).
Invalidiert die aktuelle Session (der Token ist danach unbrauchbar).
Listet die aktiven Sessions des Kontos. DELETE /auth/sessions widerruft die anderen Sessions.
Authentifizierung — 2FA & Profil
| Methode | Endpoint | Zweck |
|---|---|---|
| GET | /auth/profile | Profil abrufen |
| PUT | /auth/profile | Profil aktualisieren (Name, Sprache…) |
| GET | /auth/2fa/status | 2FA-Status |
| POST | /auth/2fa/setup | TOTP-Secret + QR generieren |
| POST | /auth/2fa/verify | 2FA aktivieren (validiert einen Code) |
| POST | /auth/2fa/disable | 2FA deaktivieren |
| POST | /auth/2fa/backup-codes | Backup-Codes neu generieren |
| POST | /auth/push-token | Push-Token registrieren (mobil) |
| DELETE | /auth/push-token | Push-Token entfernen |
| GET | /auth/notification-preferences | Benachrichtigungseinstellungen |
| PUT | /auth/notification-preferences | Einstellungen ändern |
Tracker (Geräte)
Ein Gerät ist ein GPS-Tracker, identifiziert durch seine imei. Die folgenden
Endpoints geben nur die Tracker Ihres Kontos zurück (sowie die mit Ihnen geteilten).
Angereicherte Liste Ihrer Tracker: letzte Position, Akku, Online-Status, verknüpftes Fahrzeug, aktiver Agent, SIM-Backup.
Antwort (Auszug)
{
"success": true,
"source": "known_devices",
"devices": [
{
"id": 12, "imei": "350612073912345", "name": "LKW 1",
"status": "online",
"last_latitude": 46.204, "last_longitude": 6.143,
"last_speed": 0, "last_heading": 180, "last_battery": 87,
"last_position_at": "2026-07-11 06:12:33",
"vehicle_plate": "GE 123456", "vehicle_name": "Transporter",
"active_agent_name": null, "is_shared": false
}
]
}
Echtzeit-Variante: aktuelle Rohwerte jedes aktiven Trackers, ideal zum Aktualisieren einer Karte.
Tage, an denen mindestens eine der angegebenen IMEIs Positionen hat (nützlich für einen Datumsauswähler).
Query
| Parameter | Erforderlich | Beschreibung |
|---|---|---|
imeis | ja | Kommagetrennte Liste von IMEIs |
from | nein | Mindestdatum YYYY-MM-DD |
to | nein | Höchstdatum YYYY-MM-DD |
Tracker-Details per IMEI + seine letzten 50 Positionen.
Tracker-Details per interner ID + seine letzten 50 Positionen.
Aktiviert (registriert) einen Tracker in Ihrem Konto per IMEI.
Body
{ "imei": "350612073912345", "name": "LKW 1" } // name optional
Benennt/aktiviert einen Tracker und aktualisiert das verknüpfte Fahrzeug (bei Bedarf erstellt).
Body (alle Felder optional)
{
"name": "LKW 1", "is_active": true,
"vehicle_plate": "GE 123456", "vehicle_name": "Transporter",
"vehicle_type": "van", "vehicle_model": "Ford Transit",
"vehicle_color": "#2563eb", "vehicle_assigned_to": "Hans"
}
Entfernt einen Tracker aus dem Konto (verknüpfte Positionen und Alarme werden bereinigt, Fahrzeug entkoppelt).
GPS-Positionen
Letzte bekannte Position jedes Ihrer Tracker (eine Zeile pro Gerät).
Strom aktueller Positionen, nach IMEI filterbar.
Query
| Parameter | Standard | Beschreibung |
|---|---|---|
imei | — | Filter auf einen Tracker |
limit | 100 | Maximale Anzahl Punkte |
Positionsverlauf eines Trackers, mit optional geokodierten Adressen.
Query
| Parameter | Standard | Beschreibung |
|---|---|---|
limit | 100 | Maximale Anzahl Punkte |
from | — | Untergrenze (server_timestamp) |
to | — | Obergrenze |
address | true | false deaktiviert die Reverse-Geokodierung |
Paginierter Export des Roh-Verlaufs eines Trackers (5000 Punkte pro Seite).
Query
| Parameter | Erforderlich | Beschreibung |
|---|---|---|
imei | ja | Zu exportierender Tracker |
from/to | nein | Zeitspanne |
page | nein | Seitenindex (Standard 0) |
Antwort
{ "success": true, "imei": "…", "page": 0, "page_size": 5000,
"count": 5000, "has_more": true, "positions": [ … ] }
Positionen eines Trackers über seine interne ID.
Fallback-Positionen aus der Mobilfunk-(SIM-)Ortung, wenn GPS nicht verfügbar ist.
Positionsaufnahme (von Trackern/Gateways aufgerufen). Für eine Client-Integration selten nützlich.
Positionsfelder
| Feld | Beschreibung |
|---|---|
latitude, longitude | WGS84-Koordinaten |
speed | Geschwindigkeit (km/h) |
heading / angle | Kurs (Grad) |
altitude | Höhe (m) |
satellites, hdop | GPS-Fix-Qualität |
ignition, movement | Zündung / Bewegung (0/1) |
battery_level, gsm_signal | Akku und Netzsignal |
server_timestamp | Server-Zeitstempel (YYYY-MM-DD HH:MM:SS, UTC) |
Fahrzeuge
Mit einem Tracker verknüpfter Fahrzeugdatensatz (Kennzeichen, Modell, Farbe, zugewiesene Person).
| Methode | Endpoint | Zweck |
|---|---|---|
| GET | /vehicles | Ihre Fahrzeuge auflisten |
| GET | /vehicles/{id} | Fahrzeugdetails |
| POST | /vehicles | Fahrzeug erstellen |
| PUT | /vehicles/{id} | Fahrzeug aktualisieren |
| DELETE | /vehicles/{id} | Fahrzeug löschen |
Body (POST/PUT)
{
"plate": "GE 123456", "name": "Transporter",
"vehicle_type": "van", "vehicle_model": "Ford Transit",
"color": "#2563eb", "device_id": 12, "assigned_to": "Hans"
}
Geofences
Kreisförmige Zonen, die Alarme bei Ein- und/oder Ausfahrt auslösen.
| Methode | Endpoint | Zweck |
|---|---|---|
| GET | /geofences | Ihre Zonen auflisten |
| GET | /geofences/{id} | Zonendetails |
| POST | /geofences | Zone erstellen |
| PUT | /geofences/{id} | Zone aktualisieren |
| DELETE | /geofences/{id} | Zone löschen |
Body (POST/PUT)
{
"name": "Depot Genf",
"latitude": 46.204, "longitude": 6.143, "radius": 150,
"type": "vehicle", // oder "general"
"vehicle_id": 12, // erforderlich wenn type = "vehicle"
"color": "#ef4444",
"alert_on_enter": true, "alert_on_exit": true,
"description": "Parkzone"
}
Agentenzuweisungen
Verwalten Sie Ihre Agenten (Promotoren/Fahrer) und die Zuteilung von Trackern an einen Agenten für eine Session.
| Methode | Endpoint | Zweck |
|---|---|---|
| GET | /assignments/agents | Agenten auflisten |
| POST | /assignments/agents | Agent erstellen |
| PUT PATCH | /assignments/agents/{id} | Agent aktualisieren |
| DELETE | /assignments/agents/{id} | Agent löschen |
| GET | /assignments/devices/{imei}/current | Aktuell einem Tracker zugewiesener Agent |
| GET | /assignments/devices/{imei}/history | Zuweisungsverlauf |
| POST | /assignments/devices/{imei}/assign | Agent einem Tracker zuweisen |
| POST | /assignments/devices/{imei}/unassign | Tracker freigeben |
Alarme
Benachrichtigungsregeln (niedriger Akku, Geschwindigkeitsüberschreitung, Zonen-Ein-/Ausfahrt usw.).
| Methode | Endpoint | Zweck |
|---|---|---|
| GET | /manager/alerts | Alarme auflisten |
| POST | /manager/alerts | Alarm erstellen |
| PUT | /manager/alerts/{id} | Alarm aktualisieren |
| DELETE | /manager/alerts/{id} | Alarm löschen |
Share-Links (öffentliches Teilen)
Erstellen Sie temporäre Share-Links, mit denen bestimmte Tracker ohne Konto verfolgt werden können.
| Methode | Endpoint | Zweck |
|---|---|---|
| GET | /manager/share-links | Ihre Links auflisten |
| POST | /manager/share-links | Link erstellen (IMEI + Ablauf) |
| PUT | /manager/share-links/{id} | Aktualisieren / (de)aktivieren |
| DELETE | /manager/share-links/{id} | Link widerrufen |
Berichte
Geplante Berichte (PDF) und Nachverfolgung ihrer Ausführungen.
| Methode | Endpoint | Zweck |
|---|---|---|
| GET | /manager/reports | Konfigurierte Berichte auflisten |
| POST | /manager/reports | Geplanten Bericht erstellen |
| POST | /manager/reports/autoconfig | Automatische Konfiguration |
| PUT | /manager/reports/{id} | Bericht aktualisieren |
| DELETE | /manager/reports/{id} | Bericht löschen |
| POST | /manager/reports/{id}/run-now | Sofort generieren |
| GET | /manager/reports/{id}/runs | Ausführungen eines Berichts |
| GET | /manager/report-runs | Alle jüngsten Ausführungen |
| GET | /manager/report-configs | Konfigurationen auflisten |
| POST | /manager/report-configs | Konfiguration erstellen |
Benachrichtigungen & Einstellungen
| Methode | Endpoint | Zweck |
|---|---|---|
| GET | /manager/notifications | Benachrichtigungen auflisten |
| POST | /manager/notifications/{id}/read | Als gelesen markieren |
| GET | /manager/settings | Kontoeinstellungen |
| PUT | /manager/settings | Einstellungen ändern |
| PUT | /manager/profile | Manager-Profil ändern |
| GET | /manager/geofences | Geofences (Manager-Ansicht) |
Öffentliches Teilen
Löst einen Share-Link auf: gibt die geteilten Tracker/IMEIs und den Ablauf zurück. Kein Token erforderlich.
Antwort
{ "success": true, "devices": [ … ], "imeis": ["…"], "expires_at": "…" }
Konventionen — JSON-Antworten
Erfolgreiche Antworten enthalten in der Regel success: true und die Ressource (oder eine Liste).
{ "success": true, "devices": [ … ] }
Fehler
Fehler geben einen passenden HTTP-Status und einen Body { "error": "message" } zurück.
| Status | Bedeutung |
|---|---|
400 | Ungültige Anfrage (fehlender Parameter / Format) |
401 | Token fehlt, ungültig oder abgelaufen |
403 | Zugriff auf diese Ressource verweigert (z. B. Tracker eines anderen Kontos) |
404 | Ressource oder Endpoint nicht gefunden |
500 | Serverfehler |
Paginierung
Positionslisten werden über limit begrenzt. Der Verlaufs-Export
(/positions/export) ist in Seiten zu 5000 Punkten paginiert: iterieren Sie
über page, solange has_more true ist.
Datum & Zeitzonen
- Tokens/Sessions verwenden ISO 8601 UTC (
2026-07-11T06:12:33.000Z). - Positions-Zeitstempel (
server_timestamp) verwenden das FormatYYYY-MM-DD HH:MM:SSin UTC. - Die Filter
from/toakzeptieren dasselbe Format wie das Zielfeld.
403 zurück. Bewahren Sie den Token serverseitig auf; geben Sie ihn
nicht in einem öffentlichen Frontend preis.