---
title: "Create organization"
method: POST
path: "/v1/organizations"
tags: ["Organizations"]
---

# Create organization

`POST /v1/organizations`

## Request

- Base URL: `https://api.inth.com`
- URL: `https://api.inth.com/v1/organizations`
- Auth: HTTP bearer

Creates an organization owned by the caller, on the free plan. Requires organizations.write and a user token; organization API keys belong to one organization and are refused with 403.

## Request body

- CreateOrganizationRequest
  - `name` string, required: Organization display name, 3 to 255 characters after trimming.
  - `slug` string, required: Organization URL segment, 3 to 20 characters of lowercase letters, numbers, and single hyphens. A slug any organization has ever used stays reserved and is refused with 409.

## Response `201`

Created organization.

- object
  - `success` true, required
  - `data` Organization, required
    - `id` string, required
    - `slug` string, required
    - `name` string, required
    - `role` 'owner' | 'admin' | 'member', required: The role of the calling credential in this organization.

## Other responses

- `400`: The request payload or parameters are invalid.
- `401`: Authentication is missing, invalid, or expired.
- `403`: The credential is valid but may not perform the operation. `INSUFFICIENT_SCOPE`: the credential was never granted the capability the operation needs. `details.requiredScope` names it, and the `WWW-Authenticate` header carries `Bearer error="insufficient_scope"`. An OAuth client fixes this by requesting the scope; an organization API key cannot gain it. `FORBIDDEN`: the capability is present but the membership behind the credential lacks the role, or the resource belongs to another organization.
- `409`: The request conflicts with the current resource state.
- `413`: The request body exceeds the 1 MB limit.
- `422`: The caller has reached a plan limit for this resource.
- `429`: The rate limit was exceeded. API key limits are set by plan tier (Starter 600/min, Pro 1500/min, Enterprise 3000/min). Check the Retry-After header before retrying.
- `500`: An unexpected internal error occurred.

## Changes

- **2026-09-08** `66c8f6ac2730`: 3 breaking, 35 warning, 11 info
  - removed the required property `data/organizationId` from the response with the `201` status
  - removed the required property `data/organizationName` from the response with the `201` status
  - removed the required property `data/organizationSlug` from the response with the `201` status
  - added the new `INSUFFICIENT_CREDITS` enum value to the `error/code` response property for the response status `400`
  - …45 more
- **2026-09-07** `be753bff5046`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/inth/apis/inth-api/changes/v1/organizations/post.md)

---

[API](https://skmtc.dev/inth/apis/inth-api.md) - [All operations](https://skmtc.dev/inth/apis/inth-api/llms.txt) - [OpenAPI document](https://skmtc.dev/inth/apis/inth-api/revisions/5a1be8d43402?raw)
