Create invitation
curl --request POST \
--url https://api.sapt.ai/invitations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "user@example.com",
"projectId": "123e4567-e89b-12d3-a456-426614174000",
"projectRoleId": "123e4567-e89b-12d3-a456-426614174001"
}
'import requests
url = "https://api.sapt.ai/invitations"
payload = {
"email": "user@example.com",
"projectId": "123e4567-e89b-12d3-a456-426614174000",
"projectRoleId": "123e4567-e89b-12d3-a456-426614174001"
}
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: 'user@example.com',
projectId: '123e4567-e89b-12d3-a456-426614174000',
projectRoleId: '123e4567-e89b-12d3-a456-426614174001'
})
};
fetch('https://api.sapt.ai/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://api.sapt.ai/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' => 'user@example.com',
'projectId' => '123e4567-e89b-12d3-a456-426614174000',
'projectRoleId' => '123e4567-e89b-12d3-a456-426614174001'
]),
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.sapt.ai/invitations"
payload := strings.NewReader("{\n \"email\": \"user@example.com\",\n \"projectId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"projectRoleId\": \"123e4567-e89b-12d3-a456-426614174001\"\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.sapt.ai/invitations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"user@example.com\",\n \"projectId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"projectRoleId\": \"123e4567-e89b-12d3-a456-426614174001\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sapt.ai/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\": \"user@example.com\",\n \"projectId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"projectRoleId\": \"123e4567-e89b-12d3-a456-426614174001\"\n}"
response = http.request(request)
puts response.read_body{
"invitationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"email": "jsmith@example.com",
"action": "invited",
"reason": "<string>"
}{
"message": "<string>",
"code": "<string>"
}{
"message": "<string>",
"code": "<string>"
}{
"message": "<string>",
"code": "<string>"
}{
"message": "<string>",
"code": "<string>"
}Invitations
Create invitation
Invite a user to the platform or to a specific project. Platform admins can invite to any role and any project. Project admins can invite to their projects. The role the inviter can assign depends on their own role.
POST
/
invitations
Create invitation
curl --request POST \
--url https://api.sapt.ai/invitations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "user@example.com",
"projectId": "123e4567-e89b-12d3-a456-426614174000",
"projectRoleId": "123e4567-e89b-12d3-a456-426614174001"
}
'import requests
url = "https://api.sapt.ai/invitations"
payload = {
"email": "user@example.com",
"projectId": "123e4567-e89b-12d3-a456-426614174000",
"projectRoleId": "123e4567-e89b-12d3-a456-426614174001"
}
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: 'user@example.com',
projectId: '123e4567-e89b-12d3-a456-426614174000',
projectRoleId: '123e4567-e89b-12d3-a456-426614174001'
})
};
fetch('https://api.sapt.ai/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://api.sapt.ai/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' => 'user@example.com',
'projectId' => '123e4567-e89b-12d3-a456-426614174000',
'projectRoleId' => '123e4567-e89b-12d3-a456-426614174001'
]),
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.sapt.ai/invitations"
payload := strings.NewReader("{\n \"email\": \"user@example.com\",\n \"projectId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"projectRoleId\": \"123e4567-e89b-12d3-a456-426614174001\"\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.sapt.ai/invitations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"user@example.com\",\n \"projectId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"projectRoleId\": \"123e4567-e89b-12d3-a456-426614174001\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sapt.ai/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\": \"user@example.com\",\n \"projectId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"projectRoleId\": \"123e4567-e89b-12d3-a456-426614174001\"\n}"
response = http.request(request)
puts response.read_body{
"invitationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"email": "jsmith@example.com",
"action": "invited",
"reason": "<string>"
}{
"message": "<string>",
"code": "<string>"
}{
"message": "<string>",
"code": "<string>"
}{
"message": "<string>",
"code": "<string>"
}{
"message": "<string>",
"code": "<string>"
}Authorizations
JWT token obtained from /api/auth/token endpoint. Token is verified using JWKS and must include a valid user identifier.
Body
application/json
Example:
"user@example.com"
Available options:
admin, member, contractor, sales_rep Optional: Project to invite the user to
Example:
"123e4567-e89b-12d3-a456-426614174000"
ID of the project role to assign
Example:
"123e4567-e89b-12d3-a456-426614174001"