Daten-API
Über die REST-Daten-API können externe Programme auf die Daten eines Projekts zugreifen — für eigene Auswertungen, Import/Export oder die Anbindung anderer Apps. Der Zugriff erfolgt mit einem API-Schlüssel, der an genau ein Projekt gebunden ist.
https://gis.abapp.one/api/public/v11. Schlüssel erstellen
In der App: Verwaltung → Projekteinstellungen → Daten-API. Dort legst du einen Schlüssel an, wählst den Zugriff (Lesen oder Lesen + Schreiben) und optional ein Ablaufdatum. Der Schlüssel (Format agk_…) wird nur einmal angezeigt — danach bewahre ihn sicher auf wie ein Passwort. Nur Projekt-Verwalter (Owner/Admin) können Schlüssel anlegen.
2. Authentifizierung
Sende den Schlüssel bei jedem Aufruf in einem der beiden Header. Die API ist für die serverseitige Nutzung gedacht (Token statt Cookie):
Authorization: Bearer agk_DEIN_SCHLUESSEL
X-API-Key: agk_DEIN_SCHLUESSELZugriffsrechte: Ein Lese-Schlüssel darf nur GET-Aufrufe; Schreib-Aktionen (POST/PATCH/DELETE) brauchen einen Schreib-Schlüssel, sonst antwortet die API mit 403.
3. Endpunkte
| Methode | Pfad | Beschreibung |
|---|---|---|
| GET | /meta | Projekt-Eckdaten + Objekttypen + Felddefinitionen in einem Aufruf |
| GET | /object-types | Alle Objekttypen des Projekts (hierarchisch, mit Farbe/Icon) |
| GET | /field-definitions | Alle Felddefinitionen des Projekts |
| GET | /objects | Objekte auflisten — gefiltert & paginiert (siehe Parameter) |
| GET | /objects.geojson | Platzierte Objekte als GeoJSON-FeatureCollection |
| GET | /objects/{id} | Einzelnes Objekt mit Geometrie & Properties |
| GET | /objects/{id}/attachments | Anhänge eines Objekts (Metadaten + Download-URLs) |
| GET | /attachments/{id} | Anhang-Datei herunterladen (Bild, PDF, …) |
| POST | /objects | Neues Objekt anlegen Schreiben |
| PATCH | /objects/{id} | Objekt ändern — properties werden zusammengeführt Schreiben |
| DELETE | /objects/{id} | Objekt löschen (Soft-Delete, reversibel) Schreiben |
Query-Parameter von GET /objects
| type | Objekttyp-Name (Teiltreffer), schließt Kindtypen ein — z. B. type=Apfel |
| object_type_id | Exakte Objekttyp-UUID |
| exact | true = Kindtypen NICHT einschließen (nur zusammen mit type) |
| geom_type | point | path | polygon |
| bbox | Bounding-Box minLng,minLat,maxLng,maxLat (WGS84) |
| placed | true = nur platzierte, false = nur unplatzierte (Lager) |
| updated_since | ISO-Zeitstempel — nur seither geänderte Objekte (Delta-Sync) |
| q | Volltextsuche in Name & Properties (min. 2 Zeichen) |
| format | json (Standard) oder geojson |
| limit | max. Anzahl (Standard 100, Maximum 1000) |
| offset | Versatz für Paginierung (Standard 0) |
Geometrien sind GeoJSON in WGS84 / EPSG:4326 (Länge/Breite). Die Antwort von GET /objects ist { data, total, limit, offset }.
4. Beispiele
curl -H "Authorization: Bearer agk_DEIN_SCHLUESSEL" \
https://gis.abapp.one/api/public/v1/metacurl -H "Authorization: Bearer agk_DEIN_SCHLUESSEL" \
"https://gis.abapp.one/api/public/v1/objects?type=Apfel&placed=true&limit=50"curl -H "X-API-Key: agk_DEIN_SCHLUESSEL" \
"https://gis.abapp.one/api/public/v1/objects.geojson" > objekte.geojsoncurl -X POST \
-H "Authorization: Bearer agk_DEIN_SCHLUESSEL" \
-H "Content-Type: application/json" \
-d '{
"geom_type": "point",
"display_name": "Neuer Apfelbaum",
"geometry": { "type": "Point", "coordinates": [15.60, 47.20] },
"properties": { "Sorte": "Gravensteiner" }
}' \
https://gis.abapp.one/api/public/v1/objectsimport requests
BASE = "https://gis.abapp.one/api/public/v1"
KEY = "agk_DEIN_SCHLUESSEL"
headers = {"Authorization": f"Bearer {KEY}"}
# Alle Objekte paginiert abrufen
objekte, offset = [], 0
while True:
r = requests.get(f"{BASE}/objects",
headers=headers,
params={"limit": 500, "offset": offset})
r.raise_for_status()
page = r.json()
objekte += page["data"]
offset += len(page["data"])
if offset >= page["total"]:
break
print(f"{len(objekte)} Objekte geladen")# Nur seit dem letzten Abgleich geänderte Objekte holen (Delta-Sync):
curl -H "Authorization: Bearer agk_DEIN_SCHLUESSEL" \
"https://gis.abapp.one/api/public/v1/objects?updated_since=2026-10-01T00:00:00Z"Maschinenlesbare Spezifikation
Die vollständige OpenAPI-3.0-Beschreibung (für Codegeneratoren, Postman, Swagger …) gibt es hier:
openapi.json öffnen →