Data Bundle erstellen
Bevor Sie Erfassungsdaten hochladen, benötigen Sie ein leeres Data Bundle, das an ein bestimmtes Erfassungsgerät gebunden ist. Die Erstellung erfolgt in zwei Schritten: Den Data-Bundle-Geräte-Input-Baum abrufen, dann das Bundle mit dem vollständig aufgelösten dbuPath des ausgewählten Blattgeräts erstellen. Der Input-Baum wird in einem einzigen Aufruf zurückgegeben; durchlaufen Sie ihn lokal (über name und children), bis Sie ein Blatt erreichen. Blattknoten enthalten den dbuPath-String, den Sie bei der Erstellung übergeben; Zweigknoten haben dbuPath: null.
Endpunkte
Abschnitt betitelt „Endpunkte“| Method | Path | Scope | Purpose |
|---|---|---|---|
GET | /v1/organization/{organizationId}/data-bundle-input-tree | read:bundle | Geräte-Input-Baum abrufen |
POST | /v1/nodes/{parentId}/bundle | write:bundle | Data Bundle erstellen |
Schritt 1: Input-Baum abrufen
Abschnitt betitelt „Schritt 1: Input-Baum abrufen“GET {api_url}/v1/organization/{organizationId}/data-bundle-input-treeAuthorization: Bearer {access_token}Die Antwort ist ein verschachtelter Baum. Jeder Knoten enthält:
| Field | Meaning |
|---|---|
name | Stabile Kennung zum Aufbau von Pfaden |
label | Menschenlesbarer Anzeigename |
isLeaf | true, wenn der Knoten ein auswählbares Erfassungsgerät ist |
dbuPath | Vollständig aufgelöster Gerätepfad auf Blattknoten; null auf Zweigen |
children | Untergeordnete Knoten (leeres Array auf Blättern) |
Beispiel (gekürzt):
{ "nodes": [ { "name": "POINTCLOUD", "label": "Point Cloud", "isLeaf": false, "dbuPath": null, "children": [ { "name": "ZF", "label": "ZF", "isLeaf": false, "dbuPath": null, "children": [ { "name": "ZFSLAM", "label": "ZF SLAM", "isLeaf": true, "dbuPath": "POINTCLOUD/ZF/ZFSLAM", "children": [] } ] } ] } ]}Durchlaufen Sie den Baum, bis isLeaf true ist, und kopieren Sie dann dbuPath (hier POINTCLOUD/ZF/ZFSLAM).
Schritt 2: Bundle erstellen
Abschnitt betitelt „Schritt 2: Bundle erstellen“Erstellen Sie das Bundle unter einem übergeordneten Knoten, für den Sie berechtigt sind (typischerweise ein Site oder Ordner). Übergeben Sie den Bundle-Namen und den Blatt-dbuPath aus Schritt 1.
POST {api_url}/v1/nodes/{parentId}/bundleAuthorization: Bearer {access_token}Content-Type: application/json
{ "name": "ZF capture 2026-06-01", "dbuPath": "POINTCLOUD/ZF/ZFSLAM" }{ "id": "a6f75b3c-f261-4b27-9a2a-9a6cc1234c53", "name": "ZF capture 2026-01-01", "dbuPath": "POINTCLOUD/ZF/ZFSLAM"}Verwenden Sie die zurückgegebene id als bundleId für Upload-, Verarbeitungs- und Download-Schritte.
Fehlerfälle
Abschnitt betitelt „Fehlerfälle“| Status | Cause |
|---|---|
400 Bad Request | dbuPath ist unbekannt, kein Blatt oder nicht verfügbar |
403 Forbidden | Keine Berechtigung auf dem übergeordneten Knoten oder kein Inhaltszugriff |
Vollständiges Beispiel
Abschnitt betitelt „Vollständiges Beispiel“import requests
API_URL = "https://<your-regional-api-url>"TOKEN = "<access_token>"ORG_ID = "<organization_id>"PARENT_ID = "<site-or-folder-id>"
headers = {"Authorization": f"Bearer {TOKEN}"}
tree = requests.get( f"{API_URL}/v1/organization/{ORG_ID}/data-bundle-input-tree", headers=headers,).json()
# Walk the tree to find the ZF SLAM leaf (your navigation logic may differ).def find_dbu_path(nodes, *path): node = nodes for segment in path: node = next(n for n in node if n["name"] == segment) node = node["children"] leaf = node[0] assert leaf["isLeaf"] return leaf["dbuPath"]
dbu_path = find_dbu_path(tree["nodes"], "POINTCLOUD", "ZF", "ZFSLAM")
bundle = requests.post( f"{API_URL}/v1/nodes/{PARENT_ID}/bundle", headers=headers, json={"name": "ZF capture 2026-01-01", "dbuPath": dbu_path},).json()
bundle_id = bundle["id"]print(f"Created bundle {bundle_id} for device {bundle['dbuPath']}")Nächster Schritt
Abschnitt betitelt „Nächster Schritt“Mit einer bundleId können Sie mit Daten in ein Data Bundle hochladen fortfahren.