Vani Logo Vani / API Docs v1
Access Vani
Zone Operations / Data

Data

Low-level batch read and mutation escape hatch over zones, frames, and objects.

List zones, frames, zone-slots or objects

Lists data entities with optional pagination. Accepts either a single operation or an operations array for a batch request.

OperationREAD
Rate limit120 requests / minute · per user
OAuth scopesVani.spaces.READ
Path parameters edition_id · space_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
space_idREQUIRED string The unique identifier of the space
Query parameters revision_id · operation · operations
NameTypeDescription
revision_idOPTIONAL string Optional: specific revision to fetch; latest if empty
operationOPTIONAL string (JSON) JSON-encoded single ListOperation document: {operation_id?, list_zones:{start_index?, max_results?, page_token?} | list_frames:{zone_id, start_index?, max_results?, page_token?} | list_zone_slots:{zone_id, start_index?, max_results?, page_token?} | list_objects:{container:{zone:{zone_id} | frame:{zone_id, frame_id}}, start_index?, max_results?, page_token?}}. Send this value as a JSON string, not as a JSON object — URL-encode the encoded JSON.
STRING CARRYING JSON URL-encode before sending
Decoded
{
  "list_objects": {
    "container": {
      "zone": {
        "zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
      },
      "frame": {
        "zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
        "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
      }
    },
    "start_index": 1,
    "page_token": "1",
    "max_results": 1
  },
  "list_frames": {
    "zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
    "start_index": 1,
    "page_token": "1",
    "max_results": 1
  },
  "list_zones": {
    "start_index": 1,
    "page_token": "1",
    "max_results": 1
  },
  "operation_id": "60712000000123456",
  "list_zone_slots": {
    "zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
    "start_index": 1,
    "page_token": "1",
    "max_results": 1
  }
}
URL-encoded, as sent
%7B%22list_objects%22%3A%7B%22container%22%3A%7B%22zone%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%7D%2C%22frame%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22frame_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%7D%7D%2C%22start_index%22%3A1%2C%22page_token%22%3A%221%22%2C%22max_results%22%3A1%7D%2C%22list_frames%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22start_index%22%3A1%2C%22page_token%22%3A%221%22%2C%22max_results%22%3A1%7D%2C%22list_zones%22%3A%7B%22start_index%22%3A1%2C%22page_token%22%3A%221%22%2C%22max_results%22%3A1%7D%2C%22operation_id%22%3A%2260712000000123456%22%2C%22list_zone_slots%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22start_index%22%3A1%2C%22page_token%22%3A%221%22%2C%22max_results%22%3A1%7D%7D
operationsOPTIONAL string (JSON) `operations` — JSON-encoded array of ListOperation documents for a batch request. Each element follows the same structure as the single operation param. Send this value as a JSON string, not as a JSON object — URL-encode the encoded JSON.
STRING CARRYING JSON URL-encode before sending
Decoded
[
  {
    "list_objects": {
      "container": {
        "zone": {
          "zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
        },
        "frame": {
          "zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
          "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
        }
      },
      "start_index": 1,
      "page_token": "1",
      "max_results": 1
    },
    "list_frames": {
      "zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
      "start_index": 1,
      "page_token": "1",
      "max_results": 1
    },
    "list_zones": {
      "start_index": 1,
      "page_token": "1",
      "max_results": 1
    },
    "operation_id": "60712000000123456",
    "list_zone_slots": {
      "zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
      "start_index": 1,
      "page_token": "1",
      "max_results": 1
    }
  }
]
URL-encoded, as sent
%5B%7B%22list_objects%22%3A%7B%22container%22%3A%7B%22zone%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%7D%2C%22frame%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22frame_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%7D%7D%2C%22start_index%22%3A1%2C%22page_token%22%3A%221%22%2C%22max_results%22%3A1%7D%2C%22list_frames%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22start_index%22%3A1%2C%22page_token%22%3A%221%22%2C%22max_results%22%3A1%7D%2C%22list_zones%22%3A%7B%22start_index%22%3A1%2C%22page_token%22%3A%221%22%2C%22max_results%22%3A1%7D%2C%22operation_id%22%3A%2260712000000123456%22%2C%22list_zone_slots%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22start_index%22%3A1%2C%22page_token%22%3A%221%22%2C%22max_results%22%3A1%7D%7D%5D
curl -X GET "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/list" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json"
import requests

