Collaboration
#Get an invitation by token
/v1/invitations/{token}Retrieve a single invitation using its token.
Path parameters
tokenstringInvitation token
Response codes
200OK
401Unauthorized
404Not Found
curl "https://api.rendley.com/v1/invitations/TOKEN" \
-H "Authorization: Bearer YOUR_API_KEY"const res = await fetch("https://api.rendley.com/v1/invitations/TOKEN", {
headers: { Authorization: "Bearer YOUR_API_KEY" },
});
const { data } = await res.json();import requests
res = requests.get(
"https://api.rendley.com/v1/invitations/TOKEN",
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
data = res.json()["data"]$ch = curl_init("https://api.rendley.com/v1/invitations/TOKEN");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer YOUR_API_KEY"]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true)["data"];package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://api.rendley.com/v1/invitations/TOKEN", nil)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
b, _ := io.ReadAll(res.Body)
fmt.Println(string(b))
}require "net/http"
require "json"
uri = URI("https://api.rendley.com/v1/invitations/TOKEN")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer YOUR_API_KEY"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)["data"]Response
{
"data": {
"created_at": "string",
"email": "string",
"expires_at": "string",
"id": "string",
"invited_by": "string",
"inviter_name": "string",
"project_id": "string",
"project_name": "string",
"role": "string"
}
}#Accept an invitation
/v1/invitations/{token}/acceptAccept a collaboration invitation using its token.
Path parameters
tokenstringInvitation token
Response codes
200OK
401Unauthorized
404Not Found
curl -X POST "https://api.rendley.com/v1/invitations/TOKEN/accept" \
-H "Authorization: Bearer YOUR_API_KEY"const res = await fetch("https://api.rendley.com/v1/invitations/TOKEN/accept", {
method: "POST",
headers: { Authorization: "Bearer YOUR_API_KEY" },
});
const { data } = await res.json();import requests
res = requests.post(
"https://api.rendley.com/v1/invitations/TOKEN/accept",
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
data = res.json()["data"]$ch = curl_init("https://api.rendley.com/v1/invitations/TOKEN/accept");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer YOUR_API_KEY"]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true)["data"];package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("POST", "https://api.rendley.com/v1/invitations/TOKEN/accept", nil)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
b, _ := io.ReadAll(res.Body)
fmt.Println(string(b))
}require "net/http"
require "json"
uri = URI("https://api.rendley.com/v1/invitations/TOKEN/accept")
req = Net::HTTP::Post.new(uri)
req["Authorization"] = "Bearer YOUR_API_KEY"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)["data"]Response
{
"data": {
"created_at": "string",
"id": "string",
"role": "string",
"user_email": "string",
"user_id": "string",
"user_image": "string",
"user_name": "string"
}
}#Decline an invitation
/v1/invitations/{token}/declineDecline a collaboration invitation using its token.
Path parameters
tokenstringInvitation token
Response codes
200OK
401Unauthorized
404Not Found
curl -X POST "https://api.rendley.com/v1/invitations/TOKEN/decline" \
-H "Authorization: Bearer YOUR_API_KEY"const res = await fetch("https://api.rendley.com/v1/invitations/TOKEN/decline", {
method: "POST",
headers: { Authorization: "Bearer YOUR_API_KEY" },
});
const { data } = await res.json();import requests
res = requests.post(
"https://api.rendley.com/v1/invitations/TOKEN/decline",
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
data = res.json()["data"]$ch = curl_init("https://api.rendley.com/v1/invitations/TOKEN/decline");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer YOUR_API_KEY"]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true)["data"];package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("POST", "https://api.rendley.com/v1/invitations/TOKEN/decline", nil)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
b, _ := io.ReadAll(res.Body)
fmt.Println(string(b))
}require "net/http"
require "json"
uri = URI("https://api.rendley.com/v1/invitations/TOKEN/decline")
req = Net::HTTP::Post.new(uri)
req["Authorization"] = "Bearer YOUR_API_KEY"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)["data"]#List collaborators
/v1/projects/{projectId}/collaboratorsRetrieve all collaborators for a project.
Path parameters
projectIdstringProject ID
Response codes
200OK
401Unauthorized
403Forbidden
curl "https://api.rendley.com/v1/projects/PROJECT_ID/collaborators" \
-H "Authorization: Bearer YOUR_API_KEY"const res = await fetch("https://api.rendley.com/v1/projects/PROJECT_ID/collaborators", {
headers: { Authorization: "Bearer YOUR_API_KEY" },
});
const { data } = await res.json();import requests
res = requests.get(
"https://api.rendley.com/v1/projects/PROJECT_ID/collaborators",
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
data = res.json()["data"]$ch = curl_init("https://api.rendley.com/v1/projects/PROJECT_ID/collaborators");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer YOUR_API_KEY"]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true)["data"];package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://api.rendley.com/v1/projects/PROJECT_ID/collaborators", nil)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
b, _ := io.ReadAll(res.Body)
fmt.Println(string(b))
}require "net/http"
require "json"
uri = URI("https://api.rendley.com/v1/projects/PROJECT_ID/collaborators")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer YOUR_API_KEY"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)["data"]Response
{
"data": [
{
"created_at": "string",
"id": "string",
"role": "string",
"user_email": "string",
"user_id": "string",
"user_image": "string",
"user_name": "string"
}
]
}#Update a collaborator's role
/v1/projects/{projectId}/collaborators/{userId}Update the role of a collaborator on a project.
Path parameters
projectIdstringProject ID
userIdstringUser ID
Request body
role"viewer" | "editor"RequiredResponse codes
200OK
400Bad Request
401Unauthorized
403Forbidden
curl -X PATCH "https://api.rendley.com/v1/projects/PROJECT_ID/collaborators/USER_ID" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"role": "viewer"
}'const res = await fetch("https://api.rendley.com/v1/projects/PROJECT_ID/collaborators/USER_ID", {
method: "PATCH",
headers: { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
"role": "viewer"
}),
});
const { data } = await res.json();import requests
res = requests.patch(
"https://api.rendley.com/v1/projects/PROJECT_ID/collaborators/USER_ID",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"role": "viewer"
},
)
data = res.json()["data"]$ch = curl_init("https://api.rendley.com/v1/projects/PROJECT_ID/collaborators/USER_ID");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PATCH");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer YOUR_API_KEY", "Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(["role" => "viewer"]));
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true)["data"];package main
import (
"fmt"
"io"
"net/http"
"bytes"
)
func main() {
body := bytes.NewBufferString(`{
"role": "viewer"
}`)
req, _ := http.NewRequest("PATCH", "https://api.rendley.com/v1/projects/PROJECT_ID/collaborators/USER_ID", body)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
b, _ := io.ReadAll(res.Body)
fmt.Println(string(b))
}require "net/http"
require "json"
uri = URI("https://api.rendley.com/v1/projects/PROJECT_ID/collaborators/USER_ID")
req = Net::HTTP::Patch.new(uri)
req["Authorization"] = "Bearer YOUR_API_KEY"
req["Content-Type"] = "application/json"
req.body = { role: "viewer" }.to_json
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)["data"]#Remove a collaborator
/v1/projects/{projectId}/collaborators/{userId}Remove a collaborator from a project.
Path parameters
projectIdstringProject ID
userIdstringUser ID
Response codes
200OK
401Unauthorized
403Forbidden
curl -X DELETE "https://api.rendley.com/v1/projects/PROJECT_ID/collaborators/USER_ID" \
-H "Authorization: Bearer YOUR_API_KEY"const res = await fetch("https://api.rendley.com/v1/projects/PROJECT_ID/collaborators/USER_ID", {
method: "DELETE",
headers: { Authorization: "Bearer YOUR_API_KEY" },
});
const { data } = await res.json();import requests
res = requests.delete(
"https://api.rendley.com/v1/projects/PROJECT_ID/collaborators/USER_ID",
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
data = res.json()["data"]$ch = curl_init("https://api.rendley.com/v1/projects/PROJECT_ID/collaborators/USER_ID");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer YOUR_API_KEY"]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true)["data"];package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("DELETE", "https://api.rendley.com/v1/projects/PROJECT_ID/collaborators/USER_ID", nil)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
b, _ := io.ReadAll(res.Body)
fmt.Println(string(b))
}require "net/http"
require "json"
uri = URI("https://api.rendley.com/v1/projects/PROJECT_ID/collaborators/USER_ID")
req = Net::HTTP::Delete.new(uri)
req["Authorization"] = "Bearer YOUR_API_KEY"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)["data"]#List invitations
/v1/projects/{projectId}/invitationsRetrieve all invitations for a project.
Path parameters
projectIdstringProject ID
Response codes
200OK
401Unauthorized
403Forbidden
curl "https://api.rendley.com/v1/projects/PROJECT_ID/invitations" \
-H "Authorization: Bearer YOUR_API_KEY"const res = await fetch("https://api.rendley.com/v1/projects/PROJECT_ID/invitations", {
headers: { Authorization: "Bearer YOUR_API_KEY" },
});
const { data } = await res.json();import requests
res = requests.get(
"https://api.rendley.com/v1/projects/PROJECT_ID/invitations",
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
data = res.json()["data"]$ch = curl_init("https://api.rendley.com/v1/projects/PROJECT_ID/invitations");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer YOUR_API_KEY"]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true)["data"];package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://api.rendley.com/v1/projects/PROJECT_ID/invitations", nil)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
b, _ := io.ReadAll(res.Body)
fmt.Println(string(b))
}require "net/http"
require "json"
uri = URI("https://api.rendley.com/v1/projects/PROJECT_ID/invitations")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer YOUR_API_KEY"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)["data"]Response
{
"data": [
{
"created_at": "string",
"email": "string",
"expires_at": "string",
"id": "string",
"invited_by": "string",
"inviter_name": "string",
"project_id": "string",
"project_name": "string",
"role": "string"
}
]
}#Create an invitation
/v1/projects/{projectId}/invitationsInvite a user to collaborate on a project.
Path parameters
projectIdstringProject ID
Request body
emailstringRequiredrole"viewer" | "editor"RequiredResponse codes
200OK
400Bad Request
401Unauthorized
403Forbidden
curl -X POST "https://api.rendley.com/v1/projects/PROJECT_ID/invitations" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"email": "<email>",
"role": "viewer"
}'const res = await fetch("https://api.rendley.com/v1/projects/PROJECT_ID/invitations", {
method: "POST",
headers: { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
"email": "<email>",
"role": "viewer"
}),
});
const { data } = await res.json();import requests
res = requests.post(
"https://api.rendley.com/v1/projects/PROJECT_ID/invitations",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"email": "<email>",
"role": "viewer"
},
)
data = res.json()["data"]$ch = curl_init("https://api.rendley.com/v1/projects/PROJECT_ID/invitations");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer YOUR_API_KEY", "Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(["email" => "<email>", "role" => "viewer"]));
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true)["data"];package main
import (
"fmt"
"io"
"net/http"
"bytes"
)
func main() {
body := bytes.NewBufferString(`{
"email": "<email>",
"role": "viewer"
}`)
req, _ := http.NewRequest("POST", "https://api.rendley.com/v1/projects/PROJECT_ID/invitations", body)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
b, _ := io.ReadAll(res.Body)
fmt.Println(string(b))
}require "net/http"
require "json"
uri = URI("https://api.rendley.com/v1/projects/PROJECT_ID/invitations")
req = Net::HTTP::Post.new(uri)
req["Authorization"] = "Bearer YOUR_API_KEY"
req["Content-Type"] = "application/json"
req.body = { email: "<email>", role: "viewer" }.to_json
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)["data"]Response
{
"data": {
"created_at": "string",
"email": "string",
"expires_at": "string",
"id": "string",
"invited_by": "string",
"inviter_name": "string",
"project_id": "string",
"project_name": "string",
"role": "string"
}
}#Delete an invitation
/v1/projects/{projectId}/invitations/{invitationId}Delete a pending invitation from a project.
Path parameters
projectIdstringProject ID
invitationIdstringInvitation ID
Response codes
200OK
401Unauthorized
403Forbidden
curl -X DELETE "https://api.rendley.com/v1/projects/PROJECT_ID/invitations/INVITATION_ID" \
-H "Authorization: Bearer YOUR_API_KEY"const res = await fetch("https://api.rendley.com/v1/projects/PROJECT_ID/invitations/INVITATION_ID", {
method: "DELETE",
headers: { Authorization: "Bearer YOUR_API_KEY" },
});
const { data } = await res.json();import requests
res = requests.delete(
"https://api.rendley.com/v1/projects/PROJECT_ID/invitations/INVITATION_ID",
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
data = res.json()["data"]$ch = curl_init("https://api.rendley.com/v1/projects/PROJECT_ID/invitations/INVITATION_ID");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer YOUR_API_KEY"]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true)["data"];package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("DELETE", "https://api.rendley.com/v1/projects/PROJECT_ID/invitations/INVITATION_ID", nil)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
b, _ := io.ReadAll(res.Body)
fmt.Println(string(b))
}require "net/http"
require "json"
uri = URI("https://api.rendley.com/v1/projects/PROJECT_ID/invitations/INVITATION_ID")
req = Net::HTTP::Delete.new(uri)
req["Authorization"] = "Bearer YOUR_API_KEY"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)["data"]