Leden opsommen
Iedereen in de workspace, de rol die elk heeft, en de adressen die elk heeft gekregen.
Voert de echte aanroep uit op je workspace, met je eigen sleutel.
GET /members
Iedereen in de workspace, de rol die elk heeft, en de adressen die elk heeft gekregen.
Een lid is twee toekenningen, niet één
export OE=https://api.openemail.ukexport AUTH="Authorization: Bearer $OPENEMAIL_API_KEY"role is wat iemand mag DOEN: één rij, één rol, hetzelfde object dat /roles beschrijft. addresses is WAAROP diegene dat mag doen: één item per adres, elk met zijn eigen access. Een client mag ze niet samenvouwen: een rol met emails:send en een lege addresses-array is iemand die vanuit niets mag versturen, en een volle addresses-array onder een viewer-rol is eveneens iemand die vanuit niets mag versturen. Het verzendpad controleert beide, en een scherm dat er één van toont zal met overtuiging de verkeerde weigering uitleggen.
De adresrijen zeggen access waar de opgeslagen kolom role zegt, en die hernoeming is het punt en geen opruimactie: dit object heeft al een role-veld dat iets heel anders betekent, en twee roles die één nestniveau uit elkaar liggen met waarden uit twee verschillende vocabulaires is een bug die wacht op de eerste persoon die er snel overheen leest. access is member, wat het adres leest en eruit verstuurt, of viewer, wat het alleen leest.
implied: true betekent dat NIEMAND DEZE ROL HEEFT GEKOZEN. Delen bestond al lang voordat rollen er waren, dus de meeste mensen met toegang tot een mailbox hebben adrestoekenningen en helemaal geen ledenrij; in plaats van hun hun post te ontzeggen totdat er een backfill is gedraaid, leidt de service een ingebouwde rol af uit de ruimste toekenning die ze hebben en rapporteert die met een null role.id. Toon dat als "afgeleid uit toegang" en niet als een rol die iemand heeft gekozen. Totdat een PATCH de afleiding in een beslissing verandert, verbreedt het verruimen van hun adrestoegang stilzwijgend ook wat ze mogen doen.
De EIGENAAR is de EERSTE rij, gemarkeerd met isOwner: true, met role.builtin gelijk aan owner. Dat is het account waarop de workspace is gesleuteld, die heeft per definitie elke permissie, en POST, PATCH en DELETE weigeren die alle drie met member_is_owner. Een niet-gedeelde workspace meldt dus één lid in plaats van geen. Tel het aantal plaatsen door isOwner uit te sluiten.
Voorbeeld
Vereist members:read. De eigenaar komt eerst, daarna iedereen op e-mailadres in plaats van op moment van toetreden, omdat deze lijst wordt gelezen om één persoon te vinden en niet om te zien wat er veranderd is.
curl "$OE/members" -H "$AUTH"{ "object": "list", "data": [ { "object": "member", "userId": "nQ8vBz1aRd4tYwKx7fQ2mN8vBz1aRd4t", "email": "[email protected]", "name": "Sam Okonjo", "image": null, "role": { "id": "role_2b81de079c1f0a4b7e05d386", "name": "Support", "builtin": null }, "implied": false, "permissions": [ "emails:send", "emails:read", "threads:read", "threads:write", "labels:read", "labels:write", "contacts:read" ], "addresses": [ { "addressId": "2b81de07-9c1f-4a4b-8e05-d3862c1f0a44", "address": "[email protected]", "access": "member" }, { "addressId": "c40a95f2-1cc6-4d31-82a8-9e075d31c2a8", "address": "[email protected]", "access": "viewer" } ], "createdAt": "2026-08-12T14:20:00.000Z" }, { "object": "member", "userId": "7fQ2mN8vBz1aRd4tYwKx7fQ2mN8vBz1a", "email": "[email protected]", "name": null, "image": null, "role": { "id": null, "name": "Viewer", "builtin": "viewer" }, "implied": true, "permissions": [ "emails:read", "drafts:read", "threads:read", "labels:read", "contacts:read", "calendar:read", "templates:read", "rules:read", "connections:read", "settings:read" ], "addresses": [ { "addressId": "c40a95f2-1cc6-4d31-82a8-9e075d31c2a8", "address": "[email protected]", "access": "viewer" } ], "createdAt": null } ], "hasMore": false, "nextCursor": null}Twee groepen in één lijst, en dat moet ook: iemand kan een rol hebben en geen adres, en iemand kan een adres hebben en geen rolrij. Alleen de overlap tonen zou beide verbergen, en in de meeste workspaces is de tweede groep de grootste.
createdAt is null voor iemand die toekenningen heeft maar voor wie nooit een ledenrij is geschreven, dezelfde mensen voor wie implied true is. Het is wanneer diegene een ROL kreeg, niet wanneer er voor het eerst een adres met diegene werd gedeeld.
permissions is de vlakke, herleide lijst in plaats van een verzameling booleans. Een client die vraagt "zit templates:write hierin" kan niet achterlopen op het vocabulaire; een client die { canEditTemplates: true } krijgt aangereikt kan dat stilletjes wel.
Zonder cursor, met de standaardenvelop. Het ledenbestand van een workspace wordt begrensd door met hoeveel mensen de eigenaar hem daadwerkelijk heeft gedeeld, en dat pagineren zou ceremonie zijn voor iets wat een client één keer ophaalt en in zijn geheel rendert.