Vani Logo Vani / API Docs v1
Access Vani
Core / External Share

External Share

Publish a space externally and manage the resulting public share.

Check whether external sharing is allowed for the edition and team
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.editions.READVani.teams.READ
Path parameters edition_id · team_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
team_idREQUIRED string The unique identifier of the team
Query parameters fields
NameTypeDescription
fieldsOPTIONAL enum Specifies the fields (comma-separated) to retrieve
external_share_edition_enabledexternal_share_team_enabledexternal_share_allowed
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/externalshares/status" \
  -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}/teams/{team_id}/externalshares/status"
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}/teams/{team_id}/externalshares/status'),
  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}/teams/{team_id}/externalshares/status"))
            .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}/teams/{team_id}/externalshares/status";

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}/teams/{team_id}/externalshares/status"
    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": {
    "external_share_edition_enabled": true
  },
  "message": "External share status fetched successfully",
  "request_uri": "/vani/api/v1/editions/888012145/teams/4855000000002003/externalshares/status",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/externalshares/status",
  "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}/teams/{team_id}/externalshares/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": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/externalshares/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": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/externalshares/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": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/externalshares/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
Get a space's external share details
OperationREAD
Rate limit10 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
space_idpositionshared_bypermissionshare_typeis_password_enabledpasswordexpiration_timeshared_timeexternal_share_urlzone_idslink_name
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/externalshares" \
  -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}/externalshares"
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}/externalshares'),
  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}/externalshares"))
            .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}/externalshares";

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}/externalshares"
    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": {
    "shared_time": 1753678990289,
    "space_id": "4855000000088149"
  },
  "message": "External share space info fetched successfully",
  "request_uri": "/vani/api/v1/editions/888012145/spaces/4855000000088149/externalshares",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "edition_id": "82513223",
      "current_user_id": "82512958",
      "error_code": "S1046",
      "message": "Space is not externally shared"
    }
  },
  "request_uri": "/vani/api/v1/editions/82513223/spaces/1629000000297013/externalshares",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "edition_id": "888012145",
      "current_user_id": "888015717",
      "error_code": "EX1007",
      "message": "The user doesn't have permission to fetch external share info"
    }
  },
  "request_uri": "/vani/api/v1/editions/888012145/spaces/485500000008849/externalshares",
  "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}/externalshares",
  "status": "error"
}
Rate limit exceeded - this operation allows 10 requests per minute per user
{
  "error": {
    "details": {
      "error_code": "IAM1055",
      "message": "Rate limit exceeded - this operation allows 10 requests per minute per user"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/spaces/{space_id}/externalshares",
  "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}/externalshares",
  "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 10 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
Get the external shares of a team's spaces
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.editions.READVani.teams.READ
Path parameters edition_id · team_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
team_idREQUIRED string The unique identifier of the team
Query parameters from · limit · fields
NameTypeDescription
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
fieldsOPTIONAL enum Specifies the fields (comma-separated) to retrieve
space_idpositionshared_bypermissionshare_typeis_password_enabledpasswordexpiration_timeshared_timeexternal_share_urlzone_idslink_name
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/externalshares" \
  -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}/teams/{team_id}/externalshares"
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}/teams/{team_id}/externalshares'),
  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}/teams/{team_id}/externalshares"))
            .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}/teams/{team_id}/externalshares";

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}/teams/{team_id}/externalshares"
    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": {
    "external_share_info": [
      {
        "external_share_url": "https://app.vanipublic.com/external/open/418a5ec6abf2bb5b7a0486d5aaae300bcb97a2672a1086e25a81c5853896c92d27a8a01fcb9e42a82fe59e5a3c050fb2390d261c80ae2d4f33b09a56b27f58a5",
        "permission": "VIEWER",
        "space_id": "1629000000491005"
      },
      {
        "external_share_url": "https://app.vanipublic.com/external/open/f42bcd0a8025fe33bd45bcb176e270275b48312abef2bf9d468a4939709cf9a68db1f73db4f8bdfee7fc07d948d360e083ee198913c863c624304fc274c8d289",
        "permission": "VIEWER",
        "space_id": "1629000000309025"
      },
      {
        "external_share_url": "https://app.vanipublic.com/external/open/c7dab478035f95d89f1ad22b507b7bf98bd26c5f33c8d5123f5e85c34ae796ea09b9dd26ae6c0e6ac575a8e387eb98073530e803ecdd2cfa1ba7747726529492",
        "permission": "COMMENTER",
        "space_id": "1629000000297013"
      }
    ]
  },
  "message": "External share spaces fetched successfully",
  "request_uri": "/vani/api/v1/editions/82513223/teams/1629000000002003/externalshares",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/externalshares",
  "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}/teams/{team_id}/externalshares",
  "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}/teams/{team_id}/externalshares",
  "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}/teams/{team_id}/externalshares",
  "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}/teams/{team_id}/externalshares",
  "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
