Crear un Data Bundle
Antes de subir los datos de captura, necesitas un data bundle vacío vinculado a un dispositivo de captura específico. La creación es un flujo de dos pasos: obtener el árbol de entradas del dispositivo del data bundle y, a continuación, crear el bundle con el dbuPath totalmente resuelto del dispositivo hoja que hayas seleccionado. El árbol de entradas se devuelve en una sola llamada; recórrelo localmente (por name y children) hasta llegar a una hoja. Los nodos hoja contienen la cadena dbuPath que pasas en el momento de la creación; los nodos rama tienen dbuPath: null.
Endpoints
Sección titulada «Endpoints»| Método | Ruta | Ámbito | Propósito |
|---|---|---|---|
GET | /v1/organization/{organizationId}/data-bundle-input-tree | read:bundle | Obtener el árbol de entradas del dispositivo |
POST | /v1/nodes/{parentId}/bundle | write:bundle | Crear un data bundle |
Paso 1: obtener el árbol de entradas
Sección titulada «Paso 1: obtener el árbol de entradas»GET {api_url}/v1/organization/{organizationId}/data-bundle-input-treeAuthorization: Bearer {access_token}La respuesta es un árbol anidado. Cada nodo incluye:
| Campo | Significado |
|---|---|
name | Identificador estable usado para construir rutas |
label | Nombre para mostrar legible por humanos |
isLeaf | true cuando el nodo es un dispositivo de captura seleccionable |
dbuPath | Ruta del dispositivo totalmente resuelta en los nodos hoja; null en las ramas |
children | Nodos hijos (array vacío en las hojas) |
Ejemplo (truncado):
{ "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": [] } ] } ] } ]}Recorre el árbol hasta que isLeaf sea true y luego copia dbuPath (aquí POINTCLOUD/ZF/ZFSLAM).
Paso 2: crear el bundle
Sección titulada «Paso 2: crear el bundle»Crea el bundle bajo un nodo padre sobre el que tengas permiso (normalmente un sitio o una carpeta). Pasa el nombre del bundle y el dbuPath de la hoja del paso 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 el id devuelto como bundleId para los pasos de subida, procesamiento y descarga.
Casos de error
Sección titulada «Casos de error»| Estado | Causa |
|---|---|
400 Bad Request | El dbuPath es desconocido, no es una hoja o no está disponible |
403 Forbidden | Sin permiso sobre el nodo padre, o sin acceso al contenido |
Ejemplo completo
Sección titulada «Ejemplo 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()
# 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']}")Paso siguiente
Sección titulada «Paso siguiente»Con un bundleId en la mano, continúa con Subir datos a un Data Bundle.