url = "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/list"
headers = {
    "Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
    "Content-Type": "application/json"
}

response = requests.get(url, headers=headers)
data = response.json()
print(data)
const https = require('https');
const url = require('url');

const options = {
  ...url.parse('https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/list'),
  method: 'GET',
  headers: {
    'Authorization': 'Zoho-oauthtoken YOUR_ACCESS_TOKEN',
    'Content-Type': 'application/json'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => data += chunk);
  res.on('end', () => {
    const result = JSON.parse(data);
    // Process the response data
  });
});

req.end();
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;

public class ApiClient {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();

        HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
            .uri(URI.create("https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/list"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        HttpRequest request = requestBuilder
            .GET(HttpRequest.BodyPublishers.noBody())
            .build();

        HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString());

        System.out.println(response.body());
    }
}
info "Making API request to: https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/list";

headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");

response = invokeurl
[
    url: "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/list"
    type: GET
    headers: headers
];

if (response.get("status_code") == 200) {
    info "Request successful";
    responseData = response.get("response");
    info responseData;
} else {
    info "Request failed with status: " + response.get("status_code");
    info response.get("response");
}
Successful response
{
  "status": "success",
  "data": {},
  "message": "Request completed successfully",
  "request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/list"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/list",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "error_code": "IAM1100",
      "message": "Unauthorized - missing or invalid access token"
    }
  },
  "request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/list",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "error_code": "IAM1001",
      "message": "Not found - a resource named in the path does not exist, or is not visible to the caller"
    }
  },
  "request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/list",
  "status": "error"
}
Rate limit exceeded - this operation allows 120 requests per minute per user
{
  "error": {
    "details": {
      "error_code": "IAM1055",
      "message": "Rate limit exceeded - this operation allows 120 requests per minute per user"
    }
  },
  "request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/list",
  "status": "error"
}
Internal server error - the request was well-formed but could not be completed
{
  "error": {
    "details": {
      "error_code": "U1001",
      "message": "Internal server error - the request was well-formed but could not be completed"
    }
  },
  "request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/list",
  "status": "error"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
429  Rate limit exceeded - this operation allows 120 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
Get zones, frames, objects, facets or zone-slots

Reads one or more data entities \u2014 zone, frame, object, object facet, space or zone-slot \u2014 through a structured operation. Accepts either a single operation or an operations array for a batch request.

OperationREAD
Rate limit120 requests / minute · per user
OAuth scopesVani.spaces.READ
Path parameters edition_id · space_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
space_idREQUIRED string The unique identifier of the space
Query parameters revision_id · operation · operations
NameTypeDescription
revision_idOPTIONAL string Optional: specific revision to fetch; latest if empty
operationOPTIONAL string (JSON) JSON-encoded single GetOperation document: {operation_id?, get_space:{} | get_zone:{zone_id} | get_frame:{zone_id, frame_id} | get_zone_slot:{zone_slot:{zone_id, index}} | get_object:{object:{zone_object:{zone_id, object_id} | frame_object:{zone_id, frame_id, object_id}}} | get_object_facet:{object:{...}, facet_type}}. Send this value as a JSON string, not as a JSON object — URL-encode the encoded JSON.
STRING CARRYING JSON URL-encode before sending
Decoded
{
  "get_zone": {
    "zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
  },
  "get_frame": {
    "zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
    "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
  },
  "operation_id": "60712000000123456",
  "get_space": {},
  "get_object_facet": {
    "facet_type": "OBJECT_FACET_TYPE_UNSPECIFIED",
    "object": {
      "zone_object": {
        "zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
        "object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
      },
      "frame_object": {
        "zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
        "object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
        "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
      }
    }
  },
  "get_object": {
    "object": {
      "zone_object": {
        "zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
        "object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
      },
      "frame_object": {
        "zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
        "object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
        "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
      }
    }
  },
  "get_zone_slot": {
    "zone_slot": {
      "zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
      "index": 1
    }
  }
}
URL-encoded, as sent
%7B%22get_zone%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%7D%2C%22get_frame%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22frame_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%7D%2C%22operation_id%22%3A%2260712000000123456%22%2C%22get_space%22%3A%7B%7D%2C%22get_object_facet%22%3A%7B%22facet_type%22%3A%22OBJECT_FACET_TYPE_UNSPECIFIED%22%2C%22object%22%3A%7B%22zone_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%7D%2C%22frame_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22frame_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%7D%7D%7D%2C%22get_object%22%3A%7B%22object%22%3A%7B%22zone_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%7D%2C%22frame_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22frame_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%7D%7D%7D%2C%22get_zone_slot%22%3A%7B%22zone_slot%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22index%22%3A1%7D%7D%7D
operationsOPTIONAL string (JSON) `operations` — JSON-encoded array of GetOperation documents for a batch request. Each element follows the same structure as the single operation param. Send this value as a JSON string, not as a JSON object — URL-encode the encoded JSON.
STRING CARRYING JSON URL-encode before sending
Decoded
[
  {
    "get_zone": {
      "zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
    },
    "get_frame": {
      "zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
      "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
    },
    "operation_id": "60712000000123456",
    "get_space": {},
    "get_object_facet": {
      "facet_type": "OBJECT_FACET_TYPE_UNSPECIFIED",
      "object": {
        "zone_object": {
          "zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
          "object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
        },
        "frame_object": {
          "zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
          "object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
          "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
        }
      }
    },
    "get_object": {
      "object": {
        "zone_object": {
          "zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
          "object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
        },
        "frame_object": {
          "zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
          "object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
          "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
        }
      }
    },
    "get_zone_slot": {
      "zone_slot": {
        "zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
        "index": 1
      }
    }
  }
]
URL-encoded, as sent
%5B%7B%22get_zone%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%7D%2C%22get_frame%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22frame_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%7D%2C%22operation_id%22%3A%2260712000000123456%22%2C%22get_space%22%3A%7B%7D%2C%22get_object_facet%22%3A%7B%22facet_type%22%3A%22OBJECT_FACET_TYPE_UNSPECIFIED%22%2C%22object%22%3A%7B%22zone_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%7D%2C%22frame_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22frame_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%7D%7D%7D%2C%22get_object%22%3A%7B%22object%22%3A%7B%22zone_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%7D%2C%22frame_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22frame_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%7D%7D%7D%2C%22get_zone_slot%22%3A%7B%22zone_slot%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22index%22%3A1%7D%7D%7D%5D
curl -X GET "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/get" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json"
import requests

url = "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/get"
headers = {
    "Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
    "Content-Type": "application/json"
}

response = requests.get(url, headers=headers)
data = response.json()
print(data)
const https = require('https');
const url = require('url');

const options = {
  ...url.parse('https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/get'),
  method: 'GET',
  headers: {
    'Authorization': 'Zoho-oauthtoken YOUR_ACCESS_TOKEN',
    'Content-Type': 'application/json'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => data += chunk);
  res.on('end', () => {
    const result = JSON.parse(data);
    // Process the response data
  });
});

