---
title: "Claim Workspace"
method: POST
path: "/tenants/{id}/claim"
tags: ["tenants"]
---

# Claim Workspace

`POST /tenants/{id}/claim`

## Request

- Base URL: `https://api.instruxi.dev/api/v1/enforcer`
- URL: `https://api.instruxi.dev/api/v1/enforcer/tenants/{id}/claim`
- Auth: one of:
  - API key in header `Authorization`
  - API key in header `X-API-Key`

Makes the caller's person the OWNER of this workspace (`tenants.owner_person_id`), consuming one slot of their workspace plan — the counterpart of `selfServeTenant` for a workspace that already exists. Requires the caller to be a **tenant_admin of this workspace**: 403 `not_a_workspace_admin` otherwise, including for a platform admin who is not a member and for any portal credential. Only an UNOWNED workspace can be claimed — 409 `workspace_already_owned` if it has an owner, because moving ownership between people is a transfer and needs the current owner's authority, not the claimant's. 403 `workspace_limit_reached`, with the same counts and meaning as on `selfServeTenant`, when the caller already owns their plan's allowance (enforced only where `selfServeTenant` is enforced). Returns the caller's allowance AFTER the claim, the same shape `getSelfServeTenantAllowance` returns.

## Path parameters

- `id` string, required

## Response `200`

OK

- InternalDeliveryHttpHandlerWorkspaceAllowanceResponse
  - `data` InternalDeliveryHttpHandlerWorkspaceAllowanceView
    - `enforced` boolean: Enforced is true when self-serve creation is capped at WorkspaceSlots on this instance; false means the numbers are informational.
    - `has_plan` boolean
    - `mau_per_workspace` integer
    - `owned` integer: Owned is how many live workspaces the caller owns.
    - `plan_id` string: PlanID is the workspace plan: personal | developer | business, or "" when the caller has no plan.
    - `workspace_slots` integer: WorkspaceSlots is the effective number of workspaces the caller may own.
  - `success` boolean

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `409`: Conflict
- `500`: Internal Server Error

---

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