---
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

## Changes

- **2026-05-01** `918e83711c91` — 1 breaking, 3 info
  - the response property `expires_at` became optional for the status `200`
  - the response property `projects` became required for the status `200`
  - the response property `projects/items/id` became required for the status `200`
  - the response property `projects/items/role` became required for the status `200`
- **2026-05-01** `72f65c459c35` — 3 breaking, 1 info
  - 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
  - added the required property `created_at` to the response with the `200` status
- **2026-04-28** `fa32d6e7d961` — 1 info
  - the endpoint scheme security `AdminApiKeyAuth` was added to the API

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

---

[API](https://skmtc.dev/openai/apis/openai-api.md) · [All operations](https://skmtc.dev/openai/apis/openai-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/openai/openai-api/revisions/dcd35773a322/schema)