req.end();
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;

public class ApiClient {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();

        HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
            .uri(URI.create("https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/get"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        HttpRequest request = requestBuilder
            .GET(HttpRequest.BodyPublishers.noBody())
            .build();

        HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString());

        System.out.println(response.body());
    }
}
info "Making API request to: https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/get";

headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");

response = invokeurl
[
    url: "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/get"
    type: GET
    headers: headers
];

if (response.get("status_code") == 200) {
    info "Request successful";
    responseData = response.get("response");
    info responseData;
} else {
    info "Request failed with status: " + response.get("status_code");
    info response.get("response");
}
Successful response
{
  "status": "success",
  "data": {},
  "message": "Request completed successfully",
  "request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/get"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/get",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "error_code": "IAM1100",
      "message": "Unauthorized - missing or invalid access token"
    }
  },
  "request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/get",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "error_code": "IAM1001",
      "message": "Not found - a resource named in the path does not exist, or is not visible to the caller"
    }
  },
  "request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/get",
  "status": "error"
}
Rate limit exceeded - this operation allows 120 requests per minute per user
{
  "error": {
    "details": {
      "error_code": "IAM1055",
      "message": "Rate limit exceeded - this operation allows 120 requests per minute per user"
    }
  },
  "request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/get",
  "status": "error"
}
Internal server error - the request was well-formed but could not be completed
{
  "error": {
    "details": {
      "error_code": "U1001",
      "message": "Internal server error - the request was well-formed but could not be completed"
    }
  },
  "request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/get",
  "status": "error"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
429  Rate limit exceeded - this operation allows 120 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
Apply a single deterministic mutation operation to a Space
OperationCREATE
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.CREATE
Path parameters edition_id · space_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
space_idREQUIRED string The unique identifier of the space
Request body application/json
Tick a field to put it in the sample payload, and set what it carries in the Value column. Every field is optional unless it is marked REQUIRED, and those are always sent.
FieldTypeDescriptionValue
base_revision_id string Optimistic-concurrency revision token
space_id string Target space identifier (echoed from URL path; optional in body)
operation REQUIRED string (JSON) Stringified JSON of a single SpaceOperation proto: {operation_id?, and exactly one of update_space_meta | insert_zone | update_zone_meta | delete_zone | insert_frame | update_frame_meta | delete_frame | insert_zone_slot | update_zone_slot | delete_zone_slot | insert_object | update_object | delete_object | update_object_facet} (max length 500000)
curl -X POST "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/update" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "operation": "{\"update_space_meta\":{\"update_mask\":{\"paths\":[\"string\"]},\"space\":{\"zone_ids\":[\"string\"],\"spec_version\":{\"patch\":\"42\",\"major\":\"42\",\"minor\":\"42\"},\"manifest\":{\"zone_refs\":[{\"content_type\":\"string\",\"id\":\"string\",\"uri\":\"string\"}],\"media_refs\":[{\"content_type\":\"string\",\"id\":\"string\",\"uri\":\"string\"}],\"frame_refs\":[{\"content_type\":\"string\",\"id\":\"string\",\"uri\":\"string\"}]},\"name\":\"Sample name\",\"id\":\"60712000000123456\",\"style_manifest_id\":\"60712000000123456\"}},\"operation_id\":\"60712000000123456\"}",
  "base_revision_id": "60712000000123456",
  "space_id": "60712000000123456"
}'
import requests

