---
title: "Create a space"
method: POST
path: "/spaces"
---

# Create a space

`POST /spaces`

Creates a new Ghost space. Requires user authentication (JWT).
API keys cannot be used to create spaces.
When no name is provided, the space is named after its owner
(e.g. "Jane Doe's space").

## Request body

- CreateSpaceRequest
  - `name` string — Name for the new space. When omitted, the space is named after its owner (e.g. "Jane Doe's space").

## Response `201`

Space created

- Space — A Ghost space.
  - `id` string, required — Space ID.
  - `name` string, required — Space name.
  - `role` 'owner' | 'admin' | 'developer' | 'viewer' — A member's role within a space. The `owner` role belongs to the user who created the space; every space has exactly one owner, so `owner` is never accepted as an input when granting a role. On the `Space` schema, this is the caller's own role in the space, omitted for API-key authentication (API keys are space-scoped and carry no member identity).

## Other responses

- `default` — Error response

## Changes

- **2026-06-22** `bdf92f48aec1` — 1 info
  - added the optional property `code` to the response with the `default` status
- **2026-06-15** `be627b9fb511` — 1 info
  - added the optional property `role` to the response with the `201` status
- **2026-06-12** `3df7d8e78add` — 1 info
  - the request property `name` became optional
- **2026-04-17** `a7becb6668ec` — 1 breaking, 2 warning
  - the request property `name` became required
  - removed the optional property `code` from the response with the `default` status
  - removed the optional property `role` from the response with the `201` status

[Change history](https://skmtc.dev/timescale/apis/ghost-api/changes/spaces/post.md)

---

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