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

Editions

Edition-level resources: the edition itself, its subscription, join requests, and templates.

Editions

Read and create editions, and check edition join-request 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.
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.editions.READ
Path parameters edition_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
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");
}
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"
}
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 an edition
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.editions.READ
Path parameters edition_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
Query parameters fields
NameTypeDescription
fieldsOPTIONAL enum Specifies the fields (comma-separated) to retrieve
statecreated_timelast_modified_timeedition_type_nameedition_nameedition_role_nameedition_idedition_owner_idis_defaulturi
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");
}
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"
}
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 editions the user belongs to
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.editions.READ
Query parameters fields
NameTypeDescription
fieldsOPTIONAL enum Specifies the fields (comma-separated) to retrieve
statecreated_timelast_modified_timeedition_type_nameedition_nameedition_role_nameedition_idedition_owner_idis_defaulturi
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");
}
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"
}
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
Create a new edition
OperationCREATE
Rate limit10 requests / minute · per user
OAuth scopesVani.editions.CREATE
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
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
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"
}
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"
}
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
Approve or reject an edition join request
OperationUPDATE
Rate limit30 requests / minute · per user
OAuth scopesVani.editions.UPDATE
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
enabled REQUIRED boolean enabled (required)
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
}
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"
}
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

Subscription

Read the edition's subscription details.
Get the edition's subscription details
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.editions.READ
Path parameters edition_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
Query parameters fields
NameTypeDescription
fieldsOPTIONAL enum Specifies the fields (comma-separated) to retrieve
statusmembers_countedition_idpurchase_dateplan_nameplan_typeexpiry_date
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");
}
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"
}
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

Templates

List and read the templates available in an edition.
Get the templates available in an edition
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.editions.READ
Path parameters edition_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
Query parameters fields · from · limit
NameTypeDescription
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
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");
}
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 &quot;Why?&quot; 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&#39;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"
}
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 template
OperationREAD
Rate limit500 requests / minute · per user
OAuth scopesVani.editions.READ
Path parameters edition_id · template_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
template_idREQUIRED string The unique identifier of the template
Query parameters fields
NameTypeDescription
fieldsOPTIONAL enum Specifies the fields (comma-separated) to retrieve
iddescriptionnameis_available_for_edition
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");
}
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"
}
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
© 2026 Zoho Corporation Pvt. Ltd. Help