url = "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/update"
headers = {
    "Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
    "Content-Type": "application/json"
}

data = {
  "operation": "{\"update_space_meta\":{\"update_mask\":{\"paths\":[\"string\"]},\"space\":{\"zone_ids\":[\"string\"],\"spec_version\":{\"patch\":\"42\",\"major\":\"42\",\"minor\":\"42\"},\"manifest\":{\"zone_refs\":[{\"content_type\":\"string\",\"id\":\"string\",\"uri\":\"string\"}],\"media_refs\":[{\"content_type\":\"string\",\"id\":\"string\",\"uri\":\"string\"}],\"frame_refs\":[{\"content_type\":\"string\",\"id\":\"string\",\"uri\":\"string\"}]},\"name\":\"Sample name\",\"id\":\"60712000000123456\",\"style_manifest_id\":\"60712000000123456\"}},\"operation_id\":\"60712000000123456\"}",
  "base_revision_id": "60712000000123456",
  "space_id": "60712000000123456"
}

response = requests.post(url, headers=headers, json=data)
data = response.json()
print(data)
const https = require('https');
const url = require('url');

const options = {
  ...url.parse('https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/update'),
  method: 'POST',
  headers: {
    'Authorization': 'Zoho-oauthtoken YOUR_ACCESS_TOKEN',
    'Content-Type': 'application/json'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => data += chunk);
  res.on('end', () => {
    const result = JSON.parse(data);
    // Process the response data
  });
});

req.write(JSON.stringify({
  "operation": "{\"update_space_meta\":{\"update_mask\":{\"paths\":[\"string\"]},\"space\":{\"zone_ids\":[\"string\"],\"spec_version\":{\"patch\":\"42\",\"major\":\"42\",\"minor\":\"42\"},\"manifest\":{\"zone_refs\":[{\"content_type\":\"string\",\"id\":\"string\",\"uri\":\"string\"}],\"media_refs\":[{\"content_type\":\"string\",\"id\":\"string\",\"uri\":\"string\"}],\"frame_refs\":[{\"content_type\":\"string\",\"id\":\"string\",\"uri\":\"string\"}]},\"name\":\"Sample name\",\"id\":\"60712000000123456\",\"style_manifest_id\":\"60712000000123456\"}},\"operation_id\":\"60712000000123456\"}",
  "base_revision_id": "60712000000123456",
  "space_id": "60712000000123456"
}));
req.end();
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;

