Vani Logo Vani / API Docs v1
Access Vani
Core / Zones

Zones

Zones (documents) within a space: lifecycle, metadata, versioning, and per-zone sharing.

Zones

Create, duplicate, move, and update zones, read their metadata, and insert templates into them.
Get zone metadata
OperationREAD
Rate limit30 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
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/meta" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json"
import requests

url = "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/meta"
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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/meta'),
  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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/meta"))
            .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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/meta";

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

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/meta"
    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
{
  "data": {
    "zone_info": {
      "created_time": "Tue, 15 Jul 2025, 10:49:13",
      "zone_id": "c606cdb1-ae46-47a6-847b-0a36caf9f797",
      "last_modified_time": "Tue, 29 Jul 2025, 13:46:46",
      "zone_key": "3009000000701095",
      "zone_name": "Zone 1",
      "space_id": "3009000000701079",
      "author_zuid": "96384499",
      "last_author_zuid": "96384499",
      "status": "ACTIVE"
    }
  },
  "message": "Zone metadata fetched successfully.",
  "request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000701079/zones/c606cdb1-ae46-47a6-847b-0a36caf9f797/meta",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "Z1011",
      "message": "Zone is not in an active state",
      "space_id": "3009000000789069"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000789069/zones/e42f51ec-e4dc-4dc5-9587-7a2e49dcdc2e/meta",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "A1003",
      "message": "The user doesn't have permission to perform this action",
      "space_id": "3009000000789069"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000789069/zones/e42f51ec-e4dc-4dc5-9587-7a2e49dcdc2e/meta",
  "status": "error"
}
Forbidden - the caller is authenticated but not allowed to perform this operation
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "S1033",
      "message": "Restricted zone",
      "space_id": "3009000000789069"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000789069/zones/e42f51ec-e4dc-4dc5-9587-7a2e49dcdc2e/meta",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/meta",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/meta",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/meta",
  "status": "error"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
403  Forbidden - the caller is authenticated but not allowed to perform this operation
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 metadata for all zones in a space
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.READ
Path parameters edition_id · space_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
space_idREQUIRED string The unique identifier of the space
Query parameters fields
NameTypeDescription
fieldsOPTIONAL enum Specifies the fields (comma-separated) to retrieve
created_timelast_modified_timezone_nameauthor_zuidstatuslast_author_zuidspace_idstate_modified_time
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/meta" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json"
import requests

url = "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/meta"
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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/meta'),
  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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/meta"))
            .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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/meta";

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

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/meta"
    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
{
  "data": {
    "zones_info": {
      "zone_order": [
        "0e1e3a8a-a115-463e-bdb6-f540ab37eeb6",
        "6F961124-4598-47D6-9BDA-1705DFBA07D7",
        "598356E6-5F86-45FA-A7D5-ED8BB6D40DAE"
      ],
      "zone_meta": {
        "598356E6-5F86-45FA-A7D5-ED8BB6D40DAE": {
          "created_time": "Tue, 04 Feb 2025, 11:34:28",
          "zone_name": "Zone 3"
        },
        "0e1e3a8a-a115-463e-bdb6-f540ab37eeb6": {
          "created_time": "Tue, 28 Jan 2025, 11:59:50",
          "zone_name": "Zone 1"
        },
        "6F961124-4598-47D6-9BDA-1705DFBA07D7": {
          "created_time": "Tue, 04 Feb 2025, 11:34:26",
          "zone_name": "Zone 2"
        }
      }
    }
  },
  "message": "Zone metadata fetched successfully.",
  "request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000095397/zones/meta",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/meta",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "edition_id": "97375109",
      "current_user_id": "96384499",
      "error_code": "A1003",
      "message": "The user doesn't have permission to perform this action",
      "space_id": "1505000000022005"
    }
  },
  "request_uri": "/vani/api/v1/editions/97375109/spaces/1505000000022005/zones/meta",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/meta",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/meta",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/meta",
  "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 zone to another space
OperationCREATE
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
move_zone REQUIRED object move zone. Max length: 11000 (required)
curl -X POST "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/move" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "move_zone": {
    "destination_type": "NEW_SPACE",
    "space_name": "Sample name",
    "deep_copy": true,
    "team_id": "60712000000123456",
    "destination_space_id": "60712000000123456",
    "copy_comments": true
  }
}'
import requests

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

