---
title: "Invite a member by email"
method: POST
path: "/organizations/{organizationId}/invitations"
tags: ["Organizations"]
---

# Invite a member by email

`POST /organizations/{organizationId}/invitations`

## Request

- Base URL: `https://api.cactal.ai/v1`
- URL: `https://api.cactal.ai/v1/organizations/{organizationId}/invitations`
- Auth: HTTP bearer

Creates an invitation and, by default, emails the recipient an acceptance link; pass `sendEmail: false` to skip the email and deliver the returned `url` through your own channel. The response always includes the acceptance `url`. Requires a role with member management (owner or admin). The invited role defaults to `full_editor` and cannot be `owner`; invitations expire after 48 hours unless a custom `expiresAt` is set. Returns 409 when a pending invitation already exists for the email (pass `resend: true` to cancel it and issue a new one) or when the email already belongs to an organization member. List pending invitations with `organizations.invitations.list`.

## Path parameters

- `organizationId` string, required

## Request body

- object
  - `email` string, email, required
  - `role` 'admin' | 'full_editor' | 'content_editor'
  - `expiresAt` union
    - unknown
    - string, date-time
  - `resend` boolean
  - `callbackUrl` string, uri
  - `sendEmail` boolean: Whether to email the recipient an acceptance link. Defaults to `true`; pass `false` to create the invitation silently and deliver the returned `url` yourself.

## Response `200`

The created invitation with its acceptance URL.

- object
  - `id` string, required: Unique invitation ID.
  - `email` string, required: Invited email address, normalized to lowercase.
  - `role` 'admin' | 'full_editor' | 'content_editor', required: Organization role granted on acceptance. `owner` is never invitable.
  - `status` 'pending' | 'accepted' | 'rejected' | 'canceled', required: Lifecycle status. Only pending invitations can be accepted.
  - `expiresAt` string, date-time, required: When the invitation stops being acceptable (48 hours after creation by default).
  - `createdAt` string, date-time, required: When the invitation was created.
  - `url` string, required: Acceptance URL for the invited email. Anyone signed in with that verified email can accept through it.

## Other responses

- `400`: Validation failed. The response `message` names the first invalid field.
- `401`: Missing, invalid, expired, or revoked API key.
- `403`: The authenticated principal lacks the required capability.
- `404`: The resource does not exist or is outside the principal’s access scope.
- `409`: The request conflicts with the current state of the resource.
- `429`: Rate limit exceeded. Retry after the number of seconds in the `Retry-After` header.

---

[API](https://skmtc.dev/cactal/apis/cactal-api.md) · [All operations](https://skmtc.dev/cactal/apis/cactal-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cactal/apis/cactal-api/revisions/9cd0fb5eacdd?raw)
