---
title: "Create first owner once"
method: POST
path: "/auth/bootstrap-owner"
---

# Create first owner once

`POST /auth/bootstrap-owner`

## Request

- Base URL: `https://api.caveman.so/api/v1`
- URL: `https://api.caveman.so/api/v1/auth/bootstrap-owner`
- Auth: none required

POST /api/v1/auth/bootstrap-owner on the Caveman Cloud control plane. Unauthenticated but rate-limited; it establishes or ends a session rather than reading tenant data. Not exposed to autonomous agents: Not RBAC-guarded — part of the authentication or webhook plane. Agents authenticate through a scoped control-plane session and never touch these directly.

## Response `200`

Owner created

## Other responses

- `400`: cave_bad_request when email, name, organization or slug is missing; cave_weak_password when the password is not 12 to 1024 bytes.
- `403`: cave_bootstrap_disabled when no bootstrap token is configured; cave_bootstrap_token_invalid when the token does not match.
- `409`: cave_bootstrap_owner_exists — the installation already has an owner; sign in instead.
- `2XX`: Successful response. Exact status depends on synchronous or durable delivery outcome.
- `4XX`: Structured failure. `error.code` is stable; `error.request_id` is echoed in the x-cave-request-id header.
- `5XX`: Structured failure. `error.code` is stable; `error.request_id` is echoed in the x-cave-request-id header.

---

[API](https://skmtc.dev/caveman/apis/caveman-cloud-api.md) - [All operations](https://skmtc.dev/caveman/apis/caveman-cloud-api/llms.txt) - [OpenAPI document](https://skmtc.dev/caveman/apis/caveman-cloud-api/revisions/508312d01cfc?raw)
