Create a space
POST
/spaces
const url = 'https://spaces.work.optidata.cloud/api/spaces';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"name":"Acme HQ","description":"The whole company, one floor.","map":"office-classic"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}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.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”Media typeapplication/json
object
Examples
Examplespace
{ "name": "Acme HQ", "description": "The whole company, one floor.", "map": "office-classic"}Responses
Section titled “ Responses ”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
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." ] }}