---
title: "Provision organization for a new Clerk user"
method: POST
path: "/v1/organizations/signup"
tags: ["Organization"]
---

# Provision organization for a new Clerk user

`POST /v1/organizations/signup`

## Request

- Base URL: `https://api.abm.dev`
- URL: `https://api.abm.dev/v1/organizations/signup`
- Auth: HTTP bearer

Public endpoint for freshly-signed-up Clerk users. Creates a new organization and default workspace, or returns the existing one if the Clerk user/org already maps to an internal organization. Requires a valid Clerk Bearer token in the Authorization header — no pre-existing backend organization is required.

## Request body

- object
  - `organizationName` string: Optional display name for the organization. Defaults to the authenticated user's name or email prefix.
  - `name` string: Optional display name for the owning user (fallback when the Clerk JWT does not carry a name claim).
  - `email` string, email: Optional contact email (fallback when the Clerk JWT does not carry an email claim).

## Response `200`

Organization already existed — returning the existing record (idempotent response)

- SignupOrganizationResponse
  - `organizationId` string, uuid
  - `organizationName` string
  - `organizationSlug` string
  - `clerkOrgId` string: Clerk org ID (org_xxx) linked to this internal organization, if any
  - `clerkUserId` string: Clerk user ID that triggered signup
  - `workspaceId` string, uuid: Default workspace ID created alongside the organization
  - `workspaceName` string
  - `created` boolean: True when a new organization was provisioned by this request; false when an existing record was returned (idempotency)

## Other responses

- `201`: Organization successfully created
- `401`: Missing or invalid API key

---

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