Legacy v1 (BRM-API)
The original Sites endpoints in BRM-API, before Sites v2. Use /sites/api/v2.
| Method | Path | Summary |
|---|---|---|
| GET | /v1/app/sites | List sites the caller is a member of |
| POST | /v1/app/sites | Create a site. Creator is automatically added as a drive_site_members row with role owner |
| DELETE | /v1/app/sites/:id | Soft-delete a site. Requires owner role on the site (drive_site_members) |
| GET | /v1/app/sites/:id/quota | Get a site's storage usage against the tenant's shared site-storage pool |
| GET | /v1/app/sites/:id/items | List items in a site folder |
| GET | /v1/app/sites/:id/item/:itemId/path | Get the breadcrumb path to an item within a site |
| POST | /v1/app/sites/:id/folder | Create a folder within a site |
| PATCH | /v1/app/sites/:id/item/:itemId | Rename an item within a site |
| POST | /v1/app/sites/:id/item/:itemId/move | Move an item into a different folder within a site |
| DELETE | /v1/app/sites/:id/item/:itemId | Soft-delete an item within a site |
| GET | /v1/app/sites/:id/trash | List trashed items within a site |
| POST | /v1/app/sites/:id/trash/restore/:itemId | Restore an item out of trash within a site |
| GET | /v1/app/sites/:id/members | List a site's members |
| POST | /v1/app/sites/:id/members | Add or update a site member |
| DELETE | /v1/app/sites/:id/member/:targetUserId | Remove a member from a site |
| GET | /v1/app/sites/:id/search | Search a site's items by name |
#List sites the caller is a member of
/v1/app/sitesList sites the caller is a member of. Includes the caller's role on each site, current usage, and member count.
- Address
https://<your-org>.brambleit.cloud/api/v1/app/sites- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Sites.
Response 200
| Field | Type | Description |
|---|---|---|
sites | array of object | |
sites[].id | integer | |
sites[].name | string | |
sites[].description | string, or null | |
sites[].created_at | string (date-time), or null | |
sites[].role | string: "owner" | "editor" | "viewer" | |
sites[].used_bytes | any | |
sites[].member_count | boolean |
Example response
{
"sites": [
{
"id": 42,
"name": "Example name",
"description": "string",
"created_at": "2026-11-12T09:30:00.000Z",
"role": "owner",
"used_bytes": null,
"member_count": false
}
]
}Example request
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/app/sites' \
-H "X-API-Key: $BRAMBLE_KEY"const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/sites', {
method: 'GET',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();import os, requests
r = requests.get(
"https://<your-org>.brambleit.cloud/api/v1/app/sites",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method GET -Uri 'https://<your-org>.brambleit.cloud/api/v1/app/sites' -Headers $headers#Create a site. Creator is automatically added as a drive_site_members row with role owner
/v1/app/sites- Address
https://<your-org>.brambleit.cloud/api/v1/app/sites- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Sites.
Request body JSON
| Name | Type | Description |
|---|---|---|
name | string | |
description | string |
Response 201
| Field | Type | Description |
|---|---|---|
id | integer | |
name | string |
Example response
{
"id": 42,
"name": "Example name"
}Errors
| Status | Message |
|---|---|
| 400 | Name required |
Example request
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/app/sites' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Example name","description":"string"}'const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/sites', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"name":"Example name","description":"string"}),
});
const data = await res.json();import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v1/app/sites",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"name":"Example name","description":"string"},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"name":"Example name","description":"string"}'
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v1/app/sites' -Headers $headers -ContentType 'application/json' -Body $body#Soft-delete a site. Requires owner role on the site (drive_site_members)
/v1/app/sites/:id- Address
https://<your-org>.brambleit.cloud/api/v1/app/sites/:id- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Sites.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Response 200
| Field | Type | Description |
|---|---|---|
ok | boolean |
Example response
{
"ok": true
}Errors
| Status | Message |
|---|---|
| 403 | Not authorised |
Example request
curl -X DELETE 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42' \
-H "X-API-Key: $BRAMBLE_KEY"const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/sites/42', {
method: 'DELETE',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();import os, requests
r = requests.delete(
"https://<your-org>.brambleit.cloud/api/v1/app/sites/42",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method DELETE -Uri 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42' -Headers $headers#Get a site's storage usage against the tenant's shared site-storage pool
/v1/app/sites/:id/quotaGet a site's storage usage against the tenant's shared site-storage pool. Requires any membership (viewer or above) on the site. Sites don't have their own per-site quota — they draw from a tenant-wide shared pool sized from drive_licenses' shared_bytes.
- Address
https://<your-org>.brambleit.cloud/api/v1/app/sites/:id/quota- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Sites.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Response 200
| Field | Type | Description |
|---|---|---|
site_used_bytes | number | |
pool_bytes | integer | |
pool_used_bytes | integer |
Example response
{
"site_used_bytes": 12.5,
"pool_bytes": 1,
"pool_used_bytes": 1
}Errors
| Status | Message |
|---|---|
| 403 | Not a member |
Example request
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/quota' \
-H "X-API-Key: $BRAMBLE_KEY"const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/sites/42/quota', {
method: 'GET',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();import os, requests
r = requests.get(
"https://<your-org>.brambleit.cloud/api/v1/app/sites/42/quota",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method GET -Uri 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/quota' -Headers $headers#List items in a site folder
/v1/app/sites/:id/itemsList items in a site folder. Requires any membership on the site.
- Address
https://<your-org>.brambleit.cloud/api/v1/app/sites/:id/items- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Sites.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Query parameters
| Name | Type | Description |
|---|---|---|
parent_id | integer |
Response 200
| Field | Type | Description |
|---|---|---|
items | array of object | |
items[].id | integer | |
items[].parent_id | integer, or null | |
items[].type | string: "file" | "folder" | |
items[].name | string | |
items[].mime_type | string, or null | |
items[].size_bytes | integer | |
items[].created_by | integer | |
items[].created_at | string (date-time) | |
items[].updated_at | string (date-time) |
Example response
{
"items": [
{
"id": 42,
"parent_id": 7,
"type": "file",
"name": "Example name",
"mime_type": "string",
"size_bytes": 1,
"created_by": 1,
"created_at": "2026-11-12T09:30:00.000Z",
"updated_at": "2026-11-12T09:30:00.000Z"
}
]
}Errors
| Status | Message |
|---|---|
| 403 | Not a member |
Example request
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/items' \
-H "X-API-Key: $BRAMBLE_KEY"const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/sites/42/items', {
method: 'GET',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();import os, requests
r = requests.get(
"https://<your-org>.brambleit.cloud/api/v1/app/sites/42/items",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method GET -Uri 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/items' -Headers $headers#Get the breadcrumb path to an item within a site
/v1/app/sites/:id/item/:itemId/pathGet the breadcrumb path to an item within a site. Requires any membership on the site. Walks up parent_id (max 50 levels) to the site root.
- Address
https://<your-org>.brambleit.cloud/api/v1/app/sites/:id/item/:itemId/path- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Sites.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer | |
itemIdrequired | integer |
Response 200
| Field | Type | Description |
|---|---|---|
path | array of any |
Example response
{
"path": []
}Errors
| Status | Message |
|---|---|
| 403 | Not a member |
| 404 | Not found |
Example request
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/item/1/path' \
-H "X-API-Key: $BRAMBLE_KEY"const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/sites/42/item/1/path', {
method: 'GET',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();import os, requests
r = requests.get(
"https://<your-org>.brambleit.cloud/api/v1/app/sites/42/item/1/path",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method GET -Uri 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/item/1/path' -Headers $headers#Create a folder within a site
/v1/app/sites/:id/folderCreate a folder within a site. Requires editor or owner role on the site.
- Address
https://<your-org>.brambleit.cloud/api/v1/app/sites/:id/folder- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Sites.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Request body JSON
| Name | Type | Description |
|---|---|---|
name | string | |
parent_id | integer |
Response 201
| Field | Type | Description |
|---|---|---|
id | integer | |
name | string | |
type | string |
Example response
{
"id": 42,
"name": "Example name",
"type": "string"
}Errors
| Status | Message |
|---|---|
| 400 | Name required |
| 403 | Not authorised |
Example request
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/folder' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Example name","parent_id":7}'const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/sites/42/folder', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"name":"Example name","parent_id":7}),
});
const data = await res.json();import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v1/app/sites/42/folder",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"name":"Example name","parent_id":7},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"name":"Example name","parent_id":7}'
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/folder' -Headers $headers -ContentType 'application/json' -Body $body#Rename an item within a site
/v1/app/sites/:id/item/:itemIdRename an item within a site. Requires editor or owner role on the site.
- Address
https://<your-org>.brambleit.cloud/api/v1/app/sites/:id/item/:itemId- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Sites.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer | |
itemIdrequired | integer |
Request body JSON
| Name | Type | Description |
|---|---|---|
name | string |
Response 200
| Field | Type | Description |
|---|---|---|
ok | boolean |
Example response
{
"ok": true
}Errors
| Status | Message |
|---|---|
| 400 | Name required |
| 403 | Not authorised |
| 404 | Not found |
Example request
curl -X PATCH 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/item/1' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Example name"}'const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/sites/42/item/1', {
method: 'PATCH',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"name":"Example name"}),
});
const data = await res.json();import os, requests
r = requests.patch(
"https://<your-org>.brambleit.cloud/api/v1/app/sites/42/item/1",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"name":"Example name"},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"name":"Example name"}'
Invoke-RestMethod -Method PATCH -Uri 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/item/1' -Headers $headers -ContentType 'application/json' -Body $body#Move an item into a different folder within a site
/v1/app/sites/:id/item/:itemId/moveMove an item into a different folder within a site. Requires editor or owner role on the site. Target folder (when given) must exist in the same site; the move is also blocked if the target is a descendant of the item being moved (would orphan the branch).
- Address
https://<your-org>.brambleit.cloud/api/v1/app/sites/:id/item/:itemId/move- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Sites.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer | |
itemIdrequired | string |
Request body JSON
| Name | Type | Description |
|---|---|---|
parent_id | integer |
Response 200
| Field | Type | Description |
|---|---|---|
ok | boolean |
Example response
{
"ok": true
}Errors
| Status | Message |
|---|---|
| 400 | Cannot move a folder into itself |
| 400 | Cannot move a folder into its own subfolder |
| 403 | Not authorised |
| 404 | Target folder not found |
| 404 | Not found |
Example request
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/item/string/move' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"parent_id":7}'const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/sites/42/item/string/move', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"parent_id":7}),
});
const data = await res.json();import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v1/app/sites/42/item/string/move",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"parent_id":7},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"parent_id":7}'
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/item/string/move' -Headers $headers -ContentType 'application/json' -Body $body#Soft-delete an item within a site
/v1/app/sites/:id/item/:itemIdSoft-delete an item within a site. Requires editor or owner role on the site.
- Address
https://<your-org>.brambleit.cloud/api/v1/app/sites/:id/item/:itemId- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Sites.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer | |
itemIdrequired | integer |
Response 200
| Field | Type | Description |
|---|---|---|
ok | boolean |
Example response
{
"ok": true
}Errors
| Status | Message |
|---|---|
| 403 | Not authorised |
| 404 | Not found |
Example request
curl -X DELETE 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/item/1' \
-H "X-API-Key: $BRAMBLE_KEY"const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/sites/42/item/1', {
method: 'DELETE',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();import os, requests
r = requests.delete(
"https://<your-org>.brambleit.cloud/api/v1/app/sites/42/item/1",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method DELETE -Uri 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/item/1' -Headers $headers#List trashed items within a site
/v1/app/sites/:id/trashList trashed items within a site. Requires any membership on the site.
- Address
https://<your-org>.brambleit.cloud/api/v1/app/sites/:id/trash- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Sites.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Response 200
| Field | Type | Description |
|---|---|---|
items | array of object | |
items[].id | integer | |
items[].type | string: "file" | "folder" | |
items[].name | string | |
items[].mime_type | string, or null | |
items[].size_bytes | integer | |
items[].deleted_at | string (date-time), or null |
Example response
{
"items": [
{
"id": 42,
"type": "file",
"name": "Example name",
"mime_type": "string",
"size_bytes": 1,
"deleted_at": "2026-11-12T09:30:00.000Z"
}
]
}Errors
| Status | Message |
|---|---|
| 403 | Not a member |
Example request
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/trash' \
-H "X-API-Key: $BRAMBLE_KEY"const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/sites/42/trash', {
method: 'GET',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();import os, requests
r = requests.get(
"https://<your-org>.brambleit.cloud/api/v1/app/sites/42/trash",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method GET -Uri 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/trash' -Headers $headers#Restore an item out of trash within a site
/v1/app/sites/:id/trash/restore/:itemIdRestore an item out of trash within a site. Requires editor or owner role on the site.
- Address
https://<your-org>.brambleit.cloud/api/v1/app/sites/:id/trash/restore/:itemId- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Sites.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer | |
itemIdrequired | integer |
Response 200
| Field | Type | Description |
|---|---|---|
ok | boolean |
Example response
{
"ok": true
}Errors
| Status | Message |
|---|---|
| 403 | Not authorised |
| 404 | Not found |
Example request
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/trash/restore/1' \
-H "X-API-Key: $BRAMBLE_KEY"const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/sites/42/trash/restore/1', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v1/app/sites/42/trash/restore/1",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/trash/restore/1' -Headers $headers#List a site's members
/v1/app/sites/:id/membersList a site's members. Requires any membership on the site. Ordered owner, then editor, then viewer.
- Address
https://<your-org>.brambleit.cloud/api/v1/app/sites/:id/members- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Sites.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Response 200
| Field | Type | Description |
|---|---|---|
members | array of any |
Example response
{
"members": []
}Errors
| Status | Message |
|---|---|
| 403 | Not a member |
Example request
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/members' \
-H "X-API-Key: $BRAMBLE_KEY"const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/sites/42/members', {
method: 'GET',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();import os, requests
r = requests.get(
"https://<your-org>.brambleit.cloud/api/v1/app/sites/42/members",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method GET -Uri 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/members' -Headers $headers#Add or update a site member
/v1/app/sites/:id/membersAdd or update a site member. Requires owner role on the site. Target user must be a staff user in the caller's tenant. If the user is already a member their role is updated (upsert on site_id+user_id).
- Address
https://<your-org>.brambleit.cloud/api/v1/app/sites/:id/members- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Sites.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Request body JSON
| Name | Type | Description |
|---|---|---|
user_idrequired | integer | |
role | string | Default "viewer". |
Response 201
| Field | Type | Description |
|---|---|---|
ok | boolean |
Example response
{
"ok": true
}Errors
| Status | Message |
|---|---|
| 400 | user_id required |
| 403 | Not authorised |
| 404 | User not found in tenant |
Example request
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/members' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"user_id":7,"role":"string"}'const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/sites/42/members', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"user_id":7,"role":"string"}),
});
const data = await res.json();import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v1/app/sites/42/members",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"user_id":7,"role":"string"},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"user_id":7,"role":"string"}'
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/members' -Headers $headers -ContentType 'application/json' -Body $body#Remove a member from a site
/v1/app/sites/:id/member/:targetUserIdRemove a member from a site. Requires owner role on the site. An owner cannot remove themselves this way.
- Address
https://<your-org>.brambleit.cloud/api/v1/app/sites/:id/member/:targetUserId- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Sites.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer | |
targetUserIdrequired | string |
Response 200
| Field | Type | Description |
|---|---|---|
ok | boolean |
Example response
{
"ok": true
}Errors
| Status | Message |
|---|---|
| 400 | Cannot remove yourself from site |
| 403 | Not authorised |
Example request
curl -X DELETE 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/member/string' \
-H "X-API-Key: $BRAMBLE_KEY"const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/sites/42/member/string', {
method: 'DELETE',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();import os, requests
r = requests.delete(
"https://<your-org>.brambleit.cloud/api/v1/app/sites/42/member/string",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method DELETE -Uri 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/member/string' -Headers $headers#Search a site's items by name
/v1/app/sites/:id/searchSearch a site's items by name. Requires any membership on the site. Case-insensitive substring match on name, up to 50 results.
- Address
https://<your-org>.brambleit.cloud/api/v1/app/sites/:id/search- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Sites.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Query parameters
| Name | Type | Description |
|---|---|---|
q | any |
Response 200
| Field | Type | Description |
|---|---|---|
items | array of object | |
items[].id | integer | |
items[].parent_id | integer, or null | |
items[].type | string: "file" | "folder" | |
items[].name | string | |
items[].mime_type | string, or null | |
items[].size_bytes | integer | |
items[].updated_at | string (date-time) |
Example response
{
"items": [
{
"id": 42,
"parent_id": 7,
"type": "file",
"name": "Example name",
"mime_type": "string",
"size_bytes": 1,
"updated_at": "2026-11-12T09:30:00.000Z"
}
]
}Errors
| Status | Message |
|---|---|
| 403 | Not a member |
Example request
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/search' \
-H "X-API-Key: $BRAMBLE_KEY"const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/app/sites/42/search', {
method: 'GET',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();import os, requests
r = requests.get(
"https://<your-org>.brambleit.cloud/api/v1/app/sites/42/search",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method GET -Uri 'https://<your-org>.brambleit.cloud/api/v1/app/sites/42/search' -Headers $headersWas this page helpful?
Thanks for your feedback.