Core / Editions
Editions
Edition-level resources: the edition itself, its subscription, join requests, and templates.
GET
/vani/api/v1/editions/{edition_id}/requests/status
Read whether access-request handling is switched on for the edition. Use to check the org-level toggle before a user tries to request access to a team or space.
Read whether access-request handling is switched on for the edition. Use to check the org-level toggle before a user tries to request access to a team or space.
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopes
Vani.editions.READPath parameters edition_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
Request
GET
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/requests/status" \
-H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json"import requests
url = "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/requests/status"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
response = requests.get(url, headers=headers)
data = response.json()
print(data)const https = require('https');
const url = require('url');
const options = {
...url.parse('https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/requests/status'),
method: 'GET',
headers: {
'Authorization': 'Zoho-oauthtoken YOUR_ACCESS_TOKEN',
'Content-Type': 'application/json'
}
};
const req = https.request(options, (res) => {
let data = '';
res.on('data', (chunk) => data += chunk);
res.on('end', () => {
const result = JSON.parse(data);
// Process the response data
});
});
req.end();import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;
public class ApiClient {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.build();
HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
.uri(URI.create("https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/requests/status"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
HttpRequest request = requestBuilder
.GET(HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}info "Making API request to: https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/requests/status";
headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");
response = invokeurl
[
url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/requests/status"
type: GET
headers: headers
];
if (response.get("status_code") == 200) {
info "Request successful";
responseData = response.get("response");
info responseData;
} else {
info "Request failed with status: " + response.get("status_code");
info response.get("response");
}
Response
Successful response
{
"data": {
"edition_id": "96499735",
"status": "true"
},
"message": "Requests status fetched successfully",
"request_uri": "/vani/api/v1/editions/96499735/requests/status",
"status": "success"
}
Invalid request - validation failed
{
"error": {
"details": {
"error_code": "IAM1031",
"message": "Invalid request - validation failed"
}
},
"request_uri": "/vani/api/v1/editions/{edition_id}/requests/status",
"status": "error"
}
Unauthorized - missing or invalid access token
{
"error": {
"details": {
"error_code": "IAM1100",
"message": "Unauthorized - missing or invalid access token"
}
},
"request_uri": "/vani/api/v1/editions/{edition_id}/requests/status",
"status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
"error": {
"details": {
"error_code": "IAM1001",
"message": "Not found - a resource named in the path does not exist, or is not visible to the caller"
}
},
"request_uri": "/vani/api/v1/editions/{edition_id}/requests/status",
"status": "error"
}
Rate limit exceeded - this operation allows 60 requests per minute per user
{
"error": {
"details": {
"error_code": "IAM1055",
"message": "Rate limit exceeded - this operation allows 60 requests per minute per user"
}
},
"request_uri": "/vani/api/v1/editions/{edition_id}/requests/status",
"status": "error"
}
Internal server error - the request was well-formed but could not be completed
{
"error": {
"details": {
"error_code": "U1001",
"message": "Internal server error - the request was well-formed but could not be completed"
}
},
"request_uri": "/vani/api/v1/editions/{edition_id}/requests/status",
"status": "error"
}
Errors
5 status codes
400 Invalid request - validation failed 401 Unauthorized - missing or invalid access token 404 Not found - a resource named in the path does not exist, or is not visible to the caller 429 Rate limit exceeded - this operation allows 60 requests per minute per user 500 Internal server error - the request was well-formed but could not be completed
GET
/vani/api/v1/editions/{edition_id}
Get an edition
Get an edition
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopes
Vani.editions.READPath parameters edition_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
Query parameters fields
| Name | Type | Description |
|---|---|---|
| fieldsOPTIONAL | enum |
Specifies the fields (comma-separated) to retrieve
statecreated_timelast_modified_timeedition_type_nameedition_nameedition_role_nameedition_idedition_owner_idis_defaulturi
|
Request
GET
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_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}"
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}'),
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}"))
.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}";
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}"
type: GET
headers: headers
];
if (response.get("status_code") == 200) {
info "Request successful";
responseData = response.get("response");
info responseData;
} else {
info "Request failed with status: " + response.get("status_code");
info response.get("response");
}
Response
Successful response
{
"data": {
"edition_info": {
"state": "ACTIVE",
"edition_name": "QA TEAM",
"edition_owner_id": "96384499"
}
},
"message": "Editions fetched successfully",
"request_uri": "/vani/api/v1/editions/60029715808",
"status": "success"
}
Invalid request - validation failed
{
"error": {
"details": {
"error_code": "IAM1031",
"message": "Invalid request - validation failed"
}
},
"request_uri": "/vani/api/v1/editions/{edition_id}",
"status": "error"
}
Unauthorized - missing or invalid access token
{
"error": {
"details": {
"edition_id": "96499735",
"error_code": "A1008",
"message": "Given API Key is not valid."
}
},
"request_uri": "/vani/api/v1/editions/96499735",
"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}",
"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}",
"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}",
"status": "error"
}
Errors
5 status codes
400 Invalid request - validation failed 401 Unauthorized - missing or invalid access token 404 Not found - a resource named in the path does not exist, or is not visible to the caller 429 Rate limit exceeded - this operation allows 60 requests per minute per user 500 Internal server error - the request was well-formed but could not be completed
GET
/vani/api/v1/editions
Get all editions the user belongs to
Get all editions the user belongs to
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopes
Vani.editions.READQuery parameters fields
| Name | Type | Description |
|---|---|---|
| fieldsOPTIONAL | enum |
Specifies the fields (comma-separated) to retrieve
statecreated_timelast_modified_timeedition_type_nameedition_nameedition_role_nameedition_idedition_owner_idis_defaulturi
|
Request
GET
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions" \ -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json"
import requests
url = "https://api.app.vanihq.com/vani/api/v1/editions"
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'),
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"))
.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";
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"
type: GET
headers: headers
];
if (response.get("status_code") == 200) {
info "Request successful";
responseData = response.get("response");
info responseData;
} else {
info "Request failed with status: " + response.get("status_code");
info response.get("response");
}
Response
Successful response
{
"data": {
"editions_info": {}
},
"message": "Editions fetched successfully",
"request_uri": "/vani/api/v1/editions",
"status": "success"
}
Invalid request - validation failed
{
"error": {
"details": {
"error_code": "IAM1031",
"message": "Invalid request - validation failed"
}
},
"request_uri": "/vani/api/v1/editions",
"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",
"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",
"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",
"status": "error"
}
Errors
4 status codes
400 Invalid request - validation failed 401 Unauthorized - missing or invalid access token 429 Rate limit exceeded - this operation allows 60 requests per minute per user 500 Internal server error - the request was well-formed but could not be completed
POST
/vani/api/v1/editions
Create a new edition
Create a new edition
OperationCREATE
Rate limit10 requests / minute · per user
OAuth scopes
Vani.editions.CREATERequest body application/json
Tick a field to put it in the sample payload, and set what it carries in the Value column. Every field is optional unless it is marked REQUIRED, and those are always sent.
| Field | Type | Description | Value |
|---|---|---|---|
| plan_type | string |
plan type.
FREETRIALTEAM_TRIAL
|
|
| description | string | description. Max length: 500 (max length 500) | |
| team_name REQUIRED | string | team name. Max length: 100 (required) (max length 100) | |
| from_integration | string |
from integration.
MICROSOFT_TEAMSGOOGLE_WORKSPACEZOHO_SHOWZOHO_MAILGOOGLE_MEET
|
Request
POST
curl -X POST "https://api.app.vanihq.com/vani/api/v1/editions" \
-H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"team_name": "Sample name",
"plan_type": "FREE",
"description": "string",
"from_integration": "MICROSOFT_TEAMS"
}'import requests
url = "https://api.app.vanihq.com/vani/api/v1/editions"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
data = {
"team_name": "Sample name",
"plan_type": "FREE",
"description": "string",
"from_integration": "MICROSOFT_TEAMS"
}
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'),
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({
"team_name": "Sample name",
"plan_type": "FREE",
"description": "string",
"from_integration": "MICROSOFT_TEAMS"
}));
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"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
String requestBody = "{\"team_name\":\"Sample name\",\"plan_type\":\"FREE\",\"description\":\"string\",\"from_integration\":\"MICROSOFT_TEAMS\"}";
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";
headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");
requestData = {"team_name": "Sample name", "plan_type": "FREE", "description": "string", "from_integration": "MICROSOFT_TEAMS"};
response = invokeurl
[
url: "https://api.app.vanihq.com/vani/api/v1/editions"
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");
}{
"team_name": "Sample name",
"plan_type": "FREE",
"description": "string",
"from_integration": "MICROSOFT_TEAMS"
}
Response
Successful response
{
"data": {
"edition_id": "98723605",
"current_user_id": "98722154",
"team_id": 5265000000002003,
"team_name": "TeamEdition"
},
"message": "Team edition created successfully",
"request_uri": "/vani/api/v1/editions",
"status": "success"
}
Invalid request - validation failed
{
"error": {
"details": {
"error_code": "IAM1031",
"attribute": "team_name",
"message": "The required parameter is missing"
}
},
"request_uri": "/vani/api/v1/editions",
"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",
"status": "error"
}
Conflict - the requested change conflicts with the current resource state
{
"error": {
"details": {
"current_user_id": "98722154",
"error_code": "E1001",
"message": "User has already created an edition"
}
},
"request_uri": "/vani/api/v1/editions",
"status": "error"
}
Rate limit exceeded - this operation allows 10 requests per minute per user
{
"error": {
"details": {
"error_code": "IAM1055",
"message": "Rate limit exceeded - this operation allows 10 requests per minute per user"
}
},
"request_uri": "/vani/api/v1/editions",
"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",
"status": "error"
}
Errors
5 status codes
400 Invalid request - validation failed 401 Unauthorized - missing or invalid access token 409 Conflict - the requested change conflicts with the current resource state 429 Rate limit exceeded - this operation allows 10 requests per minute per user 500 Internal server error - the request was well-formed but could not be completed
PUT
/vani/api/v1/editions/{edition_id}/requests/status
Approve or reject an edition join request
Approve or reject an edition join request
OperationUPDATE
Rate limit30 requests / minute · per user
OAuth scopes
Vani.editions.UPDATEPath parameters edition_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
Request body application/json
Tick a field to put it in the sample payload, and set what it carries in the Value column. Every field is optional unless it is marked REQUIRED, and those are always sent.
| Field | Type | Description | Value |
|---|---|---|---|
| enabled REQUIRED | boolean | enabled (required) |
Request
PUT
curl -X PUT "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/requests/status" \
-H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"enabled": true
}'import requests
url = "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/requests/status"
headers = {
"Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
data = {
"enabled": 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}/requests/status'),
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({
"enabled": 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}/requests/status"))
.header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
.timeout(Duration.ofSeconds(30));
.header("Content-Type", "application/json")
String requestBody = "{\"enabled\":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}/requests/status";
headers = Map();
headers.put("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN");
headers.put("Content-Type", "application/json");
requestData = {"enabled": true};
response = invokeurl
[
url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/requests/status"
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");
}{
"enabled": true
}
Response
Successful response
{
"data": {
"edition_id": "96499735",
"status": "false"
},
"message": "Requests status updated successfully",
"request_uri": "/vani/api/v1/editions/96499735/requests/status",
"status": "success"
}
Invalid request - validation failed
{
"error": {
"details": {
"error_code": "IAM1031",
"message": "Invalid request - validation failed"
}
},
"request_uri": "/vani/api/v1/editions/{edition_id}/requests/status",
"status": "error"
}
Unauthorized - missing or invalid access token
{
"error": {
"details": {
"error_code": "A1003",
"message": "The user doesn't have permission to perform this action"
}
},
"request_uri": "/vani/api/v1/editions/112255940/requests/status",
"status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
"error": {
"details": {
"error_code": "IAM1001",
"message": "Not found - a resource named in the path does not exist, or is not visible to the caller"
}
},
"request_uri": "/vani/api/v1/editions/{edition_id}/requests/status",
"status": "error"
}
Conflict - the requested change conflicts with the current resource state
{
"error": {
"details": {
"edition_id": "96499735",
"current_user_id": "96384499",
"error_code": "E1015",
"message": "Team Request status is already in the requested state"
}
},
"request_uri": "/vani/api/v1/editions/96499735/requests/status",
"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}/requests/status",
"status": "error"
}
Internal server error - the request was well-formed but could not be completed
{
"error": {
"details": {
"error_code": "U1001",
"message": "Internal server error - the request was well-formed but could not be completed"
}
},
"request_uri": "/vani/api/v1/editions/{edition_id}/requests/status",
"status": "error"
}
Errors
6 status codes
400 Invalid request - validation failed 401 Unauthorized - missing or invalid access token 404 Not found - a resource named in the path does not exist, or is not visible to the caller 409 Conflict - the requested change conflicts with the current resource state 429 Rate limit exceeded - this operation allows 30 requests per minute per user 500 Internal server error - the request was well-formed but could not be completed
GET
/vani/api/v1/editions/{edition_id}/subscription
Get the edition's subscription details
Get the edition's subscription details
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopes
Vani.editions.READPath parameters edition_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
Query parameters fields
| Name | Type | Description |
|---|---|---|
| fieldsOPTIONAL | enum |
Specifies the fields (comma-separated) to retrieve
statusmembers_countedition_idpurchase_dateplan_nameplan_typeexpiry_date
|
Request
GET
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/subscription" \
-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}/subscription"
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}/subscription'),
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}/subscription"))
.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}/subscription";
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}/subscription"
type: GET
headers: headers
];
if (response.get("status_code") == 200) {
info "Request successful";
responseData = response.get("response");
info responseData;
} else {
info "Request failed with status: " + response.get("status_code");
info response.get("response");
}
Response
Successful response
{
"data": {
"subscription_info": {
"plan_type": "Yearly",
"edition_id": "112255940",
"expiry_date": "Sat, 19 Jun 2027, 00:00:00",
"members_count": "5",
"purchase_date": "Fri, 19 Jun 2026, 18:56:49",
"plan_name": "BUSINESS_PLAN",
"status": "Active"
}
},
"message": "Subscription details fetched successfully",
"request_uri": "/vani/api/v1/editions/112255940/subscription",
"status": "success"
}
Invalid request - validation failed
{
"error": {
"details": {
"error_code": "IAM1031",
"message": "Invalid request - validation failed"
}
},
"request_uri": "/vani/api/v1/editions/{edition_id}/subscription",
"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}/subscription",
"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}/subscription",
"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}/subscription",
"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}/subscription",
"status": "error"
}
Errors
5 status codes
400 Invalid request - validation failed 401 Unauthorized - missing or invalid access token 404 Not found - a resource named in the path does not exist, or is not visible to the caller 429 Rate limit exceeded - this operation allows 60 requests per minute per user 500 Internal server error - the request was well-formed but could not be completed
GET
/vani/api/v1/editions/{edition_id}/templates
Get the templates available in an edition
Get the templates available in an edition
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopes
Vani.editions.READPath parameters edition_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
Query parameters fields · from · limit
| Name | Type | Description |
|---|---|---|
| fieldsOPTIONAL | enum |
Specifies the fields (comma-separated) to retrieve
iddescriptionnameis_available_for_edition
|
| fromOPTIONAL | string | The starting index from where the results should be fetched. Default value is 0 |
| limitOPTIONAL | string | The maximum number of results to return in the response. Default value is 20 |
Request
GET
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/templates" \
-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}/templates"
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}/templates'),
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}/templates"))
.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}/templates";
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}/templates"
type: GET
headers: headers
];
if (response.get("status_code") == 200) {
info "Request successful";
responseData = response.get("response");
info responseData;
} else {
info "Request failed with status: " + response.get("status_code");
info response.get("response");
}
Response
Successful response
{
"data": {
"templates": [
{
"name": "Eisenhower matrix",
"description": "The Eisenhower Matrix, also known as the Urgent-Important Matrix, is a productivity tool used to prioritize tasks based on their urgency and importance.",
"id": "2227813839241884264",
"is_available_for_edition": "true"
},
{
"name": "1-on-1 feedback",
"description": "Help your mentor or teammate get an idea of what you're going to discuss with them in your 1-on-1 feedback sessions.",
"id": "415170746673786701",
"is_available_for_edition": "true"
},
{
"name": "5 whys",
"description": "Find the root cause of a problem by asking "Why?" questions.",
"id": "8825346814681087568",
"is_available_for_edition": "true"
},
{
"name": "Guess the Doodle",
"description": "Just want to chill with the team for a while? This visual game will help you and your team relax and bond with each other.",
"id": "7193564480716665813",
"is_available_for_edition": "true"
},
{
"name": "Impact Effort Matrix",
"description": "An impact effort matrix is a tool used in project management to help prioritize tasks based on their level of impact and effort required.",
"id": "4880489140950000824",
"is_available_for_edition": "true"
},
{
"name": "Customer problem statement",
"description": "Get into your customer's shoes to better understand their problems. ",
"id": "3570349084835838944",
"is_available_for_edition": "true"
},
{
"name": "Marketing release checklist",
"description": "Got an upcoming release? Here's an easier way to plan and execute\nyour marketing goals, so that you get everything covered.",
"id": "5252159967532415789",
"is_available_for_edition": "true"
},
{
"name": "Never Have I Ever",
"description": "Never Have I Ever is a popular card game designed to reveal interesting and embarrassing secrets about the players. It's a great icebreaker and often opens up fun, entertaining conversations.",
"id": "9068022063805355070",
"is_available_for_edition": "true"
},
{
"name": "New teammate onboarding",
"description": "Onboard new members of your team with this fun template.",
"id": "8077947179536093903",
"is_available_for_edition": "true"
},
{
"name": "New teammate project milestones",
"description": "Help your new teammate understand all about your team's projects, the stuff they need to work on, and the expectations you've set for them.\r\n",
"id": "2197960956629199196",
"is_available_for_edition": "true"
},
{
"name": "Sales call follow-up",
"description": "This is a quick way to share insights after a sales call and discuss them with your team.",
"id": "1758538615716321335",
"is_available_for_edition": "true"
},
{
"name": "Product positioning",
"description": "Working on a new product or revising an existing one? Here are some positioning exercises for you and your teammates to brainstorm and fill in.\r\n",
"id": "4786897632740503006",
"is_available_for_edition": "true"
},
{
"name": "Strategic goal board",
"description": "Chart out some goals and work together with your teammates towards achieving them.\r\n",
"id": "146806559048094029",
"is_available_for_edition": "true"
},
{
"name": "Team bookshelf",
"description": "Build your team library with book recommendations from everyone.",
"id": "2601700237097182900",
"is_available_for_edition": "true"
},
{
"name": "Team coffee discussion",
"description": "Bond with your team over coffee, or just about anything you want, and have fun discussions.",
"id": "6282257423499599528",
"is_available_for_edition": "true"
},
{
"name": "Team priority : Now, Next, Later",
"description": "Working on your next team project? Quickly list down tasks and details, sort the most-important things to do, and keep track of the progress.\r\n",
"id": "1189335149816408152",
"is_available_for_edition": "true"
},
{
"name": "Team recipe board",
"description": "A fun team activity to share the best and favorite recipes with each other.",
"id": "709495071782421321",
"is_available_for_edition": "true"
},
{
"name": "Website signup flow",
"description": "A simple sign up flow to capture the visitor-to-subscriber conversion.",
"id": "5772067647393374657",
"is_available_for_edition": "true"
},
{
"name": "Weekly team planner",
"description": "Plan your week with your teammates using this template.\r\n",
"id": "3212028571933595674",
"is_available_for_edition": "true"
},
{
"name": "Book Club Meeting",
"description": "Use this template to jot down your bookish discussions and thoughts on what you are reading and keep track of your literary adventures. It is your cozy digital den for all things book-related.",
"id": "2053719903222126011",
"is_available_for_edition": "true"
}
]
},
"message": "Templates fetched successfully",
"request_uri": "/vani/api/v1/editions/888012145/templates",
"status": "success"
}
Invalid request - validation failed
{
"error": {
"details": {
"error_code": "IAM1031",
"message": "Invalid request - validation failed"
}
},
"request_uri": "/vani/api/v1/editions/{edition_id}/templates",
"status": "error"
}
Unauthorized - missing or invalid access token
{
"error": {
"details": {
"error_code": "IAM1100",
"message": "Unauthorized - missing or invalid access token"
}
},
"request_uri": "/vani/api/v1/editions/{edition_id}/templates",
"status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
"error": {
"details": {
"error_code": "IAM1001",
"message": "Not found - a resource named in the path does not exist, or is not visible to the caller"
}
},
"request_uri": "/vani/api/v1/editions/{edition_id}/templates",
"status": "error"
}
Rate limit exceeded - this operation allows 60 requests per minute per user
{
"error": {
"details": {
"error_code": "IAM1055",
"message": "Rate limit exceeded - this operation allows 60 requests per minute per user"
}
},
"request_uri": "/vani/api/v1/editions/{edition_id}/templates",
"status": "error"
}
Internal server error - the request was well-formed but could not be completed
{
"error": {
"details": {
"error_code": "U1001",
"message": "Internal server error - the request was well-formed but could not be completed"
}
},
"request_uri": "/vani/api/v1/editions/{edition_id}/templates",
"status": "error"
}
Errors
5 status codes
400 Invalid request - validation failed 401 Unauthorized - missing or invalid access token 404 Not found - a resource named in the path does not exist, or is not visible to the caller 429 Rate limit exceeded - this operation allows 60 requests per minute per user 500 Internal server error - the request was well-formed but could not be completed
GET
/vani/api/v1/editions/{edition_id}/templates/{template_id}
Get a template
Get a template
OperationREAD
Rate limit500 requests / minute · per user
OAuth scopes
Vani.editions.READPath parameters edition_id · template_id
| Name | Type | Description |
|---|---|---|
| edition_idREQUIRED | string | The unique identifier of the edition |
| template_idREQUIRED | string | The unique identifier of the template |
Query parameters fields
| Name | Type | Description |
|---|---|---|
| fieldsOPTIONAL | enum |
Specifies the fields (comma-separated) to retrieve
iddescriptionnameis_available_for_edition
|
Request
GET
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/templates/{template_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}/templates/{template_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}/templates/{template_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}/templates/{template_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}/templates/{template_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}/templates/{template_id}"
type: GET
headers: headers
];
if (response.get("status_code") == 200) {
info "Request successful";
responseData = response.get("response");
info responseData;
} else {
info "Request failed with status: " + response.get("status_code");
info response.get("response");
}
Response
Successful response
{
"data": {
"template": {
"name": "1-on-1 feedback",
"description": "Help your mentor or teammate get an idea of what you're going to discuss with them in your 1-on-1 feedback sessions.",
"id": "415170746673786701",
"is_available_for_edition": "true"
}
},
"message": "Template fetched successfully",
"request_uri": "/vani/api/v1/editions/888012145/templates/415170746673786701",
"status": "success"
}
Invalid request - validation failed
{
"error": {
"details": {
"error_code": "IAM1031",
"message": "Invalid request - validation failed"
}
},
"request_uri": "/vani/api/v1/editions/{edition_id}/templates/{template_id}",
"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}/templates/{template_id}",
"status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
"error": {
"details": {
"edition_id": "888012145",
"current_user_id": "888015717",
"error_code": "S1030",
"message": "Template not found"
}
},
"request_uri": "/vani/api/v1/editions/888012145/templates/339360394209299546",
"status": "error"
}
Rate limit exceeded - this operation allows 500 requests per minute per user
{
"error": {
"details": {
"error_code": "IAM1055",
"message": "Rate limit exceeded - this operation allows 500 requests per minute per user"
}
},
"request_uri": "/vani/api/v1/editions/{edition_id}/templates/{template_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}/templates/{template_id}",
"status": "error"
}
Errors
5 status codes
400 Invalid request - validation failed 401 Unauthorized - missing or invalid access token 404 Not found - a resource named in the path does not exist, or is not visible to the caller 429 Rate limit exceeded - this operation allows 500 requests per minute per user 500 Internal server error - the request was well-formed but could not be completed