Core / Spaces
Spaces
Spaces (projects) within an edition, their members, join requests, and role lookups.
GET
/vani/api/v1/editions/{edition_id}/spaces/{space_id}
Get a space
Get a space
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.READPath parameters edition_id · space_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
Query parameters fields
| Name | Type | Description |
|---|---|---|
| fieldsOPTIONAL | enum |
Specifies the fields (comma-separated) to retrieve
space_namespace_idowner_zuidteam_idlast_author_zuidcreated_timelast_modified_timelast_saved_versionpublishpublished_version_idlast_published_timethumb_image_idclient_import_idis_private_spacefile_sizeallow_embedstatuscan_editis_favoritespace_member_countstate_modified_timeuriopen_url
|
Request
GET
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_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}"
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}'),
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}"))
.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}";
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}"
type: GET
headers: headers
];
if (response.get("status_code") == 200) {
info "Request successful";
responseData = response.get("response");
info responseData;
} else {
info "Request failed with status: " + response.get("status_code");
info response.get("response");
}
Response
Successful response
{
"data": {
"space_info": {
"is_favorite": "false",
"can_edit": "true",
"team_id": "1303000000002003"
}
},
"message": "Space fetched successfully.",
"request_uri": "/vani/api/v1/editions/60029715808/spaces/1303000000492291",
"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}",
"status": "error"
}
Unauthorized - missing or invalid access token
{
"error": {
"details": {
"current_user_id": "96384499",
"error_code": "A1003",
"message": "The user doesn't have permission to perform this action"
}
},
"request_uri": "/vani/api/v1/editions/96499735/spaces/300900000009300",
"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}",
"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}",
"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}",
"status": "error"
}
Errors
5 status codes
400 Invalid request - validation failed 401 Unauthorized - missing or invalid access token 404 Not found - a resource named in the path does not exist, or is not visible to the caller 429 Rate limit exceeded - this operation allows 60 requests per minute per user 500 Internal server error - the request was well-formed but could not be completed
GET
/vani/api/v1/editions/{edition_id}/spaces/{space_id}/users/me/permission
Get the current user's role in a space
Get the current user's role in a space
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.READPath parameters edition_id · space_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
Request
GET
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/users/me/permission" \
-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}/users/me/permission"
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}/users/me/permission'),
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}/users/me/permission"))
.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}/users/me/permission";
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}/users/me/permission"
type: GET
headers: headers
];
if (response.get("status_code") == 200) {
info "Request successful";
responseData = response.get("response");
info responseData;
} else {
info "Request failed with status: " + response.get("status_code");
info response.get("response");
}
Response
Successful response
{
"data": {
"user_permission_info": {
"edition_id": "96499735",
"role": "CREATOR",
"current_user_id": "96384499",
"space_id": "3009000000093003"
}
},
"message": "User permissions fetched successfully",
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000093003/users/me/permission",
"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}/users/me/permission",
"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}/users/me/permission",
"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": "3009000000298005"
}
},
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000298005/users/me/permission",
"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}/users/me/permission",
"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}/users/me/permission",
"status": "error"
}
Errors
5 status codes
400 Invalid request - validation failed 401 Unauthorized - missing or invalid access token 404 Not found - a resource named in the path does not exist, or is not visible to the caller 429 Rate limit exceeded - this operation allows 60 requests per minute per user 500 Internal server error - the request was well-formed but could not be completed
GET
/vani/api/v1/editions/{edition_id}/spaces/{space_id}/users/{user_id}/permission
Get a user's role in a space
Get a user's role in a space
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.READPath parameters edition_id · space_id · user_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| user_idREQUIRED | string | The unique identifier of the user |
Request
GET
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/users/{user_id}/permission" \
-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}/users/{user_id}/permission"
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}/users/{user_id}/permission'),
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}/users/{user_id}/permission"))
.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}/users/{user_id}/permission";
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}/users/{user_id}/permission"
type: GET
headers: headers
];
if (response.get("status_code") == 200) {
info "Request successful";
responseData = response.get("response");
info responseData;
} else {
info "Request failed with status: " + response.get("status_code");
info response.get("response");
}
Response
Successful response
{
"data": {
"user_permission_info": {
"edition_id": "96499735",
"role": "EDITOR",
"current_user_id": "96384499",
"space_id": "3009000000303003",
"zuid": "80215739"
}
},
"message": "User permissions fetched successfully",
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000303003/users/80215739/permission",
"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}/users/{user_id}/permission",
"status": "error"
}
Unauthorized - missing or invalid access token
{
"error": {
"details": {
"edition_id": "96499735",
"current_user_id": "96384499",
"error_code": "S1020",
"message": "User is not the owner of the Space",
"space_id": "3009000000298005"
}
},
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000298005/users/80215739/permission",
"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": "3009000000303003",
"zuid": "80215739"
}
},
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000303003/users/80215739/permission",
"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}/users/{user_id}/permission",
"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}/users/{user_id}/permission",
"status": "error"
}
Errors
5 status codes
400 Invalid request - validation failed 401 Unauthorized - missing or invalid access token 404 Not found - a resource named in the path does not exist, or is not visible to the caller 429 Rate limit exceeded - this operation allows 60 requests per minute per user 500 Internal server error - the request was well-formed but could not be completed
GET
/vani/api/v1/editions/{edition_id}/spaces
Get all spaces in an edition
Get all spaces in an edition
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.READPath parameters edition_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
Query parameters team_id · action_type · sort_by · filter_by · search · from · limit · need_total_count · fields
| Name | Type | Description |
|---|---|---|
| team_idOPTIONAL | string | The ID of the team within the edition |
| action_typeREQUIRED | enum |
Specifies the category or context of Spaces
ALL_SPACESAll Spaces within the edition
SHARED_SPACESSpaces shared with you
SHARED_BY_MESpaces you’ve shared
SHARED_BY_OTHERSSpaces shared by others with you
PUBLISHED_WITH_TEAMSpaces published with the team
PUBLISHED_WITH_ORGSpaces published to the whole organisation.
FAVOURITESSpaces the user has marked as a favourite.
DRAFT_SPACESSpaces that are in draft
RECENT_ALL_SPACES_ORGRecently opened spaces from anywhere in the edition.
RECENTLY_TRASHED_SPACESRecently trashed Spaces
RECENTLY_TRASHEDRecently trashed spaces and zones together.
RECENTLY_TRASHED_ZONESRecently trashed zones only.
NON_TEAM_MEMBER_SHARED_SPACESpaces shared with the user from a team they do not belong to.
|
| sort_byREQUIRED | enum |
Specifies the field used to sort the results
TIME_CREATEDMost recently created first.
TIME_DELETED_ASCLeast recently deleted first.
TIME_DELETED_DESCMost recently deleted first.
A_ZBy name, A to Z.
Z_ABy name, Z to A.
RECENTLY_OPENEDMost recently opened first.
RECENTLY_TRASHEDMost recently trashed first.
RECENTLY_ACCESSED_BY_USERMost recently accessed by the calling user first.
RECENTLY_MODIFIED_BY_USERMost recently modified by the calling user first.
|
| filter_byOPTIONAL | string | Parameter: filter_by. Max length: 100 |
| searchOPTIONAL | string | The keyword or phrase to search for |
| 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 |
| need_total_countOPTIONAL | boolean | Set this to true if you want to include the total count of items in the response. By default, this is false |
| fieldsOPTIONAL | enum |
Specifies the fields (comma-separated) to retrieve
space_namespace_idowner_zuidteam_idlast_author_zuidcreated_timelast_modified_timelast_saved_versionpublishpublished_version_idlast_published_timethumb_image_idclient_import_idis_private_spacefile_sizeallow_embedstatuscan_editis_favoritespace_member_countstate_modified_timeuriopen_url
|
Request
GET
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces?action_type=ALL_SPACES&sort_by=TIME_CREATED" \
-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?action_type=ALL_SPACES&sort_by=TIME_CREATED"
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?action_type=ALL_SPACES&sort_by=TIME_CREATED'),
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?action_type=ALL_SPACES&sort_by=TIME_CREATED"))
.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?action_type=ALL_SPACES&sort_by=TIME_CREATED";
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?action_type=ALL_SPACES&sort_by=TIME_CREATED"
type: GET
headers: headers
];
if (response.get("status_code") == 200) {
info "Request successful";
responseData = response.get("response");
info responseData;
} else {
info "Request failed with status: " + response.get("status_code");
info response.get("response");
}
Response
Successful response
{
"data": {
"space_count": 1,
"spaces_info": [
{
"created_time": "Fri, 24 Jan 2025, 12:25:29",
"last_modified_time": "Fri, 24 Jan 2025, 12:25:29",
"is_favorite": "true",
"space_name": "Business case template",
"publish": "false",
"owner_zuid": "96384499",
"can_edit": "true",
"team_id": "3009000000002003",
"space_member_count": "1",
"space_id": "3009000000093779",
"last_author_zuid": "96384499",
"status": "ACTIVE"
}
]
},
"message": "Space fetched successfully.",
"request_uri": "/vani/api/v1/editions/96499735/spaces",
"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",
"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",
"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",
"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",
"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",
"status": "error"
}
Errors
5 status codes
400 Invalid request - validation failed 401 Unauthorized - missing or invalid access token 404 Not found - a resource named in the path does not exist, or is not visible to the caller 429 Rate limit exceeded - this operation allows 60 requests per minute per user 500 Internal server error - the request was well-formed but could not be completed
POST
/vani/api/v1/editions/{edition_id}/spaces/{space_id}/duplicate
Duplicate a space
Duplicate a space
OperationCREATE
Rate limit30 requests / minute · per user
OAuth scopes
Vani.spaces.CREATEPath parameters edition_id · space_id
| Name | Type | Description |
|---|---|---|
| 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.
| Field | Type | Description | Value |
|---|---|---|---|
| duplicate_space REQUIRED | object | duplicate space. Max length: 11000 (required) | |
| space_name | string | space name | |
| deep_copy | boolean | deep copy | |
| team_id | string | team id | |
| copy_members | boolean | copy members | |
| copy_comments | boolean | copy comments |
Request
POST
curl -X POST "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/duplicate" \
-H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"duplicate_space": {
"space_name": "Sample name",
"deep_copy": true,
"team_id": "60712000000123456",
"copy_members": true,
"copy_comments": true
}
}'import requests
url = "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/duplicate"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
data = {
"duplicate_space": {
"space_name": "Sample name",
"deep_copy": true,
"team_id": "60712000000123456",
"copy_members": true,
"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}/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_space": {
"space_name": "Sample name",
"deep_copy": true,
"team_id": "60712000000123456",
"copy_members": true,
"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}/duplicate"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
String requestBody = "{\"duplicate_space\":{\"space_name\":\"Sample name\",\"deep_copy\":true,\"team_id\":\"60712000000123456\",\"copy_members\":true,\"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}/duplicate";
headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");
requestData = {"duplicate_space": {"space_name": "Sample name", "deep_copy": true, "team_id": "60712000000123456", "copy_members": true, "copy_comments": true}};
response = invokeurl
[
url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_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_space": {
"space_name": "Sample name",
"deep_copy": true,
"team_id": "60712000000123456",
"copy_members": true,
"copy_comments": true
}
}
Response
Successful response
{
"data": {
"space_info": {
"created_time": "Sat, 08 Mar 2025, 17:40:07",
"last_modified_time": "Sat, 08 Mar 2025, 17:40:07",
"is_favorite": "false",
"space_name": "Vision board - 1",
"publish": "false",
"owner_zuid": "80215739",
"can_edit": "true",
"team_id": "3009000000002003",
"allow_embed": "false",
"space_id": "3009000000239341",
"last_author_zuid": "80215739",
"status": "ACTIVE"
}
},
"message": "Space duplicated successfully",
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000232005/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}/duplicate",
"status": "error"
}
Unauthorized - missing or invalid access token
{
"error": {
"details": {
"edition_id": "96499735",
"current_user_id": "80215739",
"error_code": "A1003",
"message": "The user doesn't have permission to perform this action",
"space_id": "3009000000093003"
}
},
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000093003/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": "96499735",
"current_user_id": "80215739",
"error_code": "S1009",
"message": "Space not found",
"space_id": "300900000093003"
}
},
"request_uri": "/vani/api/v1/editions/96499735/spaces/300900000093003/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}/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}/duplicate",
"status": "error"
}
Errors
5 status codes
400 Invalid request - validation failed 401 Unauthorized - missing or invalid access token 404 Not found - a resource named in the path does not exist, or is not visible to the caller 429 Rate limit exceeded - this operation allows 30 requests per minute per user 500 Internal server error - the request was well-formed but could not be completed
POST
/vani/api/v1/editions/{edition_id}/spaces
Create a new space
Create a new space
OperationCREATE
Rate limit30 requests / minute · per user
OAuth scopes
Vani.spaces.CREATEPath parameters edition_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
Request body application/json
Tick a field to put it in the sample payload, and set what it carries in the Value column. Every field is optional unless it is marked REQUIRED, and those are always sent.
| Field | Type | Description | Value |
|---|---|---|---|
| create_space REQUIRED | object | create space. Max length: 11000 (required) | |
| workspace_id | string | workspace id | |
| template_name | string | template name | |
| space_name | string | space name | |
| zone_name | string | zone name | |
| template_id | string | template id | |
| team_id REQUIRED | string | team id (required) |
Request
POST
curl -X POST "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces" \
-H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"create_space": {
"team_id": "60712000000123456",
"workspace_id": "60712000000123456",
"template_name": "Sample name",
"space_name": "Sample name",
"zone_name": "Sample name",
"template_id": "60712000000123456"
}
}'import requests
url = "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
data = {
"create_space": {
"team_id": "60712000000123456",
"workspace_id": "60712000000123456",
"template_name": "Sample name",
"space_name": "Sample name",
"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'),
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_space": {
"team_id": "60712000000123456",
"workspace_id": "60712000000123456",
"template_name": "Sample name",
"space_name": "Sample name",
"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"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
String requestBody = "{\"create_space\":{\"team_id\":\"60712000000123456\",\"workspace_id\":\"60712000000123456\",\"template_name\":\"Sample name\",\"space_name\":\"Sample name\",\"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";
headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");
requestData = {"create_space": {"team_id": "60712000000123456", "workspace_id": "60712000000123456", "template_name": "Sample name", "space_name": "Sample name", "zone_name": "Sample name", "template_id": "60712000000123456"}};
response = invokeurl
[
url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces"
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_space": {
"team_id": "60712000000123456",
"workspace_id": "60712000000123456",
"template_name": "Sample name",
"space_name": "Sample name",
"zone_name": "Sample name",
"template_id": "60712000000123456"
}
}
Response
Successful response
{
"data": {
"edition_id": "96499735",
"current_user_id": "96384499",
"space_id": "3009000000145003",
"uri": "/vani/api/v1/editions/96499735/spaces/3009000000145003"
},
"message": "Space created successfully.",
"request_uri": "/vani/api/v1/editions/96499735/spaces/",
"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",
"status": "error"
}
Unauthorized - missing or invalid access token
{
"error": {
"details": {
"current_user_id": "96384499",
"error_code": "T1006",
"message": "User is not a member of the team"
}
},
"request_uri": "/vani/api/v1/editions/75918186/spaces/",
"status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
"error": {
"details": {
"edition_id": "60029715808",
"current_user_id": "60029267674",
"error_code": "S1030",
"message": "Template not found"
}
},
"request_uri": "/vani/api/v1/editions/60029715808/spaces/",
"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",
"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",
"status": "error"
}
Errors
5 status codes
400 Invalid request - validation failed 401 Unauthorized - missing or invalid access token 404 Not found - a resource named in the path does not exist, or is not visible to the caller 429 Rate limit exceeded - this operation allows 30 requests per minute per user 500 Internal server error - the request was well-formed but could not be completed
PUT
/vani/api/v1/editions/{edition_id}/spaces/{space_id}/meta
Update space metadata
Update space metadata
OperationUPDATE
Rate limit30 requests / minute · per user
OAuth scopes
Vani.spaces.UPDATEPath parameters edition_id · space_id
| Name | Type | Description |
|---|---|---|
| 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.
| Field | Type | Description | Value |
|---|---|---|---|
| space_name | string | space name | |
| action_type REQUIRED | string |
action type.
SPACE_NAMEFAVORITEEMBED
|
|
| value | boolean | value |
Request
PUT
curl -X PUT "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/meta" \
-H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"action_type": "SPACE_NAME",
"space_name": "Sample name",
"value": true
}'import requests
url = "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/meta"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
data = {
"action_type": "SPACE_NAME",
"space_name": "Sample name",
"value": true
}
response = requests.put(url, headers=headers, json=data)
data = response.json()
print(data)const https = require('https');
const url = require('url');
const options = {
...url.parse('https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_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({
"action_type": "SPACE_NAME",
"space_name": "Sample name",
"value": 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}/meta"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
String requestBody = "{\"action_type\":\"SPACE_NAME\",\"space_name\":\"Sample name\",\"value\":true}";
HttpRequest request = requestBuilder
.PUT(HttpRequest.BodyPublishers.ofString(requestBody))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}info "Making API request to: https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/meta";
headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");
requestData = {"action_type": "SPACE_NAME", "space_name": "Sample name", "value": true};
response = invokeurl
[
url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_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");
}{
"action_type": "SPACE_NAME",
"space_name": "Sample name",
"value": true
}
Response
Successful response
{
"data": {
"edition_id": "96499735",
"current_user_id": "96384499",
"is_favourite": false,
"space_id": "3009000000141003"
},
"message": "Space meta updated successfully.",
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000141003/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}/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": "300900000014100"
}
},
"request_uri": "/vani/api/v1/editions/96499735/spaces/300900000014100/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}/meta",
"status": "error"
}
Conflict - the requested change conflicts with the current resource state
{
"error": {
"details": {
"edition_id": "96499735",
"current_user_id": "96384499",
"error_code": "S1018",
"message": "Space is not favourite",
"space_id": "3009000000141003"
}
},
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000141003/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}/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}/meta",
"status": "error"
}
Errors
6 status codes
400 Invalid request - validation failed 401 Unauthorized - missing or invalid access token 404 Not found - a resource named in the path does not exist, or is not visible to the caller 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
PUT
/vani/api/v1/editions/{edition_id}/spaces/{space_id}/state
Update space state
Update space state
OperationUPDATE
Rate limit30 requests / minute · per user
OAuth scopes
Vani.spaces.UPDATEPath parameters edition_id · space_id
| Name | Type | Description |
|---|---|---|
| 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.
| Field | Type | Description | Value |
|---|---|---|---|
| space_state REQUIRED | string |
space state.
RESTORETRASHDELETE
|
Request
PUT
curl -X PUT "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/state" \
-H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"space_state": "RESTORE"
}'import requests
url = "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/state"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
data = {
"space_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}/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({
"space_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}/state"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
String requestBody = "{\"space_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}/state";
headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");
requestData = {"space_state": "RESTORE"};
response = invokeurl
[
url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_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");
}{
"space_state": "RESTORE"
}
Response
Successful response
{
"data": {
"edition_id": "96499735",
"space_state": "RESTORE",
"current_user_id": "96384499",
"space_id": "3009000000093854"
},
"message": "Space state updated successfully.",
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000093854/state",
"status": "success"
}
Invalid request - validation failed
{
"error": {
"details": {
"current_user_id": "96384499",
"error_code": "S1012",
"message": "Space is not in an active state"
}
},
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000093854/state",
"status": "error"
}
Unauthorized - missing or invalid access token
{
"error": {
"details": {
"current_user_id": "96384499",
"error_code": "A1003",
"message": "The user doesn't have permission to perform this action"
}
},
"request_uri": "/vani/api/v1/editions/96499735/spaces/300900000000003/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}/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}/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}/state",
"status": "error"
}
Errors
5 status codes
400 Invalid request - validation failed 401 Unauthorized - missing or invalid access token 404 Not found - a resource named in the path does not exist, or is not visible to the caller 429 Rate limit exceeded - this operation allows 30 requests per minute per user 500 Internal server error - the request was well-formed but could not be completed
GET
/vani/api/v1/editions/{edition_id}/spaces/{space_id}/members
Get the members of a space
Get the members of a space
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopes
Vani.spaces.READPath parameters edition_id · space_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
Query parameters roles · sort_by · search · fields · from · limit
| Name | Type | Description |
|---|---|---|
| rolesOPTIONAL | enum |
Parameter: roles
CREATORThe member who created the space.
EDITORCan view and edit the contents of the space.
COMMENTERCan view the space and add comments, but not edit it.
VIEWERCan view the space only.
ORGANISERCan administer the space, including its members and sharing.
|
| sort_byOPTIONAL | enum |
Specifies the field used to sort the results
ROLE_ASCSort by role, least privileged first.
ROLE_DESCSort by role, most privileged first.
|
| searchOPTIONAL | string | The keyword or phrase to search for |
| fieldsOPTIONAL | enum |
Specifies the fields (comma-separated) to retrieve
added_type_namedisplay_namezuidadded_timemail_idrole_nameadded_by
|
| 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 |
Request
GET
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/members" \
-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}/members"
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}/members'),
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}/members"))
.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}/members";
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}/members"
type: GET
headers: headers
];
if (response.get("status_code") == 200) {
info "Request successful";
responseData = response.get("response");
info responseData;
} else {
info "Request failed with status: " + response.get("status_code");
info response.get("response");
}
Response
Successful response
{
"data": {
"space_members": [
{
"role_name": "EDITOR",
"display_name": "Emma Carter",
"zuid": "80473960"
},
{
"role_name": "VIEWER",
"display_name": "CloudSpark",
"zuid": "1505000000002005"
},
{
"role_name": "CREATOR",
"display_name": "Ryan Mitchell",
"zuid": "96384499"
}
]
},
"message": "Space members fetched successfully.",
"request_uri": "/vani/api/v1/editions/97375109/spaces/1505000000022005/members",
"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}/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": "300900000038005"
}
},
"request_uri": "/vani/api/v1/editions/96499735/spaces/300900000038005/members",
"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}/members",
"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}/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}/members",
"status": "error"
}
Errors
5 status codes
400 Invalid request - validation failed 401 Unauthorized - missing or invalid access token 404 Not found - a resource named in the path does not exist, or is not visible to the caller 429 Rate limit exceeded - this operation allows 60 requests per minute per user 500 Internal server error - the request was well-formed but could not be completed
POST
/vani/api/v1/editions/{edition_id}/spaces/{space_id}/members
Add members to a space
Add members to a space
OperationCREATE
Rate limit30 requests / minute · per user
OAuth scopes
Vani.spaces.CREATEPath parameters edition_id · space_id
| Name | Type | Description |
|---|---|---|
| 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.
| Field | Type | Description | Value |
|---|---|---|---|
| members_info REQUIRED | array of object | members info. Max length: 11000 (required) (min 1, max 1) | |
| restrict_zone_ids | string | restrict zone ids. Max length: 1000 (max length 1000) | |
| role REQUIRED | string |
role.
EDITORCOMMENTERVIEWERORGANISER
|
|
| access_state | string |
access state.
full_accesspartial_access
|
|
| type REQUIRED | string |
type.
USERTEAMORG
|
|
| zuid REQUIRED | string | zuid. Max length: 100 (required) (max length 100) | |
| requester_zuid | string | requester zuid. Max length: 100 (max length 100) |
Request
POST
curl -X POST "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/members" \
-H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"members_info": [
{
"role": "EDITOR",
"type": "USER",
"zuid": "string",
"restrict_zone_ids": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"access_state": "full_access"
}
],
"requester_zuid": "string"
}'import requests
url = "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/members"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
data = {
"members_info": [
{
"role": "EDITOR",
"type": "USER",
"zuid": "string",
"restrict_zone_ids": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"access_state": "full_access"
}
],
"requester_zuid": "string"
}
response = requests.post(url, headers=headers, json=data)
data = response.json()
print(data)const https = require('https');
const url = require('url');
const options = {
...url.parse('https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/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": [
{
"role": "EDITOR",
"type": "USER",
"zuid": "string",
"restrict_zone_ids": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"access_state": "full_access"
}
],
"requester_zuid": "string"
}));
req.end();import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;
public class ApiClient {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.build();
HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
.uri(URI.create("https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/members"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
String requestBody = "{\"members_info\":[{\"role\":\"EDITOR\",\"type\":\"USER\",\"zuid\":\"string\",\"restrict_zone_ids\":\"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\"access_state\":\"full_access\"}],\"requester_zuid\":\"string\"}";
HttpRequest request = requestBuilder
.POST(HttpRequest.BodyPublishers.ofString(requestBody))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}info "Making API request to: https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/members";
headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");
requestData = {"members_info": {{"role": "EDITOR", "type": "USER", "zuid": "string", "restrict_zone_ids": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "access_state": "full_access"}}, "requester_zuid": "string"};
response = invokeurl
[
url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/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": [
{
"role": "EDITOR",
"type": "USER",
"zuid": "string",
"restrict_zone_ids": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"access_state": "full_access"
}
],
"requester_zuid": "string"
}
Response
Successful response
{
"data": {
"added_members": [
{
"role_name": "VIEWER",
"added_type_name": "USER",
"added_time": "Tue, 04 Feb 2025, 11:18:40",
"mail_id": "lucas.bryant@boxicle.com",
"added_by": "96384499",
"display_name": "Lucas Bryant",
"zuid": "98722154"
},
{
"role_name": "EDITOR",
"added_type_name": "TEAM",
"added_time": "Tue, 04 Feb 2025, 11:18:40",
"added_by": "96384499",
"display_name": "TEAM VANI",
"zuid": "1505000000002005"
}
]
},
"message": "Space member added successfully.",
"request_uri": "/vani/api/v1/editions/97375109/spaces/1505000000039170/members",
"status": "success"
}
Successful response
{
"data": {
"failed_members": [
{
"error_message": "Member already part of Space",
"error_code": "S1019",
"zuid": "98722154"
}
],
"added_members": [
{
"role_name": "EDITOR",
"added_type_name": "TEAM",
"added_time": "Tue, 04 Feb 2025, 11:14:23",
"added_by": "96384499",
"display_name": "CloudSpark",
"zuid": "1505000000002005"
}
]
},
"message": "Partial success: Some members added, others failed.",
"request_uri": "/vani/api/v1/editions/97375109/spaces/1505000000039170/members",
"status": "success"
}
Invalid request - validation failed
{
"error": {
"details": {
"failed_members": [
{
"error_message": "User is inactive and cannot be added to project",
"error_code": "U1001",
"zuid": "80215739"
}
],
"error_code": "S1008",
"message": "Space member add failed"
}
},
"request_uri": "/vani/api/v1/editions/75918186/spaces/693000000536104/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": "300900000014503"
}
},
"request_uri": "/vani/api/v1/editions/96499735/spaces/300900000014503/members",
"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}/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}/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}/members",
"status": "error"
}
Errors
5 status codes
400 Invalid request - validation failed 401 Unauthorized - missing or invalid access token 404 Not found - a resource named in the path does not exist, or is not visible to the caller 429 Rate limit exceeded - this operation allows 30 requests per minute per user 500 Internal server error - the request was well-formed but could not be completed
PUT
/vani/api/v1/editions/{edition_id}/spaces/{space_id}/members/{member_id}
Update a space member's role
Update a space member's role
OperationUPDATE
Rate limit30 requests / minute · per user
OAuth scopes
Vani.spaces.UPDATEPath parameters edition_id · space_id · member_id
| Name | Type | Description |
|---|---|---|
| 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 |
Request body application/json
Tick a field to put it in the sample payload, and set what it carries in the Value column. Every field is optional unless it is marked REQUIRED, and those are always sent.
| Field | Type | Description | Value |
|---|---|---|---|
| role REQUIRED | string |
role.
EDITORCOMMENTERVIEWERORGANISER
|
Request
PUT
curl -X PUT "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/members/{member_id}" \
-H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"role": "EDITOR"
}'import requests
url = "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/members/{member_id}"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
data = {
"role": "EDITOR"
}
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}/members/{member_id}'),
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({
"role": "EDITOR"
}));
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}/members/{member_id}"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
String requestBody = "{\"role\":\"EDITOR\"}";
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}/members/{member_id}";
headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");
requestData = {"role": "EDITOR"};
response = invokeurl
[
url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/members/{member_id}"
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");
}{
"role": "EDITOR"
}
Response
Successful response
{
"data": {
"new_role": "EDITOR",
"edition_id": "97375109",
"current_user_id": "96384499",
"space_id": "1505000000005005",
"zuid": "80473960"
},
"message": "Space member updated successfully.",
"request_uri": "/vani/api/v1/editions/97375109/spaces/1505000000005005/members",
"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}/members/{member_id}",
"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": "693000000536005"
}
},
"request_uri": "/vani/api/v1/editions/75918186/spaces/693000000536005/members",
"status": "error"
}
Forbidden - the caller is authenticated but not allowed to perform this operation
{
"error": {
"details": {
"edition_id": "97375109",
"current_user_id": "96384499",
"error_code": "R1001",
"message": "Cannot update own role",
"space_id": "1505000000045043",
"zuid": "96384499"
}
},
"request_uri": "/vani/api/v1/editions/97375109/spaces/1505000000045043/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": "S1015",
"message": "Member is not part of the Space",
"space_id": "3009000000067027",
"zuid": "80585905"
}
},
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000067027/members",
"status": "error"
}
Conflict - the requested change conflicts with the current resource state
{
"error": {
"details": {
"edition_id": "97375109",
"current_user_id": "96384499",
"error_code": "M1001",
"message": "The member already has the specified role",
"space_id": "1505000000005005",
"zuid": "80473960"
}
},
"request_uri": "/vani/api/v1/editions/97375109/spaces/1505000000005005/members/80473960",
"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}/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}/members/{member_id}",
"status": "error"
}
Errors
7 status codes
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 30 requests per minute per user 500 Internal server error - the request was well-formed but could not be completed
DELETE
/vani/api/v1/editions/{edition_id}/spaces/{space_id}/members/{member_id}
Remove a member from a space
destructive
Remove a member from a space
OperationDELETE
Rate limit30 requests / minute · per user
OAuth scopes
Vani.spaces.DELETEPath parameters edition_id · space_id · member_id
| Name | Type | Description |
|---|---|---|
| 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 |
Request
DELETE
curl -X DELETE "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/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}/members/{member_id}"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
response = requests.delete(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}/members/{member_id}'),
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.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}/members/{member_id}"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
HttpRequest request = requestBuilder
.DELETE(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}/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}/members/{member_id}"
type: DELETE
headers: headers
];
if (response.get("status_code") == 200) {
info "Request successful";
responseData = response.get("response");
info responseData;
} else {
info "Request failed with status: " + response.get("status_code");
info response.get("response");
}
Response
Successful response
{
"data": {
"edition_id": "97375109",
"removed_zuid": "80473960",
"current_user_id": "96384499",
"space_id": "1505000000039107"
},
"message": "Space member deleted successfully.",
"request_uri": "/vani/api/v1/editions/97375109/spaces/1505000000039107/members",
"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}/members/{member_id}",
"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": "1505000000045043"
}
},
"request_uri": "/vani/api/v1/editions/97375109/spaces/1505000000045043/members",
"status": "error"
}
Forbidden - the caller is authenticated but not allowed to perform this operation
{
"error": {
"details": {
"edition_id": "97375109",
"current_user_id": "96384499",
"error_code": "S1002",
"message": "Space owner cannot be removed",
"space_id": "1505000000045043"
}
},
"request_uri": "/vani/api/v1/editions/97375109/spaces/1505000000045043/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": "97375109",
"current_user_id": "96384499",
"error_code": "S1015",
"message": "Member is not part of the Space",
"space_id": "1505000000039107"
}
},
"request_uri": "/vani/api/v1/editions/97375109/spaces/1505000000039107/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}/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}/members/{member_id}",
"status": "error"
}
Errors
6 status codes
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
/vani/api/v1/editions/{edition_id}/spaces/{space_id}/requests
Get the join requests for a space
Get the join requests for a space
OperationREAD
Rate limit30 requests / minute · per user
OAuth scopes
Vani.spaces.READPath parameters edition_id · space_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
Query parameters fields · from · limit
| Name | Type | Description |
|---|---|---|
| fieldsOPTIONAL | enum |
Specifies the fields (comma-separated) to retrieve
requested_timerequested_bynamerequest_idstatusrole
|
| 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 |
Request
GET
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/requests" \
-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}/requests"
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}/requests'),
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}/requests"))
.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}/requests";
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}/requests"
type: GET
headers: headers
];
if (response.get("status_code") == 200) {
info "Request successful";
responseData = response.get("response");
info responseData;
} else {
info "Request failed with status: " + response.get("status_code");
info response.get("response");
}
Response
Successful response
{
"data": {
"requests": [
{
"requested_time": "Wed, 06 Aug 2025, 16:05:37",
"requested_by": "80215739",
"role": "VIEWER",
"name": "naga.vg",
"request_id": "3009000000789151",
"status": "PENDING"
},
{
"requested_time": "Wed, 06 Aug 2025, 16:10:51",
"requested_by": "80473960",
"role": "VIEWER",
"name": "naga.vg",
"request_id": "3009000000789147",
"status": "PENDING"
}
]
},
"message": "Space join requests fetched successfully",
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000701079/requests",
"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}/requests",
"status": "error"
}
Unauthorized - missing or invalid access token
{
"error": {
"details": {
"edition_id": "96499735",
"current_user_id": "80473960",
"error_code": "A1003",
"team_id": "3009000000694083",
"message": "The user doesn't have permission to perform this action"
}
},
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000694083/requests",
"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",
"team_id": "300900000064083",
"message": "Space not found"
}
},
"request_uri": "/vani/api/v1/editions/96499735/spaces/300900000064083/requests",
"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}/requests",
"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}/requests",
"status": "error"
}
Errors
5 status codes
400 Invalid request - validation failed 401 Unauthorized - missing or invalid access token 404 Not found - a resource named in the path does not exist, or is not visible to the caller 429 Rate limit exceeded - this operation allows 30 requests per minute per user 500 Internal server error - the request was well-formed but could not be completed
GET
/vani/api/v1/editions/{edition_id}/spaces/{space_id}/requests/my-requests
Get the current user's join requests for a space
Get the current user's join requests for a space
OperationREAD
Rate limit30 requests / minute · per user
OAuth scopes
Vani.spaces.READPath parameters edition_id · space_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
Query parameters fields
| Name | Type | Description |
|---|---|---|
| fieldsOPTIONAL | enum |
Specifies the fields (comma-separated) to retrieve
requested_timerequested_bynamerequest_idstatusrole
|
Request
GET
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/requests/my-requests" \
-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}/requests/my-requests"
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}/requests/my-requests'),
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}/requests/my-requests"))
.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}/requests/my-requests";
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}/requests/my-requests"
type: GET
headers: headers
];
if (response.get("status_code") == 200) {
info "Request successful";
responseData = response.get("response");
info responseData;
} else {
info "Request failed with status: " + response.get("status_code");
info response.get("response");
}
Response
Successful response
{
"data": {
"requests": {
"requested_time": "Wed, 06 Aug 2025, 16:10:51",
"requested_by": "80473960",
"role": "VIEWER",
"request_id": "3009000000789147",
"status": "PENDING"
}
},
"message": "Space join request fetched successfully",
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000701079/requests/my-requests",
"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}/requests/my-requests",
"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}/requests/my-requests",
"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": "80473960",
"error_code": "R1014",
"team_id": "3009000000694083",
"message": "Space join request not found"
}
},
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000694083/requests/my-requests",
"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}/requests/my-requests",
"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}/requests/my-requests",
"status": "error"
}
Errors
5 status codes
400 Invalid request - validation failed 401 Unauthorized - missing or invalid access token 404 Not found - a resource named in the path does not exist, or is not visible to the caller 429 Rate limit exceeded - this operation allows 30 requests per minute per user 500 Internal server error - the request was well-formed but could not be completed
POST
/vani/api/v1/editions/{edition_id}/spaces/{space_id}/requests
Raise a request to join a space
Raise a request to join a space
OperationCREATE
Rate limit30 requests / minute · per user
OAuth scopes
Vani.spaces.CREATEPath parameters edition_id · space_id
| Name | Type | Description |
|---|---|---|
| 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.
| Field | Type | Description | Value |
|---|---|---|---|
| role REQUIRED | string |
role.
EDITORCOMMENTERVIEWERORGANISER
|
Request
POST
curl -X POST "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/requests" \
-H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"role": "EDITOR"
}'import requests
url = "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/requests"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
data = {
"role": "EDITOR"
}
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}/requests'),
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({
"role": "EDITOR"
}));
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}/requests"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
String requestBody = "{\"role\":\"EDITOR\"}";
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}/requests";
headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");
requestData = {"role": "EDITOR"};
response = invokeurl
[
url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/requests"
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");
}{
"role": "EDITOR"
}
Response
Successful response
{
"data": {
"edition_id": "96499735",
"updated_at": "Wed, 06 Aug 2025, 10:12:18",
"request_id": "3009000000793049",
"space_id": "3009000000694083",
"zuid": "80473960",
"status": "PENDING"
},
"message": "Space join request created successfully",
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000694083/requests",
"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}/requests",
"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}/requests",
"status": "error"
}
Forbidden - the caller is authenticated but not allowed to perform this operation
{
"error": {
"details": {
"edition_id": "96499735",
"current_user_id": "80473960",
"error_code": "R1011",
"message": "Requesting for downgrade is not allowed"
}
},
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000694083/requests",
"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": "80473960",
"error_code": "T1012",
"message": "Member not part of team"
}
},
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000694083/requests",
"status": "error"
}
Conflict - the requested change conflicts with the current resource state
{
"error": {
"details": {
"edition_id": "96499735",
"current_user_id": "80473960",
"error_code": "M1001",
"message": "The member already has the specified role"
}
},
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000694083/requests",
"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}/requests",
"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}/requests",
"status": "error"
}
Errors
7 status codes
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 30 requests per minute per user 500 Internal server error - the request was well-formed but could not be completed
POST
/vani/api/v1/editions/{edition_id}/spaces/{space_id}/requests/{request_id}/accept
Accept a request to join a space
Accept a request to join a space
OperationCREATE
Rate limit30 requests / minute · per user
OAuth scopes
Vani.spaces.CREATEPath parameters edition_id · space_id · request_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| request_idREQUIRED | string | The unique identifier of the request |
Request
POST
curl -X POST "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/requests/{request_id}/accept" \
-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}/requests/{request_id}/accept"
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}/requests/{request_id}/accept'),
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}/requests/{request_id}/accept"))
.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}/requests/{request_id}/accept";
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}/requests/{request_id}/accept"
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");
}
Response
Successful response
{
"data": {
"role_name": "VIEWER",
"edition_id": "96499735",
"updated_at": "Wed, 06 Aug 2025, 20:07:20",
"request_id": "3009000000789147",
"space_id": "3009000000701079",
"zuid": "80473960",
"status": "ACCEPTED"
},
"message": "Space join request accepted successfully",
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000701079/requests/3009000000789147/accept",
"status": "success"
}
Invalid request - validation failed
{
"error": {
"details": {
"edition_id": "96499735",
"current_user_id": "96384499",
"error_code": "R1003",
"team_id": "3009000000694083",
"message": "Invalid request ID"
}
},
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000694083/requests/3009000000777013/accept",
"status": "error"
}
Unauthorized - missing or invalid access token
{
"error": {
"details": {
"edition_id": "96499735",
"current_user_id": "80473960",
"error_code": "A1003",
"team_id": "3009000000694083",
"message": "The user doesn't have permission to perform this action"
}
},
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000694083/requests/3009000000777109/accept",
"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}/requests/{request_id}/accept",
"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}/requests/{request_id}/accept",
"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}/requests/{request_id}/accept",
"status": "error"
}
Errors
5 status codes
400 Invalid request - validation failed 401 Unauthorized - missing or invalid access token 404 Not found - a resource named in the path does not exist, or is not visible to the caller 429 Rate limit exceeded - this operation allows 30 requests per minute per user 500 Internal server error - the request was well-formed but could not be completed
POST
/vani/api/v1/editions/{edition_id}/spaces/{space_id}/requests/{request_id}/reject
Reject a request to join a space
Reject a request to join a space
OperationCREATE
Rate limit30 requests / minute · per user
OAuth scopes
Vani.spaces.CREATEPath parameters edition_id · space_id · request_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| space_idREQUIRED | string | The unique identifier of the space |
| request_idREQUIRED | string | The unique identifier of the request |
Request
POST
curl -X POST "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/spaces/{space_id}/requests/{request_id}/reject" \
-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}/requests/{request_id}/reject"
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}/requests/{request_id}/reject'),
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}/requests/{request_id}/reject"))
.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}/requests/{request_id}/reject";
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}/requests/{request_id}/reject"
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");
}
Response
Successful response
{
"data": {
"edition_id": "112255940",
"updated_at": "Fri, 21 Aug 2026, 20:10:08",
"request_id": "5777000000922022",
"space_id": "5777000000919096",
"zuid": "97049596",
"status": "REJECTED"
},
"message": "Space join request rejected successfully",
"request_uri": "/vani/api/v1/editions/112255940/spaces/5777000000919096/requests/5777000000922022/reject",
"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}/requests/{request_id}/reject",
"status": "error"
}
Unauthorized - missing or invalid access token
{
"error": {
"details": {
"edition_id": "96499735",
"current_user_id": "80473960",
"error_code": "A1003",
"team_id": "3009000000694083",
"message": "The user doesn't have permission to perform this action"
}
},
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000694083/requests/3009000000777117/reject",
"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}/requests/{request_id}/reject",
"status": "error"
}
Conflict - the requested change conflicts with the current resource state
{
"error": {
"details": {
"edition_id": "96499735",
"current_user_id": "96384499",
"error_code": "R1015",
"team_id": "3009000000694083",
"message": "Space join request is already rejected"
}
},
"request_uri": "/vani/api/v1/editions/96499735/spaces/3009000000694083/requests/3009000000777117/reject",
"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}/requests/{request_id}/reject",
"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}/requests/{request_id}/reject",
"status": "error"
}
Errors
6 status codes
400 Invalid request - validation failed 401 Unauthorized - missing or invalid access token 404 Not found - a resource named in the path does not exist, or is not visible to the caller 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