data = {
  "move_zone": {
    "destination_type": "NEW_SPACE",
    "space_name": "Sample name",
    "deep_copy": true,
    "team_id": "60712000000123456",
    "destination_space_id": "60712000000123456",
    "copy_comments": true
  }
}

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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/move'),
  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({
  "move_zone": {
    "destination_type": "NEW_SPACE",
    "space_name": "Sample name",
    "deep_copy": true,
    "team_id": "60712000000123456",
    "destination_space_id": "60712000000123456",
    "copy_comments": 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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/move"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        String requestBody = "{\"move_zone\":{\"destination_type\":\"NEW_SPACE\",\"space_name\":\"Sample name\",\"deep_copy\":true,\"team_id\":\"60712000000123456\",\"destination_space_id\":\"60712000000123456\",\"copy_comments\":true}}";
        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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/move";

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

requestData = {"move_zone": {"destination_type": "NEW_SPACE", "space_name": "Sample name", "deep_copy": true, "team_id": "60712000000123456", "destination_space_id": "60712000000123456", "copy_comments": true}};

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/move"
    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");
}
{
  "move_zone": {
    "destination_type": "NEW_SPACE",
    "space_name": "Sample name",
    "deep_copy": true,
    "team_id": "60712000000123456",
    "destination_space_id": "60712000000123456",
    "copy_comments": true
  }
}
Successful response
{
  "data": {
    "space_info": {
      "created_time": "Mon, 10 Mar 2025, 10:42:20",
      "last_modified_time": "Mon, 10 Mar 2025, 10:42:20",
      "is_favorite": "false",
      "space_name": "Project proposal",
      "publish": "false",
      "owner_zuid": "96384499",
      "can_edit": "true",
      "allow_embed": "false",
      "team_id": "693000000435005",
      "space_id": "693000000569361",
      "last_author_zuid": "96384499",
      "status": "ACTIVE"
    }
  },
  "message": "Zone moved successfully",
  "request_uri": "/vani/api/v1/editions/75918186/spaces/693000000569005/zones/4a971774-9ea7-4f1b-94c8-7199a254d6ba/move",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/move",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "edition_id": "75918186",
      "current_user_id": "96384499",
      "error_code": "A1003",
      "message": "The user doesn't have permission to perform this action",
      "space_id": "693000000481013"
    }
  },
  "request_uri": "/vani/api/v1/editions/75918186/spaces/693000000481013/zones/61fae7ca-ebcc-4ab9-881c-07b1aa9c814b/move",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "edition_id": "75918186",
      "current_user_id": "96384499",
      "error_code": "S1009",
      "message": "Space not found",
      "space_id": "69300000569005"
    }
  },
  "request_uri": "/vani/api/v1/editions/75918186/spaces/69300000569005/zones/b313272b-fa45-4111-b61d-de64a0044260/move",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/move",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/move",
  "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
Create a new zone
OperationCREATE
Rate limit30 requests / minute · per user
OAuth scopesVani.spaces.CREATE
Path parameters edition_id · space_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
space_idREQUIRED string The unique identifier of the space
Request body application/json
Tick a field to put it in the sample payload, and set what it carries in the Value column. Every field is optional unless it is marked REQUIRED, and those are always sent.
FieldTypeDescriptionValue
create_zone REQUIRED object create zone. Max length: 11000 (required)
curl -X POST "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "create_zone": {
    "zone_name": "Sample name",
    "template_id": "60712000000123456"
  }
}'
import requests

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

data = {
  "create_zone": {
    "zone_name": "Sample name",
    "template_id": "60712000000123456"
  }
}

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

const options = {
  ...url.parse('https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones'),
  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({
  "create_zone": {
    "zone_name": "Sample name",
    "template_id": "60712000000123456"
  }
}));
req.end();
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;

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

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

            .header("Content-Type", "application/json")
        String requestBody = "{\"create_zone\":{\"zone_name\":\"Sample name\",\"template_id\":\"60712000000123456\"}}";
        HttpRequest request = requestBuilder
            .POST(HttpRequest.BodyPublishers.ofString(requestBody))
            .build();

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

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

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