public class ApiClient {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();

        HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
            .uri(URI.create("https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/update"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        String requestBody = "{\"operation\":\"{\\"update_space_meta\\":{\\"update_mask\\":{\\"paths\\":[\\"string\\"]},\\"space\\":{\\"zone_ids\\":[\\"string\\"],\\"spec_version\\":{\\"patch\\":\\"42\\",\\"major\\":\\"42\\",\\"minor\\":\\"42\\"},\\"manifest\\":{\\"zone_refs\\":[{\\"content_type\\":\\"string\\",\\"id\\":\\"string\\",\\"uri\\":\\"string\\"}],\\"media_refs\\":[{\\"content_type\\":\\"string\\",\\"id\\":\\"string\\",\\"uri\\":\\"string\\"}],\\"frame_refs\\":[{\\"content_type\\":\\"string\\",\\"id\\":\\"string\\",\\"uri\\":\\"string\\"}]},\\"name\\":\\"Sample name\\",\\"id\\":\\"60712000000123456\\",\\"style_manifest_id\\":\\"60712000000123456\\"}},\\"operation_id\\":\\"60712000000123456\\"}\",\"base_revision_id\":\"60712000000123456\",\"space_id\":\"60712000000123456\"}";
        HttpRequest request = requestBuilder
            .POST(HttpRequest.BodyPublishers.ofString(requestBody))
            .build();

        HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString());

        System.out.println(response.body());
    }
}
info "Making API request to: https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/update";

headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");

requestData = {"operation": "{\"update_space_meta\":{\"update_mask\":{\"paths\":[\"string\"]},\"space\":{\"zone_ids\":[\"string\"],\"spec_version\":{\"patch\":\"42\",\"major\":\"42\",\"minor\":\"42\"},\"manifest\":{\"zone_refs\":[{\"content_type\":\"string\",\"id\":\"string\",\"uri\":\"string\"}],\"media_refs\":[{\"content_type\":\"string\",\"id\":\"string\",\"uri\":\"string\"}],\"frame_refs\":[{\"content_type\":\"string\",\"id\":\"string\",\"uri\":\"string\"}]},\"name\":\"Sample name\",\"id\":\"60712000000123456\",\"style_manifest_id\":\"60712000000123456\"}},\"operation_id\":\"60712000000123456\"}", "base_revision_id": "60712000000123456", "space_id": "60712000000123456"};

response = invokeurl
[
    url: "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/update"
    type: POST
    headers: headers
    parameters: requestData
];

