Spaces
Top-level areas of the wiki.
| Method | Path | Summary |
|---|---|---|
| GET | /v1/app/kb/spaces | Spaces (role-based visibility) GET all spaces (role-based visibility) |
| GET | /v1/app/kb/spaces/slug/:slug | By slug |
| GET | /v1/app/kb/spaces/:space_id | Space (checks ACL) |
| POST | /v1/app/kb/spaces | CREATE space - Shared spaces: global admin only - Personal spaces: any tenant user, limited to one per user |
| PUT | /v1/app/kb/spaces/:space_id | UPDATE space (need manage permission) |
| DELETE | /v1/app/kb/spaces/:space_id | Space (need manage permission) |
| GET | /v1/app/kb/spaces/:space_id/collections | Collections in a space (requires read on space) |
| POST | /v1/app/kb/spaces/:space_id/collections | CREATE collection in a space (need write/manage space) |
| POST | /v1/app/kb/spaces/:space_id/banner | Space banner |
| DELETE | /v1/app/kb/spaces/:space_id/banner | Remove a space's banner |
#Spaces (role-based visibility) GET all spaces (role-based visibility)
GET
/v1/app/kb/spaces- Address
https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: WiKi.
Response 200
| Field | Type | Description |
|---|---|---|
spaces | array of object | |
spaces[].id | integer | |
spaces[].tenant_id | integer | |
spaces[].name | string | |
spaces[].slug | string | |
spaces[].description | string, or null | |
spaces[].color_hex | string, or null | |
spaces[].icon_emoji | string, or null | |
spaces[].is_internal_only | boolean | |
spaces[].owner_user_id | integer, or null | |
spaces[].created_by | integer | |
spaces[].created_at | string (date-time) | |
spaces[].updated_at | string (date-time) | |
spaces[].archived_at | string (date-time), or null | |
spaces[].space_type | string: "shared" | "personal" | |
spaces[].banner_image_id | integer, or null | |
spaces[].article_count | boolean | |
spaces[].collection_count | boolean |
Example response
JSON
{
"spaces": [
{
"id": 42,
"tenant_id": 1,
"name": "Example name",
"slug": "example",
"description": "string",
"color_hex": "#2563eb",
"icon_emoji": "string",
"is_internal_only": true,
"owner_user_id": 7,
"created_by": 1,
"created_at": "2026-11-12T09:30:00.000Z",
"updated_at": "2026-11-12T09:30:00.000Z",
"archived_at": "2026-11-12T09:30:00.000Z",
"space_type": "shared",
"banner_image_id": 7,
"article_count": false,
"collection_count": false
}
]
}Errors
| Status | Message |
|---|---|
| 404 | User not found |
Example request
Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces', {
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/app/kb/spaces",
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/app/kb/spaces' -Headers $headers#By slug
GET
/v1/app/kb/spaces/slug/:slug- Address
https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/slug/:slug- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: WiKi.
Path parameters
| Name | Type | Description |
|---|---|---|
slugrequired | string |
Response 200
| Field | Type | Description |
|---|---|---|
space | any |
Example response
JSON
{
"space": null
}Errors
| Status | Message |
|---|---|
| 404 | User not found |
| 404 | Space not found |
| 403 | No access to this space |
Example request
Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/slug/example' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/slug/example', {
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/app/kb/spaces/slug/example",
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/app/kb/spaces/slug/example' -Headers $headers#Space (checks ACL)
GET
/v1/app/kb/spaces/:space_id- Address
https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/:space_id- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: WiKi.
Path parameters
| Name | Type | Description |
|---|---|---|
space_idrequired | integer |
Response 200
| Field | Type | Description |
|---|---|---|
space | any |
Example response
JSON
{
"space": null
}Errors
| Status | Message |
|---|---|
| 404 | User not found |
| 404 | Space not found |
| 403 | No access to this space |
Example request
Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/7' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/7', {
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/app/kb/spaces/7",
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/app/kb/spaces/7' -Headers $headers#CREATE space - Shared spaces: global admin only - Personal spaces: any tenant user, limited to one per user
POST
/v1/app/kb/spaces- Address
https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: WiKi.
Request body JSON
| Name | Type | Description |
|---|---|---|
namerequired | string | |
slugrequired | string | |
description | string | |
color_hex | any | |
icon_emoji | any | |
is_internal_only | boolean | |
space_type | string |
Response 201
| Field | Type | Description |
|---|---|---|
space | any |
Example response
JSON
{
"space": null
}Errors
| Status | Message |
|---|---|
| 400 | Missing required fields: name, slug |
| 400 | Only global admins can create shared spaces. |
| 404 | User not found |
| 403 | Only global admins can create shared spaces. |
| 409 | You already have a personal space. |
| 409 | A space with that slug already exists in your organisation. |
Example request
Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Example name","slug":"example","description":"string","color_hex":"…","icon_emoji":"…","is_internal_only":true,"space_type":"string"}'JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"name":"Example name","slug":"example","description":"string","color_hex":"…","icon_emoji":"…","is_internal_only":true,"space_type":"string"}),
});
const data = await res.json();Python
import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"name":"Example name","slug":"example","description":"string","color_hex":"…","icon_emoji":"…","is_internal_only":True,"space_type":"string"},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"name":"Example name","slug":"example","description":"string","color_hex":"…","icon_emoji":"…","is_internal_only":true,"space_type":"string"}'
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces' -Headers $headers -ContentType 'application/json' -Body $body#UPDATE space (need manage permission)
PUT
/v1/app/kb/spaces/:space_id- Address
https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/:space_id- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: WiKi.
Path parameters
| Name | Type | Description |
|---|---|---|
space_idrequired | integer |
Request body JSON
| Name | Type | Description |
|---|---|---|
name | string | |
slug | string | |
description | string | |
color_hex | any | |
icon_emoji | any | |
is_internal_only | boolean |
Response 200
| Field | Type | Description |
|---|---|---|
space | any |
Example response
JSON
{
"space": null
}Errors
| Status | Message |
|---|---|
| 404 | User not found |
| 404 | Space not found |
| 403 | No manage permission on space |
| 409 | A space with that slug already exists in your organisation. |
Example request
Bash
curl -X PUT 'https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/7' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Example name","slug":"example","description":"string","color_hex":"…","icon_emoji":"…","is_internal_only":true}'JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/7', {
method: 'PUT',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"name":"Example name","slug":"example","description":"string","color_hex":"…","icon_emoji":"…","is_internal_only":true}),
});
const data = await res.json();Python
import os, requests
r = requests.put(
"https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/7",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"name":"Example name","slug":"example","description":"string","color_hex":"…","icon_emoji":"…","is_internal_only":True},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"name":"Example name","slug":"example","description":"string","color_hex":"…","icon_emoji":"…","is_internal_only":true}'
Invoke-RestMethod -Method PUT -Uri 'https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/7' -Headers $headers -ContentType 'application/json' -Body $body#Space (need manage permission)
DELETE
/v1/app/kb/spaces/:space_id- Address
https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/:space_id- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: WiKi.
Path parameters
| Name | Type | Description |
|---|---|---|
space_idrequired | integer |
Response 200
| Field | Type | Description |
|---|---|---|
message | string |
Example response
JSON
{
"message": "Saved"
}Errors
| Status | Message |
|---|---|
| 404 | User not found |
| 404 | Space not found |
| 403 | No manage permission on space |
Example request
Bash
curl -X DELETE 'https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/7' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/7', {
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/app/kb/spaces/7",
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/app/kb/spaces/7' -Headers $headers#Collections in a space (requires read on space)
GET
/v1/app/kb/spaces/:space_id/collections- Address
https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/:space_id/collections- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: WiKi.
Path parameters
| Name | Type | Description |
|---|---|---|
space_idrequired | integer |
Response 200
| Field | Type | Description |
|---|---|---|
collections | array of object | |
collections[].id | integer | |
collections[].tenant_id | integer | |
collections[].space_id | integer | |
collections[].name | string | |
collections[].slug | string | |
collections[].description | string, or null | |
collections[].sort_order | integer | |
collections[].created_by | integer | |
collections[].created_at | string (date-time) | |
collections[].updated_at | string (date-time) | |
collections[].archived_at | string (date-time), or null | |
collections[].icon_emoji | any | |
collections[].color_hex | any | |
collections[].banner_image_id | integer, or null | |
collections[].logo_image_id | integer, or null | |
collections[].article_count | boolean |
Example response
JSON
{
"collections": [
{
"id": 42,
"tenant_id": 1,
"space_id": 7,
"name": "Example name",
"slug": "example",
"description": "string",
"sort_order": 1,
"created_by": 1,
"created_at": "2026-11-12T09:30:00.000Z",
"updated_at": "2026-11-12T09:30:00.000Z",
"archived_at": "2026-11-12T09:30:00.000Z",
"icon_emoji": null,
"color_hex": null,
"banner_image_id": 7,
"logo_image_id": 7,
"article_count": false
}
]
}Errors
| Status | Message |
|---|---|
| 404 | User not found |
| 404 | Space not found |
| 403 | No access to this space |
Example request
Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/7/collections' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/7/collections', {
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/app/kb/spaces/7/collections",
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/app/kb/spaces/7/collections' -Headers $headers#CREATE collection in a space (need write/manage space)
POST
/v1/app/kb/spaces/:space_id/collections- Address
https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/:space_id/collections- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: WiKi.
Path parameters
| Name | Type | Description |
|---|---|---|
space_idrequired | integer |
Request body JSON
| Name | Type | Description |
|---|---|---|
namerequired | string | |
slugrequired | string | |
description | string | |
sort_order | integer | |
icon_emoji | any | |
color_hex | any |
Response 201
| Field | Type | Description |
|---|---|---|
collection | any |
Example response
JSON
{
"collection": null
}Errors
| Status | Message |
|---|---|
| 400 | Missing required fields: name, slug |
| 404 | User not found |
| 404 | Space not found |
| 403 | No write permission on space |
| 409 | A collection with that slug already exists in your organisation. |
Example request
Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/7/collections' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Example name","slug":"example","description":"string","sort_order":1,"icon_emoji":"…","color_hex":"…"}'JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/7/collections', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"name":"Example name","slug":"example","description":"string","sort_order":1,"icon_emoji":"…","color_hex":"…"}),
});
const data = await res.json();Python
import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/7/collections",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"name":"Example name","slug":"example","description":"string","sort_order":1,"icon_emoji":"…","color_hex":"…"},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"name":"Example name","slug":"example","description":"string","sort_order":1,"icon_emoji":"…","color_hex":"…"}'
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/7/collections' -Headers $headers -ContentType 'application/json' -Body $body#Space banner
POST
/v1/app/kb/spaces/:space_id/banner- Address
https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/:space_id/banner- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: WiKi.
Path parameters
| Name | Type | Description |
|---|---|---|
space_idrequired | integer |
Example request
Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/7/banner' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/7/banner', {
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/app/kb/spaces/7/banner",
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/app/kb/spaces/7/banner' -Headers $headers#Remove a space's banner
DELETE
/v1/app/kb/spaces/:space_id/banner- Address
https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/:space_id/banner- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: WiKi.
Path parameters
| Name | Type | Description |
|---|---|---|
space_idrequired | integer |
Example request
Bash
curl -X DELETE 'https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/7/banner' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/kb/spaces/7/banner', {
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/app/kb/spaces/7/banner",
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/app/kb/spaces/7/banner' -Headers $headersWas this page helpful?
Thanks for your feedback.