Skip to content

Create a space

POST
/spaces
curl --request POST \
--url https://spaces.work.optidata.cloud/api/spaces \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "name": "Acme HQ", "description": "The whole company, one floor.", "map": "office-classic" }'

Creates a space owned by the caller. Its slug is derived from slug or name and made unique within the company.

Media typeapplication/json
object
name
required
string
<= 255 characters
slug

Defaults to a slug of name.

string | null
<= 255 characters
description
string | null
<= 255 characters
map
One of:

One of the built-in offices. It is used when your company has no active world of its own.

string
Allowed values: office-classic office-small office-open
Examples
Examplespace
{
"name": "Acme HQ",
"description": "The whole company, one floor.",
"map": "office-classic"
}

The new space.

Media typeapplication/json
object
id
required
integer
uuid
required
string format: uuid
hash
required

The space’s identifier in links.

string
cuid

Your company’s id.

string
owner_uuid

The user who created the space; null for the company’s default space.

string | null
name
required
string
slug
required
string
description
string | null
map

One of the built-in offices. It is used when your company has no active world of its own.

string
Allowed values: office-classic office-small office-open
is_archived
required
boolean
archived_at
string | null format: date-time
created_at
string format: date-time
updated_at
string format: date-time
deleted_at
string | null format: date-time
Examples
Examplecreated
{
"id": 2,
"uuid": "a3051110-3152-412d-a015-6d0228be403e",
"cuid": "7f3c2a10-5b8e-4d21-9c6a-0e4f1b2d3c4a",
"owner_uuid": "2d9e8f70-1a3b-4c5d-8e9f-a0b1c2d3e4f5",
"name": "Acme HQ",
"slug": "acme-hq",
"description": "The whole company, one floor.",
"map": "office-classic",
"hash": "a3051110-31f8-4b91-8026-owt42-e19896afc357",
"is_archived": false,
"created_at": "2026-10-19T14:52:44.000000Z",
"updated_at": "2026-10-19T14:52:44.000000Z"
}

No authentication key was sent.

Media typeapplication/json

Authentication failures use an error key rather than message.

object
error
required
string
Examples
Examplemissing

No bearer token sent

{
"error": "JWT passport exception: Missing bearer token in request"
}

The authentication key is expired or not recognised. Get a fresh one and retry.

Media typeapplication/json

Authentication failures use an error key rather than message.

object
error
required
string
Examples
Exampleexpired
{
"error": "JWT passport expired: Passport expired"
}

The body failed validation.

Media typeapplication/json
object
message
required

The first validation message.

string
errors
required

Validation messages keyed by field name.

object
key
additional properties
Array<string>
Examples
Exampleinvalid
{
"message": "The name field is required. (and 1 more error)",
"errors": {
"name": [
"The name field is required."
],
"map": [
"The selected map is invalid."
]
}
}