> ## 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 über die in `rest.Rest` eingebettete Schnittstelle `Workspaces` bereitgestellt. Sie sind in den Plänen **Standard, Pro und Enterprise** verfügbar.
</Info>

```go theme={null}
client := rest.NewClient(os.Getenv("SQUARECLOUD_API_KEY"))
defer client.Close()

api := rest.New(client)
```

## Einen Workspace erstellen

```go theme={null}
workspace, err := api.CreateWorkspace("Acme")
if err != nil {
	panic(err)
}

fmt.Println(workspace.ID)
```

Der Name muss 1–32 Zeichen lang sein und das Erstellen eines Workspace erfordert einen aktiven kostenpflichtigen Plan.

## Workspaces auflisten

`api.GetWorkspaces()` gibt jeden Workspace zurück, in dem der authentifizierte Benutzer Besitzer oder Mitglied ist.

```go theme={null}
workspaces, err := api.GetWorkspaces()
if err != nil {
	panic(err)
}

for _, ws := range workspaces {
	fmt.Println(ws.Name, ws.ID)
}
```

## Einen einzelnen Workspace abrufen

Workspace-IDs sind UUID-v4-Werte ohne Bindestriche (32 Hex-Zeichen).

```go theme={null}
workspace, err := api.GetWorkspace("1234567890abcdef1234567890abcdef")
if err != nil {
	panic(err)
}

fmt.Println(workspace.Name)
fmt.Println(workspace.Owner)
fmt.Println(workspace.Members)
fmt.Println(workspace.Applications)
```

## Mitglieder einladen

Das Einladen eines Mitglieds ist ein zweistufiger Handshake — die eingeladene Person weist ihre Zustimmung nach, indem sie von **ihrem** Client aus einen kurzlebigen Code generiert, und der Besitzer löst ihn ein.

```go theme={null}
// 1. From the invitee's own SDK client
otherClient := rest.NewClient(os.Getenv("OTHER_USER_API_KEY"))
defer otherClient.Close()
otherAPI := rest.New(otherClient)

code, err := otherAPI.GetWorkspaceInviteCode()
if err != nil {
	panic(err)
}

// 2. From the workspace owner's client
err = api.AddWorkspaceMember("1234567890abcdef1234567890abcdef", code, "maintain")
if err != nil {
	panic(err)
}
```

<Note>
  Der Einladungscode wird von dem Benutzer generiert, der dem Workspace **beitreten** wird, nicht vom Besitzer. Er ist einmalig verwendbar und läuft nach **5 Minuten** ab — generiere ihn, gib ihn an den Besitzer/Admin weiter und löse ihn zügig ein.
</Note>

### Rollen

| Rolle             | Beschreibung                                                     |
| ----------------- | ---------------------------------------------------------------- |
| `owner` / `admin` | Vollständige Workspace-Verwaltung                                |
| `maintain`        | Operativer Zugriff auf geteilte Anwendungen                      |
| `manager`         | Monitoring plus Anwendungs-Lebenszyklus (Start, Stopp, Neustart) |
| `view`            | Nur-Lese-Zugriff                                                 |

## Die Rolle eines Mitglieds ändern

```go theme={null}
err := api.UpdateWorkspaceMember("1234567890abcdef1234567890abcdef", "abcdef0123456789abcdef01", "admin")
if err != nil {
	panic(err)
}
```

## Ein Mitglied entfernen

```go theme={null}
err := api.RemoveWorkspaceMember("1234567890abcdef1234567890abcdef", "abcdef0123456789abcdef01")
if err != nil {
	panic(err)
}
```

## Anwendungen teilen

```go theme={null}
err := api.AddWorkspaceApplication("1234567890abcdef1234567890abcdef", "abc123def456abc123def456")
if err != nil {
	panic(err)
}

err = api.RemoveWorkspaceApplication("1234567890abcdef1234567890abcdef", "abc123def456abc123def456")
```

## Einen Workspace verlassen oder löschen

<Warning>
  Das Löschen eines Workspace ist unwiderruflich und steht nur dem Besitzer zur Verfügung.
</Warning>

```go theme={null}
// As a member
err := api.LeaveWorkspace("1234567890abcdef1234567890abcdef")

// As the owner (irreversible)
err = api.DeleteWorkspace("1234567890abcdef1234567890abcdef")
```
