# Workspaces – API reference

> The workspaces a key may use, and their members.

The workspaces a key may use, and their members.

## Who am I

**`GET https://api.lifebutler.io/v1/me`** · scope `workspaces:read` · MCP tool `get_me`

The account behind the key, its plan, and the key's scopes. A cheap way to test a key.

### Request

```bash
curl "https://api.lifebutler.io/v1/me" \
  -H "Authorization: Bearer $LIFEBUTLER_KEY"
```

### Response `200`

| Field | Type | Description |
|---|---|---|
| `userId` | string |  |
| `plan` | string | pro or premium. |
| `key` | object |  |
| `key.id` | string |  |
| `key.scopes` | array of string |  |
| `key.expiresAt` | string or null |  |
| `sharedWorkspaceLimit` | number | Shared workspaces your plan allows for the API (the personal one is always included). |

```json
{
  "userId": "Ab3Cd5Ef7G",
  "plan": "string",
  "key": {
    "id": "Ab3Cd5Ef7G",
    "scopes": [
      "string"
    ],
    "expiresAt": "2026-11-20T19:30:00+01:00"
  },
  "sharedWorkspaceLimit": 1
}
```

## List workspaces

**`GET https://api.lifebutler.io/v1/workspaces`** · scope `workspaces:read` · MCP tool `list_workspaces`

The workspaces this key was granted, each with a status. Only workspaces where you are owner or admin can be used; the ids are what every other call takes as workspaceId.

### Request

```bash
curl "https://api.lifebutler.io/v1/workspaces" \
  -H "Authorization: Bearer $LIFEBUTLER_KEY"
```

### Response `200`

| Field | Type | Description |
|---|---|---|
| `data` | array of Workspace |  |
| `data[].id` | string |  |
| `data[].name` | string | Empty for the personal workspace. |
| `data[].type` | string | personal, family, flat, friends, club, trip or company. |
| `data[].personal` | boolean |  |
| `data[].role` | string or null | Your role: owner or admin (null when not accessible). |
| `data[].aiEnabled` | boolean | AI features (document analysis, smart search, butler) are turned on by the workspace admins. |
| `data[].status` | `active` \| `admin_required` \| `workspace_limit` \| `not_found` | active, or why this key can't use the workspace right now. |

```json
{
  "data": [
    {
      "id": "Ab3Cd5Ef7G",
      "name": "Einkauf",
      "type": "string",
      "personal": false,
      "role": "string",
      "aiEnabled": false,
      "status": "active"
    }
  ]
}
```

## Get a workspace

**`GET https://api.lifebutler.io/v1/workspaces/{workspaceId}`** · scope `workspaces:read` · MCP tool `get_workspace`

Name, type and whether AI features are on.

### Path

| Field | Type | Description |
|---|---|---|
| `workspaceId` | string | Workspace id (from list_workspaces). |

### Request

```bash
curl "https://api.lifebutler.io/v1/workspaces/f8Hn3wQz0a" \
  -H "Authorization: Bearer $LIFEBUTLER_KEY"
```

### Response `200`

| Field | Type | Description |
|---|---|---|
| `id` | string |  |
| `name` | string | Empty for the personal workspace. |
| `type` | string | personal, family, flat, friends, club, trip or company. |
| `personal` | boolean |  |
| `role` | string or null | Your role: owner or admin (null when not accessible). |
| `aiEnabled` | boolean | AI features (document analysis, smart search, butler) are turned on by the workspace admins. |
| `status` | `active` \| `admin_required` \| `workspace_limit` \| `not_found` | active, or why this key can't use the workspace right now. |

```json
{
  "id": "Ab3Cd5Ef7G",
  "name": "Einkauf",
  "type": "string",
  "personal": false,
  "role": "string",
  "aiEnabled": false,
  "status": "active"
}
```

## List members

**`GET https://api.lifebutler.io/v1/workspaces/{workspaceId}/members`** · scope `workspaces:read` · MCP tool `list_members`

Everyone in the workspace, including members without an account. Use the ids to assign tasks and invite to appointments.

### Path

| Field | Type | Description |
|---|---|---|
| `workspaceId` | string | Workspace id (from list_workspaces). |

### Request

```bash
curl "https://api.lifebutler.io/v1/workspaces/f8Hn3wQz0a/members" \
  -H "Authorization: Bearer $LIFEBUTLER_KEY"
```

### Response `200`

| Field | Type | Description |
|---|---|---|
| `data` | array of Member |  |
| `data[].id` | string | Use in attendeeIds / assigneeIds. |
| `data[].name` | string |  |
| `data[].role` | string | owner, admin, adult, child or guest. |
| `data[].hasAccount` | boolean | false for members without an account (kids, pets, grandparents). |

```json
{
  "data": [
    {
      "id": "Ab3Cd5Ef7G",
      "name": "Einkauf",
      "role": "string",
      "hasAccount": false
    }
  ]
}
```