requestData = {"create_zone": {"zone_name": "Sample name", "template_id": "60712000000123456"}};

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones"
    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");
}
{
  "create_zone": {
    "zone_name": "Sample name",
    "template_id": "60712000000123456"
  }
}
Successful response
{
  "data": {
    "zone_info": {
      "created_time": "Fri, 25 Jul 2025, 06:01:52",
      "zone_id": "ee01ded6-158e-4729-99b0-257ab23be6d1",
      "last_modified_time": "Fri, 25 Jul 2025, 06:01:52",
      "zone_name": "Zone 2",
      "space_id": "4855000000088149",
      "last_author_zuid": "888015717",
      "author_zuid": "888015717",
      "status": "ACTIVE"
    }
  },
  "message": "Zone created successfully.",
  "request_uri": "/vani/api/v1/editions/888012145/spaces/4855000000088149/zones",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "A1003",
      "message": "The user doesn't have permission to perform this action",
      "space_id": "300900000005397"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/spaces/300900000005397/zones",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "S1030",
      "message": "Template not found",
      "space_id": "3009000000419047"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000419047/zones",
  "status": "error"
}
Conflict - the requested change conflicts with the current resource state
{
  "error": {
    "details": {
      "edition_id": "85572652",
      "current_user_id": "96384499",
      "error_code": "Z1010",
      "message": "Zone creation limit reached",
      "space_id": "1600000000657005"
    }
  },
  "request_uri": "/vani/api/v1/editions/85572652/spaces/1600000000657005/zones",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones",
  "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
409  Conflict - the requested change conflicts with the current resource state
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
Insert a template into a zone
OperationUPDATE
Rate limit60 requests / minute · per user
OAuth scopesVani.zones.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
template_id REQUIRED string Template asset global id to insert (max length 50)
placement string Placement mode: AUTO, AT_POSITION, or NEAR_POSITION (max length 30)
AUTOAT_POSITIONNEAR_POSITION
position object Required for AT_POSITION and NEAR_POSITION
curl -X POST "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/templates" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "template_id": "60712000000123456",
  "placement": "AUTO",
  "position": {
    "top": 1.5,
    "left": 1.5
  }
}'
import requests

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

