POST
Invite a member (client account)
Client space User accounts only For: Administrator · Permission: invitations.create Conditions
  • The caller must be a member; agent accounts are refused.
  • The email must be a valid address (format and domain checked).
  • The person must not already be a member of the current client account (an inactive member counts).
  • profile_ids must contain at least one distinct identifier; each profile must belong to the current space and be a custom profile or the built-in read only profile. The administrator profile cannot be given by invitation.
  • pseudo, when sent, must be non-empty, at most 250 characters and not used (ignoring case and surrounding spaces) by a member or by another pending invitation of the space; the pending invitation for the same email does not conflict.
What else happens
  • Creates a pending invitation valid for 7 days.
  • When a pending, unexpired invitation already exists for the same email, it is renewed instead (same record, new 7-day expiry, pseudo and profile_ids replaced); links sent earlier stop working.
  • Unaccepted invitations for the same email that are expired are marked expired; accepted ones are kept.
  • After the transaction commits, emails an invitation link to the company frontend (client invitations use the same frontend as company ones); the link carries a token and whether the person already has an account.
  • When the email already has an account, also sends the person an in-app notification.
  • Reserves the pseudo, if given, until the invitation is accepted, expires or is deleted.
Part of Invite and onboard members.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Query Parameters

response
enum<string>
default:none

Response mode. Default none; none answers 204 No Content.

Available options:
none,
resource
fields
string

Comma-separated JSON keys of the root resource (id is always rendered). Available: id, email, pseudo, expired_at, profile_ids, status, accepted_at, created_at, updated_at.

include
string

Comma-separated include paths, each optionally followed by its fields in parentheses: units(id,sku),units.uomUnit(id,name). Max depth 6, max 40 paths. Available: .

Body

application/json
email
string<email>
required

Email address to invite. A person who is already a member of the space cannot be invited. Inviting an address that has a pending invitation renews that invitation.

profile_ids
string[]
required

Identifiers (27-character KSUID strings) of the profiles the person receives when accepting. At least one; no duplicates. Each must be a custom profile of the current space or the built-in read only profile.

Minimum array length: 1
Required string length: 27
pseudo
string | null

Display name the person gets as a member once the invitation is accepted, at most 250 characters, surrounding spaces removed. Optional, but when sent it cannot be empty. It must be unique among the members and pending invitations of the space; a pending invitation for the same email does not conflict with its own pseudo.

Maximum string length: 250

Response

Resource (only with response=resource).

id

Identifier of the invitation (27-character KSUID string).

email

Email address the invitation was sent to.

pseudo

Display name reserved for the member the invitation creates, or null when none was given (the member is then named after their first and last name).

expired_at

Date and time the invitation expires (ISO 8601, UTC), 7 days after it was sent or renewed.

profile_ids
any[]

Identifiers of the profiles the person receives when accepting.

status

Effective status: pending (waiting and not past expired_at), accepted, or expired (marked expired, or past expired_at without being accepted).

accepted_at

Date and time the invitation was accepted (ISO 8601, UTC); null until then.

created_at

Date and time the record was created (ISO 8601, UTC).

updated_at

Date and time the record was last changed (ISO 8601, UTC).