> ## 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

> Créez des workspaces, invitez des membres, gérez les rôles et partagez des applications au sein d'une équipe.

<Info>
  Les workspaces sont exposés par le module `api.workspaces` — un ajout de la v4. Ils sont disponibles sur les plans **Standard, Pro et Enterprise**.
</Info>

## Créer un workspace

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

Le `name` doit comporter entre 1 et 32 caractères.

## Lister les workspaces

`api.workspaces.list()` renvoie tous les workspaces où l'utilisateur authentifié est propriétaire ou membre.

```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>
  En v3, `ws.members` et `ws.applications` contenaient des tableaux de données brutes. En v4, ce sont désormais des **modules** (`ws.members.add(...)`, `ws.applications.add(...)`). Les tableaux bruts ont été déplacés vers `ws.memberList` et `ws.applicationList`.
</Warning>

## Récupérer un workspace unique

```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);
```

## Inviter des membres

Inviter un membre se fait via une négociation en deux étapes — l'invité prouve son consentement en générant un code de courte durée (5 minutes) depuis **son propre** client, et le propriétaire le consomme.

```typescript theme={null}
// 1. From the invitee's own SDK client
const otherApi = new SquareCloudAPI(process.env.OTHER_USER_API_KEY!);
const code = await otherApi.workspaces.generateInviteCode();

// 2. From the workspace owner's client
await workspace.members.add(code, "maintain");
```

Rôles valides pour l'argument `group` :

| Rôle       | Description                                                    |
| ---------- | -------------------------------------------------------------- |
| `view`     | Accès en lecture seule                                         |
| `manager`  | Gérer les applications                                         |
| `maintain` | Gérer les applications + les membres de rang inférieur au sien |
| `admin`    | Administration complète                                        |

<Note>
  Le rôle `owner` ne peut pas être attribué via l'API — le transfert de propriété n'est pas exposé.
</Note>

## Modifier le rôle d'un membre

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

## Retirer un membre

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

<Note>
  Seul le propriétaire du workspace peut retirer des membres.
</Note>

## Partager des applications

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

## Quitter ou supprimer un workspace

```typescript theme={null}
// As a member
await workspace.leave();

// As the owner (irreversible)
await workspace.delete();
```

Vous pouvez également supprimer ou quitter par ID directement depuis le module :

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