Workplace API
Retrieve a list of team settings or a specific team setting by ID, with optional filter for external ID.
Optional ID of the location to retrieve relative settings.
Optional ID of the team to retrieve settings for.
Optional external ID to filter team settings (matches team's external_id).
Number of items to skip for pagination.
0
Maximum number of items to return.
25
Field to sort by.
Sort order, 'asc' or 'desc'.
asc
Possible values: OK
Bad Request
GET /workplace/v1/team/settings HTTP/1.1
Host: api.gospace.app
x-api-key: YOUR_API_KEY
Accept: */*
{
"success": true,
"data": {
"team_settings": [
{
"_id": "team-setting-1",
"team_id": "team-1",
"external_id": "ext-456",
"settings": {
"team_name": "Accounting",
"details": {
"priority": "high"
}
}
},
{
"_id": "team-setting-2",
"team_id": "team-2",
"external_id": "ext-789",
"settings": {
"team_name": "Planning",
"details": {
"priority": "medium"
}
}
}
],
"pagination": {
"current_results": {
"from": 1,
"to": 25
},
"total_results": 20
}
},
"identifier": "get_team_settings_successful"
}
Update multiple existing team settings.
OK
Bad Request
Not Found
PUT /workplace/v1/team/settings HTTP/1.1
Host: api.gospace.app
x-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 304
{
"team_settings": [
{
"_id": "team-setting-1",
"team_id": "team-1",
"external_id": "ext-456",
"settings": {
"team_name": "Accounting Updated",
"details": {
"priority": "high"
}
}
},
{
"_id": "team-setting-2",
"team_id": "team-2",
"external_id": "ext-789",
"settings": {
"team_name": "Planning Updated",
"details": {
"priority": "low"
}
}
}
]
}
{
"success": true,
"data": {
"team_settings": [
{
"_id": "team-setting-1",
"team_id": "team-1",
"external_id": "ext-456",
"settings": {
"team_name": "Accounting Updated",
"details": {
"priority": "high"
}
}
},
{
"_id": "team-setting-2",
"team_id": "team-2",
"external_id": "ext-789",
"settings": {
"team_name": "Planning Updated",
"details": {
"priority": "low"
}
}
}
]
},
"identifier": "update_team_settings_successful"
}
Create one or more occupancy records. Idempotent on (people_id, location_id, seen_at).
ID of the associated location.
Created
Bad Request
POST /workplace/v1/occupancy HTTP/1.1
Host: api.gospace.app
x-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 134
{
"location_id": "68824ca5369c856b7c670510",
"occupancy": [
{
"people_id": "68820a4b5d11a0df2ce7a5ec",
"seen_at": "2025-07-24T10:26:19.403Z"
}
]
}
{
"success": true,
"data": {
"info": "Forecasting will be processed at midnight tonight. Trigger manually to force results before.",
"occupancy": [
{
"_id": "689a1e70aa952e3ae432af9f",
"seen_at": "2025-07-24T10:26:19.403Z",
"location_id": "68824ca5369c856b7c670510",
"people_id": "68820a4b5d11a0df2ce7a5ec",
"occupancy_id": "689a1e70aa952e3ae432af9f"
}
]
},
"identifier": "post_occupancy_successful"
}
Retrieve occupancy records with optional filters by ID, location, person, and time range.
Filter by a specific occupancy document ID.
Filter by Location ID.
Filter by People ID.
Start (inclusive) of UTC range filter. ISO 8601 with Z
.
End (inclusive) of UTC range filter. ISO 8601 with Z
.
Number of items to skip.
0
Max items to return.
25
Field to sort by (e.g., created_at
, seen_at
, people_id
).
created_at
Sort order.
asc
Possible values: OK
Bad Request
GET /workplace/v1/occupancy HTTP/1.1
Host: api.gospace.app
x-api-key: YOUR_API_KEY
Accept: */*
{
"success": true,
"data": {
"occupancy": [
{
"_id": "689a24dd895c4e7f86584013",
"seen_at": "2025-07-24T10:26:19.403Z",
"location_id": "68824ca5369c856b7c670510",
"people_id": "68820a4b5d11a0df2ce7a5ec",
"created_at": "2025-08-11T17:14:05.257Z",
"updated_at": "2025-08-11T17:14:05.257Z",
"occupancy_id": "689a24dd895c4e7f86584013"
}
]
},
"pagination": {
"current_results": {
"from": 0,
"to": 10
},
"total_results": 1
},
"identifier": "get_occupancy_successful"
}
Soft-delete occupancy records that match the filters. Only location_id
is required.
Location to scope the deletion.
Optional person filter.
Start (inclusive) of UTC range filter. ISO 8601 with Z
.
End (inclusive) of UTC range filter. ISO 8601 with Z
.
OK
Bad Request
DELETE /workplace/v1/occupancy HTTP/1.1
Host: api.gospace.app
x-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 215
{
"location_id": "68824ca5369c856b7c670510",
"people_id": "68820a4b5d11a0df2ce7a5ec",
"starts_at": "2025-07-24T10:26:19.000Z",
"ends_at": "2025-07-24T10:26:20.000Z",
"occupancy": [
{
"occupancy_id": "689a1de649861b4b2f23868e"
}
]
}
{
"success": true,
"data": {
"info": "Forecasting will be processed at midnight tonight. Trigger manually to force results before.",
"deleted": 1
},
"identifier": "delete_occupancy_successful"
}
Trigger forecasting for a location over an optional date range.
Unique identifier of the location to forecast.
68824ca5369c856b7c670510
(Optional) Inclusive start date (YYYY-MM-DD).
2025-06-20
(Optional) Inclusive end date (YYYY-MM-DD).
2025-07-31
Force a rebuild even if recent results exist.
false
Forecast job created/queued
POST /workplace/v1/forecast/start HTTP/1.1
Host: api.gospace.app
x-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 112
{
"location_id": "68824ca5369c856b7c670510",
"starts_at": "2025-06-20",
"ends_at": "2025-07-31",
"force_rebuild": false
}
Forecast job created/queued
{
"success": true,
"data": {
"location_id": "68824ca5369c856b7c670510",
"status": "queued",
"note": "Queued for processing",
"created_at": "2025-08-11T14:44:14.312Z",
"updated_at": "2025-08-11T14:44:14.312Z",
"job_id": "689a01bde5c540bb57b0730b"
},
"identifier": "start_forecast_successful"
}
Get forecasting job status (supports filtering and pagination).
Filter by a specific forecast job ID returned by /forecast/start.
689a01bde5c540bb57b0730b
Filter by location ID.
68824ca5369c856b7c670510
Filter jobs created on/after this date (YYYY-MM-DD).
Filter jobs created on/before this date (YYYY-MM-DD).
Number of items to skip (pagination).
0
Maximum number of items to return.
25
Sort field.
created_at
Possible values: Sort order.
asc
Possible values: Forecast job status list
GET /workplace/v1/forecast/status HTTP/1.1
Host: api.gospace.app
x-api-key: YOUR_API_KEY
Accept: */*
Forecast job status list
{
"success": true,
"data": {
"forecast_jobs": [
{
"_id": "689a01bde5c540bb57b0730b",
"location_id": "68824ca5369c856b7c670510",
"status": "queued",
"note": "Queued for processing",
"job_id": "689a01bde5c540bb57b0730b",
"created_at": "2025-08-11T14:44:14.312Z",
"updated_at": "2025-08-11T14:44:14.312Z"
}
]
},
"pagination": {
"current_results": {
"from": 0,
"to": 1
},
"total_results": 1
},
"identifier": "get_forecast_job_successful"
}
Retrieve a list of location forecasts with optional location_id filter and pagination.
Filter by Location ID (can be multiple).
Start date-time in UTC for filtering forecasts.
End date-time in UTC for filtering forecasts.
Timezone of the location. When provided, starts_at
and ends_at
are interpreted in this timezone. Must be a valid IANA Time Zone identifier.
Europe/London
Number of items to skip for pagination.
0
Maximum number of items to return.
25
Field to sort by (e.g., starts_at).
Sort order, 'asc' or 'desc'.
asc
Possible values: OK
Bad Request
GET /workplace/v1/forecast/locations HTTP/1.1
Host: api.gospace.app
x-api-key: YOUR_API_KEY
Accept: */*
{
"success": true,
"data": {
"forecast": [
{
"location_id": "text",
"starts_at": "2025-09-15T21:13:25.120Z",
"ends_at": "2025-09-15T21:13:25.120Z",
"forecasted_desks": 1,
"forecasted_rooms": 1,
"forecasted_total": 1,
"forecasted_desks_inc": 1,
"forecasted_rooms_inc": 1,
"forecasted_total_inc": 1
}
],
"pagination": {
"current_results": {
"from": 1,
"to": 1
},
"total_results": 1
}
},
"identifier": "text"
}
Retrieve a list of team forecasts with optional location_id and team_id filters and pagination.
Filter by Location ID (can be multiple).
Filter by Team ID (can be multiple).
Start date-time in UTC for filtering forecasts.
End date-time in UTC for filtering forecasts.
Timezone of the location. When provided, starts_at
and ends_at
are interpreted in this timezone. Must be a valid IANA Time Zone identifier.
Europe/London
Number of items to skip for pagination.
0
Maximum number of items to return.
25
Field to sort by (e.g., starts_at).
Sort order, 'asc' or 'desc'.
asc
Possible values: OK
Bad Request
GET /workplace/v1/forecast/teams HTTP/1.1
Host: api.gospace.app
x-api-key: YOUR_API_KEY
Accept: */*
{
"success": true,
"data": {
"forecast": [
{
"team_id": "text",
"starts_at": "2025-09-15T21:13:25.120Z",
"ends_at": "2025-09-15T21:13:25.120Z",
"location_id": "text",
"forecasted_desks": 1,
"forecasted_rooms": 1,
"forecasted_total": 1,
"forecasted_desks_inc": 1,
"forecasted_rooms_inc": 1,
"forecasted_total_inc": 1
}
],
"pagination": {
"current_results": {
"from": 1,
"to": 1
},
"total_results": 1
}
},
"identifier": "text"
}
Retrieve a list of people forecasts with optional location_id, people_id, and team_id filters and pagination.
Filter by Location ID (can be multiple).
Filter by People ID (can be multiple).
Filter by Team ID (can be multiple).
Start date-time in UTC for filtering forecasts.
End date-time in UTC for filtering forecasts.
Timezone of the location. When provided, starts_at
and ends_at
are interpreted in this timezone. Must be a valid IANA Time Zone identifier.
Europe/London
Number of items to skip for pagination.
0
Maximum number of items to return.
25
Field to sort by (e.g., starts_at).
Sort order, 'asc' or 'desc'.
asc
Possible values: OK
Bad Request
GET /workplace/v1/forecast/people HTTP/1.1
Host: api.gospace.app
x-api-key: YOUR_API_KEY
Accept: */*
{
"success": true,
"data": {
"forecast": [
{
"people_id": "text",
"starts_at": "2025-09-15T21:13:25.120Z",
"ends_at": "2025-09-15T21:13:25.120Z",
"location_id": "text",
"team_id": "text",
"forecasted_desk": 1,
"forecasted_room": 1,
"forecasted_total": 1
}
],
"pagination": {
"current_results": {
"from": 1,
"to": 1
},
"total_results": 1
}
},
"identifier": "text"
}
Trigger location AI evolution
Unique identifier of the location.
68824ca5369c856b7c670510
Date for the evolution in YYYY-MM-DD format.
2025-08-08
Successful response
POST /workplace/v1/evolve/start HTTP/1.1
Host: api.gospace.app
x-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 114
{
"location_id": "68824ca5369c856b7c670510",
"date": "2025-08-08",
"settings": {
"disruption": "MIN",
"run_by_zone": false
}
}
Successful response
{
"success": true,
"data": {
"evolution_id": "94289524-04ac-44d3-8f05-45b8a937f663",
"status": "created"
},
"identifier": "trigger_evolve_successful"
}
Get AI evolution status
Unique identifier of a triggered evolution.
94289524-04ac-44d3-8f05-45b8a937f663
Successful response
GET /workplace/v1/evolve/status HTTP/1.1
Host: api.gospace.app
x-api-key: YOUR_API_KEY
Accept: */*
Successful response
{
"success": true,
"data": {
"evolution_id": "94289524-04ac-44d3-8f05-45b8a937f663",
"status": "successful"
},
"identifier": "get_evolve_status_successful"
}
Retrieve a list of allocations or a specific allocation by ID, with optional filters for location, layer, room, zone, people, team, external ID, or date range.
Optional ID of the allocation to retrieve.
Filter by Location ID.
Filter by Layer ID.
Filter by Room ID.
Filter by Zone ID.
Filter by People ID.
Filter by Team ID.
Optional external ID to filter allocations (matches external_id of PERSON or TEAM).
Start date-time in UTC for filtering allocations.
End date-time in UTC for filtering allocations.
Timezone of the location. When provided, starts_at
and ends_at
are interpreted in this timezone. Must be a valid IANA Time Zone identifier.
Europe/London
Number of items to skip for pagination.
0
Maximum number of items to return.
25
Field to sort by (e.g., starts_at, people_id).
Sort order, 'asc' or 'desc'.
asc
Possible values: OK
Bad Request
GET /workplace/v1/allocations HTTP/1.1
Host: api.gospace.app
x-api-key: YOUR_API_KEY
Accept: */*
{
"success": true,
"data": {
"allocations": [
{
"_id": "alloc-1",
"location_id": "loc-1",
"room_id": "room-1",
"people_id": "person-1",
"external_id": "ext-123",
"starts_at": "2025-07-18T09:00:00Z",
"ends_at": "2025-07-18T17:00:00Z",
"details": {
"type": "desk"
}
},
{
"_id": "alloc-2",
"location_id": "loc-2",
"team_id": "team-1",
"external_id": "ext-456",
"starts_at": "2025-07-19T09:00:00Z",
"ends_at": "2025-07-19T17:00:00Z",
"details": {
"type": "meeting"
}
}
],
"pagination": {
"current_results": {
"from": 1,
"to": 25
},
"total_results": 20
}
},
"identifier": "get_allocations_successful"
}
Create multiple new allocations.
Created
Bad Request
POST /workplace/v1/allocations HTTP/1.1
Host: api.gospace.app
x-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 365
{
"allocations": [
{
"location_id": "loc-1",
"room_id": "room-1",
"people_id": "person-1",
"external_id": "ext-123",
"starts_at": "2025-07-18T09:00:00Z",
"ends_at": "2025-07-18T17:00:00Z",
"details": {
"type": "desk"
}
},
{
"location_id": "loc-2",
"team_id": "team-1",
"external_id": "ext-456",
"starts_at": "2025-07-19T09:00:00Z",
"ends_at": "2025-07-19T17:00:00Z",
"details": {
"type": "meeting"
}
}
]
}
{
"success": true,
"data": {
"allocations": [
{
"_id": "alloc-1",
"location_id": "loc-1",
"room_id": "room-1",
"people_id": "person-1",
"external_id": "ext-123",
"starts_at": "2025-07-18T09:00:00Z",
"ends_at": "2025-07-18T17:00:00Z",
"details": {
"type": "desk"
}
},
{
"_id": "alloc-2",
"location_id": "loc-2",
"team_id": "team-1",
"external_id": "ext-456",
"starts_at": "2025-07-19T09:00:00Z",
"ends_at": "2025-07-19T17:00:00Z",
"details": {
"type": "meeting"
}
}
]
},
"identifier": "create_allocations_successful"
}
Update multiple existing allocations.
OK
Bad Request
Not Found
PUT /workplace/v1/allocations HTTP/1.1
Host: api.gospace.app
x-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 397
{
"allocations": [
{
"_id": "alloc-1",
"location_id": "loc-1",
"room_id": "room-1",
"people_id": "person-1",
"external_id": "ext-123",
"starts_at": "2025-07-18T10:00:00Z",
"ends_at": "2025-07-18T18:00:00Z",
"details": {
"type": "desk"
}
},
{
"_id": "alloc-2",
"location_id": "loc-2",
"team_id": "team-1",
"external_id": "ext-456",
"starts_at": "2025-07-19T10:00:00Z",
"ends_at": "2025-07-19T18:00:00Z",
"details": {
"type": "meeting"
}
}
]
}
{
"success": true,
"data": {
"allocations": [
{
"_id": "alloc-1",
"location_id": "loc-1",
"room_id": "room-1",
"people_id": "person-1",
"external_id": "ext-123",
"starts_at": "2025-07-18T10:00:00Z",
"ends_at": "2025-07-18T18:00:00Z",
"details": {
"type": "desk"
}
},
{
"_id": "alloc-2",
"location_id": "loc-2",
"team_id": "team-1",
"external_id": "ext-456",
"starts_at": "2025-07-19T10:00:00Z",
"ends_at": "2025-07-19T18:00:00Z",
"details": {
"type": "meeting"
}
}
]
},
"identifier": "update_allocations_successful"
}
Delete multiple allocations by their IDs.
OK
Bad Request
Not Found
DELETE /workplace/v1/allocations HTTP/1.1
Host: api.gospace.app
x-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 73
{
"allocations": [
{
"allocation_id": "alloc-1"
},
{
"allocation_id": "alloc-2"
}
]
}
{
"success": true,
"data": {
"allocations": [
{
"allocation_id": "alloc-1"
},
{
"allocation_id": "alloc-2"
}
]
},
"identifier": "delete_allocations_successful"
}
Retrieve intentions with optional filters. starts_at
and ends_at
are dates (YYYY-MM-DD) interpreted in the given timezone.
the number of records you would like to return in a single request (default 25)
25
Example: 25
the number of records you skip within this request (default 0)
0
Example: 0
Field to sort by.
name
Sort order.
asc
Possible values: External intention type.
Inclusive date (YYYY-MM-DD); interpreted in the provided timezone.
Inclusive date (YYYY-MM-DD); interpreted in the provided timezone.
IANA timezone for interpreting date filters with internal IDs.
Europe/London
IANA timezone for interpreting date filters with external IDs.
Europe/London
Internal intention type.
Configuration context identifier.
OK
Bad Request
GET /workplace/v1/intentions HTTP/1.1
Host: api.gospace.app
x-api-key: YOUR_API_KEY
x-configuration-id: text
Accept: */*
{
"success": true,
"data": {
"intentions": [],
"pagination": {
"current_results": {
"from": 1,
"to": 1
},
"total_results": 1
}
},
"identifier": "get_intentions_successful"
}
Create a single intention (normal allocation flow).
If true, bypasses certain safety checks and forces creation according to server rules.
false
Created
Bad Request
POST /workplace/v1/intentions HTTP/1.1
Host: api.gospace.app
x-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 669
{
"status": "created",
"type": "DESK",
"location_id": "text",
"people_id": "text",
"people_first_name": "text",
"people_last_name": "text",
"people_email": "[email protected]",
"team_id": "text",
"team_name": "text",
"dates": [
{
"starts_at": "2025-09-15T21:13:25.120Z",
"ends_at": "2025-09-15T21:13:25.120Z"
}
],
"preferences": {
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"amenities": {
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"visitors": {
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"invite_list": {
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"custom_time": {
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"fixed_day": {
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"skip_auto_accept": false,
"allocation": {
"room_id": "text",
"spaces": [
"text"
]
}
}
{
"success": true,
"data": {
"intentions": []
},
"identifier": "create_intention_successful"
}
Create one or more intentions using external identifiers/metadata. One of people_id
or people_email
is required per item.
Created
Bad Request
POST /workplace/v1/intentions/external HTTP/1.1
Host: api.gospace.app
x-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 21
{
"intentions": [
null
]
}
{
"success": true,
"data": {
"intentions": []
},
"identifier": "create_external_intentions_successful"
}
Accept a pending intention. If force
is 'false', acceptance will fail when there is a conflicting intention. Set force
to 'true' to override conflict checks (where permitted).
String flag controlling conflict override.
false
Example: false
Possible values: OK
Bad Request
Not Found
Conflict — a conflicting intention exists and force='false'
.
PUT /workplace/v1/intentions/{intention_id}/accept HTTP/1.1
Host: api.gospace.app
x-api-key: YOUR_API_KEY
Accept: */*
{
"success": true,
"data": {
"intention": null
},
"identifier": "accept_intention_successful"
}
Decline an invitation for an intention you were invited to. Optionally include a reason.
Optional reason for declining (audit/notifications).
OK
Bad Request
Not Found
PUT /workplace/v1/intentions/{intention_id}/decline HTTP/1.1
Host: api.gospace.app
x-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 33
{
"reason": "Can't make that time"
}
{
"success": true,
"data": {
"intention": null
},
"identifier": "decline_intention_successful"
}
Cancel an intention. If cancel_for_all
is true, the cancellation applies to all invited attendees as well.
Partial intention update allowed by validator.
Optional cancel reason for audit.
When true, cancel this intention for all invited people as well.
false
OK
Bad Request
Not Found
PUT /workplace/v1/intentions/{intention_id}/cancel HTTP/1.1
Host: api.gospace.app
x-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 56
{
"reason": "User canceled booking",
"cancel_for_all": true
}
{
"success": true,
"data": {
"intention": null
},
"identifier": "cancel_intention_successful"
}
Permanently delete a single intention by its ID. This is irreversible and, unlike cancel, the intention cannot be rejoined by any participant once deleted.
OK
Bad Request
Not Found
DELETE /workplace/v1/intentions/{intention_id} HTTP/1.1
Host: api.gospace.app
x-api-key: YOUR_API_KEY
Accept: */*
{
"success": true,
"data": {
"intention_id": "text",
"status": "deleted"
},
"identifier": "delete_intention_successful"
}
Last updated
Was this helpful?