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

Teams

Teams within an edition, their members, join requests, and role lookups.

Teams

Read and update teams, and resolve a user's role within them.
Get a team
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.teams.READ
Path parameters edition_id · team_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
team_idREQUIRED string The unique identifier of the team
Query parameters fields
NameTypeDescription
fieldsOPTIONAL enum Specifies the fields (comma-separated) to retrieve
created_bycreated_by_namecreated_timeteam_member_countzsoidteam_nameteam_iduri
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_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}/teams/{team_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}/teams/{team_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}/teams/{team_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}/teams/{team_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}/teams/{team_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": {
    "team": {
      "team_member_count": "5",
      "team_id": "1303000000002003",
      "created_by_name": "Dan",
      "team_name": "GraphZen"
    }
  },
  "message": "Teams fetched successfully",
  "request_uri": "/vani/api/v1/editions/60029715808/teams/1303000000002003",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "edition_id": "75918186",
      "current_user_id": "96384499",
      "error_code": "T1006",
      "team_id": "693000000008463",
      "message": "User is not a member of the team"
    }
  },
  "request_uri": "/vani/api/v1/editions/75918186/teams/693000000008463",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "T1008",
      "team_id": "300900000000200",
      "message": "Team not found"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/teams/300900000000200",
  "status": "error"
}
Rate limit exceeded - this operation allows 60 requests per minute per user
{
  "error": {
    "details": {
      "error_code": "IAM1055",
      "message": "Rate limit exceeded - this operation allows 60 requests per minute per user"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}",
  "status": "error"
}
Internal server error - the request was well-formed but could not be completed
{
  "error": {
    "details": {
      "error_code": "U1001",
      "message": "Internal server error - the request was well-formed but could not be completed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}",
  "status": "error"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
429  Rate limit exceeded - this operation allows 60 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
Get the current user's role in a team
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.teams.READ
Path parameters edition_id · team_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
team_idREQUIRED string The unique identifier of the team
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/users/me/permission" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json"
import requests

url = "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/users/me/permission"
headers = {
    "Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
    "Content-Type": "application/json"
}

response = requests.get(url, headers=headers)
data = response.json()
print(data)
const https = require('https');
const url = require('url');

const options = {
  ...url.parse('https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/users/me/permission'),
  method: 'GET',
  headers: {
    'Authorization': 'Zoho-oauthtoken YOUR_ACCESS_TOKEN',
    'Content-Type': 'application/json'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => data += chunk);
  res.on('end', () => {
    const result = JSON.parse(data);
    // Process the response data
  });
});

req.end();
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;

public class ApiClient {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();

        HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
            .uri(URI.create("https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/users/me/permission"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        HttpRequest request = requestBuilder
            .GET(HttpRequest.BodyPublishers.noBody())
            .build();

        HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString());

        System.out.println(response.body());
    }
}
info "Making API request to: https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/users/me/permission";

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

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/users/me/permission"
    type: GET
    headers: headers
];

if (response.get("status_code") == 200) {
    info "Request successful";
    responseData = response.get("response");
    info responseData;
} else {
    info "Request failed with status: " + response.get("status_code");
    info response.get("response");
}
Successful response
{
  "data": {
    "user_permission_info": {
      "edition_id": "96499735",
      "role": "TEAM_ADMIN",
      "current_user_id": "96384499",
      "team_id": "3009000000002003"
    }
  },
  "message": "User permissions fetched successfully",
  "request_uri": "/vani/api/v1/editions/96499735/teams/3009000000002003/users/me/permission",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/users/me/permission",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "edition_id": "75918186",
      "current_user_id": "96384499",
      "error_code": "T1006",
      "team_id": "693000000002001",
      "message": "User is not a member of the team"
    }
  },
  "request_uri": "/vani/api/v1/editions/75918186/teams/693000000002001/users/me/permission",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "T1008",
      "team_id": "300900000002003",
      "message": "Team not found"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/teams/300900000002003/users/me/permission",
  "status": "error"
}
Rate limit exceeded - this operation allows 60 requests per minute per user
{
  "error": {
    "details": {
      "error_code": "IAM1055",
      "message": "Rate limit exceeded - this operation allows 60 requests per minute per user"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/users/me/permission",
  "status": "error"
}
Internal server error - the request was well-formed but could not be completed
{
  "error": {
    "details": {
      "error_code": "U1001",
      "message": "Internal server error - the request was well-formed but could not be completed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/users/me/permission",
  "status": "error"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
429  Rate limit exceeded - this operation allows 60 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
Get a user's role in a team
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.teams.READ
Path parameters edition_id · team_id · user_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
team_idREQUIRED string The unique identifier of the team
user_idREQUIRED string The unique identifier of the user
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/users/{user_id}/permission" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json"
import requests

url = "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/users/{user_id}/permission"
headers = {
    "Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
    "Content-Type": "application/json"
}

response = requests.get(url, headers=headers)
data = response.json()
print(data)
const https = require('https');
const url = require('url');

const options = {
  ...url.parse('https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/users/{user_id}/permission'),
  method: 'GET',
  headers: {
    'Authorization': 'Zoho-oauthtoken YOUR_ACCESS_TOKEN',
    'Content-Type': 'application/json'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => data += chunk);
  res.on('end', () => {
    const result = JSON.parse(data);
    // Process the response data
  });
});

req.end();
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;

public class ApiClient {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();

        HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
            .uri(URI.create("https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/users/{user_id}/permission"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        HttpRequest request = requestBuilder
            .GET(HttpRequest.BodyPublishers.noBody())
            .build();

        HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString());

        System.out.println(response.body());
    }
}
info "Making API request to: https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/users/{user_id}/permission";

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

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/users/{user_id}/permission"
    type: GET
    headers: headers
];

if (response.get("status_code") == 200) {
    info "Request successful";
    responseData = response.get("response");
    info responseData;
} else {
    info "Request failed with status: " + response.get("status_code");
    info response.get("response");
}
Successful response
{
  "data": {
    "user_permission_info": {
      "edition_id": "96499735",
      "role": "TEAM_ADMIN",
      "current_user_id": "96384499",
      "team_id": "3009000000002003",
      "zuid": "80215739"
    }
  },
  "message": "User permissions fetched successfully",
  "request_uri": "/vani/api/v1/editions/96499735/teams/3009000000002003/users/80215739/permission",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/users/{user_id}/permission",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "T1006",
      "team_id": "3009000000002003",
      "message": "User is not a member of the team",
      "zuid": "80585905"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/teams/3009000000002003/users/80585905/permission",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "error_code": "IAM1001",
      "message": "Not found - a resource named in the path does not exist, or is not visible to the caller"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/users/{user_id}/permission",
  "status": "error"
}
Rate limit exceeded - this operation allows 60 requests per minute per user
{
  "error": {
    "details": {
      "error_code": "IAM1055",
      "message": "Rate limit exceeded - this operation allows 60 requests per minute per user"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/users/{user_id}/permission",
  "status": "error"
}
Internal server error - the request was well-formed but could not be completed
{
  "error": {
    "details": {
      "error_code": "U1001",
      "message": "Internal server error - the request was well-formed but could not be completed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/users/{user_id}/permission",
  "status": "error"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
429  Rate limit exceeded - this operation allows 60 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
Get the current user's role across all teams
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.teams.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}/teams/users/me/permission" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json"
import requests

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

response = requests.get(url, headers=headers)
data = response.json()
print(data)
const https = require('https');
const url = require('url');

const options = {
  ...url.parse('https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/users/me/permission'),
  method: 'GET',
  headers: {
    'Authorization': 'Zoho-oauthtoken YOUR_ACCESS_TOKEN',
    'Content-Type': 'application/json'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => data += chunk);
  res.on('end', () => {
    const result = JSON.parse(data);
    // Process the response data
  });
});

req.end();
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;

public class ApiClient {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();

        HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
            .uri(URI.create("https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/users/me/permission"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        HttpRequest request = requestBuilder
            .GET(HttpRequest.BodyPublishers.noBody())
            .build();

        HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString());

        System.out.println(response.body());
    }
}
info "Making API request to: https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/users/me/permission";

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

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/users/me/permission"
    type: GET
    headers: headers
];

if (response.get("status_code") == 200) {
    info "Request successful";
    responseData = response.get("response");
    info responseData;
} else {
    info "Request failed with status: " + response.get("status_code");
    info response.get("response");
}
Successful response
{
  "data": {
    "user_permission_info": {
      "edition_id": "75918186",
      "teams": [
        {
          "role": "TEAM_ADMIN",
          "team_id": 693000000435005
        },
        {
          "role": "MEMBER",
          "team_id": 693000000436009
        },
        {
          "role": "MEMBER",
          "team_id": 693000000450001
        }
      ],
      "current_user_id": "96384499"
    }
  },
  "message": "User permissions fetched successfully",
  "request_uri": "/vani/api/v1/editions/75918186/teams/users/me/permission",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/users/me/permission",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "error_code": "IAM1100",
      "message": "Unauthorized - missing or invalid access token"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/users/me/permission",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "current_user_id": "96384499",
      "error_code": "E1017",
      "message": "Invalid edition"
    }
  },
  "request_uri": "/vani/api/v1/editions/02345/teams/users/me/permission",
  "status": "error"
}
Rate limit exceeded - this operation allows 60 requests per minute per user
{
  "error": {
    "details": {
      "error_code": "IAM1055",
      "message": "Rate limit exceeded - this operation allows 60 requests per minute per user"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/users/me/permission",
  "status": "error"
}
Internal server error - the request was well-formed but could not be completed
{
  "error": {
    "details": {
      "error_code": "U1001",
      "message": "Internal server error - the request was well-formed but could not be completed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/users/me/permission",
  "status": "error"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
429  Rate limit exceeded - this operation allows 60 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
Get all teams in an edition
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.teams.READ
Path parameters edition_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
Query parameters fields · from · limit · sort_by · order_by
NameTypeDescription
fieldsOPTIONAL enum Specifies the fields (comma-separated) to retrieve
created_bycreated_by_namecreated_timeteam_member_countzsoidteam_nameteam_iduri
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
sort_byOPTIONAL enum Specifies the field used to sort the results
nameSort by team name.
created_timeSort by creation time.
order_byOPTIONAL enum Specifies the sorting order
ascAscending order.
descDescending order.
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json"
import requests

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

response = requests.get(url, headers=headers)
data = response.json()
print(data)
const https = require('https');
const url = require('url');

const options = {
  ...url.parse('https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams'),
  method: 'GET',
  headers: {
    'Authorization': 'Zoho-oauthtoken YOUR_ACCESS_TOKEN',
    'Content-Type': 'application/json'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => data += chunk);
  res.on('end', () => {
    const result = JSON.parse(data);
    // Process the response data
  });
});

req.end();
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;

public class ApiClient {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();

        HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
            .uri(URI.create("https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        HttpRequest request = requestBuilder
            .GET(HttpRequest.BodyPublishers.noBody())
            .build();

        HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString());

        System.out.println(response.body());
    }
}
info "Making API request to: https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams";

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

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams"
    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": {
    "teams": [
      {
        "created_time": "Wed, 12 Jun 2024, 11:22:30",
        "team_member_count": "8",
        "team_id": "1303000000003021",
        "created_by_name": "Alice",
        "zsoid": "60029715808",
        "created_by": "60029269987",
        "uri": "/vani/api/v1/editions/60029715808/teams/1303000000003021",
        "team_name": "CloudSpark"
      },
      {
        "created_time": "Tue, 28 May 2024, 15:34:44",
        "team_member_count": "5",
        "team_id": "1303000000002003",
        "is_default": "true",
        "created_by_name": "Dan",
        "zsoid": "60029715808",
        "created_by": "60029267674",
        "uri": "/vani/api/v1/editions/60029715808/teams/1303000000002003",
        "team_name": "GraphZen"
      }
    ]
  },
  "message": "Teams fetched successfully",
  "request_uri": "/vani/api/v1/editions/60029715808/teams",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "error_code": "IAM1100",
      "message": "Unauthorized - missing or invalid access token"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "error_code": "IAM1001",
      "message": "Not found - a resource named in the path does not exist, or is not visible to the caller"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams",
  "status": "error"
}
Rate limit exceeded - this operation allows 60 requests per minute per user
{
  "error": {
    "details": {
      "error_code": "IAM1055",
      "message": "Rate limit exceeded - this operation allows 60 requests per minute per user"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams",
  "status": "error"
}
Internal server error - the request was well-formed but could not be completed
{
  "error": {
    "details": {
      "error_code": "U1001",
      "message": "Internal server error - the request was well-formed but could not be completed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams",
  "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
Update a team's name or settings
OperationUPDATE
Rate limit30 requests / minute · per user
OAuth scopesVani.teams.UPDATE
Path parameters edition_id · team_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
team_idREQUIRED string The unique identifier of the team
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
description string description
team_name string team name. Max length: 100 (max length 100)
curl -X PUT "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "description": "string",
  "team_name": "Sample name"
}'
import requests

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

data = {
  "description": "string",
  "team_name": "Sample name"
}

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}/teams/{team_id}'),
  method: 'PUT',
  headers: {
    'Authorization': 'Zoho-oauthtoken YOUR_ACCESS_TOKEN',
    'Content-Type': 'application/json'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => data += chunk);
  res.on('end', () => {
    const result = JSON.parse(data);
    // Process the response data
  });
});

req.write(JSON.stringify({
  "description": "string",
  "team_name": "Sample name"
}));
req.end();
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;

public class ApiClient {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();

        HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
            .uri(URI.create("https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        String requestBody = "{\"description\":\"string\",\"team_name\":\"Sample name\"}";
        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}/teams/{team_id}";

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

requestData = {"description": "string", "team_name": "Sample name"};

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}"
    type: PUT
    headers: headers
    parameters: requestData
];

if (response.get("status_code") == 200) {
    info "Request successful";
    responseData = response.get("response");
    info responseData;
} else {
    info "Request failed with status: " + response.get("status_code");
    info response.get("response");
}
{
  "description": "string",
  "team_name": "Sample name"
}
Successful response
{
  "data": {
    "edition_id": "97375109",
    "current_user_id": "96384499",
    "team_id": "1505000000002005",
    "new_description": "Visualize Graph Instantly"
  },
  "message": "Team updated successfully",
  "request_uri": "/vani/api/v1/editions/97375109/teams/1505000000002005",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "error_code": "IAM1100",
      "message": "Unauthorized - missing or invalid access token"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "edition_id": "97375109",
      "current_user_id": "96384499",
      "error_code": "T1008",
      "team_id": "442100000000200",
      "message": "Team not found"
    }
  },
  "request_uri": "/vani/api/v1/editions/97375109/teams/442100000000200",
  "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}/teams/{team_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}/teams/{team_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 30 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed

Team Members

Add, update, remove, and list the members of a team.
Get the members of a team
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.teams.READ
Path parameters edition_id · team_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
team_idREQUIRED string The unique identifier of the team
Query parameters member_type · subscriber_state · roles · sort_by · search · fields · from · limit
NameTypeDescription
member_typeOPTIONAL enum Role of the member to be fetched. The value TEAM_ADMIN retrieves only the team admins
TEAM_ADMINCan administer the team, including its members.
MEMBERA regular member of the team.
TEAM_GUESTA guest with limited access to the team.
subscriber_stateOPTIONAL enum Parameter: subscriber_state
ACTIVEMembers currently occupying a subscription seat.
INACTIVEMembers not occupying a subscription seat.
rolesOPTIONAL enum Parameter: roles
TEAM_ADMINCan administer the team, including its members.
MEMBERA regular member of the team.
TEAM_GUESTA guest with limited access to the team.
sort_byOPTIONAL enum Specifies the field used to sort the results
ROLE_ASCSort by role, least privileged first.
ROLE_DESCSort by role, most privileged first.
NAME_ASCSort by name, A to Z.
NAME_DESCSort by name, Z to A.
searchOPTIONAL string The keyword or phrase to search for
fieldsOPTIONAL enum Specifies the fields (comma-separated) to retrieve
zuidrole_nameadded_timeadded_bymodified_timedisplay_namemail_idedition_idteam_idinvited_time
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}/teams/{team_id}/members" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json"
import requests

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

response = requests.get(url, headers=headers)
data = response.json()
print(data)
const https = require('https');
const url = require('url');

const options = {
  ...url.parse('https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/members'),
  method: 'GET',
  headers: {
    'Authorization': 'Zoho-oauthtoken YOUR_ACCESS_TOKEN',
    'Content-Type': 'application/json'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => data += chunk);
  res.on('end', () => {
    const result = JSON.parse(data);
    // Process the response data
  });
});

req.end();
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;

public class ApiClient {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();

        HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
            .uri(URI.create("https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/members"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        HttpRequest request = requestBuilder
            .GET(HttpRequest.BodyPublishers.noBody())
            .build();

        HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString());

        System.out.println(response.body());
    }
}
info "Making API request to: https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/members";

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

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/members"
    type: GET
    headers: headers
];

if (response.get("status_code") == 200) {
    info "Request successful";
    responseData = response.get("response");
    info responseData;
} else {
    info "Request failed with status: " + response.get("status_code");
    info response.get("response");
}
Successful response
{
  "data": {
    "team_members": [
      {
        "role_name": "MEMBER",
        "added_time": "Tue, 21 Jan 2025, 13:29:58",
        "modified_time": "Tue, 21 Jan 2025, 13:29:58",
        "mail_id": "emma.carter@boxicle.com",
        "added_by": "85572741",
        "display_name": "Emma Carter",
        "zuid": "96384499"
      }
    ]
  },
  "message": "Team members fetched successfully.",
  "request_uri": "/vani/api/v1/editions/75918186/teams/693000000450001/members",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/members",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "edition_id": "75918186",
      "current_user_id": "96384499",
      "error_code": "T1006",
      "team_id": "693000000008463",
      "message": "User is not a member of the team"
    }
  },
  "request_uri": "/vani/api/v1/editions/75918186/teams/693000000008463/members",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "edition_id": "75918186",
      "current_user_id": "96384499",
      "error_code": "T1008",
      "team_id": "69300000045001",
      "message": "Team not found"
    }
  },
  "request_uri": "/vani/api/v1/editions/75918186/teams/69300000045001/members",
  "status": "error"
}
Rate limit exceeded - this operation allows 60 requests per minute per user
{
  "error": {
    "details": {
      "error_code": "IAM1055",
      "message": "Rate limit exceeded - this operation allows 60 requests per minute per user"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/members",
  "status": "error"
}
Internal server error - the request was well-formed but could not be completed
{
  "error": {
    "details": {
      "error_code": "U1001",
      "message": "Internal server error - the request was well-formed but could not be completed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/members",
  "status": "error"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
429  Rate limit exceeded - this operation allows 60 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
Add members to a team
OperationCREATE
Rate limit30 requests / minute · per user
OAuth scopesVani.teams.CREATE
Path parameters edition_id · team_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
team_idREQUIRED string The unique identifier of the team
Request body application/json
Tick a field to put it in the sample payload, and set what it carries in the Value column. Every field is optional unless it is marked REQUIRED, and those are always sent.
FieldTypeDescriptionValue
members_info REQUIRED array of object members info. Max length: 11000 (required) (min 1, max 1)
curl -X POST "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/members" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "members_info": [
    {
      "role": "TEAM_ADMIN",
      "mail_id": "60712000000123456"
    }
  ]
}'
import requests

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

data = {
  "members_info": [
    {
      "role": "TEAM_ADMIN",
      "mail_id": "60712000000123456"
    }
  ]
}

response = requests.post(url, headers=headers, json=data)
data = response.json()
print(data)
const https = require('https');
const url = require('url');

const options = {
  ...url.parse('https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/members'),
  method: 'POST',
  headers: {
    'Authorization': 'Zoho-oauthtoken YOUR_ACCESS_TOKEN',
    'Content-Type': 'application/json'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => data += chunk);
  res.on('end', () => {
    const result = JSON.parse(data);
    // Process the response data
  });
});

req.write(JSON.stringify({
  "members_info": [
    {
      "role": "TEAM_ADMIN",
      "mail_id": "60712000000123456"
    }
  ]
}));
req.end();
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;

public class ApiClient {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();

        HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
            .uri(URI.create("https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/members"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        String requestBody = "{\"members_info\":[{\"role\":\"TEAM_ADMIN\",\"mail_id\":\"60712000000123456\"}]}";
        HttpRequest request = requestBuilder
            .POST(HttpRequest.BodyPublishers.ofString(requestBody))
            .build();

        HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString());

        System.out.println(response.body());
    }
}
info "Making API request to: https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/members";

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

requestData = {"members_info": {{"role": "TEAM_ADMIN", "mail_id": "60712000000123456"}}};

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/members"
    type: POST
    headers: headers
    parameters: requestData
];

if (response.get("status_code") == 200) {
    info "Request successful";
    responseData = response.get("response");
    info responseData;
} else {
    info "Request failed with status: " + response.get("status_code");
    info response.get("response");
}
{
  "members_info": [
    {
      "role": "TEAM_ADMIN",
      "mail_id": "60712000000123456"
    }
  ]
}
Successful response
{
  "data": {
    "added_members": [
      {
        "role_name": "MEMBER",
        "invited_time": "Mon, 03 Feb 2025, 23:17:12",
        "edition_id": "97375109",
        "mail_id": "sophia.bennett@boxicle.com",
        "added_by": "96384499",
        "team_id": "1505000000051031"
      }
    ]
  },
  "message": "Team member added successfully.",
  "request_uri": "/vani/api/v1/editions/97375109/teams/1505000000051031/members",
  "status": "success"
}
Successful response
{
  "data": {
    "failed_members": [
      {
        "error_message": "Member already invited",
        "mail_id": "sophia.bennett@boxicle.com",
        "error_code": "T1014"
      }
    ],
    "added_members": [
      {
        "role_name": "MEMBER",
        "invited_time": "Mon, 03 Feb 2025, 23:16:13",
        "edition_id": "97375109",
        "mail_id": "olivia.morgan@boxicle.com",
        "added_by": "96384499",
        "team_id": "1505000000051031"
      },
      {
        "role_name": "TEAM_ADMIN",
        "added_time": "Mon, 03 Feb 2025, 23:16:12",
        "mail_id": "liam.parker@boxicle.com",
        "added_by": "96384499",
        "team_id": "1505000000051031"
      }
    ]
  },
  "message": "Partial success: Some members added, others failed.",
  "request_uri": "/vani/api/v1/editions/97375109/teams/1505000000051031/members",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "failed_members": [
        {
          "error_message": "Member already part of team",
          "mail_id": "olivia.morgan@boxicle.com",
          "error_code": "T1013"
        }
      ],
      "error_code": "T1017",
      "message": "Team member add failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/teams/3009000000002003/members",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "97377569",
      "error_code": "A1003",
      "team_id": "3009000000002003",
      "message": "The user doesn't have permission to perform this action"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/teams/3009000000002003/members",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "error_code": "IAM1001",
      "message": "Not found - a resource named in the path does not exist, or is not visible to the caller"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/members",
  "status": "error"
}
Rate limit exceeded - this operation allows 30 requests per minute per user
{
  "error": {
    "details": {
      "error_code": "IAM1055",
      "message": "Rate limit exceeded - this operation allows 30 requests per minute per user"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/members",
  "status": "error"
}
Internal server error - the request was well-formed but could not be completed
{
  "error": {
    "details": {
      "error_code": "U1001",
      "message": "Internal server error - the request was well-formed but could not be completed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/members",
  "status": "error"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
429  Rate limit exceeded - this operation allows 30 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
Update a team member's role
OperationUPDATE
Rate limit30 requests / minute · per user
OAuth scopesVani.teams.UPDATE
Path parameters edition_id · team_id · member_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
team_idREQUIRED string The unique identifier of the team
member_idREQUIRED string The unique identifier of the member
Request body application/json
Tick a field to put it in the sample payload, and set what it carries in the Value column. Every field is optional unless it is marked REQUIRED, and those are always sent.
FieldTypeDescriptionValue
role REQUIRED string role.
TEAM_ADMINMEMBERTEAM_GUEST
assign_to_zuid string assign to zuid
curl -X PUT "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/members/{member_id}" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "role": "TEAM_ADMIN",
  "assign_to_zuid": "string"
}'
import requests

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

data = {
  "role": "TEAM_ADMIN",
  "assign_to_zuid": "string"
}

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}/teams/{team_id}/members/{member_id}'),
  method: 'PUT',
  headers: {
    'Authorization': 'Zoho-oauthtoken YOUR_ACCESS_TOKEN',
    'Content-Type': 'application/json'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => data += chunk);
  res.on('end', () => {
    const result = JSON.parse(data);
    // Process the response data
  });
});

req.write(JSON.stringify({
  "role": "TEAM_ADMIN",
  "assign_to_zuid": "string"
}));
req.end();
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;

public class ApiClient {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();

        HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
            .uri(URI.create("https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/members/{member_id}"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        String requestBody = "{\"role\":\"TEAM_ADMIN\",\"assign_to_zuid\":\"string\"}";
        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}/teams/{team_id}/members/{member_id}";

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

requestData = {"role": "TEAM_ADMIN", "assign_to_zuid": "string"};

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/members/{member_id}"
    type: PUT
    headers: headers
    parameters: requestData
];

if (response.get("status_code") == 200) {
    info "Request successful";
    responseData = response.get("response");
    info responseData;
} else {
    info "Request failed with status: " + response.get("status_code");
    info response.get("response");
}
{
  "role": "TEAM_ADMIN",
  "assign_to_zuid": "string"
}
Successful response
{
  "data": {
    "new_role": "MEMBER",
    "edition_id": "97375109",
    "current_user_id": "96384499",
    "team_id": "1505000000051031",
    "zuid": "98722154"
  },
  "message": "Team member updated successfully.",
  "request_uri": "/vani/api/v1/editions/97375109/teams/1505000000051031/members",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/members/{member_id}",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "edition_id": "75918186",
      "current_user_id": "96384499",
      "error_code": "T1006",
      "team_id": "693000000436009",
      "message": "User is not a member of the team"
    }
  },
  "request_uri": "/vani/api/v1/editions/75918186/teams/693000000436009/members",
  "status": "error"
}
Forbidden - the caller is authenticated but not allowed to perform this operation
{
  "error": {
    "details": {
      "edition_id": "112255940",
      "current_user_id": "82512958",
      "error_code": "M1003",
      "team_id": "5777000000002017",
      "message": "Inactive user role cannot be updated",
      "zuid": "64167940"
    }
  },
  "request_uri": "/vani/api/v1/editions/112255940/teams/5777000000002017/members/64167940",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "edition_id": "97375109",
      "current_user_id": "96384499",
      "error_code": "T1012",
      "team_id": "1505000000051031",
      "message": "Member not part of team",
      "zuid": "80215739"
    }
  },
  "request_uri": "/vani/api/v1/editions/97375109/teams/1505000000051031/members",
  "status": "error"
}
Conflict - the requested change conflicts with the current resource state
{
  "error": {
    "details": {
      "edition_id": "75918186",
      "current_user_id": "96384499",
      "error_code": "M1001",
      "team_id": "693000000436009",
      "message": "The member already has the specified role",
      "zuid": "81479212"
    }
  },
  "request_uri": "/vani/api/v1/editions/75918186/teams/693000000436009/members",
  "status": "error"
}
Rate limit exceeded - this operation allows 30 requests per minute per user
{
  "error": {
    "details": {
      "error_code": "IAM1055",
      "message": "Rate limit exceeded - this operation allows 30 requests per minute per user"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/members/{member_id}",
  "status": "error"
}
Internal server error - the request was well-formed but could not be completed
{
  "error": {
    "details": {
      "error_code": "U1001",
      "message": "Internal server error - the request was well-formed but could not be completed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/members/{member_id}",
  "status": "error"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
403  Forbidden - the caller is authenticated but not allowed to perform this operation
404  Not found - a resource named in the path does not exist, or is not visible to the caller
409  Conflict - the requested change conflicts with the current resource state
429  Rate limit exceeded - this operation allows 30 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
Remove a member from a team
OperationDELETE
Rate limit30 requests / minute · per user
OAuth scopesVani.teams.DELETE
Path parameters edition_id · team_id · member_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
team_idREQUIRED string The unique identifier of the team
member_idREQUIRED string The unique identifier of the member
Request body application/json
Tick a field to put it in the sample payload, and set what it carries in the Value column. Every field is optional unless it is marked REQUIRED, and those are always sent.
FieldTypeDescriptionValue
assign_to_zuid REQUIRED string assign to zuid (required)
curl -X DELETE "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/members/{member_id}" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "assign_to_zuid": "string"
}'
import requests

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

data = {
  "assign_to_zuid": "string"
}

response = requests.delete(url, headers=headers, json=data)
data = response.json()
print(data)
const https = require('https');
const url = require('url');

const options = {
  ...url.parse('https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/members/{member_id}'),
  method: 'DELETE',
  headers: {
    'Authorization': 'Zoho-oauthtoken YOUR_ACCESS_TOKEN',
    'Content-Type': 'application/json'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => data += chunk);
  res.on('end', () => {
    const result = JSON.parse(data);
    // Process the response data
  });
});

req.write(JSON.stringify({
  "assign_to_zuid": "string"
}));
req.end();
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;

public class ApiClient {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();

        HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
            .uri(URI.create("https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/members/{member_id}"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        String requestBody = "{\"assign_to_zuid\":\"string\"}";
        HttpRequest request = requestBuilder
            .DELETE(HttpRequest.BodyPublishers.ofString(requestBody))
            .build();

        HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString());

        System.out.println(response.body());
    }
}
info "Making API request to: https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/members/{member_id}";

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

requestData = {"assign_to_zuid": "string"};

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/members/{member_id}"
    type: DELETE
    headers: headers
    parameters: requestData
];

if (response.get("status_code") == 200) {
    info "Request successful";
    responseData = response.get("response");
    info responseData;
} else {
    info "Request failed with status: " + response.get("status_code");
    info response.get("response");
}
{
  "assign_to_zuid": "string"
}
Successful response
{
  "data": {
    "edition_id": "97375109",
    "removed_zuid": "97377569",
    "current_user_id": "96384499",
    "team_id": "1505000000051031"
  },
  "message": "Team member deleted successfully.",
  "request_uri": "/vani/api/v1/editions/97375109/teams/1505000000051031/members",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/members/{member_id}",
  "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/teams/5777000000002017/members/80022267",
  "status": "error"
}
Forbidden - the caller is authenticated but not allowed to perform this operation
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "A1004",
      "team_id": "3009000000002003",
      "message": "Super admin can't be removed from the team"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/teams/3009000000002003/members",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "edition_id": "97375109",
      "current_user_id": "96384499",
      "error_code": "T1012",
      "team_id": "1505000000051031",
      "message": "Member not part of team"
    }
  },
  "request_uri": "/vani/api/v1/editions/97375109/teams/1505000000051031/members",
  "status": "error"
}
Rate limit exceeded - this operation allows 30 requests per minute per user
{
  "error": {
    "details": {
      "error_code": "IAM1055",
      "message": "Rate limit exceeded - this operation allows 30 requests per minute per user"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/members/{member_id}",
  "status": "error"
}
Internal server error - the request was well-formed but could not be completed
{
  "error": {
    "details": {
      "error_code": "U1001",
      "message": "Internal server error - the request was well-formed but could not be completed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/members/{member_id}",
  "status": "error"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
403  Forbidden - the caller is authenticated but not allowed to perform this operation
404  Not found - a resource named in the path does not exist, or is not visible to the caller
429  Rate limit exceeded - this operation allows 30 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed

Team Requests

Raise, list, accept, and reject requests to join a team.
Get the current user's join requests for a team
OperationREAD
Rate limit30 requests / minute · per user
OAuth scopesVani.teams.READ
Path parameters edition_id · team_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
team_idREQUIRED string The unique identifier of the team
Query parameters fields
NameTypeDescription
fieldsOPTIONAL enum Specifies the fields (comma-separated) to retrieve
requested_timerequested_bynamerequest_idstatus
curl -X GET "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/my-requests" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json"
import requests

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

response = requests.get(url, headers=headers)
data = response.json()
print(data)
const https = require('https');
const url = require('url');

const options = {
  ...url.parse('https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/my-requests'),
  method: 'GET',
  headers: {
    'Authorization': 'Zoho-oauthtoken YOUR_ACCESS_TOKEN',
    'Content-Type': 'application/json'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => data += chunk);
  res.on('end', () => {
    const result = JSON.parse(data);
    // Process the response data
  });
});

req.end();
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;

public class ApiClient {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();

        HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
            .uri(URI.create("https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/my-requests"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        HttpRequest request = requestBuilder
            .GET(HttpRequest.BodyPublishers.noBody())
            .build();

        HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString());

        System.out.println(response.body());
    }
}
info "Making API request to: https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/my-requests";

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

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/my-requests"
    type: GET
    headers: headers
];

if (response.get("status_code") == 200) {
    info "Request successful";
    responseData = response.get("response");
    info responseData;
} else {
    info "Request failed with status: " + response.get("status_code");
    info response.get("response");
}
Successful response
{
  "data": {
    "requests": {
      "status": "REQUESTED"
    }
  },
  "message": "Team requests fetched successfully",
  "request_uri": "/vani/api/v1/editions/80473965/teams/1664000000002003/requests/my-requests",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/my-requests",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "error_code": "IAM1100",
      "message": "Unauthorized - missing or invalid access token"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/my-requests",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "80473960",
      "error_code": "R1007",
      "team_id": "3009000000002003",
      "message": "Team join request not found"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/teams/3009000000002003/requests/my-requests",
  "status": "error"
}
Conflict - the requested change conflicts with the current resource state
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "80473960",
      "error_code": "T1013",
      "team_id": "3009000000002003",
      "message": "Member already part of team"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/teams/3009000000002003/requests/my-requests",
  "status": "error"
}
Rate limit exceeded - this operation allows 30 requests per minute per user
{
  "error": {
    "details": {
      "error_code": "IAM1055",
      "message": "Rate limit exceeded - this operation allows 30 requests per minute per user"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/my-requests",
  "status": "error"
}
Internal server error - the request was well-formed but could not be completed
{
  "error": {
    "details": {
      "error_code": "U1001",
      "message": "Internal server error - the request was well-formed but could not be completed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/my-requests",
  "status": "error"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
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 the join requests for a team
OperationREAD
Rate limit60 requests / minute · per user
OAuth scopesVani.teams.READ
Path parameters edition_id · team_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
team_idREQUIRED string The unique identifier of the team
Query parameters fields · from · limit
NameTypeDescription
fieldsOPTIONAL enum Specifies the fields (comma-separated) to retrieve
requested_timerequested_bynamerequest_idstatus
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}/teams/{team_id}/requests" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json"
import requests

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

response = requests.get(url, headers=headers)
data = response.json()
print(data)
const https = require('https');
const url = require('url');

const options = {
  ...url.parse('https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests'),
  method: 'GET',
  headers: {
    'Authorization': 'Zoho-oauthtoken YOUR_ACCESS_TOKEN',
    'Content-Type': 'application/json'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => data += chunk);
  res.on('end', () => {
    const result = JSON.parse(data);
    // Process the response data
  });
});

req.end();
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;

public class ApiClient {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();

        HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
            .uri(URI.create("https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        HttpRequest request = requestBuilder
            .GET(HttpRequest.BodyPublishers.noBody())
            .build();

        HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString());

        System.out.println(response.body());
    }
}
info "Making API request to: https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests";

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

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests"
    type: GET
    headers: headers
];

if (response.get("status_code") == 200) {
    info "Request successful";
    responseData = response.get("response");
    info responseData;
} else {
    info "Request failed with status: " + response.get("status_code");
    info response.get("response");
}
Successful response
{
  "data": {
    "requests": [
      {
        "name": "Emma Carter",
        "status": "REQUESTED"
      }
    ]
  },
  "message": "Team requests fetched successfully",
  "request_uri": "/vani/api/v1/editions/96499735/teams/3009000000002003/requests",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "A1002",
      "team_id": "3009000000002003",
      "message": "Only admin can do this action"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/teams/3009000000002003/requests",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "error_code": "IAM1001",
      "message": "Not found - a resource named in the path does not exist, or is not visible to the caller"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests",
  "status": "error"
}
Rate limit exceeded - this operation allows 60 requests per minute per user
{
  "error": {
    "details": {
      "error_code": "IAM1055",
      "message": "Rate limit exceeded - this operation allows 60 requests per minute per user"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests",
  "status": "error"
}
Internal server error - the request was well-formed but could not be completed
{
  "error": {
    "details": {
      "error_code": "U1001",
      "message": "Internal server error - the request was well-formed but could not be completed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests",
  "status": "error"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
429  Rate limit exceeded - this operation allows 60 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
Approve a pending team join request by request id and assign the requester a team role of TEAM_ADMIN, MEMBER or TEAM_GUEST. Admits them without a separate createTeamMember call.
OperationCREATE
Rate limit30 requests / minute · per user
OAuth scopesVani.teams.CREATE
Path parameters edition_id · team_id · request_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
team_idREQUIRED string The unique identifier of the team
request_idREQUIRED string The unique identifier of the request
Request body application/json
Tick a field to put it in the sample payload, and set what it carries in the Value column. Every field is optional unless it is marked REQUIRED, and those are always sent.
FieldTypeDescriptionValue
role REQUIRED string role.
TEAM_ADMINMEMBERTEAM_GUEST
curl -X POST "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/{request_id}/accept" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "role": "TEAM_ADMIN"
}'
import requests

url = "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/{request_id}/accept"
headers = {
    "Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
    "Content-Type": "application/json"
}

data = {
  "role": "TEAM_ADMIN"
}

response = requests.post(url, headers=headers, json=data)
data = response.json()
print(data)
const https = require('https');
const url = require('url');

const options = {
  ...url.parse('https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/{request_id}/accept'),
  method: 'POST',
  headers: {
    'Authorization': 'Zoho-oauthtoken YOUR_ACCESS_TOKEN',
    'Content-Type': 'application/json'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => data += chunk);
  res.on('end', () => {
    const result = JSON.parse(data);
    // Process the response data
  });
});

req.write(JSON.stringify({
  "role": "TEAM_ADMIN"
}));
req.end();
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;

public class ApiClient {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();

        HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
            .uri(URI.create("https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/{request_id}/accept"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        String requestBody = "{\"role\":\"TEAM_ADMIN\"}";
        HttpRequest request = requestBuilder
            .POST(HttpRequest.BodyPublishers.ofString(requestBody))
            .build();

        HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString());

        System.out.println(response.body());
    }
}
info "Making API request to: https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/{request_id}/accept";

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

requestData = {"role": "TEAM_ADMIN"};

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/{request_id}/accept"
    type: POST
    headers: headers
    parameters: requestData
];

if (response.get("status_code") == 200) {
    info "Request successful";
    responseData = response.get("response");
    info responseData;
} else {
    info "Request failed with status: " + response.get("status_code");
    info response.get("response");
}
{
  "role": "TEAM_ADMIN"
}
Successful response
{
  "data": {
    "role_name": "MEMBER",
    "edition_id": "112255940",
    "updated_at": "Fri, 21 Aug 2026, 20:04:43",
    "team_id": "5777000000002017",
    "request_id": "730000017057001",
    "zuid": "97049596",
    "status": "ACCEPTED"
  },
  "message": "Team join request accepted successfully",
  "request_uri": "/vani/api/v1/editions/112255940/teams/5777000000002017/requests/730000017057001/accept",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "R1003",
      "team_id": "3009000000002003",
      "message": "Invalid request ID"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/teams/3009000000002003/requests/730000009261019/accept",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "A1003",
      "team_id": "3009000000002003",
      "message": "The user doesn't have permission to perform this action"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/teams/3009000000002003/requests/730000009261019/accept",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "error_code": "IAM1001",
      "message": "Not found - a resource named in the path does not exist, or is not visible to the caller"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/{request_id}/accept",
  "status": "error"
}
Conflict - the requested change conflicts with the current resource state
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "L1001",
      "team_id": "3009000000002003",
      "message": "License limit reached"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/teams/3009000000002003/requests/730000009261019/accept",
  "status": "error"
}
Rate limit exceeded - this operation allows 30 requests per minute per user
{
  "error": {
    "details": {
      "error_code": "IAM1055",
      "message": "Rate limit exceeded - this operation allows 30 requests per minute per user"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/{request_id}/accept",
  "status": "error"
}
Internal server error - the request was well-formed but could not be completed
{
  "error": {
    "details": {
      "error_code": "U1001",
      "message": "Internal server error - the request was well-formed but could not be completed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/{request_id}/accept",
  "status": "error"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
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
Decline a pending team join request by request id, leaving the requester outside the team. Use in place of acceptTeamRequest when access should not be granted.
OperationCREATE
Rate limit30 requests / minute · per user
OAuth scopesVani.teams.CREATE
Path parameters edition_id · team_id · request_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
team_idREQUIRED string The unique identifier of the team
request_idREQUIRED string The unique identifier of the request
curl -X POST "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/{request_id}/reject" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json"
import requests

url = "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/{request_id}/reject"
headers = {
    "Authorization": "Zoho-oauthtoken YOUR_ACCESS_TOKEN",
    "Content-Type": "application/json"
}

response = requests.post(url, headers=headers)
data = response.json()
print(data)
const https = require('https');
const url = require('url');

const options = {
  ...url.parse('https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/{request_id}/reject'),
  method: 'POST',
  headers: {
    'Authorization': 'Zoho-oauthtoken YOUR_ACCESS_TOKEN',
    'Content-Type': 'application/json'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => data += chunk);
  res.on('end', () => {
    const result = JSON.parse(data);
    // Process the response data
  });
});

req.end();
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;

public class ApiClient {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();

        HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
            .uri(URI.create("https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/{request_id}/reject"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        HttpRequest request = requestBuilder
            .POST(HttpRequest.BodyPublishers.noBody())
            .build();

        HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString());

        System.out.println(response.body());
    }
}
info "Making API request to: https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/{request_id}/reject";

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

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/{request_id}/reject"
    type: POST
    headers: headers
];

if (response.get("status_code") == 200) {
    info "Request successful";
    responseData = response.get("response");
    info responseData;
} else {
    info "Request failed with status: " + response.get("status_code");
    info response.get("response");
}
Successful response
{
  "data": {
    "edition_id": "112255940",
    "updated_at": "Fri, 21 Aug 2026, 19:49:36",
    "team_id": "5777000000002017",
    "request_id": "730000017057001",
    "zuid": "97049596",
    "status": "REJECTED"
  },
  "message": "Team join request rejected successfully",
  "request_uri": "/vani/api/v1/editions/112255940/teams/5777000000002017/requests/730000017057001/reject",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "R1003",
      "team_id": "3009000000002003",
      "message": "Invalid request ID"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/teams/3009000000002003/requests/73000000926104/reject",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "A1003",
      "team_id": "3009000000002003",
      "message": "The user doesn't have permission to perform this action"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/teams/3009000000002003/requests/730000009261019/reject",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "error_code": "IAM1001",
      "message": "Not found - a resource named in the path does not exist, or is not visible to the caller"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/{request_id}/reject",
  "status": "error"
}
Conflict - the requested change conflicts with the current resource state
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "96384499",
      "error_code": "R1012",
      "team_id": "3009000000002003",
      "message": "Team join request is already rejected"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/teams/3009000000002003/requests/730000009261046/reject",
  "status": "error"
}
Rate limit exceeded - this operation allows 30 requests per minute per user
{
  "error": {
    "details": {
      "error_code": "IAM1055",
      "message": "Rate limit exceeded - this operation allows 30 requests per minute per user"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/{request_id}/reject",
  "status": "error"
}
Internal server error - the request was well-formed but could not be completed
{
  "error": {
    "details": {
      "error_code": "U1001",
      "message": "Internal server error - the request was well-formed but could not be completed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests/{request_id}/reject",
  "status": "error"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
409  Conflict - the requested change conflicts with the current resource state
429  Rate limit exceeded - this operation allows 30 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
Raise a request for the calling user to join a team they cannot yet reach. A team admin then settles it with acceptTeamRequest or rejectTeamRequest.
OperationCREATE
Rate limit30 requests / minute · per user
OAuth scopesVani.teams.CREATE
Path parameters edition_id · team_id
NameTypeDescription
edition_idREQUIRED string The unique identifier of the edition
team_idREQUIRED string The unique identifier of the team
curl -X POST "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests" \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json"
import requests

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

response = requests.post(url, headers=headers)
data = response.json()
print(data)
const https = require('https');
const url = require('url');

const options = {
  ...url.parse('https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests'),
  method: 'POST',
  headers: {
    'Authorization': 'Zoho-oauthtoken YOUR_ACCESS_TOKEN',
    'Content-Type': 'application/json'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => data += chunk);
  res.on('end', () => {
    const result = JSON.parse(data);
    // Process the response data
  });
});

req.end();
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;

public class ApiClient {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();

        HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
            .uri(URI.create("https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests"))
            .header("Authorization", "Zoho-oauthtoken YOUR_ACCESS_TOKEN")
            .timeout(Duration.ofSeconds(30));

            .header("Content-Type", "application/json")
        HttpRequest request = requestBuilder
            .POST(HttpRequest.BodyPublishers.noBody())
            .build();

        HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString());

        System.out.println(response.body());
    }
}
info "Making API request to: https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests";

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

response = invokeurl
[
    url: "https://api.app.vanihq.com/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests"
    type: POST
    headers: headers
];

if (response.get("status_code") == 200) {
    info "Request successful";
    responseData = response.get("response");
    info responseData;
} else {
    info "Request failed with status: " + response.get("status_code");
    info response.get("response");
}
Successful response
{
  "data": {
    "edition_id": "96499735",
    "updated_at": "Wed, 06 Aug 2025, 10:07:21",
    "team_id": "3009000000002003",
    "request_id": "730000009272001",
    "zuid": "80473960",
    "status": "PENDING"
  },
  "message": "Team join request created successfully",
  "request_uri": "/vani/api/v1/editions/96499735/teams/3009000000002003/requests",
  "status": "success"
}
Invalid request - validation failed
{
  "error": {
    "details": {
      "error_code": "IAM1031",
      "message": "Invalid request - validation failed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests",
  "status": "error"
}
Unauthorized - missing or invalid access token
{
  "error": {
    "details": {
      "error_code": "IAM1100",
      "message": "Unauthorized - missing or invalid access token"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests",
  "status": "error"
}
Not found - a resource named in the path does not exist, or is not visible to the caller
{
  "error": {
    "details": {
      "error_code": "IAM1001",
      "message": "Not found - a resource named in the path does not exist, or is not visible to the caller"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests",
  "status": "error"
}
Conflict - the requested change conflicts with the current resource state
{
  "error": {
    "details": {
      "edition_id": "96499735",
      "current_user_id": "80473960",
      "error_code": "T1013",
      "team_id": "3009000000002003",
      "message": "Member already part of team"
    }
  },
  "request_uri": "/vani/api/v1/editions/96499735/teams/3009000000002003/requests",
  "status": "error"
}
Rate limit exceeded - this operation allows 30 requests per minute per user
{
  "error": {
    "details": {
      "error_code": "IAM1055",
      "message": "Rate limit exceeded - this operation allows 30 requests per minute per user"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests",
  "status": "error"
}
Internal server error - the request was well-formed but could not be completed
{
  "error": {
    "details": {
      "error_code": "U1001",
      "message": "Internal server error - the request was well-formed but could not be completed"
    }
  },
  "request_uri": "/vani/api/v1/editions/{edition_id}/teams/{team_id}/requests",
  "status": "error"
}
400  Invalid request - validation failed
401  Unauthorized - missing or invalid access token
404  Not found - a resource named in the path does not exist, or is not visible to the caller
409  Conflict - the requested change conflicts with the current resource state
429  Rate limit exceeded - this operation allows 30 requests per minute per user
500  Internal server error - the request was well-formed but could not be completed
© 2026 Zoho Corporation Pvt. Ltd. Help