Create a project note
curl --request POST \
--url https://platform.jobbit.uk/v1/projects/{project_id}/notes \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"title": "Tone of voice",
"content": "Warm, plain, no jargon. Say 'treatment', not 'intervention'."
}
EOFimport requests
url = "https://platform.jobbit.uk/v1/projects/{project_id}/notes"
payload = {
"title": "Tone of voice",
"content": "Warm, plain, no jargon. Say 'treatment', not 'intervention'."
}
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({
title: 'Tone of voice',
content: 'Warm, plain, no jargon. Say \'treatment\', not \'intervention\'.'
})
};
fetch('https://platform.jobbit.uk/v1/projects/{project_id}/notes', 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}/notes",
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([
'title' => 'Tone of voice',
'content' => 'Warm, plain, no jargon. Say \'treatment\', not \'intervention\'.'
]),
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}/notes"
payload := strings.NewReader("{\n \"title\": \"Tone of voice\",\n \"content\": \"Warm, plain, no jargon. Say 'treatment', not 'intervention'.\"\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://platform.jobbit.uk/v1/projects/{project_id}/notes")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Tone of voice\",\n \"content\": \"Warm, plain, no jargon. Say 'treatment', not 'intervention'.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://platform.jobbit.uk/v1/projects/{project_id}/notes")
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 \"title\": \"Tone of voice\",\n \"content\": \"Warm, plain, no jargon. Say 'treatment', not 'intervention'.\"\n}"
response = http.request(request)
puts response.read_body{
"id": "a3c7e920-5d14-4f86-b1a0-9e2d64f07c58",
"project_id": "e57b2a93-0d6c-4f18-9a41-83c1d7e0b2f4",
"task_id": null,
"title": "Tone of voice",
"content": "Warm, plain, no jargon. Say 'treatment', not 'intervention'.",
"created_by": "7b0e2c4a-1d3f-4c8e-9a52-6f1d0e8b3a77",
"author": null,
"updated_by": null,
"editor": null,
"created_at": "2026-10-13T10:05:00",
"updated_at": null
}{
"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"
}
}Create a project note
Adds a note to a project. The agent can search it along with the project’s files.
Requires the projects:write permission.
POST
/
v1
/
projects
/
{project_id}
/
notes
Create a project note
curl --request POST \
--url https://platform.jobbit.uk/v1/projects/{project_id}/notes \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"title": "Tone of voice",
"content": "Warm, plain, no jargon. Say 'treatment', not 'intervention'."
}
EOFimport requests
url = "https://platform.jobbit.uk/v1/projects/{project_id}/notes"
payload = {
"title": "Tone of voice",
"content": "Warm, plain, no jargon. Say 'treatment', not 'intervention'."
}
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({
title: 'Tone of voice',
content: 'Warm, plain, no jargon. Say \'treatment\', not \'intervention\'.'
})
};
fetch('https://platform.jobbit.uk/v1/projects/{project_id}/notes', 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}/notes",
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([
'title' => 'Tone of voice',
'content' => 'Warm, plain, no jargon. Say \'treatment\', not \'intervention\'.'
]),
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}/notes"
payload := strings.NewReader("{\n \"title\": \"Tone of voice\",\n \"content\": \"Warm, plain, no jargon. Say 'treatment', not 'intervention'.\"\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://platform.jobbit.uk/v1/projects/{project_id}/notes")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Tone of voice\",\n \"content\": \"Warm, plain, no jargon. Say 'treatment', not 'intervention'.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://platform.jobbit.uk/v1/projects/{project_id}/notes")
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 \"title\": \"Tone of voice\",\n \"content\": \"Warm, plain, no jargon. Say 'treatment', not 'intervention'.\"\n}"
response = http.request(request)
puts response.read_body{
"id": "a3c7e920-5d14-4f86-b1a0-9e2d64f07c58",
"project_id": "e57b2a93-0d6c-4f18-9a41-83c1d7e0b2f4",
"task_id": null,
"title": "Tone of voice",
"content": "Warm, plain, no jargon. Say 'treatment', not 'intervention'.",
"created_by": "7b0e2c4a-1d3f-4c8e-9a52-6f1d0e8b3a77",
"author": null,
"updated_by": null,
"editor": null,
"created_at": "2026-10-13T10:05:00",
"updated_at": null
}{
"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_…
Path Parameters
The project id.
Body
application/json
Response
The note.
The note id.
The project.
The title.
The text.
The task it came from.
Who wrote it.
Show child attributes
Show child attributes
Who changed it last.
Show child attributes
Show child attributes
When it was written.
When it last changed.
⌘I