An organisation owns workspaces, the plan and the team. Member endpoints require the members.manage permission and are not available to API keys, since keys carry no person to attribute an invitation to. Roles are explained in Team members and roles.
List my organisations
/user/orgsOrganisations the signed-in user belongs to. Session credentials only.
curl "https://api.statusbee.co/user/orgs" \
-H "Authorization: Bearer sb_live_…"{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"rows": [
{
"id": 5,
"slug": "acme-cloud",
"name": "Acme Cloud",
"type": "company",
"plan": "team",
"branding": null,
"settings": null,
"status": "active",
"created_at": "2026-09-14T09:02:11.000Z",
"updated_at": "2026-09-14T09:02:11.000Z",
"my_role": "org_owner"
}
]
}
}Get an organisation
/user/orgs/:orgIdThe organisation, its active workspaces, and the resolved entitlements for its plan.
Path parameters
orgIdintegerrequired- Organisation id.
curl "https://api.statusbee.co/user/orgs/5" \
-H "Authorization: Bearer sb_live_…"{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"org": {
"id": 5,
"slug": "acme-cloud",
"name": "Acme Cloud",
"type": "company",
"plan": "team",
"branding": null,
"settings": null,
"status": "active",
"created_at": "2026-09-14T09:02:11.000Z",
"updated_at": "2026-09-14T09:02:11.000Z"
},
"workspaces": [
{
"id": 5,
"org_id": 5,
"slug": "default",
"name": "Acme Cloud",
"is_default": true
}
],
"entitlements": {
"pages": 10,
"workspaces": 3,
"monitors": 50,
"min_check_interval_s": 30,
"team_members": 15,
"api_keys": 10,
"custom_domain": true,
"powered_by_hidden": true,
"custom_css": true,
"private_pages": true,
"audience_pages": true,
"history_days": 365
}
}
}Update an organisation
/user/orgs/:orgIdNeeds the org.manage permission, or an API key with the matching scope.
Path parameters
orgIdintegerrequired- Organisation id.
Body
namestring- Display name.
brandingobject- Free-form branding.
settingsobject- Free-form settings.
curl -X PATCH "https://api.statusbee.co/user/orgs/5" \
-H "Authorization: Bearer sb_live_…" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Cloud Ltd"
}'{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"id": 5,
"slug": "acme-cloud",
"name": "Acme Cloud Ltd",
"type": "company",
"plan": "team",
"branding": null,
"settings": null,
"status": "active",
"created_at": "2026-09-14T09:02:11.000Z",
"updated_at": "2026-09-14T09:02:11.000Z"
}
}Create a workspace
/user/orgs/:orgId/workspacesCounts against the plan's workspaces limit.
Needs the org.manage permission, or an API key with the matching scope.
Path parameters
orgIdintegerrequired- Organisation id.
Body
namestringrequired- Display name.
slugstring- URL-safe identifier, unique within the organisation. Generated from the name when omitted.
curl -X POST "https://api.statusbee.co/user/orgs/5/workspaces" \
-H "Authorization: Bearer sb_live_…" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Payments"
}'{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"id": 6,
"org_id": 5,
"slug": "acme-payments",
"name": "Acme Payments",
"is_default": false,
"archived_at": null,
"created_at": "2026-09-14T09:02:11.000Z"
}
}List members
/user/orgs/:orgId/membersEvery membership in the organisation, active and pending, with the user and workspace populated.
Needs the members.manage permission, or an API key with the matching scope.
Path parameters
orgIdintegerrequired- Organisation id.
curl "https://api.statusbee.co/user/orgs/5/members" \
-H "Authorization: Bearer sb_live_…"{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"rows": [
{
"id": 30,
"org_id": 5,
"workspace_id": null,
"role": "org_owner",
"status": "active",
"invited_email": null,
"user": {
"id": 12,
"display_name": "QA Bee",
"email": "qa@acme.cloud"
},
"workspace": null,
"accepted_at": "2026-09-14T09:02:11.000Z",
"created_at": "2026-09-14T09:02:11.000Z"
},
{
"id": 31,
"org_id": 5,
"workspace_id": null,
"role": "org_admin",
"status": "pending",
"invited_email": "dana@acme.cloud",
"user": null,
"workspace": null,
"invite_url": "https://app.statusbee.co/invite/inv_7c1d…",
"accepted_at": null,
"created_at": "2026-09-14T09:02:11.000Z"
}
]
}
}Invite a member
/user/orgs/:orgId/membersAn existing user is added immediately; a new address gets an invitation email. The response says whether the email went out and includes the invite link either way.
Needs the members.manage permission, or an API key with the matching scope.
Path parameters
orgIdintegerrequired- Organisation id.
Body
emailstringrequired- The address to invite. Cannot be your own.
rolestringrequiredorg_owner,org_adminororg_billingwithout a workspace;workspace_admin,incident_manager,maintenance_manager,editororviewerwith one.workspace_idinteger- Scope the membership to one workspace. Omit for an organisation-level role.
team_members limit, pending invitations included. A duplicate invitation answers 409.curl -X POST "https://api.statusbee.co/user/orgs/5/members" \
-H "Authorization: Bearer sb_live_…" \
-H "Content-Type: application/json" \
-d '{
"email": "dana@acme.cloud",
"role": "org_admin"
}'{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"id": 31,
"org_id": 5,
"workspace_id": null,
"role": "org_admin",
"status": "pending",
"invited_email": "dana@acme.cloud",
"user": null,
"workspace": null,
"invite_url": "https://app.statusbee.co/invite/inv_7c1d…",
"accepted_at": null,
"created_at": "2026-09-14T09:02:11.000Z",
"email": {
"sent": true,
"transport": "smtp"
}
}
}Resend an invitation
/user/orgs/:orgId/members/:id/resendSends the same link again. 409 if the member has already joined.
Needs the members.manage permission, or an API key with the matching scope.
Path parameters
orgIdintegerrequired- Organisation id.
idintegerrequired- Membership id.
curl -X POST "https://api.statusbee.co/user/orgs/5/members/31/resend" \
-H "Authorization: Bearer sb_live_…"{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"id": 31,
"org_id": 5,
"workspace_id": null,
"role": "org_admin",
"status": "pending",
"invited_email": "dana@acme.cloud",
"user": null,
"workspace": null,
"invite_url": "https://app.statusbee.co/invite/inv_7c1d…",
"accepted_at": null,
"created_at": "2026-09-14T09:02:11.000Z",
"email": {
"sent": true,
"transport": "smtp"
}
}
}Change a member's role
/user/orgs/:orgId/members/:idThe new role must match the membership's scope (organisation or workspace). The last owner cannot be demoted (409).
Needs the members.manage permission, or an API key with the matching scope.
Path parameters
orgIdintegerrequired- Organisation id.
idintegerrequired- Membership id.
Body
rolestringrequired- The new role.
curl -X PATCH "https://api.statusbee.co/user/orgs/5/members/31" \
-H "Authorization: Bearer sb_live_…" \
-H "Content-Type: application/json" \
-d '{
"role": "org_billing"
}'{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"id": 31,
"org_id": 5,
"workspace_id": null,
"role": "org_billing",
"status": "pending",
"invited_email": "dana@acme.cloud",
"user": null,
"workspace": null,
"invite_url": "https://app.statusbee.co/invite/inv_7c1d…",
"accepted_at": null,
"created_at": "2026-09-14T09:02:11.000Z"
}
}Remove a member
/user/orgs/:orgId/members/:idRevokes access at their next request. The last owner cannot be removed (409).
Needs the members.manage permission, or an API key with the matching scope.
Path parameters
orgIdintegerrequired- Organisation id.
idintegerrequired- Membership id.
curl -X DELETE "https://api.statusbee.co/user/orgs/5/members/31" \
-H "Authorization: Bearer sb_live_…"{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"deleted": 1
}
}