data = {
  "template_id": "60712000000123456",
  "placement": "AUTO",
  "position": {
    "top": 1.5,
    "left": 1.5
  }
}

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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/templates'),
  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({
  "template_id": "60712000000123456",
  "placement": "AUTO",
  "position": {
    "top": 1.5,
    "left": 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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/templates"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        String requestBody = "{\"template_id\":\"60712000000123456\",\"placement\":\"AUTO\",\"position\":{\"top\":1.5,\"left\":1.5}}";
        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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/templates";

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

requestData = {"template_id": "60712000000123456", "placement": "AUTO", "position": {"top": 1.5, "left": 1.5}};

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/templates"
    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");
}
{
  "template_id": "60712000000123456",
  "placement": "AUTO",
  "position": {
    "top": 1.5,
    "left": 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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/templates",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "error_code": "IAM1100",
      "message": "Unauthorized - missing or invalid access token"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/templates",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/templates",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/templates",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/templates",
  "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
Duplicate a zone
OperationCREATE
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
duplicate_zone REQUIRED object duplicate zone. Max length: 11000 (required)
curl -X POST "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/duplicate" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "duplicate_zone": {
    "destination_type": "NEW_SPACE",
    "space_name": "Sample name",
    "deep_copy": true,
    "zone_name": "Sample name",
    "version_id": "60712000000123456",
    "team_id": "60712000000123456",
    "copy_members": true,
    "destination_space_id": "60712000000123456"
  }
}'
import requests

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

data = {
  "duplicate_zone": {
    "destination_type": "NEW_SPACE",
    "space_name": "Sample name",
    "deep_copy": true,
    "zone_name": "Sample name",
    "version_id": "60712000000123456",
    "team_id": "60712000000123456",
    "copy_members": true,
    "destination_space_id": "60712000000123456"
  }
}

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

const options = {
  ...url.parse('https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/duplicate'),
  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({
  "duplicate_zone": {
    "destination_type": "NEW_SPACE",
    "space_name": "Sample name",
    "deep_copy": true,
    "zone_name": "Sample name",
    "version_id": "60712000000123456",
    "team_id": "60712000000123456",
    "copy_members": true,
    "destination_space_id": "60712000000123456"
  }
}));
req.end();
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;

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

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

            .header("Content-Type", "application/json")
        String requestBody = "{\"duplicate_zone\":{\"destination_type\":\"NEW_SPACE\",\"space_name\":\"Sample name\",\"deep_copy\":true,\"zone_name\":\"Sample name\",\"version_id\":\"60712000000123456\",\"team_id\":\"60712000000123456\",\"copy_members\":true,\"destination_space_id\":\"60712000000123456\"}}";
        HttpRequest request = requestBuilder
            .POST(HttpRequest.BodyPublishers.ofString(requestBody))
            .build();

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

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

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

requestData = {"duplicate_zone": {"destination_type": "NEW_SPACE", "space_name": "Sample name", "deep_copy": true, "zone_name": "Sample name", "version_id": "60712000000123456", "team_id": "60712000000123456", "copy_members": true, "destination_space_id": "60712000000123456"}};

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/duplicate"
    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");
}
{
  "duplicate_zone": {
    "destination_type": "NEW_SPACE",
    "space_name": "Sample name",
    "deep_copy": true,
    "zone_name": "Sample name",
    "version_id": "60712000000123456",
    "team_id": "60712000000123456",
    "copy_members": true,
    "destination_space_id": "60712000000123456"
  }
}
Successful response
{
  "data": {
    "space_id": "693000000598369",
    "uri": "/vani/api/v1/editions/75918186/spaces/693000000598369/zones/meta"
  },
  "message": "Zone duplicated successfully",
  "request_uri": "/vani/api/v1/editions/75918186/spaces/693000000562161/zones/8915a5e7-ba1a-4ef9-8f25-75a873ff7f10/duplicate",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/duplicate",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "edition_id": "75918186",
      "current_user_id": "96384499",
      "error_code": "A1003",
      "message": "The user doesn't have permission to perform this action",
      "space_id": "69300000562248"
    }
  },
  "request_uri": "/vani/api/v1/editions/75918186/spaces/69300000562248/zones/91c26965-0165-4b48-b976-16c924498a8c/duplicate",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "edition_id": "75918186",
      "current_user_id": "96384499",
      "error_code": "Z1008",
      "message": "Zone not found",
      "space_id": "693000000562248"
    }
  },
  "request_uri": "/vani/api/v1/editions/75918186/spaces/693000000562248/zones/11c26965-0165-4b48-b976-16c924498a8c/duplicate",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/duplicate",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/duplicate",
  "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
Update zone metadata
OperationUPDATE
Rate limit30 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
zone_name REQUIRED string zone name (required)
curl -X PUT "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/meta" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "zone_name": "Sample name"
}'
import requests

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

data = {
  "zone_name": "Sample name"
}

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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/meta'),
  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({
  "zone_name": "Sample name"
}));
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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/meta"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        String requestBody = "{\"zone_name\":\"Sample name\"}";
        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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/meta";

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

requestData = {"zone_name": "Sample name"};

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/meta"
    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");
}
{
  "zone_name": "Sample name"
}
Successful response
{
  "data": {
    "zone_id": "598356E6-5F86-45FA-A7D5-ED8BB6D40DAE",
    "edition_id": "97375109",
    "current_user_id": "96384499",
    "space_id": "1505000000022005",
    "new_name": "Budget Report"
  },
  "message": "Zone name updated successfully.",
  "request_uri": "/vani/api/v1/editions/97375109/spaces/1505000000022005/zones/598356E6-5F86-45FA-A7D5-ED8BB6D40DAE/meta",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/meta",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "zone_id": "a5fcca17-e9dd-414f-850d-0b920645b05d",
      "edition_id": "98723605",
      "current_user_id": "96384499",
      "error_code": "A1003",
      "message": "The user doesn't have permission to perform this action",
      "space_id": "5265000000003011"
    }
  },
  "request_uri": "/vani/api/v1/editions/98723605/spaces/5265000000003011/zones/a5fcca17-e9dd-414f-850d-0b920645b05d/meta",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "zone_id": "198356E6-5F86-45FA-A7D5-ED8BB6D40DAE",
      "edition_id": "97375109",
      "current_user_id": "96384499",
      "error_code": "Z1008",
      "message": "Zone not found",
      "space_id": "1505000000022005"
    }
  },
  "request_uri": "/vani/api/v1/editions/97375109/spaces/1505000000022005/zones/198356E6-5F86-45FA-A7D5-ED8BB6D40DAE/meta",
  "status": "error"
}
Conflict - the requested change conflicts with the current resource state
{
  "error": {
    "details": {
      "zone_id": "598356E6-5F86-45FA-A7D5-ED8BB6D40DAE",
      "edition_id": "97375109",
      "current_user_id": "96384499",
      "error_code": "Z1001",
      "message": "Zone name is same as the new name",
      "space_id": "1505000000022005"
    }
  },
  "request_uri": "/vani/api/v1/editions/97375109/spaces/1505000000022005/zones/598356E6-5F86-45FA-A7D5-ED8BB6D40DAE/meta",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/meta",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/meta",
  "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
409  Conflict - the requested change conflicts with the current resource state
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
Update zone state
OperationUPDATE
Rate limit30 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
zone_state REQUIRED string zone state.
RESTORETRASHDELETE
curl -X PUT "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/state" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "zone_state": "RESTORE"
}'
import requests

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

