curl --request POST \
--url https://console.advinservers.com/api/v1/client/teams/{team}/members \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "isaac.kleiner@blackmesa.example.com",
"role_id": "18f11680-0831-4d41-9d71-824c99009cbf"
}
'import requests
url = "https://console.advinservers.com/api/v1/client/teams/{team}/members"
payload = {
"email": "isaac.kleiner@blackmesa.example.com",
"role_id": "18f11680-0831-4d41-9d71-824c99009cbf"
}
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: 'isaac.kleiner@blackmesa.example.com',
role_id: '18f11680-0831-4d41-9d71-824c99009cbf'
})
};
fetch('https://console.advinservers.com/api/v1/client/teams/{team}/members', 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://console.advinservers.com/api/v1/client/teams/{team}/members",
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' => 'isaac.kleiner@blackmesa.example.com',
'role_id' => '18f11680-0831-4d41-9d71-824c99009cbf'
]),
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://console.advinservers.com/api/v1/client/teams/{team}/members"
payload := strings.NewReader("{\n \"email\": \"isaac.kleiner@blackmesa.example.com\",\n \"role_id\": \"18f11680-0831-4d41-9d71-824c99009cbf\"\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://console.advinservers.com/api/v1/client/teams/{team}/members")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"isaac.kleiner@blackmesa.example.com\",\n \"role_id\": \"18f11680-0831-4d41-9d71-824c99009cbf\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://console.advinservers.com/api/v1/client/teams/{team}/members")
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\": \"isaac.kleiner@blackmesa.example.com\",\n \"role_id\": \"18f11680-0831-4d41-9d71-824c99009cbf\"\n}"
response = http.request(request)
puts response.read_body{
"id": "72623989-f7f9-4390-87ec-80f42b04b793",
"email": "isaac.kleiner@blackmesa.example.com",
"team": {
"id": "fbb31f5f-bd6f-4019-a3ed-1062a28f56f7",
"name": "Anomalous Materials"
},
"role": {
"id": "18f11680-0831-4d41-9d71-824c99009cbf",
"name": "Research Associate"
},
"invited_by": {
"name": "Gordon Freeman",
"email": "gordon.freeman@blackmesa.example.com"
},
"expires_at": "2026-09-16T10:05:37+00:00",
"has_expired": false,
"created_at": "2026-09-13T10:05:37+00:00"
}{
"message": "Unauthenticated."
}{
"message": "This API key is not allowed to do that in this team. It needs the \"snapshot.delete\" permission."
}{
"message": "Not found."
}{
"message": "The name field is required.",
"errors": {}
}{
"message": "Too Many Attempts."
}Invite a team member
Overview
Emails a team invitation and returns it. Send email and a role_id from this team. The recipient must have an account and accept the invitation to join. Invalid recipients receive the same error to protect account privacy. Repeating the request replaces and resends an existing invitation. Invitations expire after 3 days. You cannot offer more permissions than you hold. Limited to 20 requests per minute.
Permissions
Requires the account permission teams.manage (Manage teams).
curl --request POST \
--url https://console.advinservers.com/api/v1/client/teams/{team}/members \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "isaac.kleiner@blackmesa.example.com",
"role_id": "18f11680-0831-4d41-9d71-824c99009cbf"
}
'import requests
url = "https://console.advinservers.com/api/v1/client/teams/{team}/members"
payload = {
"email": "isaac.kleiner@blackmesa.example.com",
"role_id": "18f11680-0831-4d41-9d71-824c99009cbf"
}
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: 'isaac.kleiner@blackmesa.example.com',
role_id: '18f11680-0831-4d41-9d71-824c99009cbf'
})
};
fetch('https://console.advinservers.com/api/v1/client/teams/{team}/members', 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://console.advinservers.com/api/v1/client/teams/{team}/members",
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' => 'isaac.kleiner@blackmesa.example.com',
'role_id' => '18f11680-0831-4d41-9d71-824c99009cbf'
]),
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://console.advinservers.com/api/v1/client/teams/{team}/members"
payload := strings.NewReader("{\n \"email\": \"isaac.kleiner@blackmesa.example.com\",\n \"role_id\": \"18f11680-0831-4d41-9d71-824c99009cbf\"\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://console.advinservers.com/api/v1/client/teams/{team}/members")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"isaac.kleiner@blackmesa.example.com\",\n \"role_id\": \"18f11680-0831-4d41-9d71-824c99009cbf\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://console.advinservers.com/api/v1/client/teams/{team}/members")
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\": \"isaac.kleiner@blackmesa.example.com\",\n \"role_id\": \"18f11680-0831-4d41-9d71-824c99009cbf\"\n}"
response = http.request(request)
puts response.read_body{
"id": "72623989-f7f9-4390-87ec-80f42b04b793",
"email": "isaac.kleiner@blackmesa.example.com",
"team": {
"id": "fbb31f5f-bd6f-4019-a3ed-1062a28f56f7",
"name": "Anomalous Materials"
},
"role": {
"id": "18f11680-0831-4d41-9d71-824c99009cbf",
"name": "Research Associate"
},
"invited_by": {
"name": "Gordon Freeman",
"email": "gordon.freeman@blackmesa.example.com"
},
"expires_at": "2026-09-16T10:05:37+00:00",
"has_expired": false,
"created_at": "2026-09-13T10:05:37+00:00"
}{
"message": "Unauthenticated."
}{
"message": "This API key is not allowed to do that in this team. It needs the \"snapshot.delete\" permission."
}{
"message": "Not found."
}{
"message": "The name field is required.",
"errors": {}
}{
"message": "Too Many Attempts."
}Authorizations
Your API key, sent as a bearer token. Create one in the control panel under API Keys, give it only the permissions the integration needs, and copy it when it is created. It cannot be shown again. Each key is restricted to one owned team. The key determines the team for every request.
Path Parameters
The team UUID
"fbb31f5f-bd6f-4019-a3ed-1062a28f56f7"
Body
Send a JSON object containing the fields below. Required fields are marked in the schema.
Response
The record, as a JSON object. There is no envelope.
An offer of a place in a team, waiting for the invited account to answer.
The id ID.
"72623989-f7f9-4390-87ec-80f42b04b793"
The address as it was invited. Kept rather than read back off the account so the row still reads correctly if the account has changed its email since.
"isaac.kleiner@blackmesa.example.com"
The destination team UUID.
Show child attributes
Show child attributes
{
"id": "fbb31f5f-bd6f-4019-a3ed-1062a28f56f7",
"name": "Anomalous Materials"
}
The value of role.
Show child attributes
Show child attributes
{
"id": "18f11680-0831-4d41-9d71-824c99009cbf",
"name": "Research Associate"
}
The value of invited_by.
Show child attributes
Show child attributes
{
"name": "Gordon Freeman",
"email": "gordon.freeman@blackmesa.example.com"
}
When this action or checkout expires, in UTC.
"2026-09-16T10:05:37+00:00"
Whether the resource has expired.
false
The date and time for created at, in UTC.
"2026-09-13T10:05:37+00:00"