WSD User API

  • Release version: Australia
  • Updated April 28, 2026
  • 9 minutes to read
  • 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.

    Common use cases:
    • 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

    The WSD User API requires:
    • 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

    The WSD User API belongs to a family of APIs all under the 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

    Table 1. Path 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

    Table 2. Query parameters
    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: 0- A value of 0 returns an empty array for that direction.

    Maximum value: 12

    Default value: 3

    future_reservations_months Number of months of future reservations to return.

    Data type: Number

    Minimum value: 0

    Maximum value: 12

    Default value: 3

    Table 3. Request body parameters (XML or JSON)
    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.

    Table 4. Request 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.
    Table 5. Response headers
    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.

    Table 6. Status 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

    "result": {
      "collaborators": [Array],
      "reservations": {Object},
      "schedule": {Object},
      "workplace_location": {Object}
    }
    collaborators List of the user's collaborators with their presence data.

    Data type: Array of Objects

    "collaborators": [
     {
      "exceptions": "Array",
      "name": "String",
      "routine": "Object",
      "sys_id": "String", 
     }
    ]
    collaborators.exceptions List of dates on which the collaborator's in-office schedule deviates from their routine.

    Data type: Array of Objects

    "exceptions": [
     {
      "date": "String",
      "in_office": Boolean,
      "location": "String",
      "origin": "String",
      "sys_id": "String"
     }
    ]
    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:
    • true: User will be in the office.
    • false: User won't be in the office

    Data type: Boolean

    collaborators.exceptions.origin Source that created the exception.
    Valid values:
    • user: Created manually by the employee.
    • system: Created automatically by the platform.
    • manual: Created by an admin or on behalf of the user.

    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 true indicates in-office attendance, and false indicates no attendance.

    Data type: Object

    "routine": {
      "monday": Boolean,
      "tuesday": Boolean,
      "wednesday": Boolean,
      "thursday": Boolean, 
      "friday": Boolean,
      "saturday": Boolean,
      "sunday": Boolean
    }
    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": {
      "past": [Array],
      "future": [Array]
    }
    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

    "future": [
     {
      "sys_id": "String",
      "number": "String",
      "start": "String",
      "end": "String",
      "state": "String",
      "subject": "String,
      "location": {Object},
      "building": {Object}
     }
    ]
    reservations.future.building Building in which the reserved location resides.

    Data type: Object

    "building": {
     "name": "String",
     "sys_id": "String"
    }
    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

    "location": {
      "sys_id": "String",
      "name": "String"
    }
    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:
    • confirmed
    • completed

    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

    "past": [
     {
      "sys_id": "String",
      "number": "String",
      "start": "String",
      "end": "String",
      "state": "String",
      "subject": "String,
      "location": {Object},
      "building": {Object}
     }
    ]
    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

    "location": {
      "sys_id": "String",
      "name": "String"
    }
    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:
    • confirmed
    • completed

    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": [Array],
      "routine": {Object}
    }
    schedule.exceptions List of dates on which the user's in-office schedule deviates from their routine.

    Data type: Array of Objects

    "exceptions": [
    {
      "sys_id": "sys_id", 
      "date": "String", 
      "in_office": Boolean, 
      "origin": "String", 
      "location": "String" 
     }
    ]
    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:
    • true: User will be in the office.
    • false: User won't be in the office

    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:
    • user: Created manually by the employee.
    • system: Created automatically by the platform.
    • manual: Created by an admin or on behalf of the user.

    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 true indicates in-office attendance, and false indicates no attendance.

    Data type: Object

    "routine": {
      "monday": Boolean,
      "tuesday": Boolean,
      "wednesday": Boolean,
      "thursday": Boolean, 
      "friday": Boolean,
      "saturday": Boolean,
      "sunday": Boolean
    }
    workplace_location The user's assigned workplace location, including floor, building, and campus details.

    Data type: Object

    "workplace_location": {
      "building": {Object},
      "campus": {Object},
      "floor": {Object},
      "name": "String",
      "sys_id": "String"
    }
    workplace_location.building Building in which the workplace location resides.

    Data type: Object

    "building": {
      "name": "String",
      "sys_id": "String"
    }
    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

    "campus": {
      "name": "String",
      "sys_id": "String"
    }
    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

    "floor": {
      "name": "String",
      "sys_id": "String"
    }
    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": []
        }
      }
    }