تخطَّ إلى المستندات
API

سرد الأعضاء

كل من في مساحة العمل، والدور الذي يحمله كلٌّ منهم، والعناوين التي أُعطيت له.

GETapi.openemail.uk/members

ينفّذ الاستدعاء الحقيقي على مساحة عملك، بمفتاحك أنت.

GET /members

كل من في مساحة العمل، والدور الذي يحمله كلٌّ منهم، والعناوين التي أُعطيت له.

العضو منحان لا منح واحد

shell
export OE=https://api.openemail.ukexport AUTH="Authorization: Bearer $OPENEMAIL_API_KEY"

role هو ما يُسمح له بفعله: صف واحد، دور واحد، الكائن نفسه الذي يصفه /roles. وaddresses هو ما يُسمح له بفعله عليه: مدخل واحد لكل عنوان، يحمل كلٌّ منها قيمة access خاصة به. وعلى العميل ألّا يدمجهما: دور يحمل emails:send مع مصفوفة addresses فارغة هو شخص يستطيع الإرسال من لا شيء، ومصفوفة addresses ممتلئة تحت دور viewer هي شخص يستطيع الإرسال من لا شيء أيضًا. مسار الإرسال يفحص الاثنين، والشاشة التي تعرض أحدهما ستشرح بثقة سبب الرفض الخطأ.

صفوف العناوين تقول access بينما العمود المخزَّن يقول role، وإعادة التسمية هي المقصد لا مجرد ترتيب: هذا الكائن يحمل أصلًا حقل role يعني شيئًا آخر تمامًا، ووجود حقلَي role على بُعد مستوى تعشيش واحد يحملان قيمًا من مفردتين مختلفتين هو خطأ ينتظر أول من يقرأه بسرعة. وaccess إما member، الذي يقرأ العنوان ويرسل باسمه، أو viewer، الذي يقرأه فقط.

implied: true تعني أن لا أحد اختار هذا الدور. فالمشاركة شُحنت قبل الأدوار بزمن طويل، ولذلك فمعظم من لديهم وصول إلى صندوق بريد يحملون منح عناوين ولا صف عضوية لهم إطلاقًا؛ وبدلًا من حرمانهم من بريدهم حتى تُشغَّل عملية ردم، تستنتج الخدمة دورًا مدمجًا من أوسع منح يحملونه وتُبلغ به مع role.id فارغ. اعرض ذلك على أنه «مستنتَج من الوصول» لا على أنه دور اختاره أحد. وإلى أن يحوّل PATCH الاستنتاج إلى قرار، فإن توسيع وصولهم إلى العناوين يوسّع بصمت ما يُسمح لهم بفعله.

المالك هو الصف الأول، مُعلَّمًا بـ isOwner: true، وبـ role.builtin يساوي owner. وهو الحساب الذي تُبنى عليه مساحة العمل، ويحمل كل إذن بحكم التعريف، وكل من POST وPATCH وDELETE يرفضه بالرمز member_is_owner. ولذلك فإن مساحة عمل غير مشتركة تُبلغ بعضو واحد لا بصفر. احسب المقاعد باستبعاد isOwner.

مثال

يتطلب members:read. المالك أولًا، ثم الجميع مرتبين بالبريد الإلكتروني لا بتاريخ الانضمام، لأن هذه القائمة تُقرأ للعثور على شخص واحد لا لمعرفة ما تغيّر.

curl
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}

فئتان في قائمة واحدة، ولا بد من ذلك: قد يحمل شخص دورًا بلا عنوان، وقد يحمل عنوانًا بلا صف دور. وسرد التقاطع وحده كان سيخفي الفئتين، وفي معظم مساحات العمل تكون الفئة الثانية هي الأكبر.

createdAt تكون null لمن يملك منحًا ولم يُكتب له صف عضوية قط، وهم أنفسهم من تكون implied صحيحة لهم. وهي وقت إعطائه دورًا، لا وقت أول مشاركة عنوان معه.

permissions هي القائمة المسطّحة المحسومة لا مجموعة قيم منطقية. فالعميل الذي يسأل «هل تتضمن templates:write» لا يمكن أن يتخلّف عن المفردات؛ أما العميل الذي يُسلَّم { canEditTemplates: true } فيتخلّف بصمت.

بلا cursor، مع الغلاف القياسي. فعضوية مساحة العمل محدودة بعدد من شاركها مالكها فعلًا، وتقسيمها إلى صفحات طقس شكلي أمام شيء يجلبه العميل مرة واحدة ويرسمه كاملًا.