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

Spaces

Spaces (projects) within an edition, their members, join requests, and role lookups.

Spaces

Create, read, duplicate, and update spaces, and resolve a user's role within them.
Get a space
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.READ
Path parameters edition_id · space_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
space_idREQUIRED string The unique identifier of the space
Query parameters fields
NameTypeDescription
fieldsOPTIONAL enum Specifies the fields (comma-separated) to retrieve
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
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");
}
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"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
429  Rate limit exceeded - this operation allows 60 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
Get the current user's role in a space
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.READ
Path parameters edition_id · space_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
space_idREQUIRED string The unique identifier of the space
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");
}
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"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
429  Rate limit exceeded - this operation allows 60 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
Get a user's role in a space
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.READ
Path parameters edition_id · space_id · user_id
NameTypeDescription
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
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");
}
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"
}
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 all spaces in an edition
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.READ
Path parameters edition_id
NameTypeDescription
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
NameTypeDescription
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
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");
}
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"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
429  Rate limit exceeded - this operation allows 60 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
Duplicate a space
OperationCREATE
Rate limit30 requests / minute · per user
OAuth scopesVani.spaces.CREATE
Path parameters edition_id · space_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
space_idREQUIRED string The unique identifier of the space
Request body application/json
Tick a field to put it in the sample payload, and set what it carries in the Value column. Every field is optional unless it is marked REQUIRED, and those are always sent.
FieldTypeDescriptionValue
duplicate_space REQUIRED object duplicate space. Max length: 11000 (required)
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
  }
}
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"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
429  Rate limit exceeded - this operation allows 30 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
Create a new space
OperationCREATE
Rate limit30 requests / minute · per user
OAuth scopesVani.spaces.CREATE
Path parameters edition_id
NameTypeDescription
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.
FieldTypeDescriptionValue
create_space REQUIRED object create space. Max length: 11000 (required)
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"
  }
}
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"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
429  Rate limit exceeded - this operation allows 30 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
Update space metadata
OperationUPDATE
Rate limit30 requests / minute · per user
OAuth scopesVani.spaces.UPDATE
Path parameters edition_id · space_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
space_idREQUIRED string The unique identifier of the space
Request body application/json
Tick a field to put it in the sample payload, and set what it carries in the Value column. Every field is optional unless it is marked REQUIRED, and those are always sent.
FieldTypeDescriptionValue
space_name string space name
action_type REQUIRED string action type.
SPACE_NAMEFAVORITEEMBED
value boolean value
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
}
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"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
409  Conflict - the requested change conflicts with the current resource state
429  Rate limit exceeded - this operation allows 30 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
Update space state
OperationUPDATE
Rate limit30 requests / minute · per user
OAuth scopesVani.spaces.UPDATE
Path parameters edition_id · space_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
space_idREQUIRED string The unique identifier of the space
Request body application/json
Tick a field to put it in the sample payload, and set what it carries in the Value column. Every field is optional unless it is marked REQUIRED, and those are always sent.
FieldTypeDescriptionValue
space_state REQUIRED string space state.
RESTORETRASHDELETE
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"
}
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"
}
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

Space Members

Add, update, remove, and list the members of a space.
Get the members of a space
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.spaces.READ
Path parameters edition_id · space_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
space_idREQUIRED string The unique identifier of the space
Query parameters roles · sort_by · search · fields · from · limit
NameTypeDescription
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
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");
}
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"
}
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
Add members to a space
OperationCREATE
Rate limit30 requests / minute · per user
OAuth scopesVani.spaces.CREATE
Path parameters edition_id · space_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
space_idREQUIRED string The unique identifier of the space
Request body application/json
Tick a field to put it in the sample payload, and set what it carries in the Value column. Every field is optional unless it is marked REQUIRED, and those are always sent.
FieldTypeDescriptionValue
members_info REQUIRED array of object members info. Max length: 11000 (required) (min 1, max 1)
requester_zuid string requester zuid. Max length: 100 (max length 100)
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"
}
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"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
429  Rate limit exceeded - this operation allows 30 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
Update a space member's role
OperationUPDATE
Rate limit30 requests / minute · per user
OAuth scopesVani.spaces.UPDATE
Path parameters edition_id · space_id · member_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
space_idREQUIRED string The unique identifier of the space
member_idREQUIRED string The unique identifier of the member
Request body application/json
Tick a field to put it in the sample payload, and set what it carries in the Value column. Every field is optional unless it is marked REQUIRED, and those are always sent.
FieldTypeDescriptionValue
role REQUIRED string role.
EDITORCOMMENTERVIEWERORGANISER
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"
}
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"
}
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
Remove a member from a space
OperationDELETE
Rate limit30 requests / minute · per user
OAuth scopesVani.spaces.DELETE
Path parameters edition_id · space_id · member_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
space_idREQUIRED string The unique identifier of the space
member_idREQUIRED string The unique identifier of the member
curl -X 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");
}
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"
}
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

Space Requests

Raise, list, accept, and reject requests to join a space.
Get the join requests for a space
OperationREAD
Rate limit30 requests / minute · per user
OAuth scopesVani.spaces.READ
Path parameters edition_id · space_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
space_idREQUIRED string The unique identifier of the space
Query parameters fields · from · limit
NameTypeDescription
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
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");
}
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"
}
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 the current user's join requests for a space
OperationREAD
Rate limit30 requests / minute · per user
OAuth scopesVani.spaces.READ
Path parameters edition_id · space_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
space_idREQUIRED string The unique identifier of the space
Query parameters fields
NameTypeDescription
fieldsOPTIONAL enum Specifies the fields (comma-separated) to retrieve
requested_timerequested_bynamerequest_idstatusrole
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");
}
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"
}
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
Raise a request to join a space
OperationCREATE
Rate limit30 requests / minute · per user
OAuth scopesVani.spaces.CREATE
Path parameters edition_id · space_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
space_idREQUIRED string The unique identifier of the space
Request body application/json
Tick a field to put it in the sample payload, and set what it carries in the Value column. Every field is optional unless it is marked REQUIRED, and those are always sent.
FieldTypeDescriptionValue
role REQUIRED string role.
EDITORCOMMENTERVIEWERORGANISER
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"
}
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"
}
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
Accept a request to join a space
OperationCREATE
Rate limit30 requests / minute · per user
OAuth scopesVani.spaces.CREATE
Path parameters edition_id · space_id · request_id
NameTypeDescription
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
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");
}
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"
}
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
Reject a request to join a space
OperationCREATE
Rate limit30 requests / minute · per user
OAuth scopesVani.spaces.CREATE
Path parameters edition_id · space_id · request_id
NameTypeDescription
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
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");
}
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"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
409  Conflict - the requested change conflicts with the current resource state
429  Rate limit exceeded - this operation allows 30 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
© 2026 Zoho Corporation Pvt. Ltd. Help