elaichi__invite__create
Invite somebody who is not yet a member into this organization by email: mints a fresh accept link and emails it to them, the same as the Invite button in Settings → People. A member holds exactly ONE role, so role_ids must carry exactly one id (role.list) — the role they land with the moment they accept, the same cardinality member.set_roles enforces; team_ids is optional and puts them straight into those teams on acceptance. You cannot invite someone at a role that carries a permission you do not hold yourself — the same ceiling member.set_roles enforces. Refuses with a conflict when the address already belongs to a member of this organization; check member.list first if you are not sure. Some addresses are refused for reasons this operation will not disclose — treat that refusal as final rather than retrying the same address a different way. Returns the created invite record — id (inv_…), email, role_ids, team_ids, status, expires_at — plus email_sent; the raw accept link itself is never returned here, unlike the console’s copy-link view, because the email IS the delivery channel on this surface — if email_sent is false, tell the user delivery failed and that resending the SAME invitation is a human action in Settings → People, but inviting the address again from here is not blocked. To revoke a pending invitation, use invite.delete; to see who is still waiting, invite.list. NOT CALLABLE FROM ANY AI SURFACE, in-app agent or MCP: an invitation is a redeemable credential for an address the caller names, so it needs step-up reauthentication (confirming it is really you), which neither surface can ask for — every call from here is refused before anything is written or emailed. Say what needs doing and tell the user to do it in Settings → People in the Elaichi app.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Address to invite. Case-insensitive; stored lowercased. | ||
| role_ids | Yes | Exactly one role id (`role_…`, from role.list) — an invite carries exactly one role, the role the invitee holds the moment they accept. | |
| team_ids | No | Team ids (`team_…`, from team.list) the invitee joins immediately on acceptance. Optional; omit or send an empty array for none. |