Browse the docs

Organizations and members

The billing account: its workspaces, its entitlements, and the people in it.

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

GET/user/orgs

Organisations the signed-in user belongs to. Session credentials only.

Request
curl "https://api.statusbee.co/user/orgs" \
  -H "Authorization: Bearer sb_live_…"
Response
{
  "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

GET/user/orgs/:orgId

The organisation, its active workspaces, and the resolved entitlements for its plan.

Path parameters

orgIdintegerrequired
Organisation id.
Request
curl "https://api.statusbee.co/user/orgs/5" \
  -H "Authorization: Bearer sb_live_…"
Response
{
  "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

PATCH/user/orgs/:orgId

Needs 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.
Request
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"
}'
Response
{
  "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

POST/user/orgs/:orgId/workspaces

Counts 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.
Request
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"
}'
Response
{
  "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

GET/user/orgs/:orgId/members

Every 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.
Request
curl "https://api.statusbee.co/user/orgs/5/members" \
  -H "Authorization: Bearer sb_live_…"
Response
{
  "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

POST/user/orgs/:orgId/members

An 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.
rolestringrequired
org_owner, org_admin or org_billing without a workspace; workspace_admin, incident_manager, maintenance_manager, editor or viewer with one.
workspace_idinteger
Scope the membership to one workspace. Omit for an organisation-level role.
Counts against the plan's team_members limit, pending invitations included. A duplicate invitation answers 409.
Request
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"
}'
Response
{
  "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

POST/user/orgs/:orgId/members/:id/resend

Sends 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.
Request
curl -X POST "https://api.statusbee.co/user/orgs/5/members/31/resend" \
  -H "Authorization: Bearer sb_live_…"
Response
{
  "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

PATCH/user/orgs/:orgId/members/:id

The 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.
Request
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"
}'
Response
{
  "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

DELETE/user/orgs/:orgId/members/:id

Revokes 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.
Request
curl -X DELETE "https://api.statusbee.co/user/orgs/5/members/31" \
  -H "Authorization: Bearer sb_live_…"
Response
{
  "statusCode": 200,
  "error": false,
  "message": null,
  "data": {
    "deleted": 1
  }
}