curl --request POST \
--url https://api.athenahq.ai/api/v1/invites/bulk \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"invite_method": "direct",
"email": "user@example.com",
"role": "viewer",
"role_id": "789e0123-e89b-12d3-a456-426614174000",
"website_ids": [
"123e4567-e89b-12d3-a456-426614174000",
"987e6543-e21b-12d3-a456-426614174000"
],
"group_ids": [
"456e7890-e89b-12d3-a456-426614174000",
"789e0123-e89b-12d3-a456-426614174000"
],
"first_name": "John",
"last_name": "Doe"
}
'import requests
url = "https://api.athenahq.ai/api/v1/invites/bulk"
payload = {
"invite_method": "direct",
"email": "user@example.com",
"role": "viewer",
"role_id": "789e0123-e89b-12d3-a456-426614174000",
"website_ids": ["123e4567-e89b-12d3-a456-426614174000", "987e6543-e21b-12d3-a456-426614174000"],
"group_ids": ["456e7890-e89b-12d3-a456-426614174000", "789e0123-e89b-12d3-a456-426614174000"],
"first_name": "John",
"last_name": "Doe"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
invite_method: 'direct',
email: 'user@example.com',
role: 'viewer',
role_id: '789e0123-e89b-12d3-a456-426614174000',
website_ids: ['123e4567-e89b-12d3-a456-426614174000', '987e6543-e21b-12d3-a456-426614174000'],
group_ids: ['456e7890-e89b-12d3-a456-426614174000', '789e0123-e89b-12d3-a456-426614174000'],
first_name: 'John',
last_name: 'Doe'
})
};
fetch('https://api.athenahq.ai/api/v1/invites/bulk', 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.athenahq.ai/api/v1/invites/bulk",
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([
'invite_method' => 'direct',
'email' => 'user@example.com',
'role' => 'viewer',
'role_id' => '789e0123-e89b-12d3-a456-426614174000',
'website_ids' => [
'123e4567-e89b-12d3-a456-426614174000',
'987e6543-e21b-12d3-a456-426614174000'
],
'group_ids' => [
'456e7890-e89b-12d3-a456-426614174000',
'789e0123-e89b-12d3-a456-426614174000'
],
'first_name' => 'John',
'last_name' => 'Doe'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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.athenahq.ai/api/v1/invites/bulk"
payload := strings.NewReader("{\n \"invite_method\": \"direct\",\n \"email\": \"user@example.com\",\n \"role\": \"viewer\",\n \"role_id\": \"789e0123-e89b-12d3-a456-426614174000\",\n \"website_ids\": [\n \"123e4567-e89b-12d3-a456-426614174000\",\n \"987e6543-e21b-12d3-a456-426614174000\"\n ],\n \"group_ids\": [\n \"456e7890-e89b-12d3-a456-426614174000\",\n \"789e0123-e89b-12d3-a456-426614174000\"\n ],\n \"first_name\": \"John\",\n \"last_name\": \"Doe\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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.athenahq.ai/api/v1/invites/bulk")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"invite_method\": \"direct\",\n \"email\": \"user@example.com\",\n \"role\": \"viewer\",\n \"role_id\": \"789e0123-e89b-12d3-a456-426614174000\",\n \"website_ids\": [\n \"123e4567-e89b-12d3-a456-426614174000\",\n \"987e6543-e21b-12d3-a456-426614174000\"\n ],\n \"group_ids\": [\n \"456e7890-e89b-12d3-a456-426614174000\",\n \"789e0123-e89b-12d3-a456-426614174000\"\n ],\n \"first_name\": \"John\",\n \"last_name\": \"Doe\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.athenahq.ai/api/v1/invites/bulk")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"invite_method\": \"direct\",\n \"email\": \"user@example.com\",\n \"role\": \"viewer\",\n \"role_id\": \"789e0123-e89b-12d3-a456-426614174000\",\n \"website_ids\": [\n \"123e4567-e89b-12d3-a456-426614174000\",\n \"987e6543-e21b-12d3-a456-426614174000\"\n ],\n \"group_ids\": [\n \"456e7890-e89b-12d3-a456-426614174000\",\n \"789e0123-e89b-12d3-a456-426614174000\"\n ],\n \"first_name\": \"John\",\n \"last_name\": \"Doe\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"results": [
{
"website_id": "123e4567-e89b-12d3-a456-426614174000",
"success": true,
"message": "User added to website",
"user_id": "abc12345-e89b-12d3-a456-426614174000"
},
{
"website_id": "987e6543-e21b-12d3-a456-426614174000",
"success": false,
"error": "User is already a member of this website"
}
]
}Inviter en masse dans des sites web ou groupes
Invite un utilisateur dans plusieurs sites web OU plusieurs groupes en une requête. Fournissez exactement l’un de website_ids ou group_ids — ils s’excluent mutuellement. Chaque cible est traitée indépendamment ; certaines peuvent réussir et d’autres échouer (ex. : utilisateur déjà membre). En mode ‘email’, un seul e-mail d’invitation récapitulatif est envoyé. Les invitations de groupe nécessitent une clé API globale. Les invitations de site avec une clé limitée à certains sites exigent aussi que le créateur de la clé soit administrateur de chaque site indiqué. Les invitations directes ne peuvent pas créer de comptes avec des domaines e-mail de Cuba, d’Iran, de Corée du Nord, de Russie, de Biélorussie ou des domaines régionaux de Crimée (y compris Sébastopol), de Donetsk ou de Louhansk. La réponse reste HTTP 201 avec success: false et une error pour chaque cible dans results. Les domaines .ua généraux restent autorisés. Les comptes existants peuvent toujours être invités.
curl --request POST \
--url https://api.athenahq.ai/api/v1/invites/bulk \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"invite_method": "direct",
"email": "user@example.com",
"role": "viewer",
"role_id": "789e0123-e89b-12d3-a456-426614174000",
"website_ids": [
"123e4567-e89b-12d3-a456-426614174000",
"987e6543-e21b-12d3-a456-426614174000"
],
"group_ids": [
"456e7890-e89b-12d3-a456-426614174000",
"789e0123-e89b-12d3-a456-426614174000"
],
"first_name": "John",
"last_name": "Doe"
}
'import requests
url = "https://api.athenahq.ai/api/v1/invites/bulk"
payload = {
"invite_method": "direct",
"email": "user@example.com",
"role": "viewer",
"role_id": "789e0123-e89b-12d3-a456-426614174000",
"website_ids": ["123e4567-e89b-12d3-a456-426614174000", "987e6543-e21b-12d3-a456-426614174000"],
"group_ids": ["456e7890-e89b-12d3-a456-426614174000", "789e0123-e89b-12d3-a456-426614174000"],
"first_name": "John",
"last_name": "Doe"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
invite_method: 'direct',
email: 'user@example.com',
role: 'viewer',
role_id: '789e0123-e89b-12d3-a456-426614174000',
website_ids: ['123e4567-e89b-12d3-a456-426614174000', '987e6543-e21b-12d3-a456-426614174000'],
group_ids: ['456e7890-e89b-12d3-a456-426614174000', '789e0123-e89b-12d3-a456-426614174000'],
first_name: 'John',
last_name: 'Doe'
})
};
fetch('https://api.athenahq.ai/api/v1/invites/bulk', 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.athenahq.ai/api/v1/invites/bulk",
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([
'invite_method' => 'direct',
'email' => 'user@example.com',
'role' => 'viewer',
'role_id' => '789e0123-e89b-12d3-a456-426614174000',
'website_ids' => [
'123e4567-e89b-12d3-a456-426614174000',
'987e6543-e21b-12d3-a456-426614174000'
],
'group_ids' => [
'456e7890-e89b-12d3-a456-426614174000',
'789e0123-e89b-12d3-a456-426614174000'
],
'first_name' => 'John',
'last_name' => 'Doe'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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.athenahq.ai/api/v1/invites/bulk"
payload := strings.NewReader("{\n \"invite_method\": \"direct\",\n \"email\": \"user@example.com\",\n \"role\": \"viewer\",\n \"role_id\": \"789e0123-e89b-12d3-a456-426614174000\",\n \"website_ids\": [\n \"123e4567-e89b-12d3-a456-426614174000\",\n \"987e6543-e21b-12d3-a456-426614174000\"\n ],\n \"group_ids\": [\n \"456e7890-e89b-12d3-a456-426614174000\",\n \"789e0123-e89b-12d3-a456-426614174000\"\n ],\n \"first_name\": \"John\",\n \"last_name\": \"Doe\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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.athenahq.ai/api/v1/invites/bulk")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"invite_method\": \"direct\",\n \"email\": \"user@example.com\",\n \"role\": \"viewer\",\n \"role_id\": \"789e0123-e89b-12d3-a456-426614174000\",\n \"website_ids\": [\n \"123e4567-e89b-12d3-a456-426614174000\",\n \"987e6543-e21b-12d3-a456-426614174000\"\n ],\n \"group_ids\": [\n \"456e7890-e89b-12d3-a456-426614174000\",\n \"789e0123-e89b-12d3-a456-426614174000\"\n ],\n \"first_name\": \"John\",\n \"last_name\": \"Doe\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.athenahq.ai/api/v1/invites/bulk")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"invite_method\": \"direct\",\n \"email\": \"user@example.com\",\n \"role\": \"viewer\",\n \"role_id\": \"789e0123-e89b-12d3-a456-426614174000\",\n \"website_ids\": [\n \"123e4567-e89b-12d3-a456-426614174000\",\n \"987e6543-e21b-12d3-a456-426614174000\"\n ],\n \"group_ids\": [\n \"456e7890-e89b-12d3-a456-426614174000\",\n \"789e0123-e89b-12d3-a456-426614174000\"\n ],\n \"first_name\": \"John\",\n \"last_name\": \"Doe\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"results": [
{
"website_id": "123e4567-e89b-12d3-a456-426614174000",
"success": true,
"message": "User added to website",
"user_id": "abc12345-e89b-12d3-a456-426614174000"
},
{
"website_id": "987e6543-e21b-12d3-a456-426614174000",
"success": false,
"error": "User is already a member of this website"
}
]
}Corps
Corps d’invitation à plusieurs sites ou groupes. Exactement l’un de website_ids et group_ids, mutuellement exclusifs. Un seul e-mail consolidé en mode 'email'.
Mode d’invitation de l’utilisateur. 'direct' ajoute immédiatement l’utilisateur à chaque cible sans envoyer d’e-mail — si aucun compte n’existe pour cette adresse, un compte est créé automatiquement (avec emailVerified=false). 'email' crée des enregistrements d’invitation en attente et envoie un seul e-mail d’invitation récapitulatif.
direct, email "direct"
E-mail de l’utilisateur à inviter
"user@example.com"
Rôle de l’invité sur chaque cible. Exclusif avec role_id.
admin, viewer "viewer"
Attribuez un rôle par ID, système ou personnalisé (voir GET /api/v1/roles). Exclusif avec role. 404 si absent ou hors organisation. Viewer par défaut si ni role ni role_id fournis. Les ID système sont des sentinelles de forme GUID (00000000-0000-0000-0000-000000000001, par exemple), pas des UUID RFC 4122.
^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"789e0123-e89b-12d3-a456-426614174000"
Tableau d’ID de sites auxquels inviter (1–50). Exclusif avec group_ids.
1 - 50 elements[
"123e4567-e89b-12d3-a456-426614174000",
"987e6543-e21b-12d3-a456-426614174000"
]
Tableau d’ID de groupes auxquels inviter (1–50). Exclusif avec website_ids. Clé globale requise.
1 - 50 elements[
"456e7890-e89b-12d3-a456-426614174000",
"789e0123-e89b-12d3-a456-426614174000"
]
Prénom facultatif de l’invité, utilisé pour créer son compte avec 'direct' ou remplir l’invitation avec 'email'.
"John"
Nom de famille facultatif de l’invité, utilisé pour créer son compte avec 'direct' ou remplir l’invitation avec 'email'.
"Doe"
Réponse
Invitation groupée traitée. Consultez les résultats individuels de chaque cible.
Réponse à une invitation groupée. Chaque cible (site ou groupe) est traitée indépendamment.
Cette page vous a-t-elle été utile ?