Logto Organization invitations API
Organization invitations are used to invite users to join an organization. They are sent via email and contain a link that the user can click to accept the invitation and join the organization.
Organization invitations are used to invite users to join an organization. They are sent via email and contain a link that the user can click to accept the invitation and join the organization.
openapi: 3.0.1
info:
title: Logto API references Account center Organization invitations API
description: 'API references for Logto services.
Note: The documentation is for Logto Cloud. If you are using Logto OSS, please refer to the response of `/api/swagger.json` endpoint on your Logto instance.'
version: Cloud
servers:
- url: https://[tenant_id].logto.app/
description: Logto endpoint address.
security:
- OAuth2:
- all
tags:
- name: Organization invitations
description: Organization invitations are used to invite users to join an organization. They are sent via email and contain a link that the user can click to accept the invitation and join the organization.
paths:
/api/organization-invitations/{id}:
get:
operationId: GetOrganizationInvitation
tags:
- Organization invitations
parameters:
- $ref: '#/components/parameters/organizationInvitationId-root'
responses:
'200':
description: The organization invitation, also contains the organization roles to be assigned to the user when they accept the invitation.
content:
application/json:
schema:
type: object
required:
- tenantId
- id
- inviterId
- invitee
- acceptedUserId
- organizationId
- status
- createdAt
- updatedAt
- expiresAt
- organizationRoles
properties:
tenantId:
type: string
maxLength: 21
id:
type: string
minLength: 1
maxLength: 21
inviterId:
type: string
maxLength: 21
nullable: true
invitee:
type: string
minLength: 1
maxLength: 256
acceptedUserId:
type: string
maxLength: 21
nullable: true
organizationId:
type: string
minLength: 1
maxLength: 21
status:
type: string
enum:
- Pending
- Accepted
- Expired
- Revoked
createdAt:
type: number
updatedAt:
type: number
expiresAt:
type: number
organizationRoles:
type: array
items:
type: object
required:
- id
- name
properties:
id:
type: string
name:
type: string
'400':
description: Bad Request
'401':
description: Unauthorized
'403':
description: Forbidden
'404':
description: Not Found
summary: Get organization invitation
description: Get an organization invitation by ID.
delete:
operationId: DeleteOrganizationInvitation
tags:
- Organization invitations
parameters:
- $ref: '#/components/parameters/organizationInvitationId-root'
responses:
'204':
description: The organization invitation was deleted successfully.
'400':
description: Bad Request
'401':
description: Unauthorized
'403':
description: Forbidden
'404':
description: Not Found
summary: Delete organization invitation
description: Delete an organization invitation by ID.
/api/organization-invitations:
get:
operationId: ListOrganizationInvitations
tags:
- Organization invitations
parameters:
- name: organizationId
in: query
required: false
schema:
type: string
- name: inviterId
in: query
required: false
schema:
type: string
- name: invitee
in: query
required: false
schema:
type: string
responses:
'200':
description: A list of organization invitations, each item also contains the organization roles to be assigned to the user when they accept the invitation.
content:
application/json:
schema:
type: array
items:
type: object
required:
- tenantId
- id
- inviterId
- invitee
- acceptedUserId
- organizationId
- status
- createdAt
- updatedAt
- expiresAt
- organizationRoles
properties:
tenantId:
type: string
maxLength: 21
id:
type: string
minLength: 1
maxLength: 21
inviterId:
type: string
maxLength: 21
nullable: true
invitee:
type: string
minLength: 1
maxLength: 256
acceptedUserId:
type: string
maxLength: 21
nullable: true
organizationId:
type: string
minLength: 1
maxLength: 21
status:
type: string
enum:
- Pending
- Accepted
- Expired
- Revoked
createdAt:
type: number
updatedAt:
type: number
expiresAt:
type: number
organizationRoles:
type: array
items:
type: object
required:
- id
- name
properties:
id:
type: string
name:
type: string
'400':
description: Bad Request
'401':
description: Unauthorized
'403':
description: Forbidden
summary: Get organization invitations
description: Get organization invitations.
post:
operationId: CreateOrganizationInvitation
tags:
- Organization invitations
parameters: []
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- invitee
- organizationId
- expiresAt
- messagePayload
properties:
inviterId:
type: string
maxLength: 21
nullable: true
description: The ID of the user who is inviting the user to join the organization.
invitee:
type: string
format: email
description: The email address of the user to invite to join the organization.
organizationId:
type: string
minLength: 1
maxLength: 21
description: The ID of the organization to invite the user to join.
expiresAt:
type: number
description: The epoch time in milliseconds when the invitation expires.
organizationRoleIds:
type: array
items:
type: string
description: The IDs of the organization roles to assign to the user when they accept the invitation.
messagePayload:
default: false
oneOf:
- type: object
properties:
code:
type: string
link:
type: string
locale:
type: string
uiLocales:
type: string
- type: boolean
format: 'false'
description: The message payload for the "OrganizationInvitation" template to use when sending the invitation via email. If it is `false`, the invitation will not be sent via email.
description: The organization invitation to create.
responses:
'201':
description: The organization invitation was created successfully.
content:
application/json:
schema:
type: object
required:
- tenantId
- id
- inviterId
- invitee
- acceptedUserId
- organizationId
- status
- createdAt
- updatedAt
- expiresAt
- organizationRoles
properties:
tenantId:
type: string
maxLength: 21
id:
type: string
minLength: 1
maxLength: 21
inviterId:
type: string
maxLength: 21
nullable: true
invitee:
type: string
minLength: 1
maxLength: 256
acceptedUserId:
type: string
maxLength: 21
nullable: true
organizationId:
type: string
minLength: 1
maxLength: 21
status:
type: string
enum:
- Pending
- Accepted
- Expired
- Revoked
createdAt:
type: number
updatedAt:
type: number
expiresAt:
type: number
organizationRoles:
type: array
items:
type: object
required:
- id
- name
properties:
id:
type: string
name:
type: string
'400':
description: The organization invitation could not be created. This can happen if the input is invalid or if the expiration date is in the past.
'401':
description: Unauthorized
'403':
description: Forbidden
'422':
description: Unprocessable Content
'501':
description: No email connector is configured for the tenant.
summary: Create organization invitation
description: Create an organization invitation and optionally send it via email. The tenant should have an email connector configured if you want to send the invitation via email at this point.
/api/organization-invitations/{id}/message:
post:
operationId: CreateOrganizationInvitationMessage
tags:
- Organization invitations
parameters:
- $ref: '#/components/parameters/organizationInvitationId-root'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
code:
type: string
link:
type: string
locale:
type: string
uiLocales:
type: string
description: The message payload for the "OrganizationInvitation" template to use when sending the invitation via email.
responses:
'204':
description: The invitation message was resent successfully.
'400':
description: Bad Request
'401':
description: Unauthorized
'403':
description: Forbidden
summary: Resend invitation message
description: Resend the invitation message to the invitee.
/api/organization-invitations/{id}/status:
put:
operationId: ReplaceOrganizationInvitationStatus
tags:
- Organization invitations
parameters:
- $ref: '#/components/parameters/organizationInvitationId-root'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- status
properties:
acceptedUserId:
type: string
maxLength: 21
nullable: true
description: The ID of the user who accepted the organization invitation. Required if the status is "Accepted".
status:
type: string
enum:
- Accepted
- Revoked
description: The status of the organization invitation.
description: The organization invitation status to update.
responses:
'200':
description: The organization invitation status was updated successfully.
content:
application/json:
schema:
type: object
required:
- tenantId
- id
- inviterId
- invitee
- acceptedUserId
- organizationId
- status
- createdAt
- updatedAt
- expiresAt
- organizationRoles
properties:
tenantId:
type: string
maxLength: 21
id:
type: string
minLength: 1
maxLength: 21
inviterId:
type: string
maxLength: 21
nullable: true
invitee:
type: string
minLength: 1
maxLength: 256
acceptedUserId:
type: string
maxLength: 21
nullable: true
organizationId:
type: string
minLength: 1
maxLength: 21
status:
type: string
enum:
- Pending
- Accepted
- Expired
- Revoked
createdAt:
type: number
updatedAt:
type: number
expiresAt:
type: number
organizationRoles:
type: array
items:
type: object
required:
- id
- name
properties:
id:
type: string
name:
type: string
'400':
description: Bad Request
'401':
description: Unauthorized
'403':
description: Forbidden
'422':
description: The organization invitation status could not be updated. This can happen if the current status is not "Pending" or if the status is "Accepted" and the accepted user ID is not provided.
summary: Update organization invitation status
description: Update the status of an organization invitation by ID.
components:
parameters:
organizationInvitationId-root:
in: path
description: The unique identifier of the organization invitation.
required: true
schema:
type: string
name: id
securitySchemes:
OAuth2:
type: oauth2
description: "Logto Management API is a comprehensive set of REST APIs that gives you the full control over Logto to suit your product needs and tech stack. To see the full guide on Management API interactions, visit [Interact with Management API](https://docs.logto.io/docs/recipes/interact-with-management-api/).\n\n### Get started\n\nThe API follows the same authentication principles as other API resources in Logto, with some slight differences. To use Logto Management API:\n\n1. A machine-to-machine (M2M) application needs to be created.\n2. A machine-to-machine (M2M) role with Management API permission `all` needs to be assigned to the application.\n\nOnce you have them set up, you can use the `client_credentials` grant type to fetch an access token and use it to authenticate your requests to the Logto Management API.\n\n### Fetch an access token\n\nTo fetch an access token, you need to make a `POST` request to the `/oidc/token` endpoint of your Logto tenant.\n\nFor Logto Cloud users, the base URL is your Logto endpoint, i.e. `https://[tenant-id].logto.app`. The tenant ID can be found in the following places:\n\n- The first path segment of the URL when you are signed in to Logto Cloud. For example, if the URL is `https://cloud.logto.io/foo/get-started`, the tenant ID is `foo`.\n- In the \"Settings\" tab of Logto Cloud.\n\nThe request should follow the OAuth 2.0 [client credentials](https://datatracker.ietf.org/doc/html/rfc6749#section-4.4) grant type. Here is a non-normative example of how to fetch an access token:\n\n```bash\ncurl --location \\\n --request POST 'https://[tenant-id].logto.app/oidc/token' \\\n --header 'Content-Type: application/x-www-form-urlencoded' \\\n --data-urlencode 'grant_type=client_credentials' \\\n --data-urlencode 'client_id=[app-id]' \\\n --data-urlencode 'client_secret=[app-secret]' \\\n --data-urlencode 'resource=https://[tenant-id].logto.app/api' \\\n --data-urlencode 'scope=all'\n```\n\nReplace `[tenant-id]`, `[app-id]`, and `[app-secret]` with your Logto tenant ID, application ID, and application secret, respectively.\n\nThe response will be like:\n\n```json\n{\n \"access_token\": \"eyJhbG...2g\", // Use this value for accessing the Logto Management API\n \"expires_in\": 3600, // Token expiration in seconds\n \"token_type\": \"Bearer\", // Token type for your request when using the access token\n \"scope\": \"all\" // Scope `all` for Logto Management API\n}\n```\n\n### Use the access token\n\nOnce you have the access token, you can use it to authenticate your requests to the Logto Management API. The access token should be included in the `Authorization` header of your requests with the `Bearer` authentication scheme.\n\nHere is an example of how to list the first page of users in your Logto tenant:\n\n```bash\ncurl --location \\\n --request GET 'https://[tenant-id].logto.app/api/users' \\\n --header 'Authorization: Bearer eyJhbG...2g'\n```\n\nReplace `[tenant-id]` with your Logto tenant ID and `eyJhbG...2g` with the access token you fetched earlier."
flows:
clientCredentials:
tokenUrl: /oidc/token
scopes:
all: All scopes