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.

Domainhttps://api.easytrack.ch
FormatJSON UTF-8
AuthBearer-Token (per E-Mail-OTP erhalten)
MethodenGET, POST, PUT, PATCH, DELETE
CORSAktiviert (Access-Control-Allow-Origin: * auf den Hauptressourcen)

Basis-URL & Formate

https://api.easytrack.ch

Jeder Endpoint unten ist relativ zu dieser Basis. Beispiel: GET /deviceshttps://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
Ohne gültigen Token Geschützte Routen geben 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

POST /auth/request-code Public

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 }
POST /auth/verify-code Public

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": "…" }
POST /auth/verify-2fa Public

Schließt den Login mit dem TOTP-Code (oder einem Backup-Code) und dem pending_token ab.

Body

{ "pending_token": "…", "code": "654321" }
POST /auth/magic-link Public

Sendet einen einmaligen Login-Link per E-Mail.

Body

{ "email": "sie@beispiel.ch" }
GET /auth/me Bearer

Gibt den zum aktuellen Token gehörenden Nutzer zurück (nützlich zur Session-Validierung).

POST /auth/logout Bearer

Invalidiert die aktuelle Session (der Token ist danach unbrauchbar).

GET /auth/sessions Bearer

Listet die aktiven Sessions des Kontos. DELETE /auth/sessions widerruft die anderen Sessions.

Authentifizierung — 2FA & Profil

MethodeEndpointZweck
GET/auth/profileProfil abrufen
PUT/auth/profileProfil aktualisieren (Name, Sprache…)
GET/auth/2fa/status2FA-Status
POST/auth/2fa/setupTOTP-Secret + QR generieren
POST/auth/2fa/verify2FA aktivieren (validiert einen Code)
POST/auth/2fa/disable2FA deaktivieren
POST/auth/2fa/backup-codesBackup-Codes neu generieren
POST/auth/push-tokenPush-Token registrieren (mobil)
DELETE/auth/push-tokenPush-Token entfernen
GET/auth/notification-preferencesBenachrichtigungseinstellungen
PUT/auth/notification-preferencesEinstellungen ä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).

GET /devices Bearer

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
    }
  ]
}
GET /devices/realtime Bearer

Echtzeit-Variante: aktuelle Rohwerte jedes aktiven Trackers, ideal zum Aktualisieren einer Karte.

GET /devices/active-days Bearer

Tage, an denen mindestens eine der angegebenen IMEIs Positionen hat (nützlich für einen Datumsauswähler).

Query

ParameterErforderlichBeschreibung
imeisjaKommagetrennte Liste von IMEIs
fromneinMindestdatum YYYY-MM-DD
toneinHöchstdatum YYYY-MM-DD
GET /devices/imei/{imei} Bearer

Tracker-Details per IMEI + seine letzten 50 Positionen.

GET /devices/{id} Bearer

Tracker-Details per interner ID + seine letzten 50 Positionen.

POST /devices Bearer

Aktiviert (registriert) einen Tracker in Ihrem Konto per IMEI.

Body

{ "imei": "350612073912345", "name": "LKW 1" }   // name optional
PUT /devices/{id} Bearer

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"
}
DELETE /devices/{id} Bearer

Entfernt einen Tracker aus dem Konto (verknüpfte Positionen und Alarme werden bereinigt, Fahrzeug entkoppelt).

GPS-Positionen

GET /positions/latest Bearer

Letzte bekannte Position jedes Ihrer Tracker (eine Zeile pro Gerät).

GET /positions Bearer

Strom aktueller Positionen, nach IMEI filterbar.

Query

ParameterStandardBeschreibung
imeiFilter auf einen Tracker
limit100Maximale Anzahl Punkte
GET /positions/imei/{imei} Bearer

Positionsverlauf eines Trackers, mit optional geokodierten Adressen.

Query

ParameterStandardBeschreibung
limit100Maximale Anzahl Punkte
fromUntergrenze (server_timestamp)
toObergrenze
addresstruefalse deaktiviert die Reverse-Geokodierung
GET /positions/export Bearer

Paginierter Export des Roh-Verlaufs eines Trackers (5000 Punkte pro Seite).

Query

ParameterErforderlichBeschreibung
imeijaZu exportierender Tracker
from/toneinZeitspanne
pageneinSeitenindex (Standard 0)

