ERT API — Referenz
REST-Schnittstelle des ERT-Systems (Electrical Resistivity Tomography): Authentifizierung, Surveys, Messwerte, Inversions-Tomogramme, Geräte und Konfigurationsprofile. Alle Antworten sind JSON.
Authentifizierung
Geschützte Endpunkte erwarten ein Bearer-Token im Authorization-Header.
Das Token bekommst du über POST /login und ist 30 Tage gültig.
# 1) Anmelden und Token holen curl -X POST https://ert.fabianschieder.com/login \ -H "Accept: application/json" \ -d '{"username":"dein-benutzer","password":"dein-passwort"}' # → {"token":"a1b2c3…"} # 2) Token bei jeder geschützten Anfrage mitschicken curl https://ert.fabianschieder.com/surveys \ -H "Authorization: Bearer a1b2c3…" \ -H "Accept: application/json"
Accept: application/json mit.
Anfragen mit Accept: text/html (also ein Browser) liefert der Server bewusst die Web-Oberfläche
(ERT Cloud) statt JSON aus.Konventionen
Einheitliches Format für Erfolg und Fehler.
Fehler-Antwort
{ "error": "invalid token" }
Status-Codes
Auth & Account
Prüft Benutzername + Passwort und gibt ein 30-Tage-Token zurück.
Request Body
| Feld | Typ | |
|---|---|---|
| username | string | erforderlich |
| password | string | erforderlich |
Beispiel
curl -X POST …/login \
-d '{"username":"dein-benutzer",
"password":"dein-passwort"}'200 OK
{ "token": "a1b2c3d4…" }
Widerruft das aktuell verwendete Token (Logout).
200 OK
{ "ok": true }
Registriert einen neuen Benutzer.
Request Body
| Feld | Typ | |
|---|---|---|
| username | string | erforderlich |
| string | erforderlich | |
| password | string | erforderlich |
201 Created
{ "id": 5 }Fehler
Liefert den eigenen Account (des Token-Inhabers).
200 OK
{
"id": 3,
"username": "admin",
"email": "admin@email.com",
"created_at": "2026-08-02 18:37:18"
}
Ändert E-Mail und/oder Passwort des eigenen Accounts. Mindestens ein Feld nötig.
Request Body
| Feld | Typ | |
|---|---|---|
| string | optional | |
| password | string | optional |
Beispiel
curl -X PATCH …/user \ -H "Authorization: Bearer …" \ -d '{"email":"neu@mail.com"}'
Antwort
{ "ok": true }
Daten
Kennzahlen des eigenen Accounts – für das Dashboard.
200 OK
{
"surveys": 2,
"surveys_running": 1,
"readings": 515,
"inversions": 1,
"config_profiles": 1
}
Liste aller eigenen Surveys, inkl. Gerätebezeichnung sowie Anzahl Messwerte und Inversionen.
200 OK
[
{
"id": 1, "name": "Baugrund Nord – Profil 1",
"site": "Grundstück Nord", "scheme": "wenner",
"latitude": "48.208170", "longitude": "16.373820",
"electrode_count": 48, "electrode_spacing_m": 1,
"status": "finished", "started_at": "2026-08-23 00:06:28",
"device_label": "Feldgerät A", "device_serial": "ERT-DEMO-001",
"reading_count": 360, "inversion_count": 1
}
]
Ein Survey im Detail: Stammdaten, alle Messwerte und die Liste der Inversionen.
Nur der Besitzer erhält Zugriff, sonst 404.
200 OK
{
"survey": { "id": 1, "name": "Baugrund Nord – Profil 1", "notes": "…", … },
"readings": [ { "sequence_no": 1, "apparent_resistivity_ohmm": 118.4, … } ],
"inversions": [ { "id": 1, "algorithm": "Gauss-Newton", "rms_error": 3.74, … } ]
}
Nur die Messwerte eines Surveys (ohne Stammdaten/Inversionen) – nützlich für Diagramme.
200 OK
[
{
"sequence_no": 1, "elec_a": 1, "elec_b": 4, "elec_m": 2, "elec_n": 3,
"injected_current_ma": 50.2, "voltage_mv": 31.9,
"apparent_resistivity_ohmm": 118.4, "geometric_factor_k": 6.28,
"x_position_m": 2.5, "pseudo_depth_m": 0.52, "is_valid": 1
}
]
Ändert Felder eines eigenen Surveys. Nur übergebene Felder werden geschrieben.
Änderbare Felder
| Feld | Typ |
|---|---|
| name | string |
| site | string |
| notes | string |
| status | running | finished | aborted |
| latitude | decimal |
| longitude | decimal |
Beispiel
curl -X PATCH …/surveys/1 \ -H "Authorization: Bearer …" \ -d '{"status":"finished", "notes":"geprüft"}'
Antwort
{ "ok": true }
Löscht ein eigenes Survey samt aller Messwerte und Inversionen (Cascade).
200 OK
{ "ok": true }
Eine Inversion mit dem kompletten Zellengitter (Tomogramm). Besitz wird über das zugehörige Survey geprüft.
200 OK
{
"inversion": {
"id": 1, "survey_id": 1, "algorithm": "Gauss-Newton (smooth)",
"iterations": 6, "rms_error": 3.74, "palette": "viridis",
"value_min": 12, "value_max": 520
},
"cells": [ { "x_m": 0, "z_m": 0, "resistivity_ohmm": 119.7 }, … ]
}
Alle registrierten Messgeräte (Hardware ist geteilt, nicht benutzergebunden).
200 OK
[
{
"id": 1, "serial_number": "ERT-DEMO-001", "label": "Feldgerät A",
"firmware_version": "2.3.1", "electrode_count": 48
}
]
Eigene Konfigurationsprofile (Messeinstellungen). Einzelnes Profil via /config_profiles/:id.
200 OK
[
{
"id": 1, "name": "Standard Wenner 1m", "electrode_spacing_m": 1,
"acquisition_samples": 512, "settling_time_ms": 120,
"gain_target": 0.6, "gain_low_threshold": 0.15, …
}
]
Ändert ein eigenes Profil. Änderbar sind u. a. name, device_id,
electrode_spacing_m, acquisition_samples, preview_samples,
settling_time_ms, state_timeout_ms, sämtliche gain_*-Schwellen,
warn_duration_ms, warn_frequency_hz, active_electrode_mask.
Beispiel
curl -X PATCH …/config_profiles/1 \ -H "Authorization: Bearer …" \ -d '{"gain_target":0.7, "acquisition_samples":1024}'
Antwort
{ "ok": true }
Löscht ein eigenes Konfigurationsprofil.
200 OK
{ "ok": true }