curl --request POST \
--url https://api.duvo.ai/v2/teams/{teamId}/invites \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "jsmith@example.com",
"role": "<string>",
"processId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"process_role_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://api.duvo.ai/v2/teams/{teamId}/invites"
payload = {
"email": "jsmith@example.com",
"role": "<string>",
"processId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"process_role_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
email: 'jsmith@example.com',
role: '<string>',
processId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
process_role_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://api.duvo.ai/v2/teams/{teamId}/invites', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.duvo.ai/v2/teams/{teamId}/invites",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'email' => 'jsmith@example.com',
'role' => '<string>',
'processId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'process_role_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.duvo.ai/v2/teams/{teamId}/invites"
payload := strings.NewReader("{\n \"email\": \"jsmith@example.com\",\n \"role\": \"<string>\",\n \"processId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"process_role_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.duvo.ai/v2/teams/{teamId}/invites")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"jsmith@example.com\",\n \"role\": \"<string>\",\n \"processId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"process_role_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.duvo.ai/v2/teams/{teamId}/invites")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"jsmith@example.com\",\n \"role\": \"<string>\",\n \"processId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"process_role_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"team_id": "<string>",
"email": "jsmith@example.com",
"invited_by": "<string>",
"role": "<string>",
"status": "<string>",
"name": "<string>",
"created_at": "<string>",
"team": {
"id": "<string>",
"name": "<string>"
},
"invitedBy": {
"id": "<string>",
"name": "<string>",
"email": "jsmith@example.com"
},
"process_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"process": {
"id": "<string>",
"name": "<string>"
}
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Create Team Invite
Invite one person to a team. Pass processId to invite them to a specific Clarity process instead of the whole team (that requires the team:clarity-member role). Creating the invitation does NOT email anyone — call sendTeamInviteEmail with the returned id to deliver it, or use bulkCreateTeamInvites, which creates and emails in one step.
curl --request POST \
--url https://api.duvo.ai/v2/teams/{teamId}/invites \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "jsmith@example.com",
"role": "<string>",
"processId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"process_role_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://api.duvo.ai/v2/teams/{teamId}/invites"
payload = {
"email": "jsmith@example.com",
"role": "<string>",
"processId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"process_role_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
email: 'jsmith@example.com',
role: '<string>',
processId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
process_role_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://api.duvo.ai/v2/teams/{teamId}/invites', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.duvo.ai/v2/teams/{teamId}/invites",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'email' => 'jsmith@example.com',
'role' => '<string>',
'processId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'process_role_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.duvo.ai/v2/teams/{teamId}/invites"
payload := strings.NewReader("{\n \"email\": \"jsmith@example.com\",\n \"role\": \"<string>\",\n \"processId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"process_role_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.duvo.ai/v2/teams/{teamId}/invites")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"jsmith@example.com\",\n \"role\": \"<string>\",\n \"processId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"process_role_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.duvo.ai/v2/teams/{teamId}/invites")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"jsmith@example.com\",\n \"role\": \"<string>\",\n \"processId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"process_role_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"team_id": "<string>",
"email": "jsmith@example.com",
"invited_by": "<string>",
"role": "<string>",
"status": "<string>",
"name": "<string>",
"created_at": "<string>",
"team": {
"id": "<string>",
"name": "<string>"
},
"invitedBy": {
"id": "<string>",
"name": "<string>",
"email": "jsmith@example.com"
},
"process_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"process": {
"id": "<string>",
"name": "<string>"
}
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Authorizations
API key authentication. Get your API key from the Duvo dashboard.
Path Parameters
Body
Email address of the person to invite.
Team role to grant. One of: team:owner, team:superadmin, team:admin (deprecated), team:manager, team:builder, team:member, team:clarity-member. You cannot grant a role above your own. Process invitations must use team:clarity-member.
Invite the person to this Clarity process rather than the whole team. Requires the team:clarity-member role.
Configured Process role to assign alongside the Clarity invitation. Requires processId; the role must belong to that Process.
Response
Default Response
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?