data = {
  "zone_state": "RESTORE"
}

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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/state'),
  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({
  "zone_state": "RESTORE"
}));
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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/state"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        String requestBody = "{\"zone_state\":\"RESTORE\"}";
        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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/state";

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

requestData = {"zone_state": "RESTORE"};

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/state"
    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");
}
{
  "zone_state": "RESTORE"
}
Successful response
{
  "data": {
    "zone_id": "598356E6-5F86-45FA-A7D5-ED8BB6D40DAE",
    "edition_id": "97375109",
    "space_state": "TRASH",
    "current_user_id": "96384499",
    "space_id": "1505000000022005"
  },
  "message": "Zone state updated successfully.",
  "request_uri": "/vani/api/v1/editions/97375109/spaces/1505000000022005/zones/598356E6-5F86-45FA-A7D5-ED8BB6D40DAE/state",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "zone_id": "6F961124-4598-47D6-9BDA-1705DFBA07D7",
      "edition_id": "97375109",
      "current_user_id": "96384499",
      "error_code": "Z1009",
      "message": "Zone threshold violation",
      "space_id": "1505000000022005"
    }
  },
  "request_uri": "/vani/api/v1/editions/97375109/spaces/1505000000022005/zones/6F961124-4598-47D6-9BDA-1705DFBA07D7/state",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "zone_id": "05A61516-A352-44C6-94C3-BE44F728C9D9",
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "A1003",
      "message": "The user doesn't have permission to perform this action",
      "space_id": "300900000009397"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/spaces/300900000009397/zones/05A61516-A352-44C6-94C3-BE44F728C9D9/state",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/state",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/state",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/state",
  "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

Zone Versions

Read the current version of a zone.
Get the current version of a zone
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.zones.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 fields · from · limit · from_date
NameTypeDescription
fieldsOPTIONAL enum Specifies the fields (comma-separated) to retrieve
modified_byversion_idversion_timedescriptionuri
fromOPTIONAL string The starting index from where the results should be fetched. Default value is 0
limitOPTIONAL string The maximum number of results to return in the response. Default value is 20
from_dateOPTIONAL string Allows you to fetch only those Zone versions that have been created or modified since the given timestamp
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/version" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json"
import requests

url = "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/version"
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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/version'),
  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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/version"))
            .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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/version";

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

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/version"
    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
{
  "data": {
    "zone_versions": {
      "restricted_versions": [
        {
          "modified_by": "80215739",
          "version_id": "1373000000529563"
        }
      ],
      "allowed_versions": []
    }
  },
  "message": "Zone versions fetched successfully",
  "request_uri": "/vani/api/v1/editions/80585907/spaces/1373000000529203/zones/1b28dc96-a3bc-45c3-9977-e4089b513a31/version",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/version",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "edition_id": "85572652",
      "current_user_id": "96384499",
      "error_code": "A1003",
      "message": "The user doesn't have permission to perform this action",
      "space_id": "160000000657005"
    }
  },
  "request_uri": "/vani/api/v1/editions/85572652/spaces/160000000657005/zones/ef7b7fe1-327b-4ec1-904d-8232677d689c/version",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "edition_id": "75434908",
      "current_user_id": "80215739",
      "error_code": "Z1008",
      "message": "Zone not found",
      "space_id": "149000042348078"
    }
  },
  "request_uri": "/vani/api/v1/editions/75434908/spaces/149000042348078/zones/89cf103a-0701-41b3-823c-f2229436333e/version",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/version",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/{zone_id}/version",
  "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