Publish a space as an external share
OperationCREATE
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.CREATE
Path parameters edition_id · space_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
space_idREQUIRED string The unique identifier of the space
Request body application/json
Tick a field to put it in the sample payload, and set what it carries in the Value column. Every field is optional unless it is marked REQUIRED, and those are always sent.
FieldTypeDescriptionValue
is_password_enabled boolean is password enabled
zone_ids string zone ids. Max length: 1000 (max length 1000)
password string password. Max length: 100 (max length 100)
share_type REQUIRED string share type.
ALL_ZONESPARTIAL_ZONES
expiration_time string expiration time. Max length: 30 (max length 30)
permission REQUIRED string permission.
EDITORCOMMENTERVIEWER
link_name string link name. Max length: 255 (max length 255)
external_share_id string external share id. Max length: 500 (max length 500)
status string status.
ACTIVEINACTIVE
curl -X POST "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/externalshares" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "share_type": "ALL_ZONES",
  "permission": "EDITOR",
  "is_password_enabled": true,
  "zone_ids": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "password": "string",
  "expiration_time": "string",
  "link_name": "Sample name",
  "external_share_id": "sample.value"
}'
import requests

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

data = {
  "share_type": "ALL_ZONES",
  "permission": "EDITOR",
  "is_password_enabled": true,
  "zone_ids": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "password": "string",
  "expiration_time": "string",
  "link_name": "Sample name",
  "external_share_id": "sample.value"
}

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}/externalshares'),
  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({
  "share_type": "ALL_ZONES",
  "permission": "EDITOR",
  "is_password_enabled": true,
  "zone_ids": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "password": "string",
  "expiration_time": "string",
  "link_name": "Sample name",
  "external_share_id": "sample.value"
}));
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}/externalshares"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        String requestBody = "{\"share_type\":\"ALL_ZONES\",\"permission\":\"EDITOR\",\"is_password_enabled\":true,\"zone_ids\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"password\":\"string\",\"expiration_time\":\"string\",\"link_name\":\"Sample name\",\"external_share_id\":\"sample.value\"}";
        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}/externalshares";

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

requestData = {"share_type": "ALL_ZONES", "permission": "EDITOR", "is_password_enabled": true, "zone_ids": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "password": "string", "expiration_time": "string", "link_name": "Sample name", "external_share_id": "sample.value"};

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/externalshares"
    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");
}
{
  "share_type": "ALL_ZONES",
  "permission": "EDITOR",
  "is_password_enabled": true,
  "zone_ids": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "password": "string",
  "expiration_time": "string",
  "link_name": "Sample name",
  "external_share_id": "sample.value"
}
Successful response
{
  "data": {
    "is_password_enabled": true,
    "zone_ids": [
      {
        "zone_id": "9e7a947b-470b-46e7-be64-4a617abadf43",
        "permission": "VIEWER"
      }
    ],
    "password": "1",
    "share_type": "PARTIAL_ZONES",
    "shared_time": 1752045010623,
    "external_share_url": "https://app.vanipublic.com/external/open/92c8c172434d1eb794100b0e52303ddaf6ec81d29608502e2b8bce9a5aab731144024ea162631784c784141d8d79c5e3e433279e6f2a4f0841ecfb01ea995155",
    "expiration_time": 1754627011000,
    "shared_by": 82512958,
    "permission": "VIEWER",
    "space_id": "1629000000297013"
  },
  "message": "Space externally shared successfully",
  "request_uri": "/vani/api/v1/editions/82513223/spaces/1629000000297013/externalshares",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "edition_id": "82513223",
      "current_user_id": "82512958",
      "error_code": "EX1006",
      "message": "External share zones are invalid or not available"
    }
  },
  "request_uri": "/vani/api/v1/editions/82513223/spaces/1629000000297013/externalshares",
  "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}/externalshares",
  "status": "error"
}
Forbidden - the caller is authenticated but not allowed to perform this operation
{
  "error": {
    "details": {
      "edition_id": "82513223",
      "current_user_id": "82512958",
      "error_code": "EX1003",
      "message": "External share is not allowed for this team"
    }
  },
  "request_uri": "/vani/api/v1/editions/82513223/spaces/1629000000297013/externalshares",
  "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}/externalshares",
  "status": "error"
}
Conflict - the requested change conflicts with the current resource state
{
  "error": {
    "details": {
      "edition_id": "112255940",
      "current_user_id": "82512958",
      "error_code": "EX1019",
      "message": "External share limit reached for the project.",
      "space_id": "5777000000929039"
    }
  },
  "request_uri": "/vani/api/v1/editions/112255940/spaces/5777000000929039/externalshares",
  "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}/externalshares",
  "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}/externalshares",
  "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
409  Conflict - the requested change conflicts with the current resource state
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
Update a space's external share
OperationUPDATE
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.UPDATE
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
is_password_enabled boolean is password enabled
zone_ids string zone ids. Max length: 1000 (max length 1000)
password string password. Max length: 100 (max length 100)
share_type REQUIRED string share type.
ALL_ZONESPARTIAL_ZONES
expiration_time string expiration time. Max length: 30 (max length 30)
permission REQUIRED string permission.
EDITORCOMMENTERVIEWER
link_name string link name. Max length: 255 (max length 255)
external_share_id string external share id. Max length: 500 (max length 500)
status string status.
ACTIVEINACTIVE
curl -X PUT "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/externalshares" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "share_type": "ALL_ZONES",
  "permission": "EDITOR",
  "is_password_enabled": true,
  "zone_ids": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "password": "string",
  "expiration_time": "string",
  "link_name": "Sample name",
  "external_share_id": "sample.value"
}'
import requests

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

