curl --request POST \
--url https://app.felan.ai/api/v1/teams/{teamSlug}/invitations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "teammate@example.com"
}
'import requests
url = "https://app.felan.ai/api/v1/teams/{teamSlug}/invitations"
payload = { "email": "teammate@example.com" }
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: 'teammate@example.com'})
};
fetch('https://app.felan.ai/api/v1/teams/{teamSlug}/invitations', 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://app.felan.ai/api/v1/teams/{teamSlug}/invitations",
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' => 'teammate@example.com'
]),
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://app.felan.ai/api/v1/teams/{teamSlug}/invitations"
payload := strings.NewReader("{\n \"email\": \"teammate@example.com\"\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://app.felan.ai/api/v1/teams/{teamSlug}/invitations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"teammate@example.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.felan.ai/api/v1/teams/{teamSlug}/invitations")
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\": \"teammate@example.com\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"email": "jsmith@example.com",
"role": "admin",
"expiresAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"inviteUrl": "<string>",
"emailSent": true,
"emailError": "<string>"
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid subagent fields"
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "<string>"
}
}{
"error": {
"code": "FORBIDDEN",
"message": "invite admins from the Felan web app"
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "<string>"
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "<string>"
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "<string>"
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "<string>"
}
}Invite a team member
Creates a seven-day invitation and sends the same invitation email as the Felan web app. Accepts only a team API key belonging to the team in the path. Only the member role is allowed and it is the default. Requests for admin or owner return 403 with the message ‘invite admins from the Felan web app’; other role values return 400. Existing members and unexpired pending invitations return 409. The team’s seat limit is enforced. If email delivery fails, the invitation remains created and the 201 response includes emailSent: false and emailError when available.
curl --request POST \
--url https://app.felan.ai/api/v1/teams/{teamSlug}/invitations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "teammate@example.com"
}
'import requests
url = "https://app.felan.ai/api/v1/teams/{teamSlug}/invitations"
payload = { "email": "teammate@example.com" }
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: 'teammate@example.com'})
};
fetch('https://app.felan.ai/api/v1/teams/{teamSlug}/invitations', 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://app.felan.ai/api/v1/teams/{teamSlug}/invitations",
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' => 'teammate@example.com'
]),
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://app.felan.ai/api/v1/teams/{teamSlug}/invitations"
payload := strings.NewReader("{\n \"email\": \"teammate@example.com\"\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://app.felan.ai/api/v1/teams/{teamSlug}/invitations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"teammate@example.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.felan.ai/api/v1/teams/{teamSlug}/invitations")
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\": \"teammate@example.com\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"email": "jsmith@example.com",
"role": "admin",
"expiresAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"inviteUrl": "<string>",
"emailSent": true,
"emailError": "<string>"
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid subagent fields"
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "<string>"
}
}{
"error": {
"code": "FORBIDDEN",
"message": "invite admins from the Felan web app"
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "<string>"
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "<string>"
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "<string>"
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "<string>"
}
}Authorizations
Team API key. Current keys retain the bzy_team_ compatibility prefix.
Path Parameters
Felan team slug shown in dashboard URLs and Team Settings
1Body
Response
Invitation created; check emailSent for email delivery status
Show child attributes
Show child attributes
