Liệt kê thành viên
Mọi người trong không gian làm việc, vai trò của từng người, và các địa chỉ mỗi người được cấp.
Chạy lệnh gọi thật với không gian làm việc của bạn, bằng khóa của chính bạn.
GET /members
Mọi người trong không gian làm việc, vai trò của từng người, và các địa chỉ mỗi người được cấp.
Một thành viên là hai lần cấp quyền, không phải một
export OE=https://api.openemail.ukexport AUTH="Authorization: Bearer $OPENEMAIL_API_KEY"role là những gì họ được LÀM: một hàng, một vai trò, cùng đối tượng mà /roles mô tả. addresses là những gì họ được làm điều đó ĐỐI VỚI: mỗi địa chỉ một mục, mỗi mục mang access riêng. Client không được gộp chúng lại: một vai trò có emails:send với mảng addresses rỗng là người không thể gửi từ đâu cả, và một mảng addresses đầy đủ dưới vai trò viewer cũng là người không thể gửi từ đâu cả. Đường gửi kiểm tra cả hai, và một màn hình chỉ hiển thị một trong hai sẽ tự tin giải thích sai lý do từ chối.
Các hàng địa chỉ dùng access ở chỗ cột lưu trữ dùng role, và việc đổi tên là có mục đích chứ không phải để cho gọn: đối tượng này đã có trường role mang nghĩa hoàn toàn khác, và hai role cách nhau một cấp lồng nhau chứa giá trị từ hai bộ từ vựng khác nhau là một lỗi chỉ chờ người đầu tiên đọc vội. access là member, đọc địa chỉ và gửi thư với tư cách địa chỉ đó, hoặc viewer, chỉ đọc.
implied: true nghĩa là KHÔNG AI CHỌN VAI TRÒ NÀY. Tính năng chia sẻ ra đời từ rất lâu trước vai trò, nên hầu hết những người có quyền truy cập hộp thư đều giữ quyền cấp địa chỉ và hoàn toàn không có hàng thành viên; thay vì chặn họ khỏi thư cho đến khi backfill chạy xong, dịch vụ suy ra một vai trò dựng sẵn từ quyền cấp rộng nhất họ có và báo cáo nó với role.id là null. Hãy hiển thị điều đó là “suy ra từ quyền truy cập” thay vì như một vai trò ai đó đã chọn. Cho đến khi một lệnh PATCH biến suy luận thành quyết định, việc mở rộng quyền truy cập địa chỉ của họ sẽ lặng lẽ mở rộng những gì họ được làm.
CHỦ SỞ HỮU là hàng ĐẦU TIÊN, được đánh dấu isOwner: true, với role.builtin là owner. Họ là tài khoản mà không gian làm việc gắn với, theo định nghĩa họ có mọi quyền, và POST, PATCH và DELETE đều từ chối họ với member_is_owner. Vì vậy, một không gian làm việc chưa chia sẻ báo cáo một thành viên chứ không phải không có ai. Hãy đếm số chỗ bằng cách loại trừ isOwner.
Ví dụ
Cần members:read. Chủ sở hữu đứng đầu, sau đó là mọi người khác sắp theo email thay vì theo thời điểm tham gia, vì danh sách này được đọc để tìm một người chứ không phải để xem điều gì đã thay đổi.
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}Hai nhóm người trong một danh sách, và bắt buộc phải như vậy: ai đó có thể có vai trò mà không có địa chỉ, và ai đó có thể có địa chỉ mà không có hàng vai trò. Chỉ liệt kê phần giao nhau sẽ ẩn cả hai nhóm, và trên hầu hết không gian làm việc, nhóm thứ hai là nhóm lớn hơn.
createdAt là null đối với người có quyền cấp nhưng chưa từng có hàng thành viên được ghi, cũng chính là những người có implied là true. Đó là thời điểm họ được gán VAI TRÒ, không phải thời điểm họ lần đầu được chia sẻ một địa chỉ.
permissions là danh sách phẳng đã được phân giải thay vì một tập boolean. Client hỏi “danh sách này có bao gồm templates:write không” sẽ không thể tụt hậu so với bộ từ vựng; client nhận { canEditTemplates: true } thì có thể, một cách lặng lẽ.
Không dùng cursor, với envelope chuẩn. Số thành viên của một không gian làm việc bị giới hạn bởi số người mà chủ sở hữu thực sự đã chia sẻ, và phân trang cho điều đó chỉ là thủ tục thừa trước một thứ mà client tải một lần và hiển thị trọn vẹn.