Výpis členů
Všichni ve workspace, role, kterou každý má, a adresy, které každý dostal.
Spustí skutečné volání proti vašemu pracovnímu prostoru, s vaším vlastním klíčem.
GET /members
Všichni ve workspace, role, kterou každý má, a adresy, které každý dostal.
Člen jsou dva přístupy, ne jeden
export OE=https://api.openemail.ukexport AUTH="Authorization: Bearer $OPENEMAIL_API_KEY"role je to, co smějí DĚLAT: jeden řádek, jedna role, tentýž objekt, který popisuje /roles. addresses je to, NA ČEM to smějí dělat: jedna položka na adresu, každá s vlastním access. Klient je nesmí slučovat: role s emails:send a prázdným polem addresses je někdo, kdo smí odesílat z ničeho, a plné pole addresses pod rolí viewera je zase někdo, kdo smí odesílat z ničeho. Odesílací cesta kontroluje obojí a obrazovka ukazující jen jedno z toho sebejistě vysvětlí špatné odmítnutí.
Řádky adres říkají access tam, kde uložený sloupec říká role, a to přejmenování je pointa, ne úklid: tenhle objekt už pole role má a znamená něco úplně jiného, a dvě role o jednu úroveň zanoření od sebe, nesoucí hodnoty ze dvou různých slovníků, jsou chyba čekající na prvního člověka, který to přečte rychle. access je member, což adresu čte a odesílá za ni, nebo viewer, což ji jen čte.
implied: true znamená, že TUHLE ROLI NIKDO NEVYBRAL. Sdílení vzniklo dávno před rolemi, takže většina lidí s přístupem ke schránce má přístupy k adresám a vůbec žádný řádek člena; místo aby jim služba upírala jejich poštu, dokud neproběhne backfill, odvodí z nejširšího přístupu, který mají, vestavěnou roli a nahlásí ji s role.id rovným null. Zobrazte to jako „odvozeno z přístupu“, ne jako roli, kterou si někdo vybral. Dokud PATCH neudělá z odvození rozhodnutí, rozšíření jejich přístupu k adresám tiše rozšiřuje i to, co smějí dělat.
VLASTNÍK je PRVNÍ řádek, označený isOwner: true, s role.builtin rovným owner. Je to účet, na který je workspace navázán, drží z definice všechna oprávnění a POST, PATCH i DELETE ho odmítají s member_is_owner. Nesdílený workspace tedy hlásí jednoho člena, ne žádného. Místa počítejte s vyloučením isOwner.
Příklad
Vyžaduje members:read. Vlastník je první, pak všichni ostatní podle e-mailu, a ne podle data připojení, protože tenhle výpis se čte kvůli hledání konkrétního člověka, ne kvůli tomu, co se změnilo.
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}Dvě populace v jednom výpisu, a jinak to nejde: někdo může mít roli a žádnou adresu a někdo může mít adresu a žádný řádek s rolí. Výpis jen průniku by skryl obojí a na většině workspaců je ta druhá skupina větší.
createdAt je null u někoho, kdo má přístupy, ale nikdy neměl zapsaný řádek člena – u týchž lidí, u kterých je implied true. Je to okamžik, kdy dostali ROLI, ne kdy s nimi byla poprvé sdílena adresa.
permissions je plochý rozřešený seznam, ne sada booleanů. Klient, který se ptá „je v tom templates:write?“, nemůže zaostat za slovníkem; klient, kterému podáte { canEditTemplates: true }, tiše ano.
Bez cursoru, se standardní obálkou. Členství workspace je omezené tím, s kolika lidmi ho jeho vlastník skutečně sdílel, a stránkovat to by byl obřad před něčím, co si klient stáhne jednou a vykreslí celé.