Creare un Data Bundle
Prima di caricare i dati di acquisizione, hai bisogno di un data bundle vuoto collegato a un dispositivo di acquisizione specifico. La creazione è un flusso in due passaggi: recuperare l’albero degli input del dispositivo del data bundle, quindi creare il bundle con il dbuPath completamente risolto del dispositivo foglia selezionato. L’albero degli input viene restituito in un’unica chiamata; percorrilo localmente (per name e children) finché non raggiungi una foglia. I nodi foglia contengono la stringa dbuPath che passi al momento della creazione; i nodi ramo hanno dbuPath: null.
Endpoint
Sezione intitolata “Endpoint”| Metodo | Percorso | Scope | Scopo |
|---|---|---|---|
GET | /v1/organization/{organizationId}/data-bundle-input-tree | read:bundle | Recuperare l’albero degli input del dispositivo |
POST | /v1/nodes/{parentId}/bundle | write:bundle | Creare un data bundle |
Passaggio 1: recuperare l’albero degli input
Sezione intitolata “Passaggio 1: recuperare l’albero degli input”GET {api_url}/v1/organization/{organizationId}/data-bundle-input-treeAuthorization: Bearer {access_token}La risposta è un albero annidato. Ogni nodo include:
| Campo | Significato |
|---|---|
name | Identificatore stabile usato per costruire i percorsi |
label | Nome visualizzato leggibile |
isLeaf | true quando il nodo è un dispositivo di acquisizione selezionabile |
dbuPath | Percorso del dispositivo completamente risolto sui nodi foglia; null sui rami |
children | Nodi figli (array vuoto sulle foglie) |
Esempio (troncato):
{ "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": [] } ] } ] } ]}Percorri l’albero finché isLeaf non è true, quindi copia dbuPath (qui POINTCLOUD/ZF/ZFSLAM).
Passaggio 2: creare il bundle
Sezione intitolata “Passaggio 2: creare il bundle”Crea il bundle sotto un nodo padre su cui hai i permessi (tipicamente un sito o una cartella). Passa il nome del bundle e il dbuPath foglia del passaggio 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"}Usa l’id restituito come bundleId per i passaggi di caricamento, elaborazione e download.
Casi di errore
Sezione intitolata “Casi di errore”| Stato | Causa |
|---|---|
400 Bad Request | dbuPath è sconosciuto, non è una foglia o non è disponibile |
403 Forbidden | Nessun permesso sul nodo padre o nessun accesso ai contenuti |
Esempio completo
Sezione intitolata “Esempio completo”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()
# Percorri l'albero per trovare la foglia ZF SLAM (la tua logica di navigazione può differire).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']}")Passaggio successivo
Sezione intitolata “Passaggio successivo”Con un bundleId a disposizione, continua con Caricare dati in un Data Bundle.