Conditional Sharing

Share individual zones within a space with a specific member.
Get the zones in a space shared with a member
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.READ
Path parameters edition_id · space_id · member_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
space_idREQUIRED string The unique identifier of the space
member_idREQUIRED string The unique identifier of the member
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members/{member_id}" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json"
import requests

url = "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members/{member_id}"
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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members/{member_id}'),
  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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members/{member_id}"))
            .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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members/{member_id}";

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

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members/{member_id}"
    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
{
  "data": {
    "space_resource_info": {
      "member_id": "96384499",
      "access_state": "FULL ACCESS",
      "resources": [],
      "space_id": "3009000000618005"
    }
  },
  "message": "User resources fetched successfully.",
  "request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000618005/zones/members/96384499",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members/{member_id}",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "A1003",
      "message": "The user doesn't have permission to perform this action",
      "space_id": "3009000000612023"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000612023/zones/members/9638449",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "S1015",
      "message": "member is not part of the Space",
      "space_id": "3009000000618005"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000618005/zones/members/9638449",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members/{member_id}",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members/{member_id}",
  "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
Share zones in a space with members
OperationCREATE
Rate limit30 requests / minute · per user
OAuth scopesVani.spaces.CREATE
Path parameters edition_id · space_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
space_idREQUIRED string The unique identifier of the space
Request body application/json
Tick a field to put it in the sample payload, and set what it carries in the Value column. Every field is optional unless it is marked REQUIRED, and those are always sent.
FieldTypeDescriptionValue
members_info REQUIRED array of object members info. Max length: 11000 (required) (min 1, max 1)
curl -X POST "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "members_info": [
    {
      "member_id": "60712000000123456",
      "member_type": "USER",
      "resource_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
      "role": "EDITOR",
      "permission": "restricted"
    }
  ]
}'
import requests

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

data = {
  "members_info": [
    {
      "member_id": "60712000000123456",
      "member_type": "USER",
      "resource_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
      "role": "EDITOR",
      "permission": "restricted"
    }
  ]
}

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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members'),
  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({
  "members_info": [
    {
      "member_id": "60712000000123456",
      "member_type": "USER",
      "resource_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
      "role": "EDITOR",
      "permission": "restricted"
    }
  ]
}));
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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        String requestBody = "{\"members_info\":[{\"member_id\":\"60712000000123456\",\"member_type\":\"USER\",\"resource_id\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"role\":\"EDITOR\",\"permission\":\"restricted\"}]}";
        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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members";

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

