def invite(body = nil, timeout: nil, **fields)def invite: (
?(member_invite | Hash[Symbol | String, untyped])? body,
?timeout: seconds?,
**untyped
) -> invite_resourceCreates a pending invite and emails it. This does not create a member, so the returned value is an invite_resource, not a member_resource: the person becomes a member only when they accept, and until then they live in the invites namespace. Invites expire 3 days after they are sent.
roleId must be a role id from the roles namespace, the id field of a role and not its name. The owner role can never be handed out this way. The email is sent synchronously and the invite is rolled back if delivery fails, so a successful return means the provider accepted the message.
Seats are plan limited and pending invites count against the limit. Free and Dev workspaces allow 1 member in total, Team seats 15 and Enterprise has no seat limit, so on Free and Dev every invite fails with member.seat_limit until the workspace upgrades.
Example
require "envless/sdk"
roles = Envless.roles.list_all
viewer = roles.find { |role| role[:systemKey] == "viewer" }
if viewer
invite = Envless.members.invite(
email: "dev@example.com",
roleId: viewer[:id]
)
puts "#{invite[:id]} #{invite[:status]} #{invite[:expiresAt]}"
endParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
body | member_invite | No | The fields below as one Hash, with Symbol or String keys, in place of the keywords. |
email: | String | Yes | Address to invite, normalised to lowercase by the API. |
roleId: | String | Yes | Role id from the roles namespace to grant on acceptance. |
timeout: | Integer | Float | Rational | No | Seconds each attempt of this call may take, redirects and the response body included, before it raises Envless::NetworkError with timeout? set. Overrides the client's timeout for this call, and 0 turns the limit off. |
Returns
invite_resource with the invite id, email, status, role and expiresAt.
Worth knowing
- Inviting the key owner themselves is rejected outright (
member.self_invite). - A second invite to the same address fails with
invite.already_pending, and an address that already belongs to a member fails withmember.already_exists. - An unknown
roleIdcomes back asrole.not_found, and the owner role asrole.owner_not_assignable.
Required scopes
members:write
Underlying endpoint
POST /members
Request and response schema, every error code, and a live playground.
In TypeScript
envless.members.invite()
The same method in @goenvless/sdk, with the same request, retries and errors.