App settings: SimpleBooks
Companies, who can access each company and with what role, and the receipts email address.
| Method | Path | Summary |
|---|---|---|
| GET | /v1/admin/simplebooks/companies | Every SimpleBooks company in the tenant, with modules, access and receipt counts |
| POST | /v1/admin/simplebooks/companies | Create a company |
| PUT | /v1/admin/simplebooks/companies/:id | Rename, change business type, archive/unarchive, or switch modules on/off |
| GET | /v1/admin/simplebooks/principals | Tenant users (with whether each has a SimpleBooks licence) and groups, for the access picker |
| GET | /v1/admin/simplebooks/companies/:id/access | Who can open this company, and with which role |
| POST | /v1/admin/simplebooks/companies/:id/access | Access a company |
| PUT | /v1/admin/simplebooks/companies/:id/access/:accessId | Update an access |
| DELETE | /v1/admin/simplebooks/companies/:id/access/:accessId | Delete an access |
| GET | /v1/admin/simplebooks/email | The SMTP account SimpleBooks emails invoices through (password never returned) |
| PUT | /v1/admin/simplebooks/email | Update the email |
| POST | /v1/admin/simplebooks/email/test | Send a test email to the signed-in admin through the saved SMTP account |
#Every SimpleBooks company in the tenant, with modules, access and receipt counts
GET
/v1/admin/simplebooks/companies- Address
https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role:GLOBAL_ADMIN.
Response 200
| Field | Type | Description |
|---|---|---|
companies | array of object | |
companies[].id | integer | |
companies[].name | string | |
companies[].trading_name | string, or null | |
companies[].business_type | string: "sole_trader" | "partnership" | "limited" | |
companies[].year_end | string: "mar31" | "apr5" | |
companies[].created_at | string (date-time) | |
companies[].archived_at | string (date-time), or null | |
companies[].receipts | boolean | |
companies[].to_review | boolean | |
companies[].last_receipt_at | any | |
companies[].access_count | any | |
companies[].owner_count | any | |
companies[].modules | array of any | |
licensed_users | integer |
Example response
JSON
{
"companies": [
{
"id": 42,
"name": "Example name",
"trading_name": "Example trading name",
"business_type": "sole_trader",
"year_end": "mar31",
"created_at": "2026-11-12T09:30:00.000Z",
"archived_at": "2026-11-12T09:30:00.000Z",
"receipts": false,
"to_review": false,
"last_receipt_at": null,
"access_count": null,
"owner_count": null,
"modules": []
}
],
"licensed_users": 1
}Example request
Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies', {
method: 'GET',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();Python
import os, requests
r = requests.get(
"https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method GET -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies' -Headers $headers#Create a company
POST
/v1/admin/simplebooks/companies- Address
https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role:GLOBAL_ADMIN.
Request body JSON
| Name | Type | Description |
|---|---|---|
name | string | |
business_type | string: "sole_trader" | "partnership" | "limited" | |
trading_name | string | |
owner_name | string | |
modules | array of any |
Response 201
| Field | Type | Description |
|---|---|---|
id | integer |
Example response
JSON
{
"id": 42
}Errors
| Status | Message |
|---|---|
| 400 | Give the company a name |
Example request
Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Example name","business_type":"sole_trader","trading_name":"Example trading name","owner_name":"Example owner name","modules":[]}'JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"name":"Example name","business_type":"sole_trader","trading_name":"Example trading name","owner_name":"Example owner name","modules":[]}),
});
const data = await res.json();Python
import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"name":"Example name","business_type":"sole_trader","trading_name":"Example trading name","owner_name":"Example owner name","modules":[]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"name":"Example name","business_type":"sole_trader","trading_name":"Example trading name","owner_name":"Example owner name","modules":[]}'
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies' -Headers $headers -ContentType 'application/json' -Body $body#Rename, change business type, archive/unarchive, or switch modules on/off
PUT
/v1/admin/simplebooks/companies/:id- Address
https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/:id- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role:GLOBAL_ADMIN.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Request body JSON
| Name | Type | Description |
|---|---|---|
name | string | |
trading_name | string | |
business_type | string: "sole_trader" | "partnership" | "limited" | |
archived | any | |
modules | object |
Response 200
| Field | Type | Description |
|---|---|---|
message | string |
Example response
JSON
{
"message": "Saved"
}Errors
| Status | Message |
|---|---|
| 400 | Give the company a name |
| 400 | Unknown business type |
Example request
Bash
curl -X PUT 'https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/42' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Example name","trading_name":"Example trading name","business_type":"sole_trader","archived":"…","modules":{}}'JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/42', {
method: 'PUT',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"name":"Example name","trading_name":"Example trading name","business_type":"sole_trader","archived":"…","modules":{}}),
});
const data = await res.json();Python
import os, requests
r = requests.put(
"https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/42",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"name":"Example name","trading_name":"Example trading name","business_type":"sole_trader","archived":"…","modules":{}},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"name":"Example name","trading_name":"Example trading name","business_type":"sole_trader","archived":"…","modules":{}}'
Invoke-RestMethod -Method PUT -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/42' -Headers $headers -ContentType 'application/json' -Body $body#Tenant users (with whether each has a SimpleBooks licence) and groups, for the access picker
GET
/v1/admin/simplebooks/principals- Address
https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/principals- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role:GLOBAL_ADMIN.
Response 200
| Field | Type | Description |
|---|---|---|
users | array of object | |
users[].id | integer | |
users[].name | string | |
users[].email | string | |
users[].licensed | boolean | |
groups | array of any |
Example response
JSON
{
"users": [
{
"id": 42,
"name": "Example name",
"email": "alex@example.com",
"licensed": false
}
],
"groups": []
}Example request
Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/principals' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/principals', {
method: 'GET',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();Python
import os, requests
r = requests.get(
"https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/principals",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method GET -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/principals' -Headers $headers#Who can open this company, and with which role
GET
/v1/admin/simplebooks/companies/:id/access- Address
https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/:id/access- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role:GLOBAL_ADMIN.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Response 200
| Field | Type | Description |
|---|---|---|
access | array of object | |
access[].id | integer | |
access[].principal_type | string: "user" | "group" | |
access[].principal_id | integer | |
access[].role | string: "owner" | "bookkeeper" | "submitter" | "viewer" | |
access[].created_at | string (date-time) | |
access[].name | string | |
access[].email | any, or null |
Example response
JSON
{
"access": [
{
"id": 42,
"principal_type": "user",
"principal_id": 7,
"role": "owner",
"created_at": "2026-11-12T09:30:00.000Z",
"name": "Example name",
"email": null
}
]
}Example request
Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/42/access' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/42/access', {
method: 'GET',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();Python
import os, requests
r = requests.get(
"https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/42/access",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method GET -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/42/access' -Headers $headers#Access a company
POST
/v1/admin/simplebooks/companies/:id/access- Address
https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/:id/access- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role:GLOBAL_ADMIN.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Request body JSON
| Name | Type | Description |
|---|---|---|
principal_type | string | |
principal_id | number | |
role | any |
Response 201
| Field | Type | Description |
|---|---|---|
message | string |
Example response
JSON
{
"message": "Saved"
}Errors
| Status | Message |
|---|---|
| 400 | Choose a … |
| 400 | Unknown … |
Example request
Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/42/access' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"principal_type":"string","principal_id":12.5,"role":"…"}'JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/42/access', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"principal_type":"string","principal_id":12.5,"role":"…"}),
});
const data = await res.json();Python
import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/42/access",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"principal_type":"string","principal_id":12.5,"role":"…"},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"principal_type":"string","principal_id":12.5,"role":"…"}'
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/42/access' -Headers $headers -ContentType 'application/json' -Body $body#Update an access
PUT
/v1/admin/simplebooks/companies/:id/access/:accessId- Address
https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/:id/access/:accessId- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role:GLOBAL_ADMIN.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer | |
accessIdrequired | number |
Request body JSON
| Name | Type | Description |
|---|---|---|
role | any |
Response 200
| Field | Type | Description |
|---|---|---|
message | string |
Example response
JSON
{
"message": "Saved"
}Errors
| Status | Message |
|---|---|
| 400 | Unknown role |
| 404 | Access not found |
Example request
Bash
curl -X PUT 'https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/42/access/12.5' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"role":"…"}'JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/42/access/12.5', {
method: 'PUT',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"role":"…"}),
});
const data = await res.json();Python
import os, requests
r = requests.put(
"https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/42/access/12.5",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"role":"…"},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"role":"…"}'
Invoke-RestMethod -Method PUT -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/42/access/12.5' -Headers $headers -ContentType 'application/json' -Body $body#Delete an access
DELETE
/v1/admin/simplebooks/companies/:id/access/:accessId- Address
https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/:id/access/:accessId- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role:GLOBAL_ADMIN.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer | |
accessIdrequired | number |
Response 200
| Field | Type | Description |
|---|---|---|
message | string |
Example response
JSON
{
"message": "Saved"
}Example request
Bash
curl -X DELETE 'https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/42/access/12.5' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/42/access/12.5', {
method: 'DELETE',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();Python
import os, requests
r = requests.delete(
"https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/42/access/12.5",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method DELETE -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/companies/42/access/12.5' -Headers $headers#The SMTP account SimpleBooks emails invoices through (password never returned)
GET
/v1/admin/simplebooks/email- Address
https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/email- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role:GLOBAL_ADMIN.
Response 200
| Field | Type | Description |
|---|---|---|
email | object | |
email.enabled | integer | |
email.smtp_port | integer | |
email.smtp_secure | integer | |
email.has_password | boolean |
Example response
JSON
{
"email": {
"enabled": 1,
"smtp_port": 1,
"smtp_secure": 1,
"has_password": true
}
}Example request
Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/email' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/email', {
method: 'GET',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();Python
import os, requests
r = requests.get(
"https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/email",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method GET -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/email' -Headers $headers#Update the email
PUT
/v1/admin/simplebooks/email- Address
https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/email- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role:GLOBAL_ADMIN.
Request body JSON
| Name | Type | Description |
|---|---|---|
enabled | boolean | |
smtp_host | string | |
smtp_port | number | |
smtp_secure | any | |
smtp_user | string | |
from_email | string | |
from_name | string | |
smtp_pass | string | |
clear_password | any |
Response 200
| Field | Type | Description |
|---|---|---|
message | string |
Example response
JSON
{
"message": "Saved"
}Errors
| Status | Message |
|---|---|
| 400 | Port must be a number, usually 587 or 465 |
| 400 | The 'from' address doesn't look right |
| 400 | To switch email on, fill in the server and the 'from' address |
Example request
Bash
curl -X PUT 'https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/email' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"enabled":true,"smtp_host":"string","smtp_port":12.5,"smtp_secure":"…","smtp_user":"string","from_email":"alex@example.com","from_name":"Example from name","smtp_pass":"string","clear_password":"…"}'JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/email', {
method: 'PUT',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"enabled":true,"smtp_host":"string","smtp_port":12.5,"smtp_secure":"…","smtp_user":"string","from_email":"alex@example.com","from_name":"Example from name","smtp_pass":"string","clear_password":"…"}),
});
const data = await res.json();Python
import os, requests
r = requests.put(
"https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/email",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"enabled":True,"smtp_host":"string","smtp_port":12.5,"smtp_secure":"…","smtp_user":"string","from_email":"alex@example.com","from_name":"Example from name","smtp_pass":"string","clear_password":"…"},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"enabled":true,"smtp_host":"string","smtp_port":12.5,"smtp_secure":"…","smtp_user":"string","from_email":"alex@example.com","from_name":"Example from name","smtp_pass":"string","clear_password":"…"}'
Invoke-RestMethod -Method PUT -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/email' -Headers $headers -ContentType 'application/json' -Body $body#Send a test email to the signed-in admin through the saved SMTP account
POST
/v1/admin/simplebooks/email/test- Address
https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/email/test- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role:GLOBAL_ADMIN.
Response 200
| Field | Type | Description |
|---|---|---|
message | string |
Example response
JSON
{
"message": "Saved"
}Errors
| Status | Message |
|---|---|
| 400 | Save the email settings first |
| 502 | The test email couldn't be sent: … |
Example request
Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/email/test' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/email/test', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();Python
import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/email/test",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/simplebooks/email/test' -Headers $headersWas this page helpful?
Thanks for your feedback.