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"
}
]
}Invitar de forma masiva a sitios web o grupos
Invita a un usuario a varios sitios web O varios grupos en una solicitud. Indica exactamente uno de website_ids o group_ids: son excluyentes. Cada destino se procesa por separado y puede tener éxito o fallar (p. ej., si ya es miembro). En modo ‘email’ se envía un único correo consolidado. Los grupos requieren una clave global; con una clave limitada a sitios, su creador debe ser administrador de todos los indicados. Las invitaciones directas no crean cuentas con dominios de Cuba, Irán, Corea del Norte, Rusia, Bielorrusia ni regionales de Crimea (incluida Sebastopol), Donetsk o Lugansk. La respuesta sigue siendo HTTP 201 con success: false y error por destino en results. Los dominios generales .ua siguen permitidos. Las cuentas existentes se pueden invitar.
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"
}
]
}Cuerpo
Cuerpo de la solicitud para invitar a un usuario a varios sitios web o grupos. Indica exactamente uno de website_ids o group_ids: son excluyentes. En modo 'email' se envía un único correo de invitación consolidado.
Cómo invitar al usuario. 'direct' lo añade inmediatamente a cada destino sin enviar correo; si no existe la cuenta, la crea automáticamente (con emailVerified=false). 'email' crea invitaciones pendientes y envía un único correo de invitación consolidado.
direct, email "direct"
Dirección de correo del usuario al que invitar
"user@example.com"
Rol que se asignará al usuario invitado en cada destino. Mutuamente excluyente con role_id.
admin, viewer "viewer"
Asigna cualquier rol por ID, del sistema o personalizado de tu organización (consulta GET /api/v1/roles). Excluyente con role. Devuelve 404 si no existe o pertenece a otra organización. Por defecto usa Viewer si no se indica ni role ni role_id. Los ID de roles del sistema son centinelas con formato GUID (p. ej., 00000000-0000-0000-0000-000000000001), no 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"
Array de ID de sitios web a los que se invitará al usuario (1-50). Mutuamente excluyente con group_ids.
1 - 50 elements[
"123e4567-e89b-12d3-a456-426614174000",
"987e6543-e21b-12d3-a456-426614174000"
]
Array de ID de grupos a los que se invitará al usuario (1-50). Mutuamente excluyente con website_ids. Requiere una clave de API global.
1 - 50 elements[
"456e7890-e89b-12d3-a456-426614174000",
"789e0123-e89b-12d3-a456-426614174000"
]
Nombre opcional del usuario invitado. Se utiliza al crear una cuenta en invitaciones 'direct' o al completar los registros de invitación en invitaciones 'email'.
"John"
Apellido opcional del usuario invitado. Se utiliza al crear una cuenta en invitaciones 'direct' o al completar los registros de invitación en invitaciones 'email'.
"Doe"
Respuesta
Invitación masiva procesada. Consulta los resultados individuales de cada destino.
Respuesta de una solicitud de invitación masiva. Cada destino (sitio web o grupo) se procesa de forma independiente.
¿Esta página le ayudó?