> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Workspaces

> Erstelle Workspaces, lade Mitglieder ein, verwalte Rollen und teile Anwendungen im Team.

<Info>
  Workspaces werden vom `api.workspaces`-Modul bereitgestellt — eine Neuerung in v4. Sie sind in den Plänen **Standard, Pro und Enterprise** verfügbar.
</Info>

## Einen Workspace erstellen

```typescript theme={null}
const { id: workspaceId } = await api.workspaces.create({ name: "Acme" });
```

Der `name` muss zwischen 1 und 32 Zeichen lang sein.

## Workspaces auflisten

`api.workspaces.list()` liefert jeden Workspace, in dem der authentifizierte Benutzer Eigentümer oder Mitglied ist.

```typescript theme={null}
const workspaces = await api.workspaces.list();

for (const ws of workspaces) {
    console.log(
        `${ws.name} (${ws.memberList.length} members, ${ws.applicationList.length} apps)`,
    );
}
```

<Warning>
  In v3 enthielten `ws.members` und `ws.applications` rohe Daten-Arrays. In v4 sind diese nun **Module** (`ws.members.add(...)`, `ws.applications.add(...)`). Die rohen Arrays wurden nach `ws.memberList` und `ws.applicationList` verschoben.
</Warning>

## Einen einzelnen Workspace abrufen

```typescript theme={null}
const workspace = await api.workspaces.fetch(workspaceId);

console.log(workspace.id);
console.log(workspace.name);
console.log(workspace.owner);
console.log(workspace.createdAt);
console.log(workspace.memberList);
console.log(workspace.applicationList);
```

## Mitglieder einladen

Das Einladen eines Mitglieds ist ein zweistufiger Handshake — der Eingeladene bestätigt seine Zustimmung, indem er von **seinem** Client aus einen kurzlebigen (5-minütigen) Code generiert, und der Eigentümer löst ihn ein.

```typescript theme={null}
// 1. Vom eigenen SDK-Client des Eingeladenen
const otherApi = new SquareCloudAPI(process.env.OTHER_USER_API_KEY!);
const code = await otherApi.workspaces.generateInviteCode();

// 2. Vom Client des Workspace-Eigentümers
await workspace.members.add(code, "maintain");
```

Gültige Rollen für das `group`-Argument:

| Rolle      | Beschreibung                                                   |
| ---------- | -------------------------------------------------------------- |
| `view`     | Nur-Lese-Zugriff                                               |
| `manager`  | Anwendungen verwalten                                          |
| `maintain` | Anwendungen + Mitglieder unterhalb der eigenen Stufe verwalten |
| `admin`    | Voller Admin-Zugriff                                           |

<Note>
  Die Rolle `owner` kann nicht über die API vergeben werden — die Übertragung des Eigentums wird nicht bereitgestellt.
</Note>

## Die Rolle eines Mitglieds ändern

```typescript theme={null}
await workspace.members.update("1234567890abcdef1234567890abcdef", "admin");
```

## Ein Mitglied entfernen

```typescript theme={null}
await workspace.members.remove("1234567890abcdef1234567890abcdef");
```

<Note>
  Nur der Workspace-Eigentümer kann Mitglieder entfernen.
</Note>

## Anwendungen teilen

```typescript theme={null}
await workspace.applications.add("abc123def456abc123def456");
await workspace.applications.remove("abc123def456abc123def456");
```

## Einen Workspace verlassen oder löschen

```typescript theme={null}
// Als Mitglied
await workspace.leave();

// Als Eigentümer (unwiderruflich)
await workspace.delete();
```

Du kannst auch direkt über das Modul per ID löschen oder verlassen:

```typescript theme={null}
await api.workspaces.delete(workspaceId);
await api.workspaces.leave(workspaceId);
```
