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.

Basis-URL
https://gis.abapp.one/api/public/v1

1. 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_SCHLUESSEL

Zugriffsrechte: 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

MethodePfadBeschreibung
GET/metaProjekt-Eckdaten + Objekttypen + Felddefinitionen in einem Aufruf
GET/object-typesAlle Objekttypen des Projekts (hierarchisch, mit Farbe/Icon)
GET/field-definitionsAlle Felddefinitionen des Projekts
GET/objectsObjekte auflisten — gefiltert & paginiert (siehe Parameter)
GET/objects.geojsonPlatzierte Objekte als GeoJSON-FeatureCollection
GET/objects/{id}Einzelnes Objekt mit Geometrie & Properties
GET/objects/{id}/attachmentsAnhänge eines Objekts (Metadaten + Download-URLs)
GET/attachments/{id}Anhang-Datei herunterladen (Bild, PDF, …)
POST/objectsNeues 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

typeObjekttyp-Name (Teiltreffer), schließt Kindtypen ein — z. B. type=Apfel
object_type_idExakte Objekttyp-UUID
exacttrue = Kindtypen NICHT einschließen (nur zusammen mit type)
geom_typepoint | path | polygon
bboxBounding-Box minLng,minLat,maxLng,maxLat (WGS84)
placedtrue = nur platzierte, false = nur unplatzierte (Lager)
updated_sinceISO-Zeitstempel — nur seither geänderte Objekte (Delta-Sync)
qVolltextsuche in Name & Properties (min. 2 Zeichen)
formatjson (Standard) oder geojson
limitmax. Anzahl (Standard 100, Maximum 1000)
offsetVersatz 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

Projekt-Metadaten abrufen
curl -H "Authorization: Bearer agk_DEIN_SCHLUESSEL" \
  https://gis.abapp.one/api/public/v1/meta
Objekte filtern
curl -H "Authorization: Bearer agk_DEIN_SCHLUESSEL" \
  "https://gis.abapp.one/api/public/v1/objects?type=Apfel&placed=true&limit=50"
Als GeoJSON exportieren
curl -H "X-API-Key: agk_DEIN_SCHLUESSEL" \
  "https://gis.abapp.one/api/public/v1/objects.geojson" > objekte.geojson
Objekt anlegen (Schreib-Schlüssel)
curl -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/objects
Python (requests) — alle Objekte laden
import 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")
Delta-Sync — nur Änderungen
# 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 →