Endpoints in the BMC Digital Workplace Catalog REST API
You can perform the following actions by using the supported API categories in the BMC Digital Workplace Catalog:
Authentication
Within the Digital Workplace Catalog, users with the role permissions of asset manager and service catalog admin can see all services. The same users in external systems that link to Digital Workplace Catalog have the same access permissions.
To request an authentication token
POST /users/login
Parameters
Name | Required/Optional | Description | Type | Example | Notes |
---|---|---|---|---|---|
id | Required | BMC Digital Workplace Catalog user login account (with the organization domain). | String | hannah_admin@calbro.com | Locate this parameter in the request body. This parameter is not specified by default. |
password | Required | Password. | String | <your_password> | Locate this parameter in the request body. This parameter is not specified by default. |
Response
Response | Value | Notes |
---|---|---|
HTTP code | 200 | Application returns an authentication token that is valid for about half an hour. |
Categories
To retrieve a full category list
GET /categories
Parameters
Name | Required/Optional | Description | Type | Example | Notes |
---|---|---|---|---|---|
perPage | Optional | Page size. | Integer | 20 | This is a query parameter. Default for non-paginated search -1. |
page | Optional | Page number. | Integer | 1 | This is a query parameter. Default 1. |
Response
Response | Value | Notes |
---|---|---|
HTTP code | 200 | Returns a category list object array. |
type | application/json | Not applicable. |
Response properties
Name | Description | Type |
---|---|---|
pageSize | Pass through the request parameter. | Integer |
page | Pass through the request parameter. | Integer |
categories | Category object array. | Array |
To retrieve descendants of a given category
This API returns only categories that contain services that are entitled to the requesting user.
GET /categories/{categoryId}/categories
Parameters
Name | Required | Description | Type | Example | Notes |
---|---|---|---|---|---|
categoryId | Required | Category ID to retrieve. | String | 1234 | Locate this parameter in the request URL. This parameter is not specified by default. |
depth | Optional | Depth of the category being retrieved. | Integer | 2 | This is a query parameter. Default 1. Allowed values: 1, 2, 3. |
requestedfor | Optional | When a user is specified, the entitlement check is performed against the user. Otherwise, the entitlement check is performed against the current user. | String | "Mary" | This is a query parameter. This parameter is not specified by default. |
Response
Response | Value | Notes |
---|---|---|
HTTP code | 200 | Returns a category array object. If the requested categoryId does not exist or does not contain descendants, then an empty array is returned. |
type | application/json | Not applicable. |
Response properties
Name | Description | Type | Notes |
---|---|---|---|
id | Category ID used by the application. | String | Not applicable. |
guid | Unique ID used by the platform. | String | Not applicable. |
name | Category name. | String | Not applicable. |
categoryGroupId | Group to which the category belongs. | String | Currently, there is only one category group, referenced as "Type of service". |
parentId | ID of the child's parent category. | String | If the parent ID is not available, null. |
childCount | Number of direct descendant categories. | Integer | Not applicable. |
subCategories | Null | String | Not applicable. |
To retrieve category groups
GET /categories/groups
Parameters
None.
Response
Response | Value | Notes |
---|---|---|
HTTP code | 200 | Application returns the category array. |
type | application/json | Not applicable. |
Response properties
Name | Description | Type |
---|---|---|
id | Category group ID used by the application. | String |
guid | Unique ID used by the platform. | String |
name | Category group name. | String |
description | Description of the category group. | String |
systemId | System ID of the category group. | String |
groupStatus | Status of of the category group. | String |
childCount | Number of direct descendant categories. | Integer |
categories | Null | String |
To retrieve categories of a given category group
GET /categories/groups/{categoryGroupId}/categories
Parameters
Name | Required/Optional | Description | Type | Example | Notes |
---|---|---|---|---|---|
categoryGroupId | Required | Category group ID to retrieve. | String | 1234 | Locate this parameter in the request URL. This parameter is not specified by default. |
depth | Optional | Depth of the category being retrieved. | Integer | 2 | This is a query parameter. Default 1. Allowed values: 1, 2, 3. |
requestedfor | Optional | When a user is specified, the entitlement check is performed against the user. Otherwise, the entitlement check is performed against the current user. | String | "Mary" | This is a query parameter. This parameter is not specified by default. |
Response
Response | Value | Notes |
---|---|---|
HTTP code | 200 | Successful response returns the array of category objects. |
type | application/json | Not applicable. |
Services
To retrieve details of a single service item
GET /services/{serviceId}
Parameters
Name | Required/Optional | Description | Type | Example | Notes |
---|---|---|---|---|---|
serviceId | Required | Not applicable. | String | 1234 | Locate this parameter in the request URL. |
requestedfor | Optional | When a user is specified, the entitlement check is performed against the user. Otherwise, the entitlement check is performed against the current user. | String | "Mary" | This is a query parameter. |
Response
Response | Value | Notes |
---|---|---|
HTTP code | 200 | Successful response returns the array of service details. |
type | application/json | Not applicable. |
To search for services
Search criteria can be serviceIds, categoryId, or free text for a single service name or tag.
POST /services/search
However, multiple search criteria cannot be used in a same call. Wildcards are also not supported.
{
"serviceIds": ["%123%","%456","789%"],
"title": "apple"
}
Parameters
Name | Required/Optional | Description | Type | Example | Notes |
---|---|---|---|---|---|
perPage | Required | Page size. | Integer | 20 | This is a query parameter. Default for non-paginated search -1. |
page | Required | Page number. | Integer | 1 | This is a query parameter. Default 1. |
serviceIds | Required | ID of the service. | String | 456 | Locate this parameter in the request body. |
categoryId | Required | ID of the category. | String | 476 | Locate this parameter in the request body. |
title | Required | Title of the service. | String | "Apple" | Locate this parameter in the request body. |
requestedfor | Required | When a user is specified, the entitlement check is performed against the user. Otherwise, entitlement is checked on the current user. | String | "Mary" | This is a query parameter. |
Response
Response | Value | Notes |
---|---|---|
HTTP code | 200 | Successful response receives an array of service objects. |
type | application/json | Not applicable. |
To retrieve the full catalog view setting of ON or OFF
GET /services/fullcatalogview
Parameters
None
Response
Response | Value | Notes |
---|---|---|
HTTP code | 200 | Successful response returns a boolean value. True = ON, false = OFF. |
type | application/json | Not applicable. |
Requests and questions
To initiate a request for a service by ID
POST /requests
Parameters
Name | Required/Optional | Description | Type | Example | Notes |
---|---|---|---|---|---|
serviceId | Required | ID of the service. | String | 456 | Locate this parameter in the request body. |
excludedServiceIds | Required | A list of service revision IDs that will be excluded from the request bundle. | String | 457 | Locate this parameter in the request body. |
requestForUserIds | Required | A list of user IDs for which the service is requested. Best practice: We recommend limiting the number of users per request to 20. | List of strings | ["Mary", "Peter"] | Locate this parameter in the request body. By default, the current user is displayed. |
dependencies | Required | Not applicable. | String | {serviceRequestId: string} | Locate this parameter in the request body. |
quantity | Required | The service request quantity. | Integer | 1 | Locate this parameter in the request body. Default 1. |
referenceRequestId | Optional | A prior request ID, if relevant. | String | 5678 | Locate this parameter in the request body. |
myStuffItemId | Required | The My Stuff item ID. | String | 9012 | Locate this parameter in the request body. |
onBehalfOfUserId | Required | The user ID on behalf of which the service request is being made. | String | 9013 | Locate this parameter in the request body. |
questions | Optional | A list of common answers for relevant service request questions. | List of strings | Locate this parameter in the request body. If you choose to include it in the response, you must provide at least the questionId and the associated answer. If your service request is for multiple users, they all must have provided the same answer. Multiple answers for a single question are typically only relevant for the multiple-choice questions string. |
You can obtain the question ID in advance.
Response
Response | Value | Notes |
---|---|---|
HTTP code | 200 | Successful response returns the array of questions. Note: The structure of the questionnaire may vary between services, see Creating service questionnaires. |
type | application/json | Not applicable. |
To get a service request questionnaire
This step is optional if you request a bulk order.
GET /requests/{id}/questionnaire
Parameters
Name | Required/Optional | Description | Type | Notes |
---|---|---|---|---|
id | Required | The service request ID of a new request. | String | Locate this parameter in the request URL. |
prefillRequestIds | Optional | A list of completed service request IDs to search for saved answers while re-requesting a service. | String | This a query parameter. |
Response
Response | Value |
---|---|
HTTP code | 200 |
type | application/json |
To send an answer to a question
If you request a bulk order, this step is not used. Respond to a question ID from the list returned from the request. Each required question must be answered before the request can be submitted.
POST /services/{serviceId}/questionnaire/answers
Parameters
Name | Required | Description | Type | Notes |
---|---|---|---|---|
serviceId | Required | The ID of the service. | String | Locate this parameter in the request URL. |
questionnaireId | Optional | The ID of the questionnaire. | String | Locate this parameter in the request body. |
questionId | Optional | The ID of the question. | String | Locate this parameter in the request body. |
answers | Optional | Answers to the questionnaire. | List of strings | Locate this parameter in the request body. |
serviceRequestId | Optional | The ID of the service request. | String | Locate this parameter in the request body. |
Response
Response | Value | Notes |
---|---|---|
HTTP code | 200 | Successful response shows the changes of visibility by ID based on answers submitted. |
type | application/json | Not applicable. |
Returned values indicate how the answer being submitted impacts answers, options, and visibilities of other questions by ID.
To submit a bulk service request order
POST /orders
Parameters
Name | Required/Optional | Description | Type | Where |
---|---|---|---|---|
requests | Required | A list of request IDs representing the requests being placed. | List of strings | Locate this parameter in the request body. |
Response
Response | Value | Notes |
---|---|---|
HTTP code | 200 | Successful response returns an empty content body. |
type | application/json | Not applicable. |
To retrieve all requests of a specific service by the current user
GET /services/{serviceId}/myrequests
Parameters
Name | Required/Optional | Description | Type | Notes | Example |
---|---|---|---|---|---|
serviceId | Required | ID of the service. | String | Locate this parameter in the request URL. | 456 |
perPage | Optional | Page size. | Integer | This is a query parameter. Default 10. | 20 |
page | Optional | Page number. | Integer | This is a query parameter. Default 1. | 1 |
Response
Response | Value |
---|---|
HTTP code | 200 |
type | application/json |
To find requests
Use this endpoint to display a list of service requests on the user's request timeline. If a user is not specified, all requests are displayed.
GET /services/requests
Parameters
Name | Required/Optional | Description | Type | Notes | Example |
---|---|---|---|---|---|
requestedfor | Required | Filter requests that are requested for the specified user. | String | This is a query parameter. | "Mary" |
requestedby | Required | Filter requests that are requested by the specified user. | String | This is a query parameter. | "Francie" |
since | Required | Filter requests that are updated since the specified date. | String | This is a query parameter. | Tue, 08 Mar 2016 17:49:05 GMT |
max | Required | Maximum amount of requests that will be retrieved. | Integer | This is a query parameter. | 30 |
Response
Response | Value | Notes |
---|---|---|
HTTP code | 200 | Successful response returns a requests object array. |
type | application/json | Not applicable. |
To find requests by IDs
POST /services/requests/search
Parameters
Name | Required/Optional | Description | Type | Example | Notes |
---|---|---|---|---|---|
serviceId | Required | Service request ID numbers represented as a list of string values. | String | ["4402", "4302", "4301"] | Locate this parameter in the request body. |
Response
Response | Value | Notes |
---|---|---|
HTTP code | 200 | Successful response returns the array of service request objects. |
type | application/json | Not applicable. |
To find a request by its ID
GET /services/requests/{requestId}
Parameters
Name | Required/Optional | Description | Type | Example | Notes |
---|---|---|---|---|---|
requestId | Required | ID of the request. | String | "4402" | Locate this parameter in the request URL. |
Response
Response | Value | Notes |
---|---|---|
HTTP code | 200 | Successful response returns a service request object. |
type | application/json | Not applicable. |
To find all answers submitted for the given request
GET /services/requests/{requestId}/answers
Parameters
Name | Required/Optional | Description | Type | Notes |
---|---|---|---|---|
requestId | Required | ID of the request. | String | Locate this parameter in the request URL. |
Response
Response | Value | Notes |
---|---|---|
HTTP code | 200 | Successful response returns a question object with completed answers. |
type | application/json | Not applicable. |
Reviews
To retrieve all reviews
GET /reviews
Parameters
Name | Required/Optional | Description | Type | Example | Notes |
---|---|---|---|---|---|
serviceId | Optional | Retrieves reviews of a given service. | String | 123 | This is a query parameter. |
userId | Optional | Retrieves reviews of a given user. The platform variable $USER$ can be sent as the userId of the current user. | String | "hannah" | This is a query parameter. |
perPage | Optional | Page size. | Integer | 20 | This is a query parameter. Default -1 for non-paginated search. |
page | Optional | Page number. | Integer | 1 | This is a query parameter. Default 1. |
sortBy | Optional | Sorting criteria. | String | modifiedDate | This is a query parameter. Currently, only "modifiedDate" is available. |
sortDirection | Optional | Sorting direction: either ascending or descending. | String | asc | This is a query parameter. Default asc. |
requestedfor | Optional | When a user is specified, the entitlement check is performed against the user. Otherwise, entitlement is checked on the current user. | String | "Mary" | This is a query parameter. |
Response
Response | Value | Notes |
---|---|---|
HTTP code | 200 | Successful response returns the array of reviews objects. |
type | application/json | Not applicable. |
To create a review for a given service
POST /reviews
Parameters
Name | Required/Optional | Description | Type | Example | Notes |
---|---|---|---|---|---|
serviceId | Required | ID of the service. | String | "123" | Locate this parameter in the request body. |
title | Required | Title of the review. | String | "review title1" | Locate this parameter in the request body. |
content | Required | Content of the review. | String | "review content1" | Locate this parameter in the request body. |
Response
Response | Value | Notes |
---|---|---|
HTTP code | 201 | Successful response returns no content. |
To retrieve a review by its ID
GET /reviews/{reviewId}
Parameters
Name | Required/Optional | Description | Example | Notes |
---|---|---|---|---|
reviewId | Required | ID of the review. | 465 | Locate this parameter in the request URL. |
requestedfor | Optional | When a user is specified, the entitlement check is performed against the user. Otherwise, entitlement is checked on the current user. | "Mary" | This is a query parameter. |
Response
Response | Value | Notes |
---|---|---|
HTTP code | 200 | Successful response returns a review object. |
type | application/json | Not applicable. |
To update a review
Reviews can be updated only if the review was originally entered under the current user's account. Admin users cannot update reviews submitted by other users.
PUT /reviews/{reviewId}
Parameters
Name | Required/Optional | Description | Type | Example | Notes |
---|---|---|---|---|---|
reviewId | Required | ID of the review to be updated. | String | 675 | Locate this parameter in the request URL. |
title | Optional | Updated title. | String | "new title" | Locate this parameter in the request body. If both the title and the content parameters are empty, change will be ignored. |
content | Optional | Updated content. | String | "new content" | Locate this parameter in the request body. If both the title and the content parameters are empty, change will be ignored. |
Response
Response | Value | Notes |
---|---|---|
HTTP code | 200 | Successful response returns no content. |
To delete a review
Reviews can be deleted only if the review was originally entered under the current user's account. Admin users cannot delete reviews submitted by other users.
DELETE /reviews/{reviewId}
Parameters
Name | Required/Optional | Description | Type | Notes |
---|---|---|---|---|
reviewId | Required | ID of the review to be deleted. | String | Locate this parameter in the request URL. |
Response
Response | Value | Notes |
---|---|---|
HTTP code | 200 | Successful response returns no content. |
Ratings
Rating is given as percentage (between 0 and 1).
To retrieve all ratings
GET /ratings
Parameters
Name | Required/Optional | Description | Type | Example | Notes |
---|---|---|---|---|---|
serviceId | Optional | Retrieves ratings of a given service. | String | 123 | Locate this parameter in the request body. |
userId | Optional | Retrieves ratings from a given user. $USER$ can be used for current user. | String | 20 | Locate this parameter in the request body. |
perPage | Optional | Page size. | Integer | 20 | Locate this parameter in the request body. Default -1 for non-paginated search.. |
page | Optional | Page number. | Integer | 1 | Locate this parameter in the request body. Default 1. |
requestedfor | Optional | When a user is specified, the entitlement check is performed against the user. Otherwise, entitlement is checked on the current user. | String | "Hannah" | This is a query parameter. |
Response
Response | Value | Notes |
---|---|---|
HTTP code | 200 | Successful response returns an array of ratings objects. |
type | application/json | Not applicable. |
To create a rating for a service
POST /ratings
Parameters
Name | Required/Optional | Description | Type | Example | Where |
---|---|---|---|---|---|
serviceId | Required | ID of the service to be rated. | String | "123" | Locate this parameter in the request body. |
rating | Required | Rating value submitted as a percentage (number between 0 and 1). | Float | 0.8 | Locate this parameter in the request body. |
Response
Response | Value | Notes |
---|---|---|
HTTP code | 201 | Successful response returns no content. |
To retrieve a rating by its ID
GET /ratings/{ratingId}
Parameters
Name | Required/Optional | Description | Type | Example | Notes |
---|---|---|---|---|---|
ratingId | Required | ID of the rating to retrieve. | String | 456 | Locate this parameter in the request URL. |
requestedfor | Required | When a user is specified, the entitlement check is performed against the user. Otherwise, entitlement is checked on the current user. | String | "Mary" | This is query parameter. |
Response
Response | Value | Notes |
---|---|---|
HTTP code | 200 | Successful response returns a rating object. |
type | application/json | Not applicable. |
To update a rating
Ratings can be updated only if the rating was originally entered under the current user's account. Admin users cannot update ratings submitted by other users.
PUT /ratings/{ratingId}
Parameters
Name | Required/Optional | Description | Type | Example | Notes |
---|---|---|---|---|---|
ratingId | Required | The ID of the rating to update. | String | "4321" | Locate this parameter in the request URL. |
rating | Required | The rating value submitted as a percentage (number between 0 and 1). | Float | 0.6 | Locate this parameter in the request body. |
Response
Response | Value | Notes |
---|---|---|
HTTP code | 200 | Successful response returns no content. |
Service migration
To export selected services
This endpoint packages service data and media files into a binary .zip archive that includes full catalog profiles, images, workflows, and questions.
POST /services/export
Parameters
Name | Required/Optional | Description | Type | Example | Notes |
---|---|---|---|---|---|
(array list) | Yes | List of the service IDs to be exported. | String | ["1234", "1234"] | Locate this parameter in the request body. |
Response
A .zip file with the exported services.
To import a service .zip file
This endpoint extracts an uploaded binary .zip file and creates services with full catalog profiles, images, workflows, and questions.
POST /services/import
Parameters
Name | Required/Optional | Description | Type | Notes |
---|---|---|---|---|
(uploaded file) | Required | The service IDs to be imported. | Binary data (.zip file) | Locate this parameter in the request body. The following form setting is required:
|
Response
Response | Value | Notes |
---|---|---|
HTTP code | 200 | Import is successful. |
Error handling
Failed authentication requests return an error object with the following properties:
Name | Description | Type |
---|---|---|
message | Error message with the error code. | String |
data | Error message description. | String |
HTTP code | An object with the requested ID is not found. | 404 |
Comments
Endpoints are missing for Add User Permissions as well as Entitlement Management.
Thanks for your comment, Christoph.
I have shared this request with my R&D team. We are interested in understanding why you would prefer using an API for the above features. Please let us know if you have any feedback on the UI that exists for the same.
Thanks,
Ravee
I agree with Christoph. I would really like to see an endpoint for managing entitlements. The UI works great but we have user sync jobs where we want to automatically add users to specific entitlement groups.
We are running 19.08.
Thanks for providing the additional context, Hugo. I have shared this request as well with my R&D team, and will get back to you.
Thanks,
Ravee
Thanks for your patience, Christoph Klapetke , and Hugo Stadin.
Please refer to this Knowledge Article, which has the required details → https://communities.bmc.com/community/bmcdn/digital-workplace/blog/2020/03/20/using-the-dwp-c-api.
Thanks,
Ravee
Log in or register to comment.