Vani Logo Vani / API Docs v1
Access Vani
Zone Operations / Layout & Placement

Layout & Placement

Deterministic placement, alignment, tidy layout, spatial queries, and connector routing.

Anchoring

Place, align, and tidy frames and objects relative to one another, with feasibility previews.
Check whether selected frames already satisfy a requested alignment mode and optional target bounds
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.READ
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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
NameTypeDescription
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
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");
}
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"
}
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
Check whether a source frame can be placed relative to a target frame without violating constraints
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.READ
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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
NameTypeDescription
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
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");
}
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"
}
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
Check whether selected objects already satisfy a requested alignment mode and optional target bounds
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.READ
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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
NameTypeDescription
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
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");
}
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"
}
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
Preview the tidy grid layout for selected objects without applying it
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.READ
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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
NameTypeDescription
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
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");
}
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"
}
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
Preview the tidy grid layout for selected frames without applying it
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.READ
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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
NameTypeDescription
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
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");
}
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"
}
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
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 scopesVani.spaces.READ
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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
NameTypeDescription
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
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");
}
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"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
429  Rate limit exceeded - this operation allows 60 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
Apply tidy grid layout to selected frames using requested spacing and direction policy
OperationUPDATE
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.UPDATE
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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.
FieldTypeDescriptionValue
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
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
    }
  }
}
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"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
429  Rate limit exceeded - this operation allows 60 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
Apply tidy grid layout to selected objects using requested spacing and direction policy
OperationUPDATE
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.UPDATE
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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.
FieldTypeDescriptionValue
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)
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
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
    }
  }
}
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"
}
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
Align selected frames using a requested alignment mode and optional target bounds
OperationUPDATE
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.UPDATE
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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.
FieldTypeDescriptionValue
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
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
    }
  }
}
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"
}
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
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 scopesVani.spaces.UPDATE
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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.
FieldTypeDescriptionValue
target_object REQUIRED object Reference target object
source_object REQUIRED object Object to move
constraint object Optional placement constraints
relation REQUIRED string Desired relation from source to target (max length 60)
ANCHOR_RELATION_UNSPECIFIEDANCHOR_RELATION_LEFTANCHOR_RELATION_RIGHTANCHOR_RELATION_TOPANCHOR_RELATION_BOTTOM
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
  }
}
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"
}
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
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 scopesVani.spaces.UPDATE
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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.
FieldTypeDescriptionValue
target_frame_id REQUIRED string Reference target frame (max length 200)
constraint object Optional placement constraints
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
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
  }
}
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"
}
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
Align selected objects using a requested alignment mode and optional target bounds
OperationUPDATE
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.UPDATE
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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.
FieldTypeDescriptionValue
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)
target object Optional alignment target; defaults to WITHIN_SELECTION
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
    }
  }
}
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"
}
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
Query occupied and empty regions, clearances, and ranked placement candidates.
Check whether a footprint fits within a scope without overlapping
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.READ
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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
NameTypeDescription
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
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");
}
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"
}
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 ranked placement candidates for a new object
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.READ
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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
NameTypeDescription
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
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");
}
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"
}
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 the objects within a spatial scope or region
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.READ
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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
NameTypeDescription
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
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");
}
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"
}
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 ranked empty regions that fit a requested footprint
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.READ
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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
NameTypeDescription
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
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");
}
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"
}
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 the union bounding box of all objects in a scope
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.READ
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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
NameTypeDescription
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
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");
}
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"
}
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 the directional gap distances around an object
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.READ
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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
NameTypeDescription
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
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");
}
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"
}
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 ranked placement candidates for several objects in one call
OperationREAD
Rate limit30 requests / minute · per user
OAuth scopesVani.spaces.CREATE
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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.
FieldTypeDescriptionValue
requests REQUIRED array of object requests. Max length: 2000000 (required) (min 1, max 1)
request_item_ids array of string Optional correlation IDs echoed back in response (min 2, max 2)
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"
  ]
}
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"
}
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 ranked empty regions for several footprints in one call
OperationREAD
Rate limit30 requests / minute · per user
OAuth scopesVani.spaces.CREATE
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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.
FieldTypeDescriptionValue
requests REQUIRED array of object requests. Max length: 2000000 (required) (min 1, max 1)
request_item_ids array of string Optional correlation IDs echoed back in response (min 2, max 2)
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"
  ]
}
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"
}
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 union bounding boxes for several scopes in one call
OperationREAD
Rate limit30 requests / minute · per user
OAuth scopesVani.spaces.CREATE
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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.
FieldTypeDescriptionValue
requests REQUIRED array of object requests. Max length: 2000000 (required) (min 1, max 1)
request_item_ids array of string Optional correlation IDs echoed back in response (min 2, max 2)
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"
  ]
}
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"
}
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
Run several object queries in one call
OperationREAD
Rate limit30 requests / minute · per user
OAuth scopesVani.spaces.CREATE
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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.
FieldTypeDescriptionValue
requests REQUIRED array of object Array of GetObjects sub-requests (min 1, max 1)
request_item_ids array of string Optional correlation IDs echoed back in response (min 2, max 2)
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"
  ]
}
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"
}
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
Check several footprints for fit in one call
OperationREAD
Rate limit30 requests / minute · per user
OAuth scopesVani.spaces.CREATE
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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.
FieldTypeDescriptionValue
requests REQUIRED array of object requests. Max length: 2000000 (required) (min 1, max 1)
request_item_ids array of string Optional correlation IDs echoed back in response (min 2, max 2)
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"
  ]
}
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"
}
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

Connections

Create, re-route, and feasibility-check connectors between objects.
Check whether a connection between two objects is feasible
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.READ
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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
NameTypeDescription
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
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");
}
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"
}
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
Move one end of an existing connection to another object
OperationCREATE
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.CREATE
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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.
FieldTypeDescriptionValue
current_object REQUIRED object Existing endpoint object to be replaced
new_object REQUIRED object New endpoint object
payload object Shared reconnect options payload (new_side)
connection_object REQUIRED object Existing connector object to reconnect
context REQUIRED object Request context with zone scope
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"
  }
}
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"
}
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
Create a connection between two objects in a zone
OperationCREATE
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.CREATE
Path parameters edition_id · space_id · zone_id
NameTypeDescription
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.
FieldTypeDescriptionValue
payload object Shared connector options payload (connector_type, source_side, target_side)
target_object REQUIRED object Target endpoint object
context REQUIRED object Request context with zone scope
source_object REQUIRED object Source endpoint object
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"
  }
}
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"
}
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
© 2026 Zoho Corporation Pvt. Ltd. Help