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

> Crea workspaces, invita miembros, gestiona roles y comparte aplicaciones dentro de un equipo.

<Info>
  Los workspaces se exponen mediante el módulo `api.workspaces` — una novedad de v4. Están disponibles en los planes **Standard, Pro y Enterprise**.
</Info>

## Crear un workspace

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

El `name` debe tener entre 1 y 32 caracteres.

## Listar workspaces

`api.workspaces.list()` devuelve todos los workspaces donde el usuario autenticado es propietario o miembro.

```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` y `ws.applications` contenían arrays de datos sin procesar. En v4 esos son ahora **módulos** (`ws.members.add(...)`, `ws.applications.add(...)`). Los arrays sin procesar se movieron a `ws.memberList` y `ws.applicationList`.
</Warning>

## Obtener un único workspace

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

## Invitar miembros

Invitar a un miembro es un handshake de dos pasos — el invitado demuestra su consentimiento generando un código de corta duración (5 minutos) desde **su** cliente, y el propietario lo consume.

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

Roles válidos para el argumento `group`:

| Rol        | Descripción                                              |
| ---------- | -------------------------------------------------------- |
| `view`     | Acceso de solo lectura                                   |
| `manager`  | Gestionar aplicaciones                                   |
| `maintain` | Gestionar aplicaciones + miembros por debajo de su nivel |
| `admin`    | Administrador completo                                   |

<Note>
  El rol `owner` no se puede asignar a través de la API — la transferencia de propiedad no está expuesta.
</Note>

## Cambiar el rol de un miembro

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

## Eliminar un miembro

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

<Note>
  Solo el propietario del workspace puede eliminar miembros.
</Note>

## Compartir aplicaciones

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

## Salir o eliminar un workspace

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

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

También puedes eliminar o salir por ID directamente desde el módulo:

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