WSD User API
The WSD User API is a Scripted REST API which returns the authenticated user's workplace context, including their assigned workspace location, in-office presence schedule, collaborators, and past and future reservations.
This WSD User is featured with the Workplace Service Delivery (WSD) Reservation product and provides a single-call entry point for initializing the reservation booking experience with all relevant user data. This API sits within the Workplace Service Delivery Reservation (com.sn_wsd_rsv) plugin and serves as the entry point for surfacing a user's complete workplace identity and history.
An authenticated user is someone who is logged in or whose credentials are included in the API request.
- Reservation portal initialization: Load a user's home location, schedule, and booking history in a single call when opening a workplace app or portal.
- Custom mobile or web apps: Fetch all the user context without stitching together multiple table API calls,for example when building front-end reservation experiences.
- In-office presence tracking: Identify which employees are scheduled to be in-office on a given day.
Requirements
- At least one user record must exist with the sn_wsd_core.workplace_user role.
- The Workplace Service Delivery Concierge (com.sn_wsd_concierge), Workplace Service Delivery Core (com.sn_wsd_core), and Workplace Service Delivery Reservation (com.sn_wsd_rsv) plugins to be active.
Related APIs
sn_wsd_rsv namespace that together support the full reservation lifecycle:- WSD Search API: Find available reservable spaces based on location, time, and capacity criteria.
- WSD Reservation API: Create reservations and manage check-in/check-out.
- WSD Reservable Module API: Retrieve the booking rule configurations that govern what users can reserve and how.
WSD User - GET /api/sn_wsd_rsv/v1/user/context
Retrieves the authenticated user's workplace context, including their assigned workplace location, presence schedule, collaborators, and past and future reservations.
Use this endpoint to initialize a reservation experience by loading all relevant user context in a single call. Collaborator data is optionally included when the com.sn_wsd_concierge plugin is active.
URL format
Versioned URL: /api/sn_wsd_rsv/{api_version}/user/context
Default URL: /api/sn_wsd_rsv/user/context
Supported request parameters
| Name | Description |
|---|---|
| api_version | Optional. Version of the endpoint to access. For example, v1 or v2. Only specify this value to use an endpoint version other than the
latest.
Data type: String |
| Name | Description |
|---|---|
| include | Value to include related data in the response. Uses strict equality matching (not comma-separated parsing). Note: include is only effective when the Workplace Service Delivery Concierge (com.sn_wsd_concierge) plugin is active. If the plugin is inactive, the parameter is ignored and collaborators is omitted from the
response.Only valid value: collaborators Data type: String Default: Excludes collaborators from the response. |
| past_reservations_months | Number of months of past reservations to return. Data type: Number Minimum value: Maximum value:
Default value: |
| future_reservations_months | Number of months of future reservations to return. Data type: Number Minimum value: Maximum value: Default value: |
| Name | Description |
|---|---|
| None |
Headers
The following request and response headers apply to this HTTP action only, or apply to this action in a distinct way. For a list of general headers used in the REST API, see Supported REST API headers.
| Header | Description |
|---|---|
| Accept | Data format of the response body. Supported types: application/json, application/xml, text/xml. |
| Authorization | Authentication credentials. Supports Basic authentication or session-based authentication. |
| Header | Description |
|---|---|
| Content-Type | Data format of the response body: application/json. |
Status codes
The following status codes apply to this HTTP action. For a list of possible status codes used in the REST API, see REST API HTTP response codes.
| Status code | Description |
|---|---|
| 200 | Successful. The request was successfully processed. |
| 500 | Internal server error. An unexpected error occurred while processing the request. The response contains additional information about the error. |
Response body parameters (JSON or XML)
| Name | Description |
|---|---|
| result | Object containing results of the request. Data type: Object |
| collaborators | List of the user's collaborators with their presence data. Data type: Array of Objects |
| collaborators.exceptions | List of dates on which the collaborator's in-office schedule deviates from their routine. Data type: Array of Objects |
| collaborators.exceptions.sys_id | Sys_id of the exception record. Table: Employee presence exceptions (sn_wsd_concierge_employee_presence_exception) Data type: String |
| collaborators.exceptions.date | Date this exception applies to. This is the date the user's routine is being overridden. Format: yyyy-MM-dd Data type: String |
| collaborators.exceptions.in_office | Flag that indicates whether the user will be in the office on this date. This overrides whatever the weekly routine specifies for that day of the week. Valid values:
Data type: Boolean |
| collaborators.exceptions.origin | Source that created the exception. Valid values:
Data type: String |
| collaborators.exceptions.location | Name or identifier of the office location the user will be at on this date. Only relevant when in_office is true. May be an empty string when the user is remote.Data type: String |
| collaborators.name | Display name of the collaborator. For example, Jane Smith. Data type: String |
| collaborators.routine | The collaborator's recurring weekly in-office schedule. Follows the same day-of-week Boolean structure as schedule.routine. A value of Data type: Object |
| collaborators.sys_id | Sys_id of the collaborator's user record. Table: User [sys_user] Data type: String |
| reservations | Object containing the user's past and future reservations. Private and location-less reservations are excluded. Maximum 100 reservations per direction. Filtered by states: confirmed, completed. Data type: Object |
| reservations.future | List of the user's future reservations within the requested month range. Ordered by start datetime, soonest first. Data type: Array of Object |
| reservations.future.building | Building in which the reserved location resides. Data type: Object |
| reservations.future.building.name | Display name of the building. For example, HQ Building A. Data type: String |
| reservations.future.building.sys_id | Sys_id of the building record. Table: Workplace Building [sn_wsd_core_building] Data type: String |
| reservations.future.end | End date time of the reservation in UTC. Format: yyyy-MM-dd HH:mm:ss Data type: String |
| reservations.future.location | The reserved space. Data type: Object |
| reservations.future.location.name | Display name of the reserved location. For example, Desk 42. Data type: String |
| reservations.future.location.sys_id | Sys_id of the reserved location. Table: Workplace Location [sn_wsd_core_workplace_location] Data type: String |
| reservations.future.number | Human-readable reservation number. For example, RSV0001234. Data type: String |
| reservations.future.start | Start date time of the reservation in UTC. Format: yyyy-MM-dd HH:mm:ss Data type: String |
| reservations.future.state | Current state of the reservation. Valid values:
Data type: String |
| reservations.future.subject | Subject or title of the reservation. For example, Team standup desk. Data type: String |
| reservations.future.sys_id | Sys_id of the reservation record. Table: Workplace Reservation [sn_wsd_rsv_reservation] Data type: String |
| reservations.past | List of the user's past reservations within the requested month range. Ordered by start date/time, most recent first. Data type: Array of Objects |
| reservations.past.building.name | Display name of the building. For example, HQ Building A. Data type: String |
| reservations.past.building.sys_id | Sys_id of the building record. Table: Workplace Building [sn_wsd_core_building] Data type: String |
| reservations.past.end | End date time of the reservation in UTC. Format: yyyy-MM-dd HH:mm:ss Data type: String |
| reservations.past.location | The reserved space. Data type: Object |
| reservations.past.location.name | Display name of the reserved location. For example, Desk 42. Data type: String |
| reservations.past.location.sys_id | Sys_id of the reserved location. Table: Workplace Location [sn_wsd_core_workplace_location] Data type: String |
| reservations.past.number | Human-readable reservation number. For example, RSV0001234. Data type: String |
| reservations.past.start | Start date time of the reservation in UTC. Format: yyyy-MM-dd HH:mm:ss Data type: String |
| reservations.past.state | Current state of the reservation. Valid values:
Data type: String |
| reservations.past.subject | Subject or title of the reservation. For example, Team standup desk. Data type: String |
| reservations.past.sys_id | Sys_id of the reservation record. Table: Workplace Reservation [sn_wsd_rsv_reservation] Data type: String |
| schedule | User's in-office presence schedule, including their recurring weekly routine and any exceptions. Note: When the com.sn_wsd_concierge plugin is inactive, routine is null and exceptions is an empty array. Data type: Object |
| schedule.exceptions | List of dates on which the user's in-office schedule deviates from their routine. Data type: Array of Objects |
| schedule.exceptions.date | Date this exception applies to, in yyyy-MM-dd format. This is the date the user's routine is being overridden. Data type: String |
| schedule.exceptions.in_office | Flag that indicates whether the user will be in the office on this date. This overrides whatever the schedule specifies for that day of the week. Valid values:
Data type: Boolean |
| schedule.exceptions.location | The name or identifier of the office location the user will be at on this date. Only relevant when in_office is true. May be an empty string when the user is remote.Data type: String |
| schedule.exceptions.origin | Source that created the exception. Valid values:
Data type: String |
| schedule.exceptions.sys_id | Sys_id of the exception record. Table: Employee presence exceptions (sn_wsd_concierge_employee_presence_exception) Data type: String |
| schedule.routine | User's recurring weekly in-office schedule. Each field is a Boolean which represents a day of the week and indicates whether the user is scheduled to be in-office on that day. A value of Data type: Object |
| workplace_location | The user's assigned workplace location, including floor, building, and campus details. Data type: Object |
| workplace_location.building | Building in which the workplace location resides. Data type: Object |
| workplace_location.building.name | Display name of the building. For example, HQ Building A. Data type: String |
| workplace_location.building.sys_id | Sys_id of the building record. Table: Workplace Building [sn_wsd_core_building] Data type: String |
| workplace_location.campus | Campus on which the building resides. Data type: Object |
| workplace_location.campus.name | Display name of the campus. For example, Main Campus. Data type: String |
| workplace_location.campus.sys_id | Sys_id of the campus record. Table: Workplace Campus [sn_wsd_core_campus] Data type: String |
| workplace_location.floor | Floor on which the workplace location resides. Data type: Object |
| workplace_location.floor.name | Display name of the floor. For example, Floor 3. Data type: String |
| workplace_location.floor.sys_id | Sys_id of the floor record. Table: Workplace Floor [sn_wsd_core_floor] Data type: String |
| workplace_location.name | Display name of the user's assigned workplace location. For example, Desk 42 - Floor 3. Data type: String |
| workplace_location.sys_id | Sys_id of the user's assigned workplace location. Table: Workplace Location [sn_wsd_core_workplace_location] Data type: String |
cURL request
The following example retrieves the authenticated user's full workplace context, including collaborators, 1 month of past reservations, and 6 months of future reservations.
This example uses Basic authentication. If your instance uses SSO, use a bearer token or session cookie instead. See the 'Headers' table for details.
curl "https://<instance>.service-now.com/api/sn_wsd_rsv/v1/user/context?include=collaborators&past_reservations_months=1&future_reservations_months=6" \
--request GET \
--header "Accept: application/json" \
--user "username:password"
Response body.
{
"result": {
"workplace_location": {
"sys_id": "a1b2c3d4e5f6g7h8",
"name": "Desk 42 - Floor 3",
"floor": { "sys_id": "f1a2b3c4", "name": "Floor 3" },
"building": { "sys_id": "b1c2d3e4", "name": "HQ Building A" },
"campus": { "sys_id": "c1d2e3f4", "name": "Main Campus" }
},
"schedule": {
"routine": {
"monday": true, "tuesday": true, "wednesday": false,
"thursday": true, "friday": false, "saturday": false, "sunday": false
},
"exceptions": []
},
"collaborators": [
{
"sys_id": "d4e5f6g7",
"name": "Jane Smith",
"routine": { "monday": true, "tuesday": false, "wednesday": true,
"thursday": true, "friday": false, "saturday": false, "sunday": false },
"exceptions": []
}
],
"reservations": {
"past": [
{
"sys_id": "r1e2s3v4",
"number": "RSV0001234",
"start": "2026-04-01 09:00:00",
"end": "2026-04-01 17:00:00",
"state": "completed",
"subject": "Team standup desk",
"location": { "sys_id": "l1o2c3", "name": "Desk 42" },
"building": { "sys_id": "b1c2d3e4", "name": "HQ Building A" }
}
],
"future": []
}
}
}