Create invitation
curl --request POST \
--url https://api.sapt.ai/invitations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "[email protected]",
"projectId": "123e4567-e89b-12d3-a456-426614174000",
"projectRoleId": "123e4567-e89b-12d3-a456-426614174001"
}
'import requests
url = "https://api.sapt.ai/invitations"
payload = {
"email": "[email protected]",
"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: '[email protected]',
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' => '[email protected]',
'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\": \"[email protected]\",\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\": \"[email protected]\",\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\": \"[email protected]\",\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": "[email protected]",
"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": "[email protected]",
"projectId": "123e4567-e89b-12d3-a456-426614174000",
"projectRoleId": "123e4567-e89b-12d3-a456-426614174001"
}
'import requests
url = "https://api.sapt.ai/invitations"
payload = {
"email": "[email protected]",
"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: '[email protected]',
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' => '[email protected]',
'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\": \"[email protected]\",\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\": \"[email protected]\",\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\": \"[email protected]\",\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": "[email protected]",
"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:
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"