Rotate an invite link
curl --request POST \
--url https://platform.jobbit.uk/v1/projects/{project_id}/invites/{invite_id}/rotate \
--header 'Authorization: Bearer <token>'import requests
url = "https://platform.jobbit.uk/v1/projects/{project_id}/invites/{invite_id}/rotate"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://platform.jobbit.uk/v1/projects/{project_id}/invites/{invite_id}/rotate', 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://platform.jobbit.uk/v1/projects/{project_id}/invites/{invite_id}/rotate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://platform.jobbit.uk/v1/projects/{project_id}/invites/{invite_id}/rotate"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://platform.jobbit.uk/v1/projects/{project_id}/invites/{invite_id}/rotate")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://platform.jobbit.uk/v1/projects/{project_id}/invites/{invite_id}/rotate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "inv_8d3f1a07c2",
"project_id": "e57b2a93-0d6c-4f18-9a41-83c1d7e0b2f4",
"role": "viewer",
"label": "For the clinic team",
"url": "https://jobbit.uk/projects/join/Zp3mT9cWq5Hs8DfA",
"created_by": "7b0e2c4a-1d3f-4c8e-9a52-6f1d0e8b3a77",
"created_at": "2026-11-05T15:00:00",
"expires_at": "2026-12-05T15:00:00",
"max_uses": 5,
"uses": 0,
"revoked_at": null,
"is_active": true,
"joined_count": 0
}{
"error": {
"code": "invalid_key",
"message": "the API key is missing or invalid",
"request_id": "5d3f0b7c8a2e4e19b6c47a90d1e2f3a4"
}
}{
"error": {
"code": "insufficient_scope",
"message": "this key does not have the deploy:write permission",
"details": {
"required": "deploy:write"
},
"request_id": "5d3f0b7c8a2e4e19b6c47a90d1e2f3a4"
}
}{
"error": {
"code": "not_found",
"message": "no such project or item",
"request_id": "5d3f0b7c8a2e4e19b6c47a90d1e2f3a4"
}
}{
"error": {
"code": "invalid_request",
"message": "the request is not valid",
"details": [
{
"location": [
"body",
"name"
],
"message": "String should match pattern '^[a-z0-9][a-z0-9-]*$'",
"type": "string_pattern_mismatch"
}
],
"request_id": "5d3f0b7c8a2e4e19b6c47a90d1e2f3a4"
}
}{
"error": {
"code": "rate_limited",
"message": "too many read requests, retry in 4 s",
"details": {
"group": "read",
"limit": 120,
"window_seconds": 60
},
"request_id": "5d3f0b7c8a2e4e19b6c47a90d1e2f3a4"
}
}Rotate an invite link
Gives an invite link a new address and returns it. The old address stops working. Only the owner can.
Requires the projects:write permission.
POST
/
v1
/
projects
/
{project_id}
/
invites
/
{invite_id}
/
rotate
Rotate an invite link
curl --request POST \
--url https://platform.jobbit.uk/v1/projects/{project_id}/invites/{invite_id}/rotate \
--header 'Authorization: Bearer <token>'import requests
url = "https://platform.jobbit.uk/v1/projects/{project_id}/invites/{invite_id}/rotate"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://platform.jobbit.uk/v1/projects/{project_id}/invites/{invite_id}/rotate', 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://platform.jobbit.uk/v1/projects/{project_id}/invites/{invite_id}/rotate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://platform.jobbit.uk/v1/projects/{project_id}/invites/{invite_id}/rotate"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://platform.jobbit.uk/v1/projects/{project_id}/invites/{invite_id}/rotate")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://platform.jobbit.uk/v1/projects/{project_id}/invites/{invite_id}/rotate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "inv_8d3f1a07c2",
"project_id": "e57b2a93-0d6c-4f18-9a41-83c1d7e0b2f4",
"role": "viewer",
"label": "For the clinic team",
"url": "https://jobbit.uk/projects/join/Zp3mT9cWq5Hs8DfA",
"created_by": "7b0e2c4a-1d3f-4c8e-9a52-6f1d0e8b3a77",
"created_at": "2026-11-05T15:00:00",
"expires_at": "2026-12-05T15:00:00",
"max_uses": 5,
"uses": 0,
"revoked_at": null,
"is_active": true,
"joined_count": 0
}{
"error": {
"code": "invalid_key",
"message": "the API key is missing or invalid",
"request_id": "5d3f0b7c8a2e4e19b6c47a90d1e2f3a4"
}
}{
"error": {
"code": "insufficient_scope",
"message": "this key does not have the deploy:write permission",
"details": {
"required": "deploy:write"
},
"request_id": "5d3f0b7c8a2e4e19b6c47a90d1e2f3a4"
}
}{
"error": {
"code": "not_found",
"message": "no such project or item",
"request_id": "5d3f0b7c8a2e4e19b6c47a90d1e2f3a4"
}
}{
"error": {
"code": "invalid_request",
"message": "the request is not valid",
"details": [
{
"location": [
"body",
"name"
],
"message": "String should match pattern '^[a-z0-9][a-z0-9-]*$'",
"type": "string_pattern_mismatch"
}
],
"request_id": "5d3f0b7c8a2e4e19b6c47a90d1e2f3a4"
}
}{
"error": {
"code": "rate_limited",
"message": "too many read requests, retry in 4 s",
"details": {
"group": "read",
"limit": 120,
"window_seconds": 60
},
"request_id": "5d3f0b7c8a2e4e19b6c47a90d1e2f3a4"
}
}Authorizations
An API key from Settings → API keys, sent as Authorization: Bearer jb_live_…
Response
The link with its new address.
The invite id.
The project.
The role people get by joining.
Available options:
editor, viewer The link to share.
Whether it works now.
A note for yourself.
Who made it.
When it was made.
When it stops working. Null means never.
How many people may use it. Null means no limit.
How many times it was used.
When it was turned off.
People who joined through it and are still members.
⌘I