if (response.get("status_code") == 200) {
    info "Request successful";
    responseData = response.get("response");
    info responseData;
} else {
    info "Request failed with status: " + response.get("status_code");
    info response.get("response");
}
{
  "operation": "{\"update_space_meta\":{\"update_mask\":{\"paths\":[\"string\"]},\"space\":{\"zone_ids\":[\"string\"],\"spec_version\":{\"patch\":\"42\",\"major\":\"42\",\"minor\":\"42\"},\"manifest\":{\"zone_refs\":[{\"content_type\":\"string\",\"id\":\"string\",\"uri\":\"string\"}],\"media_refs\":[{\"content_type\":\"string\",\"id\":\"string\",\"uri\":\"string\"}],\"frame_refs\":[{\"content_type\":\"string\",\"id\":\"string\",\"uri\":\"string\"}]},\"name\":\"Sample name\",\"id\":\"60712000000123456\",\"style_manifest_id\":\"60712000000123456\"}},\"operation_id\":\"60712000000123456\"}",
  "base_revision_id": "60712000000123456",
  "space_id": "60712000000123456"
}
Successful response
{
  "status": "string",
  "data": {},
  "message": "string",
  "request_uri": "string"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/update",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "error_code": "IAM1100",
      "message": "Unauthorized - missing or invalid access token"
    }
  },
  "request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/update",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "error_code": "IAM1001",
      "message": "Not found - a resource named in the path does not exist, or is not visible to the caller"
    }
  },
  "request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/update",
  "status": "error"
}
Rate limit exceeded - this operation allows 60 requests per minute per user
{
  "error": {
    "details": {
      "error_code": "IAM1055",
      "message": "Rate limit exceeded - this operation allows 60 requests per minute per user"
    }
  },
  "request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/update",
  "status": "error"
}
Internal server error - the request was well-formed but could not be completed
{
  "error": {
    "details": {
      "error_code": "U1001",
      "message": "Internal server error - the request was well-formed but could not be completed"
    }
  },
  "request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/update",
  "status": "error"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
429  Rate limit exceeded - this operation allows 60 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
Apply multiple deterministic mutation operations to a Space in order
OperationCREATE
Rate limit30 requests / minute · per user
OAuth scopesVani.spaces.CREATE
Path parameters edition_id · space_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
space_idREQUIRED string The unique identifier of the space
Request body application/json
Tick a field to put it in the sample payload, and set what it carries in the Value column. Every field is optional unless it is marked REQUIRED, and those are always sent.
FieldTypeDescriptionValue
operations REQUIRED array of string Array of SpaceOperation proto JSON objects (min 1, max 1)
apply_mode string Batch execution strategy; defaults to BEST_EFFORT when omitted (max length 50)
BATCH_APPLY_MODE_UNSPECIFIEDATOMICBEST_EFFORT
base_revision_id string Optimistic-concurrency revision token
space_id string Target space identifier (echoed from URL path; optional in body)
curl -X POST "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/batchUpdate" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "operations": [
    "{\"update_space_meta\":{\"update_mask\":{\"paths\":[\"string\"]},\"space\":{\"zone_ids\":[\"string\"],\"spec_version\":{\"patch\":\"42\",\"major\":\"42\",\"minor\":\"42\"},\"manifest\":{\"zone_refs\":[{}],\"media_refs\":[{}],\"frame_refs\":[{}]},\"name\":\"Sample name\",\"id\":\"60712000000123456\",\"style_manifest_id\":\"60712000000123456\"}},\"operation_id\":\"60712000000123456\"}"
  ],
  "apply_mode": "BEST_EFFORT",
  "base_revision_id": "60712000000123456",
  "space_id": "60712000000123456"
}'
import requests

url = "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/batchUpdate"
headers = {
    "Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
    "Content-Type": "application/json"
}

data = {
  "operations": [
    "{\"update_space_meta\":{\"update_mask\":{\"paths\":[\"string\"]},\"space\":{\"zone_ids\":[\"string\"],\"spec_version\":{\"patch\":\"42\",\"major\":\"42\",\"minor\":\"42\"},\"manifest\":{\"zone_refs\":[{}],\"media_refs\":[{}],\"frame_refs\":[{}]},\"name\":\"Sample name\",\"id\":\"60712000000123456\",\"style_manifest_id\":\"60712000000123456\"}},\"operation_id\":\"60712000000123456\"}"
  ],
  "apply_mode": "BEST_EFFORT",
  "base_revision_id": "60712000000123456",
  "space_id": "60712000000123456"
}

response = requests.post(url, headers=headers, json=data)
data = response.json()
print(data)
const https = require('https');
const url = require('url');

const options = {
  ...url.parse('https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/batchUpdate'),
  method: 'POST',
  headers: {
    'Authorization': 'Zoho-oauthtoken YOUR_ACCESS_TOKEN',
    'Content-Type': 'application/json'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => data += chunk);
  res.on('end', () => {
    const result = JSON.parse(data);
    // Process the response data
  });
});

req.write(JSON.stringify({
  "operations": [
    "{\"update_space_meta\":{\"update_mask\":{\"paths\":[\"string\"]},\"space\":{\"zone_ids\":[\"string\"],\"spec_version\":{\"patch\":\"42\",\"major\":\"42\",\"minor\":\"42\"},\"manifest\":{\"zone_refs\":[{}],\"media_refs\":[{}],\"frame_refs\":[{}]},\"name\":\"Sample name\",\"id\":\"60712000000123456\",\"style_manifest_id\":\"60712000000123456\"}},\"operation_id\":\"60712000000123456\"}"
  ],
  "apply_mode": "BEST_EFFORT",
  "base_revision_id": "60712000000123456",
  "space_id": "60712000000123456"
}));
req.end();
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;

