Criando um Data Bundle
Antes de enviar dados de captura, você precisa de um data bundle vazio vinculado a um dispositivo de captura específico. A criação é um fluxo de duas etapas: obter a árvore de entrada de dispositivos do data bundle e, em seguida, criar o bundle com o dbuPath totalmente resolvido do dispositivo folha que você selecionou. A árvore de entrada é retornada em uma única chamada; percorra-a localmente (por name e children) até chegar a uma folha. Os nós folha carregam a string dbuPath que você passa no momento da criação; os nós de ramo têm dbuPath: null.
Endpoints
Seção intitulada “Endpoints”| Método | Caminho | Escopo | Finalidade |
|---|---|---|---|
GET | /v1/organization/{organizationId}/data-bundle-input-tree | read:bundle | Obter a árvore de entrada de dispositivos |
POST | /v1/nodes/{parentId}/bundle | write:bundle | Criar um data bundle |
Etapa 1: obter a árvore de entrada
Seção intitulada “Etapa 1: obter a árvore de entrada”GET {api_url}/v1/organization/{organizationId}/data-bundle-input-treeAuthorization: Bearer {access_token}A resposta é uma árvore aninhada. Cada nó inclui:
| Campo | Significado |
|---|---|
name | Identificador estável usado para montar caminhos |
label | Nome de exibição legível |
isLeaf | true quando o nó é um dispositivo de captura selecionável |
dbuPath | Caminho de dispositivo totalmente resolvido em nós folha; null em ramos |
children | Nós filhos (array vazio em folhas) |
Exemplo (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": [] } ] } ] } ]}Percorra a árvore até que isLeaf seja true e, em seguida, copie dbuPath (aqui, POINTCLOUD/ZF/ZFSLAM).
Etapa 2: criar o bundle
Seção intitulada “Etapa 2: criar o bundle”Crie o bundle sob um nó pai no qual você tenha permissão (normalmente um site ou pasta). Passe o nome do bundle e o dbuPath da folha obtido na etapa 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"}Use o id retornado como bundleId nas etapas de envio, processamento e download.
Casos de erro
Seção intitulada “Casos de erro”| Status | Causa |
|---|---|
400 Bad Request | dbuPath é desconhecido, não é uma folha ou não está disponível |
403 Forbidden | Sem permissão no nó pai ou sem acesso ao conteúdo |
Exemplo completo
Seção intitulada “Exemplo 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']}")Próxima etapa
Seção intitulada “Próxima etapa”Com um bundleId em mãos, continue em Enviando Dados para um Data Bundle.