requestData = {"members_info": {{"member_id": "60712000000123456", "member_type": "USER", "resource_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "role": "EDITOR", "permission": "restricted"}}};

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members"
    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");
}
{
  "members_info": [
    {
      "member_id": "60712000000123456",
      "member_type": "USER",
      "resource_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
      "role": "EDITOR",
      "permission": "restricted"
    }
  ]
}
Successful response
{
  "data": {
    "added_members": [
      {
        "member_id": "3009000000002003",
        "access_state": "PARTIAL ACCESS",
        "resources": [
          {
            "member_type": "TEAM",
            "added_time": "Tue, 08 Jul 2025, 01:58:52",
            "added_by": "96384499",
            "resource_type": "document",
            "resource_id": "6800EB6E-ED24-4EA6-91C6-805445418B17",
            "permission": "restricted"
          }
        ]
      },
      {
        "member_id": "62609972",
        "access_state": "PARTIAL ACCESS",
        "resources": [
          {
            "member_type": "USER",
            "added_time": "Mon, 07 Jul 2025, 18:16:32",
            "added_by": "80215739",
            "resource_type": "document",
            "resource_id": "6800EB6E-ED24-4EA6-91C6-805445418B17",
            "permission": "restricted"
          }
        ]
      }
    ]
  },
  "message": "Resource members added successfully",
  "request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000618005/zones/members",
  "status": "success"
}
Successful response
{
  "data": {
    "failed_members": [
      {
        "error_message": "Resource member present",
        "error_code": "S1042",
        "zuid": "3009000000002003"
      }
    ],
    "added_members": [
      {
        "member_id": "85572741",
        "access_state": "PARTIAL ACCESS",
        "resources": [
          {
            "member_type": "USER",
            "added_time": "Wed, 09 Jul 2025, 15:52:18",
            "added_by": "96384499",
            "resource_type": "document",
            "resource_id": "d7ccf816-8293-4a2f-ae83-f10c0e3a6645",
            "permission": "restricted"
          }
        ]
      }
    ]
  },
  "message": "Partial success: Some resource members added, others failed.",
  "request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000618005/zones/members",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "failed_members": [
        {
          "error_message": "Resource member present",
          "error_code": "S1042",
          "zuid": "3009000000002003"
        },
        {
          "error_message": "Resource member present",
          "error_code": "S1042",
          "zuid": "3009000000002003"
        }
      ],
      "error_code": "R1002",
      "message": "Resource member add failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000618005/zones/members",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "A1003",
      "message": "The user doesn't have permission to perform this action",
      "space_id": "3009000000607005"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000607005/zones/members",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "S1009",
      "message": "Space not found",
      "space_id": "300900000618005"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/spaces/300900000618005/zones/members",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members",
  "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
Share every zone in a space with a member
OperationCREATE
Rate limit30 requests / minute · per user
OAuth scopesVani.spaces.CREATE
Path parameters edition_id · space_id · member_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
space_idREQUIRED string The unique identifier of the space
member_idREQUIRED string The unique identifier of the member
curl -X POST "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members/{member_id}" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json"
import requests

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

response = requests.post(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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members/{member_id}'),
  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.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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members/{member_id}"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        HttpRequest request = requestBuilder
            .POST(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/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members/{member_id}";

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

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members/{member_id}"
    type: POST
    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
{
  "data": {
    "space_resource_info": {
      "member_id": "3009000000002003",
      "access_state": "FULL ACCESS",
      "resources": [
        {
          "member_type": "TEAM",
          "added_time": "Mon, 07 Jul 2025, 18:22:20",
          "added_by": "80215739",
          "resource_type": "document",
          "resource_id": "d7ccf816-8293-4a2f-ae83-f10c0e3a6645",
          "permission": "allowed"
        },
        {
          "member_type": "TEAM",
          "added_time": "Mon, 07 Jul 2025, 18:22:20",
          "added_by": "80215739",
          "resource_type": "document",
          "resource_id": "31E57A34-3405-41D2-A2B6-7BAACAE9EE02",
          "permission": "allowed"
        },
        {
          "member_type": "TEAM",
          "added_time": "Mon, 07 Jul 2025, 18:22:20",
          "added_by": "80215739",
          "resource_type": "document",
          "resource_id": "9E23791B-B3AE-4877-9119-3F636DC685AC",
          "permission": "allowed"
        },
        {
          "member_type": "TEAM",
          "added_time": "Mon, 07 Jul 2025, 18:22:08",
          "added_by": "80215739",
          "resource_type": "document",
          "resource_id": "6800EB6E-ED24-4EA6-91C6-805445418B17",
          "permission": "allowed"
        }
      ],
      "space_id": "3009000000618005"
    }
  },
  "message": "All resources shared successfully",
  "request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000618005/zones/members/3009000000002003",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members/{member_id}",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "A1003",
      "message": "The user doesn't have permission to perform this action",
      "space_id": "3009000000612023"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000612023/zones/members/3009000000002004",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "S1015",
      "message": "member is not part of the Space",
      "space_id": "3009000000618005"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000618005/zones/members/3009000000002004",
  "status": "error"
}
Conflict - the requested change conflicts with the current resource state
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "S1045",
      "message": "Member already has full access",
      "space_id": "3009000000618005"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000618005/zones/members/3009000000002003",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members/{member_id}",
  "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": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/zones/members/{member_id}",
  "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
409  Conflict - the requested change conflicts with the current resource state
429  Rate limit exceeded - this operation allows 30 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
© 2026 Zoho Corporation Pvt. Ltd. Help