멤버 초대
이메일 주소로, 역할과 함께, 그리고 선택적으로 수락하는 순간 부여될 주소와 도메인 전체를 함께 지정해 초대합니다.
본인 키로 워크스페이스에 실제 호출을 실행합니다.
POST /members
이메일 주소로, 역할과 함께, 그리고 선택적으로 수락하는 순간 부여될 주소와 도메인 전체를 함께 지정해 초대합니다.
예제
members:write가 필요합니다. 202와 함께 초대장을 반환합니다. 수락하기 전까지는 누구도 워크스페이스에 속하지 않습니다. access는 기본값이 member이며, addressIds와 domainIds에 있는 모든 id에 적용됩니다.
curl -X POST "$OE/members" -H "$AUTH" -H "Content-Type: application/json" \ -d '{ "email": "[email protected]", "roleId": "role_2b81de079c1f0a4b7e05d386", "domainIds": ["93542ff8-2baa-4f2f-841d-5ceaa074ab0d"], "access": "member" }'{ "object": "invitation", "id": "winv_6bb640f5b99e47deb758f1f5", "email": "[email protected]", "role": { "id": "role_2b81de079c1f0a4b7e05d386", "name": "Support", "builtin": null }, "addresses": [], "domains": [ { "domainId": "93542ff8-2baa-4f2f-841d-5ceaa074ab0d", "domain": "acme.com", "access": "member" } ], "expiresAt": "2026-10-02T14:07:31.000Z", "delivered": true, "deliveryError": null, "createdAt": "2026-09-18T14:07:31.000Z"}누구나 초대됩니다. 해당 주소에 이미 OpenEmail 계정이 있든 없든, 응답은 언제나 초대장과 202이며 결코 멤버가 아닙니다. 수락 없이 워크스페이스에 들어가는 사람은 없고, 이 엔드포인트도 앱과 똑같은 규칙을 따릅니다. 이미 워크스페이스에 있는 사람은 member_is_owner, 422로 거부됩니다. 그 사람이 무엇을 할 수 있는지는 대신 PATCH /members/{userId}와 권한 부여 호출로 바꾸십시오.
초대장은 지정한 역할, 주소, 도메인 전체를 담고 있으며, 수락되는 순간 정확히 그것들을 부여합니다. 그전에는 아무것도 부여되지 않습니다. 도메인 전체는 그 도메인의 모든 주소를 포함하며, 초대장을 보낸 뒤에 만들어진 주소도 포함합니다.
사용자 id에 대한 PUT이 아니라 POST인 이유는, 호출자가 사용자 id를 모르며 아직 계정이 없는 사람을 초대하고 있을 수도 있기 때문입니다. 호출자가 아는 것은 이메일 주소입니다.
10분 안에 두 번 요청하면 invitation_too_soon, 409입니다. 그 뒤에는 두 번째 초대장을 보내는 대신 이미 발송된 하나의 초대장을 갱신해 새 링크를 발급하고 이전 링크를 폐기합니다.
delivered: false는 초대장은 존재하지만 이메일이 메일 서버를 떠나지 못했다는 뜻입니다. deliveryError에 서버가 말한 내용이 담깁니다. 상대에게는 아무것도 도착하지 않았으니, 대기 시간이 지난 뒤 앱에서 다시 보내십시오.
invitedBy는 워크스페이스 소유자로 귀속시키지 않고 의도적으로 null로 둡니다. 이 컬럼은 어떤 사람이 초대했는지를 기록하는데, API 키는 사람이 아니기 때문입니다.
워크스페이스 소유자는 member_is_owner, 422로 거부됩니다. 소유자는 멤버가 아니며 멤버로 만들 수도 없습니다.