public class ApiClient {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();

        HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
            .uri(URI.create("https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/batchUpdate"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        String requestBody = "{\"operations\":[\"{\\"update_space_meta\\":{\\"update_mask\\":{\\"paths\\":[\\"string\\"]},\\"space\\":{\\"zone_ids\\":[\\"string\\"],\\"spec_version\\":{\\"patch\\":\\"42\\",\\"major\\":\\"42\\",\\"minor\\":\\"42\\"},\\"manifest\\":{\\"zone_refs\\":[{}],\\"media_refs\\":[{}],\\"frame_refs\\":[{}]},\\"name\\":\\"Sample name\\",\\"id\\":\\"60712000000123456\\",\\"style_manifest_id\\":\\"60712000000123456\\"}},\\"operation_id\\":\\"60712000000123456\\"}\"],\"apply_mode\":\"BEST_EFFORT\",\"base_revision_id\":\"60712000000123456\",\"space_id\":\"60712000000123456\"}";
        HttpRequest request = requestBuilder
            .POST(HttpRequest.BodyPublishers.ofString(requestBody))
            .build();

        HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString());

        System.out.println(response.body());
    }
}
info "Making API request to: https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/batchUpdate";

headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");

requestData = {"operations": {"{\"update_space_meta\":{\"update_mask\":{\"paths\":[\"string\"]},\"space\":{\"zone_ids\":[\"string\"],\"spec_version\":{\"patch\":\"42\",\"major\":\"42\",\"minor\":\"42\"},\"manifest\":{\"zone_refs\":[{}],\"media_refs\":[{}],\"frame_refs\":[{}]},\"name\":\"Sample name\",\"id\":\"60712000000123456\",\"style_manifest_id\":\"60712000000123456\"}},\"operation_id\":\"60712000000123456\"}"}, "apply_mode": "BEST_EFFORT", "base_revision_id": "60712000000123456", "space_id": "60712000000123456"};

response = invokeurl
[
    url: "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/batchUpdate"
    type: POST
    headers: headers
    parameters: requestData
];

if (response.get("status_code") == 200) {
    info "Request successful";
    responseData = response.get("response");
    info responseData;
} else {
    info "Request failed with status: " + response.get("status_code");
    info response.get("response");
}
{
  "operations": [
    "{\"update_space_meta\":{\"update_mask\":{\"paths\":[\"string\"]},\"space\":{\"zone_ids\":[\"string\"],\"spec_version\":{\"patch\":\"42\",\"major\":\"42\",\"minor\":\"42\"},\"manifest\":{\"zone_refs\":[{}],\"media_refs\":[{}],\"frame_refs\":[{}]},\"name\":\"Sample name\",\"id\":\"60712000000123456\",\"style_manifest_id\":\"60712000000123456\"}},\"operation_id\":\"60712000000123456\"}"
  ],
  "apply_mode": "BEST_EFFORT",
  "base_revision_id": "60712000000123456",
  "space_id": "60712000000123456"
}
Successful response
{
  "status": "string",
  "data": {},
  "message": "string",
  "request_uri": "string"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/batchUpdate",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "error_code": "IAM1100",
      "message": "Unauthorized - missing or invalid access token"
    }
  },
  "request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/batchUpdate",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "error_code": "IAM1001",
      "message": "Not found - a resource named in the path does not exist, or is not visible to the caller"
    }
  },
  "request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/batchUpdate",
  "status": "error"
}
Rate limit exceeded - this operation allows 30 requests per minute per user
{
  "error": {
    "details": {
      "error_code": "IAM1055",
      "message": "Rate limit exceeded - this operation allows 30 requests per minute per user"
    }
  },
  "request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/batchUpdate",
  "status": "error"
}
Internal server error - the request was well-formed but could not be completed
{
  "error": {
    "details": {
      "error_code": "U1001",
      "message": "Internal server error - the request was well-formed but could not be completed"
    }
  },
  "request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/data/batchUpdate",
  "status": "error"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
429  Rate limit exceeded - this operation allows 30 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
© 2026 Zoho Corporation Pvt. Ltd. Help