data = {
  "share_type": "ALL_ZONES",
  "permission": "EDITOR",
  "is_password_enabled": true,
  "zone_ids": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "password": "string",
  "expiration_time": "string",
  "link_name": "Sample name",
  "external_share_id": "sample.value"
}

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}/externalshares'),
  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({
  "share_type": "ALL_ZONES",
  "permission": "EDITOR",
  "is_password_enabled": true,
  "zone_ids": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "password": "string",
  "expiration_time": "string",
  "link_name": "Sample name",
  "external_share_id": "sample.value"
}));
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}/externalshares"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        String requestBody = "{\"share_type\":\"ALL_ZONES\",\"permission\":\"EDITOR\",\"is_password_enabled\":true,\"zone_ids\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"password\":\"string\",\"expiration_time\":\"string\",\"link_name\":\"Sample name\",\"external_share_id\":\"sample.value\"}";
        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}/externalshares";

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

requestData = {"share_type": "ALL_ZONES", "permission": "EDITOR", "is_password_enabled": true, "zone_ids": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "password": "string", "expiration_time": "string", "link_name": "Sample name", "external_share_id": "sample.value"};

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/externalshares"
    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");
}
{
  "share_type": "ALL_ZONES",
  "permission": "EDITOR",
  "is_password_enabled": true,
  "zone_ids": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "password": "string",
  "expiration_time": "string",
  "link_name": "Sample name",
  "external_share_id": "sample.value"
}
Successful response
{
  "data": {
    "is_password_enabled": true,
    "zone_ids": [
      {
        "zone_id": "9e7a947b-470b-46e7-be64-4a617abadf43",
        "permission": "COMMENTER"
      }
    ],
    "password": "1",
    "share_type": "PARTIAL_ZONES",
    "shared_time": 1752045307273,
    "external_share_url": "https://app.localvanipublic.net/external/open/ea6e71f11f7803677667dec29fc1ea2ea829c2b748a992203c8a3eea26b853568c231f96663a6b841b11c071352ee65b844d010ea52cf7e3810a7bc43c2b8c7f",
    "expiration_time": 1754627011000,
    "shared_by": 82512958,
    "permission": "COMMENTER",
    "space_id": "1629000000297013"
  },
  "message": "External share space updated successfully",
  "request_uri": "/vani/api/v1/editions/82513223/spaces/1629000000297013/externalshares",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "edition_id": "82513223",
      "current_user_id": "82512958",
      "error_code": "EX1006",
      "message": "External share zones are invalid or not available"
    }
  },
  "request_uri": "/vani/api/v1/editions/82513223/spaces/1629000000297013/externalshares",
  "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}/externalshares",
  "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}/externalshares",
  "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}/externalshares",
  "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}/externalshares",
  "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
Revoke a space's external share
OperationDELETE
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.DELETE
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
external_share_id REQUIRED string external share id. Max length: 500 (required) (max length 500)
curl -X DELETE "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/externalshares" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "external_share_id": "sample.value"
}'
import requests

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

data = {
  "external_share_id": "sample.value"
}

response = requests.delete(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}/externalshares'),
  method: 'DELETE',
  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({
  "external_share_id": "sample.value"
}));
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}/externalshares"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        String requestBody = "{\"external_share_id\":\"sample.value\"}";
        HttpRequest request = requestBuilder
            .DELETE(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}/externalshares";

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

requestData = {"external_share_id": "sample.value"};

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/externalshares"
    type: DELETE
    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");
}
{
  "external_share_id": "sample.value"
}
Successful response
{
  "data": {
    "edition_id": "96499735",
    "current_user_id": "96384499",
    "space_id": "3009000000675145",
    "external_share_removed": true
  },
  "message": "External share space removed successfully",
  "request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000675145/externalshares",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "edition_id": "82513223",
      "current_user_id": "82512958",
      "error_code": "S1046",
      "message": "Space is not externally shared"
    }
  },
  "request_uri": "/vani/api/v1/editions/82513223/spaces/1629000000297013/externalshares",
  "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}/externalshares",
  "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": "300900000675145"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/spaces/300900000675145/externalshares",
  "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}/externalshares",
  "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}/externalshares",
  "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