PATCH
/
v1
/
projects
/
{project_id}
Change a project
curl --request PATCH \
  --url https://platform.jobbit.uk/v1/projects/{project_id} \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "instructions": "Write in plain British English. Never promise treatment outcomes.",
  "is_pinned": true
}
'
import requests

url = "https://platform.jobbit.uk/v1/projects/{project_id}"

payload = {
"instructions": "Write in plain British English. Never promise treatment outcomes.",
"is_pinned": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}

response = requests.patch(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
instructions: 'Write in plain British English. Never promise treatment outcomes.',
is_pinned: true
})
};

fetch('https://platform.jobbit.uk/v1/projects/{project_id}', 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}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'instructions' => 'Write in plain British English. Never promise treatment outcomes.',
'is_pinned' => true
]),
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://platform.jobbit.uk/v1/projects/{project_id}"

payload := strings.NewReader("{\n \"instructions\": \"Write in plain British English. Never promise treatment outcomes.\",\n \"is_pinned\": true\n}")

req, _ := http.NewRequest("PATCH", 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.patch("https://platform.jobbit.uk/v1/projects/{project_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"instructions\": \"Write in plain British English. Never promise treatment outcomes.\",\n \"is_pinned\": true\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://platform.jobbit.uk/v1/projects/{project_id}")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"instructions\": \"Write in plain British English. Never promise treatment outcomes.\",\n \"is_pinned\": true\n}"

response = http.request(request)
puts response.read_body
{
  "id": "e57b2a93-0d6c-4f18-9a41-83c1d7e0b2f4",
  "user_id": "7b0e2c4a-1d3f-4c8e-9a52-6f1d0e8b3a77",
  "name": "Kent Physio website",
  "description": "Copy, photos and bookings for the Kent Physio site.",
  "status": "active",
  "image_url": null,
  "avatar_seed": "kent-physio",
  "is_pinned": true,
  "instructions": "Write in plain British English. Never promise treatment outcomes.",
  "created_at": "2026-10-12T09:20:00",
  "updated_at": "2026-11-05T14:03:49",
  "task_count": 3,
  "completed_task_count": 2,
  "chat_count": 4,
  "file_count": 6,
  "secret_count": 1,
  "app_count": 1,
  "automation_count": 1,
  "my_role": "owner",
  "member_count": 2,
  "owner": {
    "user_id": "7b0e2c4a-1d3f-4c8e-9a52-6f1d0e8b3a77",
    "name": "Sam",
    "email": "sam@kentphysio.co.uk",
    "avatar_url": null
  },
  "members": []
}
{
"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

Authorization
string
header
required

An API key from Settings → API keys, sent as Authorization: Bearer jb_live_…

Path Parameters

project_id
string
required

The project id.

Body

application/json

Send only the fields to change. Everything except is_pinned needs the editor role.

name
string

A new name.

Required string length: 1 - 255
description
string

A new description.

status
string

A new status.

avatar_seed
string

A new picture seed.

is_pinned
boolean

Pin or unpin it for this account. Any member can.

instructions
string

New instructions.

Response

The project.

id
string
required

The project id.

name
string
required

The name.

status
string
required

The project's status. New projects are active.

user_id
string

The owner's account id.

description
string | null

What the project is for.

image_url
string | null

The project picture.

avatar_seed
string | null

Seed for the generated picture.

is_pinned
boolean

Whether this account pinned it. Pins are personal.

instructions
string | null

Instructions the agent follows in every chat of the project.

created_at
string<date-time>

When it was made.

updated_at
string<date-time> | null

When it last changed.

task_count
integer

Tasks in the project.

completed_task_count
integer

Tasks completed.

chat_count
integer

This account's chats in the project.

file_count
integer

Files held.

secret_count
integer

Secrets held. Their names and values are not available here.

app_count
integer

Apps in the project.

automation_count
integer

Automations in the project.

my_role
enum<string> | null

This account's role.

Available options:
owner,
editor,
viewer,
null
member_count
integer

People in the project.

owner
object | null
members
object[]

A few members, oldest first.