---
name: metabase_list_memberships
kind: function
lang: py
domain: infra
version: "1.0.0"
purity: impure
signature: "def metabase_list_memberships(client: MetabaseClient) -> dict[str, list[dict]]"
description: "Lista todas las membresías de grupos de Metabase. Endpoint: GET /api/permissions/membership. Retorna dict con group_id (str) como clave y lista de membresías como valor."
tags: [metabase, permissions, membership, groups, users, api, python]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: []
params:
  - name: client
    desc: "instancia autenticada de MetabaseClient con permisos de superusuario"
output: "dict[str, list[dict]]: mapa de group_id (str) a lista de membresías, cada una con membership_id, user_id, group_id, is_group_manager"
tested: false
tests: []
test_file_path: ""
file_path: "python/functions/metabase/permissions.py"
---

## Ejemplo

```python
memberships = metabase_list_memberships(client)
for group_id, members in memberships.items():
    for m in members:
        print(m["user_id"], m["membership_id"], m["is_group_manager"])
```

## Notas

La respuesta nativa de Metabase es un dict indexado por group_id como string, no una lista plana. Para buscar la membresía de un usuario en un grupo específico, hay que iterar `memberships.get(str(group_id), [])`.
