---
title: "Create invite"
method: POST
path: "/organization/invites"
tags: ["Invites"]
---

# Create invite

`POST /organization/invites`

Create an invite for a user to the organization. The invite must be accepted by the user before they have access to the organization.

## Request body

- InviteRequest
  - `email` string, required — Send an email to this address
  - `role` 'reader' | 'owner', required — `owner` or `reader`
  - `projects` object[] — An array of projects to which membership is granted at the same time the org invite is accepted. If omitted, the user will be invited to the default project for compatibility with legacy behavior. If empty list is passed, the user will not be invited to any projects, including the default one.
    - `id` string, required — Project's public ID
    - `role` 'member' | 'owner', required — Project membership role

## Response `200`

User invited successfully.

- Invite — Represents an individual `invite` to the organization.
  - `object` 'organization.invite', required — The object type, which is always `organization.invite`
  - `id` string, required — The identifier, which can be referenced in API endpoints
  - `email` string, required — The email address of the individual to whom the invite was sent
  - `role` 'owner' | 'reader', required — `owner` or `reader`
  - `status` 'accepted' | 'expired' | 'pending', required — `accepted`,`expired`, or `pending`
  - `created_at` integer, required — The Unix timestamp (in seconds) of when the invite was sent.
  - `expires_at` integer, nullable — The Unix timestamp (in seconds) of when the invite expires.
  - `accepted_at` integer, nullable — The Unix timestamp (in seconds) of when the invite was accepted.
  - `projects` object[], required — The projects that were granted membership upon acceptance of the invite.
    - `id` string, required — Project's public ID
    - `role` 'member' | 'owner', required — Project membership role

## Other responses

- `400` — The invite request is invalid or the user has already joined or been invited.
- `403` — The caller does not have permission to perform this operation.
- `429` — Too many management requests. Reduce the request rate and try again later.

## Changes

- **2026-09-25** `d86203de41ae` — 3 info
  - added the non-success response with the status `400`
  - added the non-success response with the status `403`
  - added the non-success response with the status `429`
- **2026-05-13** `74cbcf73838f` — 4 breaking, 5 info
  - the response property `expires_at` became optional for the status `200`
  - response property `accepted_at` list-of-types was widened by adding types `null` to media type `application/json` of response `200`
  - response property `expires_at` list-of-types was widened by adding types `null` to media type `application/json` of response `200`
  - removed the required property `invited_at` from the response with the `200` status
  - …5 more
- **2024-12-18** `d311deacd11a` — 2 info
  - added the new optional request property `projects`
  - added the optional property `projects` to the response with the `200` status
- **2024-08-06** `8eca3b09b705` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/openai/apis/openapi/changes/organization/invites/post.md)

---

[API](https://skmtc.dev/openai/apis/openapi.md) · [All operations](https://skmtc.dev/openai/apis/openapi/llms.txt) · [OpenAPI document](https://skmtc.dev/openai/apis/openapi/revisions/4b75527da17b?raw)