Antwort

{ "success": true, "imei": "…", "page": 0, "page_size": 5000,
  "count": 5000, "has_more": true, "positions": [ … ] }
GET /positions/device/{id} Bearer

Positionen eines Trackers über seine interne ID.

GET /positions/sim/{imei} Bearer

Fallback-Positionen aus der Mobilfunk-(SIM-)Ortung, wenn GPS nicht verfügbar ist.

POST /position Public

Positionsaufnahme (von Trackern/Gateways aufgerufen). Für eine Client-Integration selten nützlich.

Positionsfelder

FeldBeschreibung
latitude, longitudeWGS84-Koordinaten
speedGeschwindigkeit (km/h)
heading / angleKurs (Grad)
altitudeHöhe (m)
satellites, hdopGPS-Fix-Qualität
ignition, movementZündung / Bewegung (0/1)
battery_level, gsm_signalAkku und Netzsignal
server_timestampServer-Zeitstempel (YYYY-MM-DD HH:MM:SS, UTC)

Fahrzeuge

Mit einem Tracker verknüpfter Fahrzeugdatensatz (Kennzeichen, Modell, Farbe, zugewiesene Person).

MethodeEndpointZweck
GET/vehiclesIhre Fahrzeuge auflisten
GET/vehicles/{id}Fahrzeugdetails
POST/vehiclesFahrzeug 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.

MethodeEndpointZweck
GET/geofencesIhre Zonen auflisten
GET/geofences/{id}Zonendetails
POST/geofencesZone 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.

MethodeEndpointZweck
GET/assignments/agentsAgenten auflisten
POST/assignments/agentsAgent erstellen
PUT PATCH/assignments/agents/{id}Agent aktualisieren
DELETE/assignments/agents/{id}Agent löschen
GET/assignments/devices/{imei}/currentAktuell einem Tracker zugewiesener Agent
GET/assignments/devices/{imei}/historyZuweisungsverlauf
POST/assignments/devices/{imei}/assignAgent einem Tracker zuweisen
POST/assignments/devices/{imei}/unassignTracker freigeben

Alarme

Benachrichtigungsregeln (niedriger Akku, Geschwindigkeitsüberschreitung, Zonen-Ein-/Ausfahrt usw.).

MethodeEndpointZweck
GET/manager/alertsAlarme auflisten
POST/manager/alertsAlarm 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.

MethodeEndpointZweck
GET/manager/share-linksIhre Links auflisten
POST/manager/share-linksLink 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.

MethodeEndpointZweck
GET/manager/reportsKonfigurierte Berichte auflisten
POST/manager/reportsGeplanten Bericht erstellen
POST/manager/reports/autoconfigAutomatische Konfiguration
PUT/manager/reports/{id}Bericht aktualisieren
DELETE/manager/reports/{id}Bericht löschen
POST/manager/reports/{id}/run-nowSofort generieren
GET/manager/reports/{id}/runsAusführungen eines Berichts
GET/manager/report-runsAlle jüngsten Ausführungen
GET/manager/report-configsKonfigurationen auflisten
POST/manager/report-configsKonfiguration erstellen

Benachrichtigungen & Einstellungen

MethodeEndpointZweck
GET/manager/notificationsBenachrichtigungen auflisten
POST/manager/notifications/{id}/readAls gelesen markieren
GET/manager/settingsKontoeinstellungen
PUT/manager/settingsEinstellungen ändern
PUT/manager/profileManager-Profil ändern
GET/manager/geofencesGeofences (Manager-Ansicht)

Öffentliches Teilen

GET /open/share/{token} Public

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.

StatusBedeutung
400Ungültige Anfrage (fehlender Parameter / Format)
401Token fehlt, ungültig oder abgelaufen
403Zugriff auf diese Ressource verweigert (z. B. Tracker eines anderen Kontos)
404Ressource oder Endpoint nicht gefunden
500Serverfehler

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

Gut zu wissen Jedes Konto sieht nur seine eigenen Tracker (und die ausdrücklich geteilten). Ein Aufruf auf eine nicht autorisierte IMEI gibt 403 zurück. Bewahren Sie den Token serverseitig auf; geben Sie ihn nicht in einem öffentlichen Frontend preis.