Invite a Member

POST /v1/account/invites

Invite someone to join the active account by email address. The person does not need an existing Ngris account at the time of invitation — they're identified by email and assigned the role you specify.

When the invite is created, Ngris sends the recipient an email containing accept and decline links. Independently of email delivery, the invitee can see the pending invite by calling GET /v1/user/invitations from their own session and act on it from there. On acceptance they become a member of this account and can switch into it.

The active account is taken from your session/API key context — there's no account id in the path. Requires the members:write permission. Only one pending invite can exist per email per account; inviting an address that already has a pending invite returns 409.

Request body

email string Req
Email address to invite. Normalised to lowercase and trimmed; must contain an @.
role_uuid string (uuid) Req
The uuid of the role to grant on acceptance (from /account/roles). Must be a role that belongs to the active account.

Deprecated: role_id (integer) is still accepted until the sunset. Send role_uuid; sending both for different objects is a 400 id_uuid_mismatch.

Response (201 Created)

Returns the created invitation under the invitation key.

uuid string (uuid)
The invitation's public id. Use it with DELETE /v1/account/invites/{uuid} to revoke.
account_uuid string (uuid)
The uuid of the account the invitee will join.
invited_email string
Email the invite was addressed to.
role_uuid string (uuid)
The uuid of the role granted on acceptance.
invited_by_user_uuid string (uuid)
The uuid of the user who issued the invite (you).
status string
One of pending, accepted, declined, expired, revoked. Always pending on creation.
expires_at datetime?
When the invitation lapses if not acted on. Omitted when no expiry is set.
created_at, updated_at datetime
RFC 3339 UTC timestamps.

Deprecated: until the sunset this response also carries the legacy integer id and *_id fields. Don't use them; read uuid and the *_uuid fields.

Errors

400 Bad Request
Invalid body, missing/invalid email, missing role_uuid or not a uuid, or role_id and role_uuid name different roles (id_uuid_mismatch).
401 Unauthorized
Missing or invalid auth.
403 Forbidden
Your role lacks the members:write permission on the active account, or the role grants a permission you do not hold yourself.
404 Not Found
role_uuid is not a role of the active account (another account's role reads like an unknown one).
409 Conflict
A pending invitation already exists for that email on this account.
Request
curl -X POST "https://api.ngris.com/v1/account/invites" \ -H "X-API-KEY: <your_api_key>" \ -H "Content-Type: application/json" \ -d '{ "email": "teammate@example.com", "role_uuid": "019a9625-4dd4-7506-aa4b-97bbf9a69640" }'
Python
from ngris import Ngris client = Ngris(api_key="<your_api_key>") invite = client._post_raw("/account/invites", { "email": "teammate@example.com", "role_uuid": "019a9625-4dd4-7506-aa4b-97bbf9a69640", }) print(invite["invitation"]["uuid"])
Response — 201 Created
{ "invitation": { "uuid": "019a89b0-bb2b-76eb-8f22-cf9745345430", "account_uuid": "019a68b9-1a79-7820-a884-41f554aba6bd", "invited_email": "teammate@example.com", "role_uuid": "019a9625-4dd4-7506-aa4b-97bbf9a69640", "invited_by_user_uuid": "019a52c2-ca1e-78ba-ab5c-50362cc29134", "status": "pending", "expires_at": "2026-06-06T13:00:00Z", "created_at": "2026-05-30T13:00:00Z", "updated_at": "2026-05-30T13:00:00Z" } }
Was this helpful?
On this page
Invite a Member
Was this helpful?