Zone Operations / Layout & Placement
Layout & Placement
Deterministic placement, alignment, tidy layout, spatial queries, and connector routing.
GET
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/frames/alignment-status
Check whether selected frames already satisfy a requested alignment mode and optional target bounds
Check whether selected frames already satisfy a requested alignment mode and optional target bounds
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.READPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
Query parameters anchoring_query
| Name | Type | Description |
|---|---|---|
| anchoring_queryREQUIRED | string (JSON) |
`anchoring_query` — JSON-encoded GetFrameAlignmentStatus request: frame_ids, mode, optional target. 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
{
"mode": "ALIGN_MODE_UNSPECIFIED",
"frame_ids": [
"string"
],
"target": {
"reference": "FRAME_ALIGN_REFERENCE_UNSPECIFIED",
"target_bounds": {
"x": "12.5",
"width": "12.5",
"y": "12.5",
"height": "12.5"
}
}
}
URL-encoded, as sent
%7B%22mode%22%3A%22ALIGN_MODE_UNSPECIFIED%22%2C%22frame_ids%22%3A%5B%22string%22%5D%2C%22target%22%3A%7B%22reference%22%3A%22FRAME_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D |
Request
GET
curl -X GET "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/frames/alignment-status?anchoring_query=%7B%22mode%22%3A%22ALIGN_MODE_UNSPECIFIED%22%2C%22frame_ids%22%3A%5B%22string%22%5D%2C%22target%22%3A%7B%22reference%22%3A%22FRAME_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D" \
-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}/zones/{zone_id}/anchoring/frames/alignment-status?anchoring_query=%7B%22mode%22%3A%22ALIGN_MODE_UNSPECIFIED%22%2C%22frame_ids%22%3A%5B%22string%22%5D%2C%22target%22%3A%7B%22reference%22%3A%22FRAME_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D"
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}/zones/{zone_id}/anchoring/frames/alignment-status?anchoring_query=%7B%22mode%22%3A%22ALIGN_MODE_UNSPECIFIED%22%2C%22frame_ids%22%3A%5B%22string%22%5D%2C%22target%22%3A%7B%22reference%22%3A%22FRAME_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D'),
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}/zones/{zone_id}/anchoring/frames/alignment-status?anchoring_query=%7B%22mode%22%3A%22ALIGN_MODE_UNSPECIFIED%22%2C%22frame_ids%22%3A%5B%22string%22%5D%2C%22target%22%3A%7B%22reference%22%3A%22FRAME_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D"))
.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}/zones/{zone_id}/anchoring/frames/alignment-status?anchoring_query=%7B%22mode%22%3A%22ALIGN_MODE_UNSPECIFIED%22%2C%22frame_ids%22%3A%5B%22string%22%5D%2C%22target%22%3A%7B%22reference%22%3A%22FRAME_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D";
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}/zones/{zone_id}/anchoring/frames/alignment-status?anchoring_query=%7B%22mode%22%3A%22ALIGN_MODE_UNSPECIFIED%22%2C%22frame_ids%22%3A%5B%22string%22%5D%2C%22target%22%3A%7B%22reference%22%3A%22FRAME_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D"
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");
}
Response
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}/zones/{zone_id}/anchoring/frames/alignment-status",
"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}/zones/{zone_id}/anchoring/frames/alignment-status",
"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}/zones/{zone_id}/anchoring/frames/alignment-status",
"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}/zones/{zone_id}/anchoring/frames/alignment-status",
"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}/zones/{zone_id}/anchoring/frames/alignment-status",
"status": "error"
}
Errors
5 status codes
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
GET
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/frames/placement-feasibility
Check whether a source frame can be placed relative to a target frame without violating constraints
Check whether a source frame can be placed relative to a target frame without violating constraints
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.READPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
Query parameters anchoring_query
| Name | Type | Description |
|---|---|---|
| anchoring_queryREQUIRED | string (JSON) |
`anchoring_query` — JSON-encoded GetFramePlacementFeasibility request: source_frame_id, target_frame_id, relation, optional constraint. 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
{
"target_frame_id": "60712000000123456",
"constraint": {
"keep_inside_container": true,
"avoid_overlap": true,
"cross_axis_alignment": "CROSS_AXIS_ALIGNMENT_UNSPECIFIED",
"gap": "12.5",
"snap_to_grid": true
},
"source_frame_id": "60712000000123456",
"relation": "ANCHOR_RELATION_UNSPECIFIED"
}
URL-encoded, as sent
%7B%22target_frame_id%22%3A%2260712000000123456%22%2C%22constraint%22%3A%7B%22keep_inside_container%22%3Atrue%2C%22avoid_overlap%22%3Atrue%2C%22cross_axis_alignment%22%3A%22CROSS_AXIS_ALIGNMENT_UNSPECIFIED%22%2C%22gap%22%3A%2212.5%22%2C%22snap_to_grid%22%3Atrue%7D%2C%22source_frame_id%22%3A%2260712000000123456%22%2C%22relation%22%3A%22ANCHOR_RELATION_UNSPECIFIED%22%7D |
Request
GET
curl -X GET "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/frames/placement-feasibility?anchoring_query=%7B%22target_frame_id%22%3A%2260712000000123456%22%2C%22constraint%22%3A%7B%22keep_inside_container%22%3Atrue%2C%22avoid_overlap%22%3Atrue%2C%22cross_axis_alignment%22%3A%22CROSS_AXIS_ALIGNMENT_UNSPECIFIED%22%2C%22gap%22%3A%2212.5%22%2C%22snap_to_grid%22%3Atrue%7D%2C%22source_frame_id%22%3A%2260712000000123456%22%2C%22relation%22%3A%22ANCHOR_RELATION_UNSPECIFIED%22%7D" \
-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}/zones/{zone_id}/anchoring/frames/placement-feasibility?anchoring_query=%7B%22target_frame_id%22%3A%2260712000000123456%22%2C%22constraint%22%3A%7B%22keep_inside_container%22%3Atrue%2C%22avoid_overlap%22%3Atrue%2C%22cross_axis_alignment%22%3A%22CROSS_AXIS_ALIGNMENT_UNSPECIFIED%22%2C%22gap%22%3A%2212.5%22%2C%22snap_to_grid%22%3Atrue%7D%2C%22source_frame_id%22%3A%2260712000000123456%22%2C%22relation%22%3A%22ANCHOR_RELATION_UNSPECIFIED%22%7D"
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}/zones/{zone_id}/anchoring/frames/placement-feasibility?anchoring_query=%7B%22target_frame_id%22%3A%2260712000000123456%22%2C%22constraint%22%3A%7B%22keep_inside_container%22%3Atrue%2C%22avoid_overlap%22%3Atrue%2C%22cross_axis_alignment%22%3A%22CROSS_AXIS_ALIGNMENT_UNSPECIFIED%22%2C%22gap%22%3A%2212.5%22%2C%22snap_to_grid%22%3Atrue%7D%2C%22source_frame_id%22%3A%2260712000000123456%22%2C%22relation%22%3A%22ANCHOR_RELATION_UNSPECIFIED%22%7D'),
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}/zones/{zone_id}/anchoring/frames/placement-feasibility?anchoring_query=%7B%22target_frame_id%22%3A%2260712000000123456%22%2C%22constraint%22%3A%7B%22keep_inside_container%22%3Atrue%2C%22avoid_overlap%22%3Atrue%2C%22cross_axis_alignment%22%3A%22CROSS_AXIS_ALIGNMENT_UNSPECIFIED%22%2C%22gap%22%3A%2212.5%22%2C%22snap_to_grid%22%3Atrue%7D%2C%22source_frame_id%22%3A%2260712000000123456%22%2C%22relation%22%3A%22ANCHOR_RELATION_UNSPECIFIED%22%7D"))
.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}/zones/{zone_id}/anchoring/frames/placement-feasibility?anchoring_query=%7B%22target_frame_id%22%3A%2260712000000123456%22%2C%22constraint%22%3A%7B%22keep_inside_container%22%3Atrue%2C%22avoid_overlap%22%3Atrue%2C%22cross_axis_alignment%22%3A%22CROSS_AXIS_ALIGNMENT_UNSPECIFIED%22%2C%22gap%22%3A%2212.5%22%2C%22snap_to_grid%22%3Atrue%7D%2C%22source_frame_id%22%3A%2260712000000123456%22%2C%22relation%22%3A%22ANCHOR_RELATION_UNSPECIFIED%22%7D";
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}/zones/{zone_id}/anchoring/frames/placement-feasibility?anchoring_query=%7B%22target_frame_id%22%3A%2260712000000123456%22%2C%22constraint%22%3A%7B%22keep_inside_container%22%3Atrue%2C%22avoid_overlap%22%3Atrue%2C%22cross_axis_alignment%22%3A%22CROSS_AXIS_ALIGNMENT_UNSPECIFIED%22%2C%22gap%22%3A%2212.5%22%2C%22snap_to_grid%22%3Atrue%7D%2C%22source_frame_id%22%3A%2260712000000123456%22%2C%22relation%22%3A%22ANCHOR_RELATION_UNSPECIFIED%22%7D"
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");
}
Response
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}/zones/{zone_id}/anchoring/frames/placement-feasibility",
"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}/zones/{zone_id}/anchoring/frames/placement-feasibility",
"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}/zones/{zone_id}/anchoring/frames/placement-feasibility",
"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}/zones/{zone_id}/anchoring/frames/placement-feasibility",
"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}/zones/{zone_id}/anchoring/frames/placement-feasibility",
"status": "error"
}
Errors
5 status codes
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
GET
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/objects/alignment-status
Check whether selected objects already satisfy a requested alignment mode and optional target bounds
Check whether selected objects already satisfy a requested alignment mode and optional target bounds
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.READPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
Query parameters anchoring_query
| Name | Type | Description |
|---|---|---|
| anchoring_queryREQUIRED | string (JSON) |
`anchoring_query` — JSON-encoded GetObjectAlignmentStatus request: objects, mode, optional target. 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
{
"mode": "ALIGN_MODE_UNSPECIFIED",
"objects": [
{
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "60712000000123456",
"frame_id": "60712000000123456"
}
],
"target": {
"reference": "OBJECT_ALIGN_REFERENCE_UNSPECIFIED",
"target_bounds": {
"x": "12.5",
"width": "12.5",
"y": "12.5",
"height": "12.5"
}
}
}
URL-encoded, as sent
%7B%22mode%22%3A%22ALIGN_MODE_UNSPECIFIED%22%2C%22objects%22%3A%5B%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%5D%2C%22target%22%3A%7B%22reference%22%3A%22OBJECT_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D |
Request
GET
curl -X GET "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/objects/alignment-status?anchoring_query=%7B%22mode%22%3A%22ALIGN_MODE_UNSPECIFIED%22%2C%22objects%22%3A%5B%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%5D%2C%22target%22%3A%7B%22reference%22%3A%22OBJECT_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D" \
-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}/zones/{zone_id}/anchoring/objects/alignment-status?anchoring_query=%7B%22mode%22%3A%22ALIGN_MODE_UNSPECIFIED%22%2C%22objects%22%3A%5B%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%5D%2C%22target%22%3A%7B%22reference%22%3A%22OBJECT_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D"
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}/zones/{zone_id}/anchoring/objects/alignment-status?anchoring_query=%7B%22mode%22%3A%22ALIGN_MODE_UNSPECIFIED%22%2C%22objects%22%3A%5B%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%5D%2C%22target%22%3A%7B%22reference%22%3A%22OBJECT_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D'),
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}/zones/{zone_id}/anchoring/objects/alignment-status?anchoring_query=%7B%22mode%22%3A%22ALIGN_MODE_UNSPECIFIED%22%2C%22objects%22%3A%5B%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%5D%2C%22target%22%3A%7B%22reference%22%3A%22OBJECT_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D"))
.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}/zones/{zone_id}/anchoring/objects/alignment-status?anchoring_query=%7B%22mode%22%3A%22ALIGN_MODE_UNSPECIFIED%22%2C%22objects%22%3A%5B%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%5D%2C%22target%22%3A%7B%22reference%22%3A%22OBJECT_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D";
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}/zones/{zone_id}/anchoring/objects/alignment-status?anchoring_query=%7B%22mode%22%3A%22ALIGN_MODE_UNSPECIFIED%22%2C%22objects%22%3A%5B%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%5D%2C%22target%22%3A%7B%22reference%22%3A%22OBJECT_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D"
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");
}
Response
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}/zones/{zone_id}/anchoring/objects/alignment-status",
"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}/zones/{zone_id}/anchoring/objects/alignment-status",
"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}/zones/{zone_id}/anchoring/objects/alignment-status",
"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}/zones/{zone_id}/anchoring/objects/alignment-status",
"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}/zones/{zone_id}/anchoring/objects/alignment-status",
"status": "error"
}
Errors
5 status codes
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
GET
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/objects/tidy-feasibility
Preview the tidy grid layout for selected objects without applying it
Preview the tidy grid layout for selected objects without applying it
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.READPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
Query parameters anchoring_query
| Name | Type | Description |
|---|---|---|
| anchoring_queryREQUIRED | string (JSON) |
`anchoring_query` — JSON-encoded GetObjectTidyFeasibility request: objects, optional direction/spacing/target. 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
{
"fixed_spacing": "12.5",
"objects": [
{
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "60712000000123456",
"frame_id": "60712000000123456"
}
],
"direction": "TIDY_DIRECTION_UNSPECIFIED",
"spacing_mode": "TIDY_SPACING_MODE_UNSPECIFIED",
"preserve_order": true,
"target": {
"reference": "OBJECT_ALIGN_REFERENCE_UNSPECIFIED",
"target_bounds": {
"x": "12.5",
"width": "12.5",
"y": "12.5",
"height": "12.5"
}
}
}
URL-encoded, as sent
%7B%22fixed_spacing%22%3A%2212.5%22%2C%22objects%22%3A%5B%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%5D%2C%22direction%22%3A%22TIDY_DIRECTION_UNSPECIFIED%22%2C%22spacing_mode%22%3A%22TIDY_SPACING_MODE_UNSPECIFIED%22%2C%22preserve_order%22%3Atrue%2C%22target%22%3A%7B%22reference%22%3A%22OBJECT_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D |
Request
GET
curl -X GET "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/objects/tidy-feasibility?anchoring_query=%7B%22fixed_spacing%22%3A%2212.5%22%2C%22objects%22%3A%5B%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%5D%2C%22direction%22%3A%22TIDY_DIRECTION_UNSPECIFIED%22%2C%22spacing_mode%22%3A%22TIDY_SPACING_MODE_UNSPECIFIED%22%2C%22preserve_order%22%3Atrue%2C%22target%22%3A%7B%22reference%22%3A%22OBJECT_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D" \
-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}/zones/{zone_id}/anchoring/objects/tidy-feasibility?anchoring_query=%7B%22fixed_spacing%22%3A%2212.5%22%2C%22objects%22%3A%5B%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%5D%2C%22direction%22%3A%22TIDY_DIRECTION_UNSPECIFIED%22%2C%22spacing_mode%22%3A%22TIDY_SPACING_MODE_UNSPECIFIED%22%2C%22preserve_order%22%3Atrue%2C%22target%22%3A%7B%22reference%22%3A%22OBJECT_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D"
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}/zones/{zone_id}/anchoring/objects/tidy-feasibility?anchoring_query=%7B%22fixed_spacing%22%3A%2212.5%22%2C%22objects%22%3A%5B%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%5D%2C%22direction%22%3A%22TIDY_DIRECTION_UNSPECIFIED%22%2C%22spacing_mode%22%3A%22TIDY_SPACING_MODE_UNSPECIFIED%22%2C%22preserve_order%22%3Atrue%2C%22target%22%3A%7B%22reference%22%3A%22OBJECT_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D'),
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}/zones/{zone_id}/anchoring/objects/tidy-feasibility?anchoring_query=%7B%22fixed_spacing%22%3A%2212.5%22%2C%22objects%22%3A%5B%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%5D%2C%22direction%22%3A%22TIDY_DIRECTION_UNSPECIFIED%22%2C%22spacing_mode%22%3A%22TIDY_SPACING_MODE_UNSPECIFIED%22%2C%22preserve_order%22%3Atrue%2C%22target%22%3A%7B%22reference%22%3A%22OBJECT_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D"))
.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}/zones/{zone_id}/anchoring/objects/tidy-feasibility?anchoring_query=%7B%22fixed_spacing%22%3A%2212.5%22%2C%22objects%22%3A%5B%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%5D%2C%22direction%22%3A%22TIDY_DIRECTION_UNSPECIFIED%22%2C%22spacing_mode%22%3A%22TIDY_SPACING_MODE_UNSPECIFIED%22%2C%22preserve_order%22%3Atrue%2C%22target%22%3A%7B%22reference%22%3A%22OBJECT_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D";
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}/zones/{zone_id}/anchoring/objects/tidy-feasibility?anchoring_query=%7B%22fixed_spacing%22%3A%2212.5%22%2C%22objects%22%3A%5B%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%5D%2C%22direction%22%3A%22TIDY_DIRECTION_UNSPECIFIED%22%2C%22spacing_mode%22%3A%22TIDY_SPACING_MODE_UNSPECIFIED%22%2C%22preserve_order%22%3Atrue%2C%22target%22%3A%7B%22reference%22%3A%22OBJECT_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D"
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");
}
Response
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}/zones/{zone_id}/anchoring/objects/tidy-feasibility",
"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}/zones/{zone_id}/anchoring/objects/tidy-feasibility",
"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}/zones/{zone_id}/anchoring/objects/tidy-feasibility",
"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}/zones/{zone_id}/anchoring/objects/tidy-feasibility",
"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}/zones/{zone_id}/anchoring/objects/tidy-feasibility",
"status": "error"
}
Errors
5 status codes
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
GET
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/frames/tidy-feasibility
Preview the tidy grid layout for selected frames without applying it
Preview the tidy grid layout for selected frames without applying it
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.READPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
Query parameters anchoring_query
| Name | Type | Description |
|---|---|---|
| anchoring_queryREQUIRED | string (JSON) |
`anchoring_query` — JSON-encoded GetFrameTidyFeasibility request: frame_ids, optional direction/spacing/target. 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
{
"fixed_spacing": "12.5",
"frame_ids": [
"string"
],
"direction": "TIDY_DIRECTION_UNSPECIFIED",
"spacing_mode": "TIDY_SPACING_MODE_UNSPECIFIED",
"preserve_order": true,
"target": {
"reference": "FRAME_ALIGN_REFERENCE_UNSPECIFIED",
"target_bounds": {
"x": "12.5",
"width": "12.5",
"y": "12.5",
"height": "12.5"
}
}
}
URL-encoded, as sent
%7B%22fixed_spacing%22%3A%2212.5%22%2C%22frame_ids%22%3A%5B%22string%22%5D%2C%22direction%22%3A%22TIDY_DIRECTION_UNSPECIFIED%22%2C%22spacing_mode%22%3A%22TIDY_SPACING_MODE_UNSPECIFIED%22%2C%22preserve_order%22%3Atrue%2C%22target%22%3A%7B%22reference%22%3A%22FRAME_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D |
Request
GET
curl -X GET "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/frames/tidy-feasibility?anchoring_query=%7B%22fixed_spacing%22%3A%2212.5%22%2C%22frame_ids%22%3A%5B%22string%22%5D%2C%22direction%22%3A%22TIDY_DIRECTION_UNSPECIFIED%22%2C%22spacing_mode%22%3A%22TIDY_SPACING_MODE_UNSPECIFIED%22%2C%22preserve_order%22%3Atrue%2C%22target%22%3A%7B%22reference%22%3A%22FRAME_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D" \
-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}/zones/{zone_id}/anchoring/frames/tidy-feasibility?anchoring_query=%7B%22fixed_spacing%22%3A%2212.5%22%2C%22frame_ids%22%3A%5B%22string%22%5D%2C%22direction%22%3A%22TIDY_DIRECTION_UNSPECIFIED%22%2C%22spacing_mode%22%3A%22TIDY_SPACING_MODE_UNSPECIFIED%22%2C%22preserve_order%22%3Atrue%2C%22target%22%3A%7B%22reference%22%3A%22FRAME_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D"
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}/zones/{zone_id}/anchoring/frames/tidy-feasibility?anchoring_query=%7B%22fixed_spacing%22%3A%2212.5%22%2C%22frame_ids%22%3A%5B%22string%22%5D%2C%22direction%22%3A%22TIDY_DIRECTION_UNSPECIFIED%22%2C%22spacing_mode%22%3A%22TIDY_SPACING_MODE_UNSPECIFIED%22%2C%22preserve_order%22%3Atrue%2C%22target%22%3A%7B%22reference%22%3A%22FRAME_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D'),
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}/zones/{zone_id}/anchoring/frames/tidy-feasibility?anchoring_query=%7B%22fixed_spacing%22%3A%2212.5%22%2C%22frame_ids%22%3A%5B%22string%22%5D%2C%22direction%22%3A%22TIDY_DIRECTION_UNSPECIFIED%22%2C%22spacing_mode%22%3A%22TIDY_SPACING_MODE_UNSPECIFIED%22%2C%22preserve_order%22%3Atrue%2C%22target%22%3A%7B%22reference%22%3A%22FRAME_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D"))
.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}/zones/{zone_id}/anchoring/frames/tidy-feasibility?anchoring_query=%7B%22fixed_spacing%22%3A%2212.5%22%2C%22frame_ids%22%3A%5B%22string%22%5D%2C%22direction%22%3A%22TIDY_DIRECTION_UNSPECIFIED%22%2C%22spacing_mode%22%3A%22TIDY_SPACING_MODE_UNSPECIFIED%22%2C%22preserve_order%22%3Atrue%2C%22target%22%3A%7B%22reference%22%3A%22FRAME_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D";
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}/zones/{zone_id}/anchoring/frames/tidy-feasibility?anchoring_query=%7B%22fixed_spacing%22%3A%2212.5%22%2C%22frame_ids%22%3A%5B%22string%22%5D%2C%22direction%22%3A%22TIDY_DIRECTION_UNSPECIFIED%22%2C%22spacing_mode%22%3A%22TIDY_SPACING_MODE_UNSPECIFIED%22%2C%22preserve_order%22%3Atrue%2C%22target%22%3A%7B%22reference%22%3A%22FRAME_ALIGN_REFERENCE_UNSPECIFIED%22%2C%22target_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%7D%7D"
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");
}
Response
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}/zones/{zone_id}/anchoring/frames/tidy-feasibility",
"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}/zones/{zone_id}/anchoring/frames/tidy-feasibility",
"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}/zones/{zone_id}/anchoring/frames/tidy-feasibility",
"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}/zones/{zone_id}/anchoring/frames/tidy-feasibility",
"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}/zones/{zone_id}/anchoring/frames/tidy-feasibility",
"status": "error"
}
Errors
5 status codes
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
GET
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/objects/placement-feasibility
Check whether a source object can be placed relative to a target object without violating overlap or constraint rules
Check whether a source object can be placed relative to a target object without violating overlap or constraint rules
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.READPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
Query parameters anchoring_query
| Name | Type | Description |
|---|---|---|
| anchoring_queryREQUIRED | string (JSON) |
`anchoring_query` — JSON-encoded GetObjectPlacementFeasibility request: source_object, target_object, relation, optional constraint. 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
{
"target_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "60712000000123456",
"frame_id": "60712000000123456"
},
"source_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "60712000000123456",
"frame_id": "60712000000123456"
},
"constraint": {
"keep_inside_container": true,
"avoid_overlap": true,
"cross_axis_alignment": "CROSS_AXIS_ALIGNMENT_UNSPECIFIED",
"gap": "12.5",
"snap_to_grid": true
},
"relation": "ANCHOR_RELATION_UNSPECIFIED"
}
URL-encoded, as sent
%7B%22target_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22source_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22constraint%22%3A%7B%22keep_inside_container%22%3Atrue%2C%22avoid_overlap%22%3Atrue%2C%22cross_axis_alignment%22%3A%22CROSS_AXIS_ALIGNMENT_UNSPECIFIED%22%2C%22gap%22%3A%2212.5%22%2C%22snap_to_grid%22%3Atrue%7D%2C%22relation%22%3A%22ANCHOR_RELATION_UNSPECIFIED%22%7D |
Request
GET
curl -X GET "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/objects/placement-feasibility?anchoring_query=%7B%22target_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22source_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22constraint%22%3A%7B%22keep_inside_container%22%3Atrue%2C%22avoid_overlap%22%3Atrue%2C%22cross_axis_alignment%22%3A%22CROSS_AXIS_ALIGNMENT_UNSPECIFIED%22%2C%22gap%22%3A%2212.5%22%2C%22snap_to_grid%22%3Atrue%7D%2C%22relation%22%3A%22ANCHOR_RELATION_UNSPECIFIED%22%7D" \
-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}/zones/{zone_id}/anchoring/objects/placement-feasibility?anchoring_query=%7B%22target_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22source_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22constraint%22%3A%7B%22keep_inside_container%22%3Atrue%2C%22avoid_overlap%22%3Atrue%2C%22cross_axis_alignment%22%3A%22CROSS_AXIS_ALIGNMENT_UNSPECIFIED%22%2C%22gap%22%3A%2212.5%22%2C%22snap_to_grid%22%3Atrue%7D%2C%22relation%22%3A%22ANCHOR_RELATION_UNSPECIFIED%22%7D"
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}/zones/{zone_id}/anchoring/objects/placement-feasibility?anchoring_query=%7B%22target_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22source_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22constraint%22%3A%7B%22keep_inside_container%22%3Atrue%2C%22avoid_overlap%22%3Atrue%2C%22cross_axis_alignment%22%3A%22CROSS_AXIS_ALIGNMENT_UNSPECIFIED%22%2C%22gap%22%3A%2212.5%22%2C%22snap_to_grid%22%3Atrue%7D%2C%22relation%22%3A%22ANCHOR_RELATION_UNSPECIFIED%22%7D'),
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}/zones/{zone_id}/anchoring/objects/placement-feasibility?anchoring_query=%7B%22target_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22source_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22constraint%22%3A%7B%22keep_inside_container%22%3Atrue%2C%22avoid_overlap%22%3Atrue%2C%22cross_axis_alignment%22%3A%22CROSS_AXIS_ALIGNMENT_UNSPECIFIED%22%2C%22gap%22%3A%2212.5%22%2C%22snap_to_grid%22%3Atrue%7D%2C%22relation%22%3A%22ANCHOR_RELATION_UNSPECIFIED%22%7D"))
.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}/zones/{zone_id}/anchoring/objects/placement-feasibility?anchoring_query=%7B%22target_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22source_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22constraint%22%3A%7B%22keep_inside_container%22%3Atrue%2C%22avoid_overlap%22%3Atrue%2C%22cross_axis_alignment%22%3A%22CROSS_AXIS_ALIGNMENT_UNSPECIFIED%22%2C%22gap%22%3A%2212.5%22%2C%22snap_to_grid%22%3Atrue%7D%2C%22relation%22%3A%22ANCHOR_RELATION_UNSPECIFIED%22%7D";
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}/zones/{zone_id}/anchoring/objects/placement-feasibility?anchoring_query=%7B%22target_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22source_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22constraint%22%3A%7B%22keep_inside_container%22%3Atrue%2C%22avoid_overlap%22%3Atrue%2C%22cross_axis_alignment%22%3A%22CROSS_AXIS_ALIGNMENT_UNSPECIFIED%22%2C%22gap%22%3A%2212.5%22%2C%22snap_to_grid%22%3Atrue%7D%2C%22relation%22%3A%22ANCHOR_RELATION_UNSPECIFIED%22%7D"
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");
}
Response
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}/zones/{zone_id}/anchoring/objects/placement-feasibility",
"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}/zones/{zone_id}/anchoring/objects/placement-feasibility",
"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}/zones/{zone_id}/anchoring/objects/placement-feasibility",
"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}/zones/{zone_id}/anchoring/objects/placement-feasibility",
"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}/zones/{zone_id}/anchoring/objects/placement-feasibility",
"status": "error"
}
Errors
5 status codes
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
PUT
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/frames/tidy
Apply tidy grid layout to selected frames using requested spacing and direction policy
Apply tidy grid layout to selected frames using requested spacing and direction policy
OperationUPDATE
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.UPDATEPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
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.
| Field | Type | Description | Value |
|---|---|---|---|
| fixed_spacing | number | Gap used when spacing_mode is TIDY_SPACING_MODE_FIXED | |
| frame_ids REQUIRED | array of string | Frames to tidy (minimum 2) (min 2, max 2) | |
| direction | string |
Tidy direction policy (max length 50)
TIDY_DIRECTION_UNSPECIFIEDTIDY_DIRECTION_AUTOTIDY_DIRECTION_HORIZONTALTIDY_DIRECTION_VERTICAL
|
|
| spacing_mode | string |
Spacing policy (max length 50)
TIDY_SPACING_MODE_UNSPECIFIEDTIDY_SPACING_MODE_AUTOTIDY_SPACING_MODE_FIXED
|
|
| preserve_order | boolean | Preserve current traversal order while tidying | |
| target | object | Optional tidy target; defaults to WITHIN_SELECTION | |
| reference | string |
Alignment reference; defaults to WITHIN_SELECTION (max length 50)
FRAME_ALIGN_REFERENCE_UNSPECIFIEDWITHIN_SELECTIONTARGET_BOUNDS
|
|
| target_bounds | object | Explicit bounds, used when reference is TARGET_BOUNDS | |
| x | number | Left position in canvas units | |
| width | number | Width in canvas units | |
| y | number | Top position in canvas units | |
| height | number | Height in canvas units |
Request
PUT
curl -X PUT "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/frames/tidy" \
-H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"frame_ids": [
"f47ac10b-58cc-4372-a567-0e02b2c3d479",
"f47ac10b-58cc-4372-a567-0e02b2c3d479"
],
"fixed_spacing": 1.5,
"direction": "TIDY_DIRECTION_UNSPECIFIED",
"spacing_mode": "TIDY_SPACING_MODE_UNSPECIFIED",
"preserve_order": true,
"target": {
"reference": "WITHIN_SELECTION",
"target_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
}
}
}'import requests
url = "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/frames/tidy"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
data = {
"frame_ids": [
"f47ac10b-58cc-4372-a567-0e02b2c3d479",
"f47ac10b-58cc-4372-a567-0e02b2c3d479"
],
"fixed_spacing": 1.5,
"direction": "TIDY_DIRECTION_UNSPECIFIED",
"spacing_mode": "TIDY_SPACING_MODE_UNSPECIFIED",
"preserve_order": true,
"target": {
"reference": "WITHIN_SELECTION",
"target_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
}
}
}
response = requests.put(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}/zones/{zone_id}/anchoring/frames/tidy'),
method: 'PUT',
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({
"frame_ids": [
"f47ac10b-58cc-4372-a567-0e02b2c3d479",
"f47ac10b-58cc-4372-a567-0e02b2c3d479"
],
"fixed_spacing": 1.5,
"direction": "TIDY_DIRECTION_UNSPECIFIED",
"spacing_mode": "TIDY_SPACING_MODE_UNSPECIFIED",
"preserve_order": true,
"target": {
"reference": "WITHIN_SELECTION",
"target_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
}
}
}));
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}/zones/{zone_id}/anchoring/frames/tidy"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
String requestBody = "{\"frame_ids\":[\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"f47ac10b-58cc-4372-a567-0e02b2c3d479\"],\"fixed_spacing\":1.5,\"direction\":\"TIDY_DIRECTION_UNSPECIFIED\",\"spacing_mode\":\"TIDY_SPACING_MODE_UNSPECIFIED\",\"preserve_order\":true,\"target\":{\"reference\":\"WITHIN_SELECTION\",\"target_bounds\":{\"x\":1.5,\"width\":1.5,\"y\":1.5,\"height\":1.5}}}";
HttpRequest request = requestBuilder
.PUT(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}/zones/{zone_id}/anchoring/frames/tidy";
headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");
requestData = {"frame_ids": {"f47ac10b-58cc-4372-a567-0e02b2c3d479", "f47ac10b-58cc-4372-a567-0e02b2c3d479"}, "fixed_spacing": 1.5, "direction": "TIDY_DIRECTION_UNSPECIFIED", "spacing_mode": "TIDY_SPACING_MODE_UNSPECIFIED", "preserve_order": true, "target": {"reference": "WITHIN_SELECTION", "target_bounds": {"x": 1.5, "width": 1.5, "y": 1.5, "height": 1.5}}};
response = invokeurl
[
url: "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/frames/tidy"
type: PUT
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");
}{
"frame_ids": [
"f47ac10b-58cc-4372-a567-0e02b2c3d479",
"f47ac10b-58cc-4372-a567-0e02b2c3d479"
],
"fixed_spacing": 1.5,
"direction": "TIDY_DIRECTION_UNSPECIFIED",
"spacing_mode": "TIDY_SPACING_MODE_UNSPECIFIED",
"preserve_order": true,
"target": {
"reference": "WITHIN_SELECTION",
"target_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
}
}
}
Response
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}/zones/{zone_id}/anchoring/frames/tidy",
"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}/zones/{zone_id}/anchoring/frames/tidy",
"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}/zones/{zone_id}/anchoring/frames/tidy",
"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}/zones/{zone_id}/anchoring/frames/tidy",
"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}/zones/{zone_id}/anchoring/frames/tidy",
"status": "error"
}
Errors
5 status codes
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
PUT
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/objects/tidy
Apply tidy grid layout to selected objects using requested spacing and direction policy
Apply tidy grid layout to selected objects using requested spacing and direction policy
OperationUPDATE
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.UPDATEPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
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.
| Field | Type | Description | Value |
|---|---|---|---|
| fixed_spacing | number | Gap used when spacing_mode is TIDY_SPACING_MODE_FIXED | |
| objects REQUIRED | array of object | Objects to tidy (minimum 2) (min 2, max 2) | |
| zone_id | string | Zone containing the object (max length 200) | |
| object_id | string | Object id in the frame (max length 200) | |
| frame_id | string | Frame containing the object (max length 200) | |
| direction | string |
Tidy direction policy (max length 50)
TIDY_DIRECTION_UNSPECIFIEDTIDY_DIRECTION_AUTOTIDY_DIRECTION_HORIZONTALTIDY_DIRECTION_VERTICAL
|
|
| spacing_mode | string |
Spacing policy (max length 50)
TIDY_SPACING_MODE_UNSPECIFIEDTIDY_SPACING_MODE_AUTOTIDY_SPACING_MODE_FIXED
|
|
| preserve_order | boolean | Preserve current traversal order while tidying | |
| target | object | Optional tidy target; defaults to WITHIN_SELECTION | |
| reference | string |
Alignment reference; defaults to WITHIN_SELECTION (max length 50)
OBJECT_ALIGN_REFERENCE_UNSPECIFIEDWITHIN_SELECTIONCURRENT_FRAMETARGET_BOUNDS
|
|
| target_bounds | object | Explicit bounds, used when reference is TARGET_BOUNDS | |
| x | number | Left position in canvas units | |
| width | number | Width in canvas units | |
| y | number | Top position in canvas units | |
| height | number | Height in canvas units |
Request
PUT
curl -X PUT "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/objects/tidy" \
-H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"objects": [
{
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
{
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
}
],
"fixed_spacing": 1.5,
"direction": "TIDY_DIRECTION_UNSPECIFIED",
"spacing_mode": "TIDY_SPACING_MODE_UNSPECIFIED",
"preserve_order": true,
"target": {
"reference": "WITHIN_SELECTION",
"target_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
}
}
}'import requests
url = "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/objects/tidy"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
data = {
"objects": [
{
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
{
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
}
],
"fixed_spacing": 1.5,
"direction": "TIDY_DIRECTION_UNSPECIFIED",
"spacing_mode": "TIDY_SPACING_MODE_UNSPECIFIED",
"preserve_order": true,
"target": {
"reference": "WITHIN_SELECTION",
"target_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
}
}
}
response = requests.put(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}/zones/{zone_id}/anchoring/objects/tidy'),
method: 'PUT',
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({
"objects": [
{
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
{
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
}
],
"fixed_spacing": 1.5,
"direction": "TIDY_DIRECTION_UNSPECIFIED",
"spacing_mode": "TIDY_SPACING_MODE_UNSPECIFIED",
"preserve_order": true,
"target": {
"reference": "WITHIN_SELECTION",
"target_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
}
}
}));
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}/zones/{zone_id}/anchoring/objects/tidy"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
String requestBody = "{\"objects\":[{\"zone_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"object_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"frame_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\"},{\"zone_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"object_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"frame_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\"}],\"fixed_spacing\":1.5,\"direction\":\"TIDY_DIRECTION_UNSPECIFIED\",\"spacing_mode\":\"TIDY_SPACING_MODE_UNSPECIFIED\",\"preserve_order\":true,\"target\":{\"reference\":\"WITHIN_SELECTION\",\"target_bounds\":{\"x\":1.5,\"width\":1.5,\"y\":1.5,\"height\":1.5}}}";
HttpRequest request = requestBuilder
.PUT(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}/zones/{zone_id}/anchoring/objects/tidy";
headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");
requestData = {"objects": {{"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"}, {"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"}}, "fixed_spacing": 1.5, "direction": "TIDY_DIRECTION_UNSPECIFIED", "spacing_mode": "TIDY_SPACING_MODE_UNSPECIFIED", "preserve_order": true, "target": {"reference": "WITHIN_SELECTION", "target_bounds": {"x": 1.5, "width": 1.5, "y": 1.5, "height": 1.5}}};
response = invokeurl
[
url: "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/objects/tidy"
type: PUT
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");
}{
"objects": [
{
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
{
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
}
],
"fixed_spacing": 1.5,
"direction": "TIDY_DIRECTION_UNSPECIFIED",
"spacing_mode": "TIDY_SPACING_MODE_UNSPECIFIED",
"preserve_order": true,
"target": {
"reference": "WITHIN_SELECTION",
"target_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
}
}
}
Response
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}/zones/{zone_id}/anchoring/objects/tidy",
"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}/zones/{zone_id}/anchoring/objects/tidy",
"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}/zones/{zone_id}/anchoring/objects/tidy",
"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}/zones/{zone_id}/anchoring/objects/tidy",
"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}/zones/{zone_id}/anchoring/objects/tidy",
"status": "error"
}
Errors
5 status codes
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
PUT
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/frames/align
Align selected frames using a requested alignment mode and optional target bounds
Align selected frames using a requested alignment mode and optional target bounds
OperationUPDATE
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.UPDATEPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
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.
| Field | Type | Description | Value |
|---|---|---|---|
| mode REQUIRED | string |
Alignment or distribution mode (max length 50)
ALIGN_MODE_UNSPECIFIEDALIGN_LEFT_EDGEALIGN_RIGHT_EDGEALIGN_TOP_EDGEALIGN_BOTTOM_EDGEALIGN_HORIZONTAL_CENTERALIGN_VERTICAL_CENTERDISTRIBUTE_HORIZONTALDISTRIBUTE_VERTICAL
|
|
| frame_ids REQUIRED | array of string | Frames to align or distribute (minimum 2) (min 2, max 2) | |
| target | object | Optional alignment target; defaults to WITHIN_SELECTION | |
| reference | string |
Alignment reference; defaults to WITHIN_SELECTION (max length 50)
FRAME_ALIGN_REFERENCE_UNSPECIFIEDWITHIN_SELECTIONTARGET_BOUNDS
|
|
| target_bounds | object | Explicit bounds, used when reference is TARGET_BOUNDS | |
| x | number | Left position in canvas units | |
| width | number | Width in canvas units | |
| y | number | Top position in canvas units | |
| height | number | Height in canvas units |
Request
PUT
curl -X PUT "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/frames/align" \
-H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mode": "ALIGN_MODE_UNSPECIFIED",
"frame_ids": [
"f47ac10b-58cc-4372-a567-0e02b2c3d479",
"f47ac10b-58cc-4372-a567-0e02b2c3d479"
],
"target": {
"reference": "WITHIN_SELECTION",
"target_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
}
}
}'import requests
url = "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/frames/align"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
data = {
"mode": "ALIGN_MODE_UNSPECIFIED",
"frame_ids": [
"f47ac10b-58cc-4372-a567-0e02b2c3d479",
"f47ac10b-58cc-4372-a567-0e02b2c3d479"
],
"target": {
"reference": "WITHIN_SELECTION",
"target_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
}
}
}
response = requests.put(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}/zones/{zone_id}/anchoring/frames/align'),
method: 'PUT',
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({
"mode": "ALIGN_MODE_UNSPECIFIED",
"frame_ids": [
"f47ac10b-58cc-4372-a567-0e02b2c3d479",
"f47ac10b-58cc-4372-a567-0e02b2c3d479"
],
"target": {
"reference": "WITHIN_SELECTION",
"target_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
}
}
}));
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}/zones/{zone_id}/anchoring/frames/align"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
String requestBody = "{\"mode\":\"ALIGN_MODE_UNSPECIFIED\",\"frame_ids\":[\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"f47ac10b-58cc-4372-a567-0e02b2c3d479\"],\"target\":{\"reference\":\"WITHIN_SELECTION\",\"target_bounds\":{\"x\":1.5,\"width\":1.5,\"y\":1.5,\"height\":1.5}}}";
HttpRequest request = requestBuilder
.PUT(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}/zones/{zone_id}/anchoring/frames/align";
headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");
requestData = {"mode": "ALIGN_MODE_UNSPECIFIED", "frame_ids": {"f47ac10b-58cc-4372-a567-0e02b2c3d479", "f47ac10b-58cc-4372-a567-0e02b2c3d479"}, "target": {"reference": "WITHIN_SELECTION", "target_bounds": {"x": 1.5, "width": 1.5, "y": 1.5, "height": 1.5}}};
response = invokeurl
[
url: "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/frames/align"
type: PUT
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");
}{
"mode": "ALIGN_MODE_UNSPECIFIED",
"frame_ids": [
"f47ac10b-58cc-4372-a567-0e02b2c3d479",
"f47ac10b-58cc-4372-a567-0e02b2c3d479"
],
"target": {
"reference": "WITHIN_SELECTION",
"target_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
}
}
}
Response
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}/zones/{zone_id}/anchoring/frames/align",
"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}/zones/{zone_id}/anchoring/frames/align",
"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}/zones/{zone_id}/anchoring/frames/align",
"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}/zones/{zone_id}/anchoring/frames/align",
"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}/zones/{zone_id}/anchoring/frames/align",
"status": "error"
}
Errors
5 status codes
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
PUT
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/objects/place
Move a source object relative to a target object using an anchor relation and optional placement constraints
Move a source object relative to a target object using an anchor relation and optional placement constraints
OperationUPDATE
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.UPDATEPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
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.
| Field | Type | Description | Value |
|---|---|---|---|
| target_object REQUIRED | object | Reference target object | |
| zone_id | string | Zone containing the object (max length 200) | |
| object_id | string | Object id in the frame (max length 200) | |
| frame_id | string | Frame containing the object (max length 200) | |
| source_object REQUIRED | object | Object to move | |
| zone_id | string | Zone containing the object (max length 200) | |
| object_id | string | Object id in the frame (max length 200) | |
| frame_id | string | Frame containing the object (max length 200) | |
| constraint | object | Optional placement constraints | |
| keep_inside_container | boolean | Clamp final bounds within the primary container | |
| avoid_overlap | boolean | Reject or adjust placements that collide with other objects | |
| cross_axis_alignment | string |
Cross-axis alignment; defaults to CENTER (max length 40)
CROSS_AXIS_ALIGNMENT_UNSPECIFIEDSTARTCENTEREND
|
|
| gap | number | Requested edge-to-edge spacing between source and target (>= 0) | |
| snap_to_grid | boolean | Snap the final position to layout guides/grid | |
| relation REQUIRED | string |
Desired relation from source to target (max length 60)
ANCHOR_RELATION_UNSPECIFIEDANCHOR_RELATION_LEFTANCHOR_RELATION_RIGHTANCHOR_RELATION_TOPANCHOR_RELATION_BOTTOM
|
Request
PUT
curl -X PUT "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/objects/place" \
-H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"target_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"source_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"relation": "ANCHOR_RELATION_UNSPECIFIED",
"constraint": {
"keep_inside_container": true,
"avoid_overlap": true,
"cross_axis_alignment": "CENTER",
"gap": 1.5,
"snap_to_grid": true
}
}'import requests
url = "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/objects/place"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
data = {
"target_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"source_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"relation": "ANCHOR_RELATION_UNSPECIFIED",
"constraint": {
"keep_inside_container": true,
"avoid_overlap": true,
"cross_axis_alignment": "CENTER",
"gap": 1.5,
"snap_to_grid": true
}
}
response = requests.put(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}/zones/{zone_id}/anchoring/objects/place'),
method: 'PUT',
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({
"target_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"source_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"relation": "ANCHOR_RELATION_UNSPECIFIED",
"constraint": {
"keep_inside_container": true,
"avoid_overlap": true,
"cross_axis_alignment": "CENTER",
"gap": 1.5,
"snap_to_grid": true
}
}));
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}/zones/{zone_id}/anchoring/objects/place"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
String requestBody = "{\"target_object\":{\"zone_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"object_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"frame_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\"},\"source_object\":{\"zone_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"object_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"frame_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\"},\"relation\":\"ANCHOR_RELATION_UNSPECIFIED\",\"constraint\":{\"keep_inside_container\":true,\"avoid_overlap\":true,\"cross_axis_alignment\":\"CENTER\",\"gap\":1.5,\"snap_to_grid\":true}}";
HttpRequest request = requestBuilder
.PUT(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}/zones/{zone_id}/anchoring/objects/place";
headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");
requestData = {"target_object": {"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"}, "source_object": {"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"}, "relation": "ANCHOR_RELATION_UNSPECIFIED", "constraint": {"keep_inside_container": true, "avoid_overlap": true, "cross_axis_alignment": "CENTER", "gap": 1.5, "snap_to_grid": true}};
response = invokeurl
[
url: "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/objects/place"
type: PUT
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");
}{
"target_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"source_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"relation": "ANCHOR_RELATION_UNSPECIFIED",
"constraint": {
"keep_inside_container": true,
"avoid_overlap": true,
"cross_axis_alignment": "CENTER",
"gap": 1.5,
"snap_to_grid": true
}
}
Response
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}/zones/{zone_id}/anchoring/objects/place",
"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}/zones/{zone_id}/anchoring/objects/place",
"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}/zones/{zone_id}/anchoring/objects/place",
"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}/zones/{zone_id}/anchoring/objects/place",
"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}/zones/{zone_id}/anchoring/objects/place",
"status": "error"
}
Errors
5 status codes
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
PUT
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/frames/place
Move a source frame relative to a target frame using an anchor relation and optional placement constraints
Move a source frame relative to a target frame using an anchor relation and optional placement constraints
OperationUPDATE
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.UPDATEPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
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.
| Field | Type | Description | Value |
|---|---|---|---|
| target_frame_id REQUIRED | string | Reference target frame (max length 200) | |
| constraint | object | Optional placement constraints | |
| keep_inside_container | boolean | Clamp final bounds within the primary container | |
| avoid_overlap | boolean | Reject or adjust placements that collide with other objects | |
| cross_axis_alignment | string |
Cross-axis alignment; defaults to CENTER (max length 40)
CROSS_AXIS_ALIGNMENT_UNSPECIFIEDSTARTCENTEREND
|
|
| gap | number | Requested edge-to-edge spacing between source and target (>= 0) | |
| snap_to_grid | boolean | Snap the final position to layout guides/grid | |
| source_frame_id REQUIRED | string | Frame to move (max length 200) | |
| relation REQUIRED | string |
Desired relation from source frame to target frame (max length 60)
ANCHOR_RELATION_UNSPECIFIEDANCHOR_RELATION_LEFTANCHOR_RELATION_RIGHTANCHOR_RELATION_TOPANCHOR_RELATION_BOTTOM
|
Request
PUT
curl -X PUT "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/frames/place" \
-H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"target_frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"source_frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"relation": "ANCHOR_RELATION_UNSPECIFIED",
"constraint": {
"keep_inside_container": true,
"avoid_overlap": true,
"cross_axis_alignment": "CENTER",
"gap": 1.5,
"snap_to_grid": true
}
}'import requests
url = "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/frames/place"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
data = {
"target_frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"source_frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"relation": "ANCHOR_RELATION_UNSPECIFIED",
"constraint": {
"keep_inside_container": true,
"avoid_overlap": true,
"cross_axis_alignment": "CENTER",
"gap": 1.5,
"snap_to_grid": true
}
}
response = requests.put(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}/zones/{zone_id}/anchoring/frames/place'),
method: 'PUT',
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({
"target_frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"source_frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"relation": "ANCHOR_RELATION_UNSPECIFIED",
"constraint": {
"keep_inside_container": true,
"avoid_overlap": true,
"cross_axis_alignment": "CENTER",
"gap": 1.5,
"snap_to_grid": true
}
}));
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}/zones/{zone_id}/anchoring/frames/place"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
String requestBody = "{\"target_frame_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"source_frame_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"relation\":\"ANCHOR_RELATION_UNSPECIFIED\",\"constraint\":{\"keep_inside_container\":true,\"avoid_overlap\":true,\"cross_axis_alignment\":\"CENTER\",\"gap\":1.5,\"snap_to_grid\":true}}";
HttpRequest request = requestBuilder
.PUT(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}/zones/{zone_id}/anchoring/frames/place";
headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");
requestData = {"target_frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "source_frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "relation": "ANCHOR_RELATION_UNSPECIFIED", "constraint": {"keep_inside_container": true, "avoid_overlap": true, "cross_axis_alignment": "CENTER", "gap": 1.5, "snap_to_grid": true}};
response = invokeurl
[
url: "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/frames/place"
type: PUT
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");
}{
"target_frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"source_frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"relation": "ANCHOR_RELATION_UNSPECIFIED",
"constraint": {
"keep_inside_container": true,
"avoid_overlap": true,
"cross_axis_alignment": "CENTER",
"gap": 1.5,
"snap_to_grid": true
}
}
Response
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}/zones/{zone_id}/anchoring/frames/place",
"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}/zones/{zone_id}/anchoring/frames/place",
"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}/zones/{zone_id}/anchoring/frames/place",
"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}/zones/{zone_id}/anchoring/frames/place",
"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}/zones/{zone_id}/anchoring/frames/place",
"status": "error"
}
Errors
5 status codes
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
PUT
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/objects/align
Align selected objects using a requested alignment mode and optional target bounds
Align selected objects using a requested alignment mode and optional target bounds
OperationUPDATE
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.UPDATEPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
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.
| Field | Type | Description | Value |
|---|---|---|---|
| mode REQUIRED | string |
Alignment or distribution mode (max length 50)
ALIGN_MODE_UNSPECIFIEDALIGN_LEFT_EDGEALIGN_RIGHT_EDGEALIGN_TOP_EDGEALIGN_BOTTOM_EDGEALIGN_HORIZONTAL_CENTERALIGN_VERTICAL_CENTERDISTRIBUTE_HORIZONTALDISTRIBUTE_VERTICAL
|
|
| objects REQUIRED | array of object | Objects to align or distribute (minimum 2) (min 2, max 2) | |
| zone_id | string | Zone containing the object (max length 200) | |
| object_id | string | Object id in the frame (max length 200) | |
| frame_id | string | Frame containing the object (max length 200) | |
| target | object | Optional alignment target; defaults to WITHIN_SELECTION | |
| reference | string |
Alignment reference; defaults to WITHIN_SELECTION (max length 50)
OBJECT_ALIGN_REFERENCE_UNSPECIFIEDWITHIN_SELECTIONCURRENT_FRAMETARGET_BOUNDS
|
|
| target_bounds | object | Explicit bounds, used when reference is TARGET_BOUNDS | |
| x | number | Left position in canvas units | |
| width | number | Width in canvas units | |
| y | number | Top position in canvas units | |
| height | number | Height in canvas units |
Request
PUT
curl -X PUT "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/objects/align" \
-H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mode": "ALIGN_MODE_UNSPECIFIED",
"objects": [
{
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
{
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
}
],
"target": {
"reference": "WITHIN_SELECTION",
"target_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
}
}
}'import requests
url = "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/objects/align"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
data = {
"mode": "ALIGN_MODE_UNSPECIFIED",
"objects": [
{
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
{
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
}
],
"target": {
"reference": "WITHIN_SELECTION",
"target_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
}
}
}
response = requests.put(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}/zones/{zone_id}/anchoring/objects/align'),
method: 'PUT',
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({
"mode": "ALIGN_MODE_UNSPECIFIED",
"objects": [
{
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
{
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
}
],
"target": {
"reference": "WITHIN_SELECTION",
"target_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
}
}
}));
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}/zones/{zone_id}/anchoring/objects/align"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
String requestBody = "{\"mode\":\"ALIGN_MODE_UNSPECIFIED\",\"objects\":[{\"zone_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"object_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"frame_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\"},{\"zone_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"object_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"frame_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\"}],\"target\":{\"reference\":\"WITHIN_SELECTION\",\"target_bounds\":{\"x\":1.5,\"width\":1.5,\"y\":1.5,\"height\":1.5}}}";
HttpRequest request = requestBuilder
.PUT(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}/zones/{zone_id}/anchoring/objects/align";
headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");
requestData = {"mode": "ALIGN_MODE_UNSPECIFIED", "objects": {{"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"}, {"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"}}, "target": {"reference": "WITHIN_SELECTION", "target_bounds": {"x": 1.5, "width": 1.5, "y": 1.5, "height": 1.5}}};
response = invokeurl
[
url: "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/anchoring/objects/align"
type: PUT
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");
}{
"mode": "ALIGN_MODE_UNSPECIFIED",
"objects": [
{
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
{
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
}
],
"target": {
"reference": "WITHIN_SELECTION",
"target_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
}
}
}
Response
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}/zones/{zone_id}/anchoring/objects/align",
"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}/zones/{zone_id}/anchoring/objects/align",
"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}/zones/{zone_id}/anchoring/objects/align",
"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}/zones/{zone_id}/anchoring/objects/align",
"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}/zones/{zone_id}/anchoring/objects/align",
"status": "error"
}
Errors
5 status codes
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
GET
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/placement-feasibility
Check whether a footprint fits within a scope without overlapping
Check whether a footprint fits within a scope without overlapping
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.READPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
Query parameters spatial_query
| Name | Type | Description |
|---|---|---|
| spatial_queryREQUIRED | string (JSON) |
`spatial_query` — JSON-encoded GetPlacementFeasibility request: required_width, required_height, optional scope/padding/object_type/near_object. 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
{
"padding": "12.5",
"object_type": "VANI_OBJECT_TYPE_UNSPECIFIED",
"near_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "60712000000123456",
"frame_id": "60712000000123456"
},
"scope": {
"absolute_bounds": {
"x": "12.5",
"width": "12.5",
"y": "12.5",
"height": "12.5"
},
"scope_type": "SCOPE_TYPE_UNSPECIFIED",
"frame_id": "60712000000123456"
},
"required_width": "12.5",
"required_height": "12.5"
}
URL-encoded, as sent
%7B%22padding%22%3A%2212.5%22%2C%22object_type%22%3A%22VANI_OBJECT_TYPE_UNSPECIFIED%22%2C%22near_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22required_width%22%3A%2212.5%22%2C%22required_height%22%3A%2212.5%22%7D |
Request
GET
curl -X GET "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/placement-feasibility?spatial_query=%7B%22padding%22%3A%2212.5%22%2C%22object_type%22%3A%22VANI_OBJECT_TYPE_UNSPECIFIED%22%2C%22near_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22required_width%22%3A%2212.5%22%2C%22required_height%22%3A%2212.5%22%7D" \
-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}/zones/{zone_id}/spatial-search/placement-feasibility?spatial_query=%7B%22padding%22%3A%2212.5%22%2C%22object_type%22%3A%22VANI_OBJECT_TYPE_UNSPECIFIED%22%2C%22near_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22required_width%22%3A%2212.5%22%2C%22required_height%22%3A%2212.5%22%7D"
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}/zones/{zone_id}/spatial-search/placement-feasibility?spatial_query=%7B%22padding%22%3A%2212.5%22%2C%22object_type%22%3A%22VANI_OBJECT_TYPE_UNSPECIFIED%22%2C%22near_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22required_width%22%3A%2212.5%22%2C%22required_height%22%3A%2212.5%22%7D'),
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}/zones/{zone_id}/spatial-search/placement-feasibility?spatial_query=%7B%22padding%22%3A%2212.5%22%2C%22object_type%22%3A%22VANI_OBJECT_TYPE_UNSPECIFIED%22%2C%22near_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22required_width%22%3A%2212.5%22%2C%22required_height%22%3A%2212.5%22%7D"))
.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}/zones/{zone_id}/spatial-search/placement-feasibility?spatial_query=%7B%22padding%22%3A%2212.5%22%2C%22object_type%22%3A%22VANI_OBJECT_TYPE_UNSPECIFIED%22%2C%22near_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22required_width%22%3A%2212.5%22%2C%22required_height%22%3A%2212.5%22%7D";
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}/zones/{zone_id}/spatial-search/placement-feasibility?spatial_query=%7B%22padding%22%3A%2212.5%22%2C%22object_type%22%3A%22VANI_OBJECT_TYPE_UNSPECIFIED%22%2C%22near_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22required_width%22%3A%2212.5%22%2C%22required_height%22%3A%2212.5%22%7D"
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");
}
Response
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}/zones/{zone_id}/spatial-search/placement-feasibility",
"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}/zones/{zone_id}/spatial-search/placement-feasibility",
"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}/zones/{zone_id}/spatial-search/placement-feasibility",
"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}/zones/{zone_id}/spatial-search/placement-feasibility",
"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}/zones/{zone_id}/spatial-search/placement-feasibility",
"status": "error"
}
Errors
5 status codes
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
GET
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/suggest-placement
Get ranked placement candidates for a new object
Get ranked placement candidates for a new object
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.READPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
Query parameters spatial_query
| Name | Type | Description |
|---|---|---|
| spatial_queryREQUIRED | string (JSON) |
`spatial_query` — JSON-encoded SuggestPlacement request: required_width, required_height, optional scope/padding/object_type/near_object/max_results. 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
{
"padding": "12.5",
"object_type": "VANI_OBJECT_TYPE_UNSPECIFIED",
"near_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "60712000000123456",
"frame_id": "60712000000123456"
},
"scope": {
"absolute_bounds": {
"x": "12.5",
"width": "12.5",
"y": "12.5",
"height": "12.5"
},
"scope_type": "SCOPE_TYPE_UNSPECIFIED",
"frame_id": "60712000000123456"
},
"required_width": "12.5",
"max_results": "42",
"required_height": "12.5"
}
URL-encoded, as sent
%7B%22padding%22%3A%2212.5%22%2C%22object_type%22%3A%22VANI_OBJECT_TYPE_UNSPECIFIED%22%2C%22near_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22required_width%22%3A%2212.5%22%2C%22max_results%22%3A%2242%22%2C%22required_height%22%3A%2212.5%22%7D |
Request
GET
curl -X GET "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/suggest-placement?spatial_query=%7B%22padding%22%3A%2212.5%22%2C%22object_type%22%3A%22VANI_OBJECT_TYPE_UNSPECIFIED%22%2C%22near_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22required_width%22%3A%2212.5%22%2C%22max_results%22%3A%2242%22%2C%22required_height%22%3A%2212.5%22%7D" \
-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}/zones/{zone_id}/spatial-search/suggest-placement?spatial_query=%7B%22padding%22%3A%2212.5%22%2C%22object_type%22%3A%22VANI_OBJECT_TYPE_UNSPECIFIED%22%2C%22near_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22required_width%22%3A%2212.5%22%2C%22max_results%22%3A%2242%22%2C%22required_height%22%3A%2212.5%22%7D"
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}/zones/{zone_id}/spatial-search/suggest-placement?spatial_query=%7B%22padding%22%3A%2212.5%22%2C%22object_type%22%3A%22VANI_OBJECT_TYPE_UNSPECIFIED%22%2C%22near_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22required_width%22%3A%2212.5%22%2C%22max_results%22%3A%2242%22%2C%22required_height%22%3A%2212.5%22%7D'),
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}/zones/{zone_id}/spatial-search/suggest-placement?spatial_query=%7B%22padding%22%3A%2212.5%22%2C%22object_type%22%3A%22VANI_OBJECT_TYPE_UNSPECIFIED%22%2C%22near_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22required_width%22%3A%2212.5%22%2C%22max_results%22%3A%2242%22%2C%22required_height%22%3A%2212.5%22%7D"))
.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}/zones/{zone_id}/spatial-search/suggest-placement?spatial_query=%7B%22padding%22%3A%2212.5%22%2C%22object_type%22%3A%22VANI_OBJECT_TYPE_UNSPECIFIED%22%2C%22near_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22required_width%22%3A%2212.5%22%2C%22max_results%22%3A%2242%22%2C%22required_height%22%3A%2212.5%22%7D";
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}/zones/{zone_id}/spatial-search/suggest-placement?spatial_query=%7B%22padding%22%3A%2212.5%22%2C%22object_type%22%3A%22VANI_OBJECT_TYPE_UNSPECIFIED%22%2C%22near_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22required_width%22%3A%2212.5%22%2C%22max_results%22%3A%2242%22%2C%22required_height%22%3A%2212.5%22%7D"
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");
}
Response
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}/zones/{zone_id}/spatial-search/suggest-placement",
"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}/zones/{zone_id}/spatial-search/suggest-placement",
"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}/zones/{zone_id}/spatial-search/suggest-placement",
"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}/zones/{zone_id}/spatial-search/suggest-placement",
"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}/zones/{zone_id}/spatial-search/suggest-placement",
"status": "error"
}
Errors
5 status codes
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
GET
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/objects
Get the objects within a spatial scope or region
Get the objects within a spatial scope or region
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.READPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
Query parameters spatial_query
| Name | Type | Description |
|---|---|---|
| spatial_queryREQUIRED | string (JSON) |
`spatial_query` — JSON-encoded GetObjects request: optional scope, object_types, visibility flags, max_results. 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
{
"object_types": [
"VANI_OBJECT_TYPE_UNSPECIFIED"
],
"include_hidden": true,
"scope": {
"absolute_bounds": {
"x": "12.5",
"width": "12.5",
"y": "12.5",
"height": "12.5"
},
"scope_type": "SCOPE_TYPE_UNSPECIFIED",
"frame_id": "60712000000123456"
},
"max_results": "42",
"include_locked": true
}
URL-encoded, as sent
%7B%22object_types%22%3A%5B%22VANI_OBJECT_TYPE_UNSPECIFIED%22%5D%2C%22include_hidden%22%3Atrue%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22max_results%22%3A%2242%22%2C%22include_locked%22%3Atrue%7D |
Request
GET
curl -X GET "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/objects?spatial_query=%7B%22object_types%22%3A%5B%22VANI_OBJECT_TYPE_UNSPECIFIED%22%5D%2C%22include_hidden%22%3Atrue%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22max_results%22%3A%2242%22%2C%22include_locked%22%3Atrue%7D" \
-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}/zones/{zone_id}/spatial-search/objects?spatial_query=%7B%22object_types%22%3A%5B%22VANI_OBJECT_TYPE_UNSPECIFIED%22%5D%2C%22include_hidden%22%3Atrue%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22max_results%22%3A%2242%22%2C%22include_locked%22%3Atrue%7D"
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}/zones/{zone_id}/spatial-search/objects?spatial_query=%7B%22object_types%22%3A%5B%22VANI_OBJECT_TYPE_UNSPECIFIED%22%5D%2C%22include_hidden%22%3Atrue%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22max_results%22%3A%2242%22%2C%22include_locked%22%3Atrue%7D'),
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}/zones/{zone_id}/spatial-search/objects?spatial_query=%7B%22object_types%22%3A%5B%22VANI_OBJECT_TYPE_UNSPECIFIED%22%5D%2C%22include_hidden%22%3Atrue%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22max_results%22%3A%2242%22%2C%22include_locked%22%3Atrue%7D"))
.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}/zones/{zone_id}/spatial-search/objects?spatial_query=%7B%22object_types%22%3A%5B%22VANI_OBJECT_TYPE_UNSPECIFIED%22%5D%2C%22include_hidden%22%3Atrue%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22max_results%22%3A%2242%22%2C%22include_locked%22%3Atrue%7D";
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}/zones/{zone_id}/spatial-search/objects?spatial_query=%7B%22object_types%22%3A%5B%22VANI_OBJECT_TYPE_UNSPECIFIED%22%5D%2C%22include_hidden%22%3Atrue%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22max_results%22%3A%2242%22%2C%22include_locked%22%3Atrue%7D"
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");
}
Response
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}/zones/{zone_id}/spatial-search/objects",
"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}/zones/{zone_id}/spatial-search/objects",
"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}/zones/{zone_id}/spatial-search/objects",
"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}/zones/{zone_id}/spatial-search/objects",
"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}/zones/{zone_id}/spatial-search/objects",
"status": "error"
}
Errors
5 status codes
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
GET
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/empty-region
Get ranked empty regions that fit a requested footprint
Get ranked empty regions that fit a requested footprint
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.READPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
Query parameters spatial_query
| Name | Type | Description |
|---|---|---|
| spatial_queryREQUIRED | string (JSON) |
`spatial_query` — JSON-encoded FindEmptyRegion request: required_width, required_height, optional scope/padding/max_results. 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
{
"padding": "12.5",
"scope": {
"absolute_bounds": {
"x": "12.5",
"width": "12.5",
"y": "12.5",
"height": "12.5"
},
"scope_type": "SCOPE_TYPE_UNSPECIFIED",
"frame_id": "60712000000123456"
},
"required_width": "12.5",
"max_results": "42",
"required_height": "12.5"
}
URL-encoded, as sent
%7B%22padding%22%3A%2212.5%22%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22required_width%22%3A%2212.5%22%2C%22max_results%22%3A%2242%22%2C%22required_height%22%3A%2212.5%22%7D |
Request
GET
curl -X GET "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/empty-region?spatial_query=%7B%22padding%22%3A%2212.5%22%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22required_width%22%3A%2212.5%22%2C%22max_results%22%3A%2242%22%2C%22required_height%22%3A%2212.5%22%7D" \
-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}/zones/{zone_id}/spatial-search/empty-region?spatial_query=%7B%22padding%22%3A%2212.5%22%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22required_width%22%3A%2212.5%22%2C%22max_results%22%3A%2242%22%2C%22required_height%22%3A%2212.5%22%7D"
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}/zones/{zone_id}/spatial-search/empty-region?spatial_query=%7B%22padding%22%3A%2212.5%22%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22required_width%22%3A%2212.5%22%2C%22max_results%22%3A%2242%22%2C%22required_height%22%3A%2212.5%22%7D'),
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}/zones/{zone_id}/spatial-search/empty-region?spatial_query=%7B%22padding%22%3A%2212.5%22%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22required_width%22%3A%2212.5%22%2C%22max_results%22%3A%2242%22%2C%22required_height%22%3A%2212.5%22%7D"))
.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}/zones/{zone_id}/spatial-search/empty-region?spatial_query=%7B%22padding%22%3A%2212.5%22%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22required_width%22%3A%2212.5%22%2C%22max_results%22%3A%2242%22%2C%22required_height%22%3A%2212.5%22%7D";
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}/zones/{zone_id}/spatial-search/empty-region?spatial_query=%7B%22padding%22%3A%2212.5%22%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22required_width%22%3A%2212.5%22%2C%22max_results%22%3A%2242%22%2C%22required_height%22%3A%2212.5%22%7D"
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");
}
Response
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}/zones/{zone_id}/spatial-search/empty-region",
"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}/zones/{zone_id}/spatial-search/empty-region",
"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}/zones/{zone_id}/spatial-search/empty-region",
"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}/zones/{zone_id}/spatial-search/empty-region",
"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}/zones/{zone_id}/spatial-search/empty-region",
"status": "error"
}
Errors
5 status codes
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
GET
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/occupied-bounds
Get the union bounding box of all objects in a scope
Get the union bounding box of all objects in a scope
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.READPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
Query parameters spatial_query
| Name | Type | Description |
|---|---|---|
| spatial_queryREQUIRED | string (JSON) |
`spatial_query` — JSON-encoded GetOccupiedBounds request: optional scope, object_types, visibility flags. 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
{
"object_types": [
"VANI_OBJECT_TYPE_UNSPECIFIED"
],
"include_hidden": true,
"scope": {
"absolute_bounds": {
"x": "12.5",
"width": "12.5",
"y": "12.5",
"height": "12.5"
},
"scope_type": "SCOPE_TYPE_UNSPECIFIED",
"frame_id": "60712000000123456"
},
"include_locked": true
}
URL-encoded, as sent
%7B%22object_types%22%3A%5B%22VANI_OBJECT_TYPE_UNSPECIFIED%22%5D%2C%22include_hidden%22%3Atrue%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22include_locked%22%3Atrue%7D |
Request
GET
curl -X GET "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/occupied-bounds?spatial_query=%7B%22object_types%22%3A%5B%22VANI_OBJECT_TYPE_UNSPECIFIED%22%5D%2C%22include_hidden%22%3Atrue%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22include_locked%22%3Atrue%7D" \
-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}/zones/{zone_id}/spatial-search/occupied-bounds?spatial_query=%7B%22object_types%22%3A%5B%22VANI_OBJECT_TYPE_UNSPECIFIED%22%5D%2C%22include_hidden%22%3Atrue%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22include_locked%22%3Atrue%7D"
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}/zones/{zone_id}/spatial-search/occupied-bounds?spatial_query=%7B%22object_types%22%3A%5B%22VANI_OBJECT_TYPE_UNSPECIFIED%22%5D%2C%22include_hidden%22%3Atrue%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22include_locked%22%3Atrue%7D'),
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}/zones/{zone_id}/spatial-search/occupied-bounds?spatial_query=%7B%22object_types%22%3A%5B%22VANI_OBJECT_TYPE_UNSPECIFIED%22%5D%2C%22include_hidden%22%3Atrue%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22include_locked%22%3Atrue%7D"))
.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}/zones/{zone_id}/spatial-search/occupied-bounds?spatial_query=%7B%22object_types%22%3A%5B%22VANI_OBJECT_TYPE_UNSPECIFIED%22%5D%2C%22include_hidden%22%3Atrue%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22include_locked%22%3Atrue%7D";
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}/zones/{zone_id}/spatial-search/occupied-bounds?spatial_query=%7B%22object_types%22%3A%5B%22VANI_OBJECT_TYPE_UNSPECIFIED%22%5D%2C%22include_hidden%22%3Atrue%2C%22scope%22%3A%7B%22absolute_bounds%22%3A%7B%22x%22%3A%2212.5%22%2C%22width%22%3A%2212.5%22%2C%22y%22%3A%2212.5%22%2C%22height%22%3A%2212.5%22%7D%2C%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22include_locked%22%3Atrue%7D"
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");
}
Response
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}/zones/{zone_id}/spatial-search/occupied-bounds",
"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}/zones/{zone_id}/spatial-search/occupied-bounds",
"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}/zones/{zone_id}/spatial-search/occupied-bounds",
"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}/zones/{zone_id}/spatial-search/occupied-bounds",
"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}/zones/{zone_id}/spatial-search/occupied-bounds",
"status": "error"
}
Errors
5 status codes
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
GET
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/clearance
Get the directional gap distances around an object
Get the directional gap distances around an object
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.READPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
Query parameters spatial_query
| Name | Type | Description |
|---|---|---|
| spatial_queryREQUIRED | string (JSON) |
`spatial_query` — JSON-encoded GetClearanceAroundObject request: object, optional computation scope and blocker filters. 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
{
"object_types": [
"VANI_OBJECT_TYPE_UNSPECIFIED"
],
"include_hidden": true,
"scope": {
"container_scope": {
"scope_type": "SCOPE_TYPE_UNSPECIFIED"
}
},
"include_locked": true,
"object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "60712000000123456",
"frame_id": "60712000000123456"
}
}
URL-encoded, as sent
%7B%22object_types%22%3A%5B%22VANI_OBJECT_TYPE_UNSPECIFIED%22%5D%2C%22include_hidden%22%3Atrue%2C%22scope%22%3A%7B%22container_scope%22%3A%7B%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%7D%7D%2C%22include_locked%22%3Atrue%2C%22object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%7D |
Request
GET
curl -X GET "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/clearance?spatial_query=%7B%22object_types%22%3A%5B%22VANI_OBJECT_TYPE_UNSPECIFIED%22%5D%2C%22include_hidden%22%3Atrue%2C%22scope%22%3A%7B%22container_scope%22%3A%7B%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%7D%7D%2C%22include_locked%22%3Atrue%2C%22object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%7D" \
-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}/zones/{zone_id}/spatial-search/clearance?spatial_query=%7B%22object_types%22%3A%5B%22VANI_OBJECT_TYPE_UNSPECIFIED%22%5D%2C%22include_hidden%22%3Atrue%2C%22scope%22%3A%7B%22container_scope%22%3A%7B%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%7D%7D%2C%22include_locked%22%3Atrue%2C%22object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%7D"
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}/zones/{zone_id}/spatial-search/clearance?spatial_query=%7B%22object_types%22%3A%5B%22VANI_OBJECT_TYPE_UNSPECIFIED%22%5D%2C%22include_hidden%22%3Atrue%2C%22scope%22%3A%7B%22container_scope%22%3A%7B%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%7D%7D%2C%22include_locked%22%3Atrue%2C%22object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%7D'),
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}/zones/{zone_id}/spatial-search/clearance?spatial_query=%7B%22object_types%22%3A%5B%22VANI_OBJECT_TYPE_UNSPECIFIED%22%5D%2C%22include_hidden%22%3Atrue%2C%22scope%22%3A%7B%22container_scope%22%3A%7B%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%7D%7D%2C%22include_locked%22%3Atrue%2C%22object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%7D"))
.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}/zones/{zone_id}/spatial-search/clearance?spatial_query=%7B%22object_types%22%3A%5B%22VANI_OBJECT_TYPE_UNSPECIFIED%22%5D%2C%22include_hidden%22%3Atrue%2C%22scope%22%3A%7B%22container_scope%22%3A%7B%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%7D%7D%2C%22include_locked%22%3Atrue%2C%22object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%7D";
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}/zones/{zone_id}/spatial-search/clearance?spatial_query=%7B%22object_types%22%3A%5B%22VANI_OBJECT_TYPE_UNSPECIFIED%22%5D%2C%22include_hidden%22%3Atrue%2C%22scope%22%3A%7B%22container_scope%22%3A%7B%22scope_type%22%3A%22SCOPE_TYPE_UNSPECIFIED%22%7D%7D%2C%22include_locked%22%3Atrue%2C%22object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%7D"
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");
}
Response
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}/zones/{zone_id}/spatial-search/clearance",
"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}/zones/{zone_id}/spatial-search/clearance",
"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}/zones/{zone_id}/spatial-search/clearance",
"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}/zones/{zone_id}/spatial-search/clearance",
"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}/zones/{zone_id}/spatial-search/clearance",
"status": "error"
}
Errors
5 status codes
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
POST
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/suggest-placement/batch
Get ranked placement candidates for several objects in one call
Get ranked placement candidates for several objects in one call
OperationREAD
Rate limit30 requests / minute · per user
OAuth scopes
Vani.spaces.CREATEPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
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.
| Field | Type | Description | Value |
|---|---|---|---|
| requests REQUIRED | array of object | requests. Max length: 2000000 (required) (min 1, max 1) | |
| padding | number | Additional clearance after footprint fit is checked | |
| object_type | string |
Type of object to be placed (max length 60)
VANI_OBJECT_TYPE_UNSPECIFIEDVANI_OBJECT_TYPE_SHAPEVANI_OBJECT_TYPE_CONNECTORVANI_OBJECT_TYPE_PICTUREVANI_OBJECT_TYPE_GROUP_SHAPEVANI_OBJECT_TYPE_DOMAIN_DIAGRAMVANI_OBJECT_TYPE_DIAGRAMVANI_OBJECT_TYPE_STRUCTUREVANI_OBJECT_TYPE_STRUCTURE_MINDMAPVANI_OBJECT_TYPE_STRUCTURE_KANBANVANI_OBJECT_TYPE_STRUCTURE_STACKVANI_OBJECT_TYPE_TABLEVANI_OBJECT_TYPE_CHARTVANI_OBJECT_TYPE_DATABASE_TABLEVANI_OBJECT_TYPE_STICKY_NOTE
|
|
| near_object | object | Optional nearby anchor object | |
| zone_id | string | Zone containing the object (max length 200) | |
| object_id | string | Object id in the frame (max length 200) | |
| frame_id | string | Frame containing the object (max length 200) | |
| scope | object | Optional scope selector; defaults to SCOPE_TYPE_ZONE | |
| percent_bounds | object | Region refinement: bounds normalized to the selected container. Oneof with absolute_bounds | |
| right_pct | number | Right edge as 0-1 fraction of zone width | |
| top_pct | number | Top edge as 0-1 fraction of zone height | |
| bottom_pct | number | Bottom edge as 0-1 fraction of zone height | |
| left_pct | number | Left edge as 0-1 fraction of zone width | |
| absolute_bounds | object | Region refinement: absolute bounds in zone coordinates. Oneof with percent_bounds | |
| x | number | Left position in canvas units | |
| width | number | Width in canvas units | |
| y | number | Top position in canvas units | |
| height | number | Height in canvas units | |
| scope_type | string |
Scope type selector; defaults to SCOPE_TYPE_ZONE (max length 50)
SCOPE_TYPE_UNSPECIFIEDSCOPE_TYPE_ZONESCOPE_TYPE_FRAME
|
|
| frame_id | string | Frame id when scope_type is SCOPE_TYPE_FRAME (max length 200) | |
| required_width REQUIRED | number | Free-region width required for the footprint | |
| max_results | integer | Maximum ranked placements to return; unset uses the server default | |
| required_height REQUIRED | number | Free-region height required for the footprint | |
| request_item_ids | array of string | Optional correlation IDs echoed back in response (min 2, max 2) |
Request
POST
curl -X POST "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/suggest-placement/batch" \
-H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"requests": [
{
"required_width": 1.5,
"required_height": 1.5,
"padding": 1.5,
"object_type": "VANI_OBJECT_TYPE_UNSPECIFIED",
"near_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"scope": {
"percent_bounds": {
"right_pct": 1.5,
"top_pct": 1.5,
"bottom_pct": 1.5,
"left_pct": 1.5
},
"absolute_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
},
"scope_type": "SCOPE_TYPE_ZONE",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"max_results": 1
}
],
"request_item_ids": [
"string",
"string"
]
}'import requests
url = "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/suggest-placement/batch"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
data = {
"requests": [
{
"required_width": 1.5,
"required_height": 1.5,
"padding": 1.5,
"object_type": "VANI_OBJECT_TYPE_UNSPECIFIED",
"near_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"scope": {
"percent_bounds": {
"right_pct": 1.5,
"top_pct": 1.5,
"bottom_pct": 1.5,
"left_pct": 1.5
},
"absolute_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
},
"scope_type": "SCOPE_TYPE_ZONE",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"max_results": 1
}
],
"request_item_ids": [
"string",
"string"
]
}
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}/zones/{zone_id}/spatial-search/suggest-placement/batch'),
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({
"requests": [
{
"required_width": 1.5,
"required_height": 1.5,
"padding": 1.5,
"object_type": "VANI_OBJECT_TYPE_UNSPECIFIED",
"near_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"scope": {
"percent_bounds": {
"right_pct": 1.5,
"top_pct": 1.5,
"bottom_pct": 1.5,
"left_pct": 1.5
},
"absolute_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
},
"scope_type": "SCOPE_TYPE_ZONE",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"max_results": 1
}
],
"request_item_ids": [
"string",
"string"
]
}));
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}/zones/{zone_id}/spatial-search/suggest-placement/batch"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
String requestBody = "{\"requests\":[{\"required_width\":1.5,\"required_height\":1.5,\"padding\":1.5,\"object_type\":\"VANI_OBJECT_TYPE_UNSPECIFIED\",\"near_object\":{\"zone_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"object_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"frame_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\"},\"scope\":{\"percent_bounds\":{\"right_pct\":1.5,\"top_pct\":1.5,\"bottom_pct\":1.5,\"left_pct\":1.5},\"absolute_bounds\":{\"x\":1.5,\"width\":1.5,\"y\":1.5,\"height\":1.5},\"scope_type\":\"SCOPE_TYPE_ZONE\",\"frame_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\"},\"max_results\":1}],\"request_item_ids\":[\"string\",\"string\"]}";
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}/zones/{zone_id}/spatial-search/suggest-placement/batch";
headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");
requestData = {"requests": {{"required_width": 1.5, "required_height": 1.5, "padding": 1.5, "object_type": "VANI_OBJECT_TYPE_UNSPECIFIED", "near_object": {"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"}, "scope": {"percent_bounds": {"right_pct": 1.5, "top_pct": 1.5, "bottom_pct": 1.5, "left_pct": 1.5}, "absolute_bounds": {"x": 1.5, "width": 1.5, "y": 1.5, "height": 1.5}, "scope_type": "SCOPE_TYPE_ZONE", "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"}, "max_results": 1}}, "request_item_ids": {"string", "string"}};
response = invokeurl
[
url: "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/suggest-placement/batch"
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");
}{
"requests": [
{
"required_width": 1.5,
"required_height": 1.5,
"padding": 1.5,
"object_type": "VANI_OBJECT_TYPE_UNSPECIFIED",
"near_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"scope": {
"percent_bounds": {
"right_pct": 1.5,
"top_pct": 1.5,
"bottom_pct": 1.5,
"left_pct": 1.5
},
"absolute_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
},
"scope_type": "SCOPE_TYPE_ZONE",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"max_results": 1
}
],
"request_item_ids": [
"string",
"string"
]
}
Response
Successful response
{
"status": "success",
"data": {},
"message": "Request completed successfully",
"request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/suggest-placement/batch"
}
Invalid request - validation failed
{
"error": {
"details": {
"error_code": "IAM1031",
"message": "Invalid request - validation failed"
}
},
"request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/suggest-placement/batch",
"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}/zones/{zone_id}/spatial-search/suggest-placement/batch",
"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}/zones/{zone_id}/spatial-search/suggest-placement/batch",
"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}/zones/{zone_id}/spatial-search/suggest-placement/batch",
"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}/zones/{zone_id}/spatial-search/suggest-placement/batch",
"status": "error"
}
Errors
5 status codes
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
POST
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/empty-region/batch
Get ranked empty regions for several footprints in one call
Get ranked empty regions for several footprints in one call
OperationREAD
Rate limit30 requests / minute · per user
OAuth scopes
Vani.spaces.CREATEPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
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.
| Field | Type | Description | Value |
|---|---|---|---|
| requests REQUIRED | array of object | requests. Max length: 2000000 (required) (min 1, max 1) | |
| padding | number | Additional clearance after footprint fit is checked | |
| scope | object | Optional scope selector; defaults to SCOPE_TYPE_ZONE | |
| percent_bounds | object | Region refinement: bounds normalized to the selected container. Oneof with absolute_bounds | |
| right_pct | number | Right edge as 0-1 fraction of zone width | |
| top_pct | number | Top edge as 0-1 fraction of zone height | |
| bottom_pct | number | Bottom edge as 0-1 fraction of zone height | |
| left_pct | number | Left edge as 0-1 fraction of zone width | |
| absolute_bounds | object | Region refinement: absolute bounds in zone coordinates. Oneof with percent_bounds | |
| x | number | Left position in canvas units | |
| width | number | Width in canvas units | |
| y | number | Top position in canvas units | |
| height | number | Height in canvas units | |
| scope_type | string |
Scope type selector; defaults to SCOPE_TYPE_ZONE (max length 50)
SCOPE_TYPE_UNSPECIFIEDSCOPE_TYPE_ZONESCOPE_TYPE_FRAME
|
|
| frame_id | string | Frame id when scope_type is SCOPE_TYPE_FRAME (max length 200) | |
| required_width REQUIRED | number | Free-region width required for the footprint | |
| max_results | integer | Maximum ranked regions to return; unset uses the server default | |
| required_height REQUIRED | number | Free-region height required for the footprint | |
| request_item_ids | array of string | Optional correlation IDs echoed back in response (min 2, max 2) |
Request
POST
curl -X POST "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/empty-region/batch" \
-H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"requests": [
{
"required_width": 1.5,
"required_height": 1.5,
"padding": 1.5,
"scope": {
"percent_bounds": {
"right_pct": 1.5,
"top_pct": 1.5,
"bottom_pct": 1.5,
"left_pct": 1.5
},
"absolute_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
},
"scope_type": "SCOPE_TYPE_ZONE",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"max_results": 1
}
],
"request_item_ids": [
"string",
"string"
]
}'import requests
url = "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/empty-region/batch"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
data = {
"requests": [
{
"required_width": 1.5,
"required_height": 1.5,
"padding": 1.5,
"scope": {
"percent_bounds": {
"right_pct": 1.5,
"top_pct": 1.5,
"bottom_pct": 1.5,
"left_pct": 1.5
},
"absolute_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
},
"scope_type": "SCOPE_TYPE_ZONE",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"max_results": 1
}
],
"request_item_ids": [
"string",
"string"
]
}
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}/zones/{zone_id}/spatial-search/empty-region/batch'),
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({
"requests": [
{
"required_width": 1.5,
"required_height": 1.5,
"padding": 1.5,
"scope": {
"percent_bounds": {
"right_pct": 1.5,
"top_pct": 1.5,
"bottom_pct": 1.5,
"left_pct": 1.5
},
"absolute_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
},
"scope_type": "SCOPE_TYPE_ZONE",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"max_results": 1
}
],
"request_item_ids": [
"string",
"string"
]
}));
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}/zones/{zone_id}/spatial-search/empty-region/batch"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
String requestBody = "{\"requests\":[{\"required_width\":1.5,\"required_height\":1.5,\"padding\":1.5,\"scope\":{\"percent_bounds\":{\"right_pct\":1.5,\"top_pct\":1.5,\"bottom_pct\":1.5,\"left_pct\":1.5},\"absolute_bounds\":{\"x\":1.5,\"width\":1.5,\"y\":1.5,\"height\":1.5},\"scope_type\":\"SCOPE_TYPE_ZONE\",\"frame_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\"},\"max_results\":1}],\"request_item_ids\":[\"string\",\"string\"]}";
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}/zones/{zone_id}/spatial-search/empty-region/batch";
headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");
requestData = {"requests": {{"required_width": 1.5, "required_height": 1.5, "padding": 1.5, "scope": {"percent_bounds": {"right_pct": 1.5, "top_pct": 1.5, "bottom_pct": 1.5, "left_pct": 1.5}, "absolute_bounds": {"x": 1.5, "width": 1.5, "y": 1.5, "height": 1.5}, "scope_type": "SCOPE_TYPE_ZONE", "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"}, "max_results": 1}}, "request_item_ids": {"string", "string"}};
response = invokeurl
[
url: "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/empty-region/batch"
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");
}{
"requests": [
{
"required_width": 1.5,
"required_height": 1.5,
"padding": 1.5,
"scope": {
"percent_bounds": {
"right_pct": 1.5,
"top_pct": 1.5,
"bottom_pct": 1.5,
"left_pct": 1.5
},
"absolute_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
},
"scope_type": "SCOPE_TYPE_ZONE",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"max_results": 1
}
],
"request_item_ids": [
"string",
"string"
]
}
Response
Successful response
{
"status": "success",
"data": {},
"message": "Request completed successfully",
"request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/empty-region/batch"
}
Invalid request - validation failed
{
"error": {
"details": {
"error_code": "IAM1031",
"message": "Invalid request - validation failed"
}
},
"request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/empty-region/batch",
"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}/zones/{zone_id}/spatial-search/empty-region/batch",
"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}/zones/{zone_id}/spatial-search/empty-region/batch",
"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}/zones/{zone_id}/spatial-search/empty-region/batch",
"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}/zones/{zone_id}/spatial-search/empty-region/batch",
"status": "error"
}
Errors
5 status codes
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
POST
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/occupied-bounds/batch
Get union bounding boxes for several scopes in one call
Get union bounding boxes for several scopes in one call
OperationREAD
Rate limit30 requests / minute · per user
OAuth scopes
Vani.spaces.CREATEPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
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.
| Field | Type | Description | Value |
|---|---|---|---|
| requests REQUIRED | array of object | requests. Max length: 2000000 (required) (min 1, max 1) | |
| object_types | array of string |
Object-type filter; empty means all types (min 2, max 2)
VANI_OBJECT_TYPE_UNSPECIFIEDVANI_OBJECT_TYPE_SHAPEVANI_OBJECT_TYPE_CONNECTORVANI_OBJECT_TYPE_PICTUREVANI_OBJECT_TYPE_GROUP_SHAPEVANI_OBJECT_TYPE_DOMAIN_DIAGRAMVANI_OBJECT_TYPE_DIAGRAMVANI_OBJECT_TYPE_STRUCTUREVANI_OBJECT_TYPE_STRUCTURE_MINDMAPVANI_OBJECT_TYPE_STRUCTURE_KANBANVANI_OBJECT_TYPE_STRUCTURE_STACKVANI_OBJECT_TYPE_TABLEVANI_OBJECT_TYPE_CHARTVANI_OBJECT_TYPE_DATABASE_TABLEVANI_OBJECT_TYPE_STICKY_NOTE
|
|
| include_hidden | boolean | Include hidden objects when true | |
| scope | object | Optional scope selector; defaults to SCOPE_TYPE_ZONE | |
| percent_bounds | object | Region refinement: bounds normalized to the selected container. Oneof with absolute_bounds | |
| right_pct | number | Right edge as 0-1 fraction of zone width | |
| top_pct | number | Top edge as 0-1 fraction of zone height | |
| bottom_pct | number | Bottom edge as 0-1 fraction of zone height | |
| left_pct | number | Left edge as 0-1 fraction of zone width | |
| absolute_bounds | object | Region refinement: absolute bounds in zone coordinates. Oneof with percent_bounds | |
| x | number | Left position in canvas units | |
| width | number | Width in canvas units | |
| y | number | Top position in canvas units | |
| height | number | Height in canvas units | |
| scope_type | string |
Scope type selector; defaults to SCOPE_TYPE_ZONE (max length 50)
SCOPE_TYPE_UNSPECIFIEDSCOPE_TYPE_ZONESCOPE_TYPE_FRAME
|
|
| frame_id | string | Frame id when scope_type is SCOPE_TYPE_FRAME (max length 200) | |
| include_locked | boolean | Include locked objects when true | |
| request_item_ids | array of string | Optional correlation IDs echoed back in response (min 2, max 2) |
Request
POST
curl -X POST "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/occupied-bounds/batch" \
-H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"requests": [
{
"object_types": [
"VANI_OBJECT_TYPE_UNSPECIFIED",
"VANI_OBJECT_TYPE_UNSPECIFIED"
],
"include_hidden": true,
"scope": {
"percent_bounds": {
"right_pct": 1.5,
"top_pct": 1.5,
"bottom_pct": 1.5,
"left_pct": 1.5
},
"absolute_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
},
"scope_type": "SCOPE_TYPE_ZONE",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"include_locked": true
}
],
"request_item_ids": [
"string",
"string"
]
}'import requests
url = "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/occupied-bounds/batch"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
data = {
"requests": [
{
"object_types": [
"VANI_OBJECT_TYPE_UNSPECIFIED",
"VANI_OBJECT_TYPE_UNSPECIFIED"
],
"include_hidden": true,
"scope": {
"percent_bounds": {
"right_pct": 1.5,
"top_pct": 1.5,
"bottom_pct": 1.5,
"left_pct": 1.5
},
"absolute_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
},
"scope_type": "SCOPE_TYPE_ZONE",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"include_locked": true
}
],
"request_item_ids": [
"string",
"string"
]
}
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}/zones/{zone_id}/spatial-search/occupied-bounds/batch'),
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({
"requests": [
{
"object_types": [
"VANI_OBJECT_TYPE_UNSPECIFIED",
"VANI_OBJECT_TYPE_UNSPECIFIED"
],
"include_hidden": true,
"scope": {
"percent_bounds": {
"right_pct": 1.5,
"top_pct": 1.5,
"bottom_pct": 1.5,
"left_pct": 1.5
},
"absolute_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
},
"scope_type": "SCOPE_TYPE_ZONE",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"include_locked": true
}
],
"request_item_ids": [
"string",
"string"
]
}));
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}/zones/{zone_id}/spatial-search/occupied-bounds/batch"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
String requestBody = "{\"requests\":[{\"object_types\":[\"VANI_OBJECT_TYPE_UNSPECIFIED\",\"VANI_OBJECT_TYPE_UNSPECIFIED\"],\"include_hidden\":true,\"scope\":{\"percent_bounds\":{\"right_pct\":1.5,\"top_pct\":1.5,\"bottom_pct\":1.5,\"left_pct\":1.5},\"absolute_bounds\":{\"x\":1.5,\"width\":1.5,\"y\":1.5,\"height\":1.5},\"scope_type\":\"SCOPE_TYPE_ZONE\",\"frame_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\"},\"include_locked\":true}],\"request_item_ids\":[\"string\",\"string\"]}";
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}/zones/{zone_id}/spatial-search/occupied-bounds/batch";
headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");
requestData = {"requests": {{"object_types": {"VANI_OBJECT_TYPE_UNSPECIFIED", "VANI_OBJECT_TYPE_UNSPECIFIED"}, "include_hidden": true, "scope": {"percent_bounds": {"right_pct": 1.5, "top_pct": 1.5, "bottom_pct": 1.5, "left_pct": 1.5}, "absolute_bounds": {"x": 1.5, "width": 1.5, "y": 1.5, "height": 1.5}, "scope_type": "SCOPE_TYPE_ZONE", "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"}, "include_locked": true}}, "request_item_ids": {"string", "string"}};
response = invokeurl
[
url: "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/occupied-bounds/batch"
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");
}{
"requests": [
{
"object_types": [
"VANI_OBJECT_TYPE_UNSPECIFIED",
"VANI_OBJECT_TYPE_UNSPECIFIED"
],
"include_hidden": true,
"scope": {
"percent_bounds": {
"right_pct": 1.5,
"top_pct": 1.5,
"bottom_pct": 1.5,
"left_pct": 1.5
},
"absolute_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
},
"scope_type": "SCOPE_TYPE_ZONE",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"include_locked": true
}
],
"request_item_ids": [
"string",
"string"
]
}
Response
Successful response
{
"status": "success",
"data": {},
"message": "Request completed successfully",
"request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/occupied-bounds/batch"
}
Invalid request - validation failed
{
"error": {
"details": {
"error_code": "IAM1031",
"message": "Invalid request - validation failed"
}
},
"request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/occupied-bounds/batch",
"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}/zones/{zone_id}/spatial-search/occupied-bounds/batch",
"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}/zones/{zone_id}/spatial-search/occupied-bounds/batch",
"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}/zones/{zone_id}/spatial-search/occupied-bounds/batch",
"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}/zones/{zone_id}/spatial-search/occupied-bounds/batch",
"status": "error"
}
Errors
5 status codes
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
POST
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/objects/batch
Run several object queries in one call
Run several object queries in one call
OperationREAD
Rate limit30 requests / minute · per user
OAuth scopes
Vani.spaces.CREATEPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
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.
| Field | Type | Description | Value |
|---|---|---|---|
| requests REQUIRED | array of object | Array of GetObjects sub-requests (min 1, max 1) | |
| object_types | array of string |
Object-type filter; empty means all types (min 2, max 2)
VANI_OBJECT_TYPE_UNSPECIFIEDVANI_OBJECT_TYPE_SHAPEVANI_OBJECT_TYPE_CONNECTORVANI_OBJECT_TYPE_PICTUREVANI_OBJECT_TYPE_GROUP_SHAPEVANI_OBJECT_TYPE_DOMAIN_DIAGRAMVANI_OBJECT_TYPE_DIAGRAMVANI_OBJECT_TYPE_STRUCTUREVANI_OBJECT_TYPE_STRUCTURE_MINDMAPVANI_OBJECT_TYPE_STRUCTURE_KANBANVANI_OBJECT_TYPE_STRUCTURE_STACKVANI_OBJECT_TYPE_TABLEVANI_OBJECT_TYPE_CHARTVANI_OBJECT_TYPE_DATABASE_TABLEVANI_OBJECT_TYPE_STICKY_NOTE
|
|
| include_hidden | boolean | Include hidden objects when true | |
| scope | object | Optional scope selector; defaults to the full zone | |
| percent_bounds | object | Region refinement: bounds normalized to the selected container. Oneof with absolute_bounds | |
| right_pct | number | Right edge as 0-1 fraction of zone width | |
| top_pct | number | Top edge as 0-1 fraction of zone height | |
| bottom_pct | number | Bottom edge as 0-1 fraction of zone height | |
| left_pct | number | Left edge as 0-1 fraction of zone width | |
| absolute_bounds | object | Region refinement: absolute bounds in zone coordinates. Oneof with percent_bounds | |
| x | number | Left position in canvas units | |
| width | number | Width in canvas units | |
| y | number | Top position in canvas units | |
| height | number | Height in canvas units | |
| scope_type | string |
Scope type selector; defaults to SCOPE_TYPE_ZONE (max length 50)
SCOPE_TYPE_UNSPECIFIEDSCOPE_TYPE_ZONESCOPE_TYPE_FRAME
|
|
| frame_id | string | Frame id when scope_type is SCOPE_TYPE_FRAME (max length 200) | |
| max_results | integer | Maximum hits to return; unset uses the server default | |
| include_locked | boolean | Include locked objects when true | |
| request_item_ids | array of string | Optional correlation IDs echoed back in response (min 2, max 2) |
Request
POST
curl -X POST "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/objects/batch" \
-H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"requests": [
{
"object_types": [
"VANI_OBJECT_TYPE_UNSPECIFIED",
"VANI_OBJECT_TYPE_UNSPECIFIED"
],
"include_hidden": true,
"scope": {
"percent_bounds": {
"right_pct": 1.5,
"top_pct": 1.5,
"bottom_pct": 1.5,
"left_pct": 1.5
},
"absolute_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
},
"scope_type": "SCOPE_TYPE_ZONE",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"max_results": 1,
"include_locked": true
}
],
"request_item_ids": [
"string",
"string"
]
}'import requests
url = "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/objects/batch"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
data = {
"requests": [
{
"object_types": [
"VANI_OBJECT_TYPE_UNSPECIFIED",
"VANI_OBJECT_TYPE_UNSPECIFIED"
],
"include_hidden": true,
"scope": {
"percent_bounds": {
"right_pct": 1.5,
"top_pct": 1.5,
"bottom_pct": 1.5,
"left_pct": 1.5
},
"absolute_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
},
"scope_type": "SCOPE_TYPE_ZONE",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"max_results": 1,
"include_locked": true
}
],
"request_item_ids": [
"string",
"string"
]
}
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}/zones/{zone_id}/spatial-search/objects/batch'),
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({
"requests": [
{
"object_types": [
"VANI_OBJECT_TYPE_UNSPECIFIED",
"VANI_OBJECT_TYPE_UNSPECIFIED"
],
"include_hidden": true,
"scope": {
"percent_bounds": {
"right_pct": 1.5,
"top_pct": 1.5,
"bottom_pct": 1.5,
"left_pct": 1.5
},
"absolute_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
},
"scope_type": "SCOPE_TYPE_ZONE",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"max_results": 1,
"include_locked": true
}
],
"request_item_ids": [
"string",
"string"
]
}));
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}/zones/{zone_id}/spatial-search/objects/batch"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
String requestBody = "{\"requests\":[{\"object_types\":[\"VANI_OBJECT_TYPE_UNSPECIFIED\",\"VANI_OBJECT_TYPE_UNSPECIFIED\"],\"include_hidden\":true,\"scope\":{\"percent_bounds\":{\"right_pct\":1.5,\"top_pct\":1.5,\"bottom_pct\":1.5,\"left_pct\":1.5},\"absolute_bounds\":{\"x\":1.5,\"width\":1.5,\"y\":1.5,\"height\":1.5},\"scope_type\":\"SCOPE_TYPE_ZONE\",\"frame_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\"},\"max_results\":1,\"include_locked\":true}],\"request_item_ids\":[\"string\",\"string\"]}";
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}/zones/{zone_id}/spatial-search/objects/batch";
headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");
requestData = {"requests": {{"object_types": {"VANI_OBJECT_TYPE_UNSPECIFIED", "VANI_OBJECT_TYPE_UNSPECIFIED"}, "include_hidden": true, "scope": {"percent_bounds": {"right_pct": 1.5, "top_pct": 1.5, "bottom_pct": 1.5, "left_pct": 1.5}, "absolute_bounds": {"x": 1.5, "width": 1.5, "y": 1.5, "height": 1.5}, "scope_type": "SCOPE_TYPE_ZONE", "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"}, "max_results": 1, "include_locked": true}}, "request_item_ids": {"string", "string"}};
response = invokeurl
[
url: "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/objects/batch"
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");
}{
"requests": [
{
"object_types": [
"VANI_OBJECT_TYPE_UNSPECIFIED",
"VANI_OBJECT_TYPE_UNSPECIFIED"
],
"include_hidden": true,
"scope": {
"percent_bounds": {
"right_pct": 1.5,
"top_pct": 1.5,
"bottom_pct": 1.5,
"left_pct": 1.5
},
"absolute_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
},
"scope_type": "SCOPE_TYPE_ZONE",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"max_results": 1,
"include_locked": true
}
],
"request_item_ids": [
"string",
"string"
]
}
Response
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}/zones/{zone_id}/spatial-search/objects/batch",
"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}/zones/{zone_id}/spatial-search/objects/batch",
"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}/zones/{zone_id}/spatial-search/objects/batch",
"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}/zones/{zone_id}/spatial-search/objects/batch",
"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}/zones/{zone_id}/spatial-search/objects/batch",
"status": "error"
}
Errors
5 status codes
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
POST
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/placement-feasibility/batch
Check several footprints for fit in one call
Check several footprints for fit in one call
OperationREAD
Rate limit30 requests / minute · per user
OAuth scopes
Vani.spaces.CREATEPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
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.
| Field | Type | Description | Value |
|---|---|---|---|
| requests REQUIRED | array of object | requests. Max length: 2000000 (required) (min 1, max 1) | |
| padding | number | Required clearance from nearby objects and bounds | |
| object_type | string |
Type of object to be placed (max length 60)
VANI_OBJECT_TYPE_UNSPECIFIEDVANI_OBJECT_TYPE_SHAPEVANI_OBJECT_TYPE_CONNECTORVANI_OBJECT_TYPE_PICTUREVANI_OBJECT_TYPE_GROUP_SHAPEVANI_OBJECT_TYPE_DOMAIN_DIAGRAMVANI_OBJECT_TYPE_DIAGRAMVANI_OBJECT_TYPE_STRUCTUREVANI_OBJECT_TYPE_STRUCTURE_MINDMAPVANI_OBJECT_TYPE_STRUCTURE_KANBANVANI_OBJECT_TYPE_STRUCTURE_STACKVANI_OBJECT_TYPE_TABLEVANI_OBJECT_TYPE_CHARTVANI_OBJECT_TYPE_DATABASE_TABLEVANI_OBJECT_TYPE_STICKY_NOTE
|
|
| near_object | object | Optional anchor object for relation-aware validation | |
| zone_id | string | Zone containing the object (max length 200) | |
| object_id | string | Object id in the frame (max length 200) | |
| frame_id | string | Frame containing the object (max length 200) | |
| scope | object | Optional scope selector; defaults to SCOPE_TYPE_ZONE | |
| percent_bounds | object | Region refinement: bounds normalized to the selected container. Oneof with absolute_bounds | |
| right_pct | number | Right edge as 0-1 fraction of zone width | |
| top_pct | number | Top edge as 0-1 fraction of zone height | |
| bottom_pct | number | Bottom edge as 0-1 fraction of zone height | |
| left_pct | number | Left edge as 0-1 fraction of zone width | |
| absolute_bounds | object | Region refinement: absolute bounds in zone coordinates. Oneof with percent_bounds | |
| x | number | Left position in canvas units | |
| width | number | Width in canvas units | |
| y | number | Top position in canvas units | |
| height | number | Height in canvas units | |
| scope_type | string |
Scope type selector; defaults to SCOPE_TYPE_ZONE (max length 50)
SCOPE_TYPE_UNSPECIFIEDSCOPE_TYPE_ZONESCOPE_TYPE_FRAME
|
|
| frame_id | string | Frame id when scope_type is SCOPE_TYPE_FRAME (max length 200) | |
| required_width REQUIRED | number | Footprint width to validate | |
| required_height REQUIRED | number | Footprint height to validate | |
| request_item_ids | array of string | Optional correlation IDs echoed back in response (min 2, max 2) |
Request
POST
curl -X POST "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/placement-feasibility/batch" \
-H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"requests": [
{
"required_width": 1.5,
"required_height": 1.5,
"padding": 1.5,
"object_type": "VANI_OBJECT_TYPE_UNSPECIFIED",
"near_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"scope": {
"percent_bounds": {
"right_pct": 1.5,
"top_pct": 1.5,
"bottom_pct": 1.5,
"left_pct": 1.5
},
"absolute_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
},
"scope_type": "SCOPE_TYPE_ZONE",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
}
}
],
"request_item_ids": [
"string",
"string"
]
}'import requests
url = "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/placement-feasibility/batch"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
data = {
"requests": [
{
"required_width": 1.5,
"required_height": 1.5,
"padding": 1.5,
"object_type": "VANI_OBJECT_TYPE_UNSPECIFIED",
"near_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"scope": {
"percent_bounds": {
"right_pct": 1.5,
"top_pct": 1.5,
"bottom_pct": 1.5,
"left_pct": 1.5
},
"absolute_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
},
"scope_type": "SCOPE_TYPE_ZONE",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
}
}
],
"request_item_ids": [
"string",
"string"
]
}
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}/zones/{zone_id}/spatial-search/placement-feasibility/batch'),
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({
"requests": [
{
"required_width": 1.5,
"required_height": 1.5,
"padding": 1.5,
"object_type": "VANI_OBJECT_TYPE_UNSPECIFIED",
"near_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"scope": {
"percent_bounds": {
"right_pct": 1.5,
"top_pct": 1.5,
"bottom_pct": 1.5,
"left_pct": 1.5
},
"absolute_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
},
"scope_type": "SCOPE_TYPE_ZONE",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
}
}
],
"request_item_ids": [
"string",
"string"
]
}));
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}/zones/{zone_id}/spatial-search/placement-feasibility/batch"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
String requestBody = "{\"requests\":[{\"required_width\":1.5,\"required_height\":1.5,\"padding\":1.5,\"object_type\":\"VANI_OBJECT_TYPE_UNSPECIFIED\",\"near_object\":{\"zone_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"object_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"frame_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\"},\"scope\":{\"percent_bounds\":{\"right_pct\":1.5,\"top_pct\":1.5,\"bottom_pct\":1.5,\"left_pct\":1.5},\"absolute_bounds\":{\"x\":1.5,\"width\":1.5,\"y\":1.5,\"height\":1.5},\"scope_type\":\"SCOPE_TYPE_ZONE\",\"frame_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\"}}],\"request_item_ids\":[\"string\",\"string\"]}";
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}/zones/{zone_id}/spatial-search/placement-feasibility/batch";
headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");
requestData = {"requests": {{"required_width": 1.5, "required_height": 1.5, "padding": 1.5, "object_type": "VANI_OBJECT_TYPE_UNSPECIFIED", "near_object": {"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"}, "scope": {"percent_bounds": {"right_pct": 1.5, "top_pct": 1.5, "bottom_pct": 1.5, "left_pct": 1.5}, "absolute_bounds": {"x": 1.5, "width": 1.5, "y": 1.5, "height": 1.5}, "scope_type": "SCOPE_TYPE_ZONE", "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"}}}, "request_item_ids": {"string", "string"}};
response = invokeurl
[
url: "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/placement-feasibility/batch"
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");
}{
"requests": [
{
"required_width": 1.5,
"required_height": 1.5,
"padding": 1.5,
"object_type": "VANI_OBJECT_TYPE_UNSPECIFIED",
"near_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"scope": {
"percent_bounds": {
"right_pct": 1.5,
"top_pct": 1.5,
"bottom_pct": 1.5,
"left_pct": 1.5
},
"absolute_bounds": {
"x": 1.5,
"width": 1.5,
"y": 1.5,
"height": 1.5
},
"scope_type": "SCOPE_TYPE_ZONE",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
}
}
],
"request_item_ids": [
"string",
"string"
]
}
Response
Successful response
{
"status": "success",
"data": {},
"message": "Request completed successfully",
"request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/placement-feasibility/batch"
}
Invalid request - validation failed
{
"error": {
"details": {
"error_code": "IAM1031",
"message": "Invalid request - validation failed"
}
},
"request_uri": "/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/spatial-search/placement-feasibility/batch",
"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}/zones/{zone_id}/spatial-search/placement-feasibility/batch",
"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}/zones/{zone_id}/spatial-search/placement-feasibility/batch",
"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}/zones/{zone_id}/spatial-search/placement-feasibility/batch",
"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}/zones/{zone_id}/spatial-search/placement-feasibility/batch",
"status": "error"
}
Errors
5 status codes
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
GET
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/connections/feasibility
Check whether a connection between two objects is feasible
Check whether a connection between two objects is feasible
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.READPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
Query parameters connection_query
| Name | Type | Description |
|---|---|---|
| connection_queryREQUIRED | string (JSON) |
`connection_query` — JSON-encoded GetConnectionFeasibility request: source_object, target_object, optional payload (connector_type, source_side, target_side). 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
{
"target_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "60712000000123456",
"frame_id": "60712000000123456"
},
"source_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "60712000000123456",
"frame_id": "60712000000123456"
},
"payload": {
"connector_type": "LINE",
"target_side": "UNKNOWN_SIDE",
"source_side": "UNKNOWN_SIDE"
}
}
URL-encoded, as sent
%7B%22target_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22source_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22payload%22%3A%7B%22connector_type%22%3A%22LINE%22%2C%22target_side%22%3A%22UNKNOWN_SIDE%22%2C%22source_side%22%3A%22UNKNOWN_SIDE%22%7D%7D |
Request
GET
curl -X GET "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/connections/feasibility?connection_query=%7B%22target_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22source_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22payload%22%3A%7B%22connector_type%22%3A%22LINE%22%2C%22target_side%22%3A%22UNKNOWN_SIDE%22%2C%22source_side%22%3A%22UNKNOWN_SIDE%22%7D%7D" \
-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}/zones/{zone_id}/connections/feasibility?connection_query=%7B%22target_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22source_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22payload%22%3A%7B%22connector_type%22%3A%22LINE%22%2C%22target_side%22%3A%22UNKNOWN_SIDE%22%2C%22source_side%22%3A%22UNKNOWN_SIDE%22%7D%7D"
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}/zones/{zone_id}/connections/feasibility?connection_query=%7B%22target_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22source_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22payload%22%3A%7B%22connector_type%22%3A%22LINE%22%2C%22target_side%22%3A%22UNKNOWN_SIDE%22%2C%22source_side%22%3A%22UNKNOWN_SIDE%22%7D%7D'),
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}/zones/{zone_id}/connections/feasibility?connection_query=%7B%22target_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22source_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22payload%22%3A%7B%22connector_type%22%3A%22LINE%22%2C%22target_side%22%3A%22UNKNOWN_SIDE%22%2C%22source_side%22%3A%22UNKNOWN_SIDE%22%7D%7D"))
.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}/zones/{zone_id}/connections/feasibility?connection_query=%7B%22target_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22source_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22payload%22%3A%7B%22connector_type%22%3A%22LINE%22%2C%22target_side%22%3A%22UNKNOWN_SIDE%22%2C%22source_side%22%3A%22UNKNOWN_SIDE%22%7D%7D";
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}/zones/{zone_id}/connections/feasibility?connection_query=%7B%22target_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22source_object%22%3A%7B%22zone_id%22%3A%22f47ac10b-58cc-4372-a567-0e02b2c3d479%22%2C%22object_id%22%3A%2260712000000123456%22%2C%22frame_id%22%3A%2260712000000123456%22%7D%2C%22payload%22%3A%7B%22connector_type%22%3A%22LINE%22%2C%22target_side%22%3A%22UNKNOWN_SIDE%22%2C%22source_side%22%3A%22UNKNOWN_SIDE%22%7D%7D"
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");
}
Response
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}/zones/{zone_id}/connections/feasibility",
"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}/zones/{zone_id}/connections/feasibility",
"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}/zones/{zone_id}/connections/feasibility",
"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}/zones/{zone_id}/connections/feasibility",
"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}/zones/{zone_id}/connections/feasibility",
"status": "error"
}
Errors
5 status codes
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
POST
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/connections/reconnect
Move one end of an existing connection to another object
Move one end of an existing connection to another object
OperationCREATE
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.CREATEPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
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.
| Field | Type | Description | Value |
|---|---|---|---|
| current_object REQUIRED | object | Existing endpoint object to be replaced | |
| zone_id | string | Zone containing the object (max length 200) | |
| object_id | string | Object id in the frame (max length 200) | |
| frame_id | string | Frame containing the object (max length 200) | |
| new_object REQUIRED | object | New endpoint object | |
| zone_id | string | Zone containing the object (max length 200) | |
| object_id | string | Object id in the frame (max length 200) | |
| frame_id | string | Frame containing the object (max length 200) | |
| payload | object | Shared reconnect options payload (new_side) | |
| new_side | string |
Preferred side on new_object; UNKNOWN_SIDE lets server choose (max length 20)
UNKNOWN_SIDENORTHEASTSOUTHWEST
|
|
| connection_object REQUIRED | object | Existing connector object to reconnect | |
| zone_id | string | Zone containing the object (max length 200) | |
| object_id | string | Object id in the frame (max length 200) | |
| frame_id | string | Frame containing the object (max length 200) | |
| context REQUIRED | object | Request context with zone scope | |
| zone_id REQUIRED | string | Target zone id (required) (max length 200) | |
| validate_only | boolean | Validate/dry-run mode when true | |
| actor_id | string | Calling actor/agent id (max length 200) | |
| base_revision_id | string | Optional optimistic-concurrency token for mutating operations (max length 200) | |
| request_id | string | Client-supplied request correlation id (max length 200) |
Request
POST
curl -X POST "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/connections/reconnect" \
-H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"current_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"new_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"connection_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"context": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"validate_only": true,
"actor_id": "60712000000123456",
"base_revision_id": "60712000000123456",
"request_id": "60712000000123456"
},
"payload": {
"new_side": "UNKNOWN_SIDE"
}
}'import requests
url = "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/connections/reconnect"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
data = {
"current_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"new_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"connection_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"context": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"validate_only": true,
"actor_id": "60712000000123456",
"base_revision_id": "60712000000123456",
"request_id": "60712000000123456"
},
"payload": {
"new_side": "UNKNOWN_SIDE"
}
}
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}/zones/{zone_id}/connections/reconnect'),
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({
"current_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"new_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"connection_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"context": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"validate_only": true,
"actor_id": "60712000000123456",
"base_revision_id": "60712000000123456",
"request_id": "60712000000123456"
},
"payload": {
"new_side": "UNKNOWN_SIDE"
}
}));
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}/zones/{zone_id}/connections/reconnect"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
String requestBody = "{\"current_object\":{\"zone_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"object_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"frame_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\"},\"new_object\":{\"zone_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"object_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"frame_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\"},\"connection_object\":{\"zone_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"object_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"frame_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\"},\"context\":{\"zone_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"validate_only\":true,\"actor_id\":\"60712000000123456\",\"base_revision_id\":\"60712000000123456\",\"request_id\":\"60712000000123456\"},\"payload\":{\"new_side\":\"UNKNOWN_SIDE\"}}";
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}/zones/{zone_id}/connections/reconnect";
headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");
requestData = {"current_object": {"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"}, "new_object": {"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"}, "connection_object": {"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"}, "context": {"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "validate_only": true, "actor_id": "60712000000123456", "base_revision_id": "60712000000123456", "request_id": "60712000000123456"}, "payload": {"new_side": "UNKNOWN_SIDE"}};
response = invokeurl
[
url: "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/connections/reconnect"
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");
}{
"current_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"new_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"connection_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"context": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"validate_only": true,
"actor_id": "60712000000123456",
"base_revision_id": "60712000000123456",
"request_id": "60712000000123456"
},
"payload": {
"new_side": "UNKNOWN_SIDE"
}
}
Response
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}/zones/{zone_id}/connections/reconnect",
"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}/zones/{zone_id}/connections/reconnect",
"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}/zones/{zone_id}/connections/reconnect",
"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}/zones/{zone_id}/connections/reconnect",
"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}/zones/{zone_id}/connections/reconnect",
"status": "error"
}
Errors
5 status codes
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
POST
/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/connections/create
Create a connection between two objects in a zone
Create a connection between two objects in a zone
OperationCREATE
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.CREATEPath parameters edition_id · space_id · zone_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| zone_idREQUIRED | string | The unique identifier of the zone |
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.
| Field | Type | Description | Value |
|---|---|---|---|
| payload | object | Shared connector options payload (connector_type, source_side, target_side) | |
| connector_type | string |
Preferred connector type; defaults to LINE (max length 10)
LINEELBOWCURVE
|
|
| target_side | string |
Preferred target endpoint side; UNKNOWN_SIDE lets server auto-resolve (max length 20)
UNKNOWN_SIDENORTHEASTSOUTHWEST
|
|
| source_side | string |
Preferred source endpoint side; UNKNOWN_SIDE lets server auto-resolve (max length 20)
UNKNOWN_SIDENORTHEASTSOUTHWEST
|
|
| target_object REQUIRED | object | Target endpoint object | |
| zone_id | string | Zone containing the object (max length 200) | |
| object_id | string | Object id in the frame (max length 200) | |
| frame_id | string | Frame containing the object (max length 200) | |
| context REQUIRED | object | Request context with zone scope | |
| zone_id REQUIRED | string | Target zone id (required) (max length 200) | |
| validate_only | boolean | Validate/dry-run mode when true | |
| actor_id | string | Calling actor/agent id (max length 200) | |
| base_revision_id | string | Optional optimistic-concurrency token for mutating operations (max length 200) | |
| request_id | string | Client-supplied request correlation id (max length 200) | |
| source_object REQUIRED | object | Source endpoint object | |
| zone_id | string | Zone containing the object (max length 200) | |
| object_id | string | Object id in the frame (max length 200) | |
| frame_id | string | Frame containing the object (max length 200) |
Request
POST
curl -X POST "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/connections/create" \
-H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"target_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"context": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"validate_only": true,
"actor_id": "60712000000123456",
"base_revision_id": "60712000000123456",
"request_id": "60712000000123456"
},
"source_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"payload": {
"connector_type": "LINE",
"target_side": "UNKNOWN_SIDE",
"source_side": "UNKNOWN_SIDE"
}
}'import requests
url = "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/connections/create"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
data = {
"target_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"context": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"validate_only": true,
"actor_id": "60712000000123456",
"base_revision_id": "60712000000123456",
"request_id": "60712000000123456"
},
"source_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"payload": {
"connector_type": "LINE",
"target_side": "UNKNOWN_SIDE",
"source_side": "UNKNOWN_SIDE"
}
}
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}/zones/{zone_id}/connections/create'),
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({
"target_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"context": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"validate_only": true,
"actor_id": "60712000000123456",
"base_revision_id": "60712000000123456",
"request_id": "60712000000123456"
},
"source_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"payload": {
"connector_type": "LINE",
"target_side": "UNKNOWN_SIDE",
"source_side": "UNKNOWN_SIDE"
}
}));
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}/zones/{zone_id}/connections/create"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
String requestBody = "{\"target_object\":{\"zone_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"object_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"frame_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\"},\"context\":{\"zone_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"validate_only\":true,\"actor_id\":\"60712000000123456\",\"base_revision_id\":\"60712000000123456\",\"request_id\":\"60712000000123456\"},\"source_object\":{\"zone_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"object_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"frame_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\"},\"payload\":{\"connector_type\":\"LINE\",\"target_side\":\"UNKNOWN_SIDE\",\"source_side\":\"UNKNOWN_SIDE\"}}";
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}/zones/{zone_id}/connections/create";
headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");
requestData = {"target_object": {"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"}, "context": {"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "validate_only": true, "actor_id": "60712000000123456", "base_revision_id": "60712000000123456", "request_id": "60712000000123456"}, "source_object": {"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"}, "payload": {"connector_type": "LINE", "target_side": "UNKNOWN_SIDE", "source_side": "UNKNOWN_SIDE"}};
response = invokeurl
[
url: "https://api.app.vanihq.com/sdk/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/connections/create"
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");
}{
"target_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"context": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"validate_only": true,
"actor_id": "60712000000123456",
"base_revision_id": "60712000000123456",
"request_id": "60712000000123456"
},
"source_object": {
"zone_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"object_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"frame_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
},
"payload": {
"connector_type": "LINE",
"target_side": "UNKNOWN_SIDE",
"source_side": "UNKNOWN_SIDE"
}
}
Response
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}/zones/{zone_id}/connections/create",
"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}/zones/{zone_id}/connections/create",
"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}/zones/{zone_id}/connections/create",
"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}/zones/{zone_id}/connections/create",
"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}/zones/{zone_id}/connections/create",
"status": "error"
}
Errors
5 status codes
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