1. Authenticate
Prerequisites
- You should have registered in our developer portal. Check this link about how to register an Account.
- You should request access to the playground, sandbox and production environment using our Support page. Here is the link to support page to request access to our environments.
- You should have an App created in your account to get the client id and client secret. Check this link about how to create an App.
Note : The time data attribute on APIs follows a 24-hour clock starting at 00:00 and ending at 23:59.
Authentication
The bearer token obtained after successful authentication should be passed as credential when calling this API for authentication. Check the Access Token API link for instructions on how to generate your bearer token.
2. Permissions
To Access Visitors, the user must have "Service Tickets-Visitor Access", "Service Tickets-Visitor Access Approval" permission. If you are unaware of your user permissions, contact your Account Administrator.
3. Get Information
Get Account Information
Master account Id and account Id need to be passed in the header for this API call. This is needed to indicate your legal entity.
Refer to the Accounts API for instructions on how to retrieve your account information. You may skip this step if you already know your master account Id and account Id.
Get Site Information
Retrieve the available facility information which are assigned to you. You need the site code to indicate to which facility you want to make a request.
Refer to the Sites API for instructions on how to retrieve your site information. You may skip this step if you already know your sites.
Get Location Information
Retrieve the available location information which are assigned to you. You need the location name to indicate to which location in the facility you want to make a request.
Refer to the Locations API for instructions on how to retrieve your location information. You may skip this step if you already know your locations.
4. Request Visitor Access
The method can be used to request facility access for visitors.
Method | POST |
---|---|
End point | /v1/facility-access/visitors/access-requests |
Headers | Authorization, Master-Account-Id, Account-Id, Content-Type |
Query Parameters | n/a |
Body | "visitors": [{"visitorFirstName","visitorLastName"","visitorEmail","visitorPhone"}], "sites": [{"site","locations":[{"location",'accessStartDate','accessEndDate'} ]}], "visitorType","escortFirstName","escortLastName","visitorHostFirstName","visitorHostLastName", "visitorHostCompany","visitorBadgeStartDate","visitorBadgeEndDate","company","emailNotifications", "notes","isExtendedVisitorBadge","isBulkRequest" |
Sample Curl Request
curl --location --request POST 'https://api.digitalrealty.com/v1/facility-access/visitors/access-requests' \
--header 'Master-Account-Id: <Master-Account-Id>' \
--header 'Account-Id: <Account-Id>' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data-raw '[
{
"visitors": [
{
"visitorFirstName": "Jake",
"visitorLastName": "Doe",
"visitorEmail": "jake_doe@email.com",
"visitorPhone": "1234567890"
}
],
"sites": [
{
"site": "IAD024",
"locations": [
{
"location": "ABC Cage F150-B",
"accessStartDate": "2024-07-30",
"accessEndDate": "2024-07-30"
}
]
}
],
"visitorType": true,
"escortFirstName": "Jane",
"escortLastName": "Doe",
"visitorHostFirstName": "John",
"visitorHostLastName": "Doe",
"visitorHostCompany": "ABC Company",
"visitorBadgeStartDate": "2023-06-07",
"visitorBadgeEndDate": "2023-06-07",
"company": "DEF Company",
"emailNotifications": "jane_doe@email.com,test@email.com",
"notes": "Datacenter Tour",
"isExtendedVisitorBadge": false,
"isBulkRequest": false
}
]'
Headers
Field Name | Mandatory | Type | Description |
---|---|---|---|
Master-Account-Id | true | string | Customer master account identifier. |
Account-Id | true | string | Customer account identifier. |
Authorization | true | string | Token-based authentication. |
Content-Type | true | string | Indicates the request body format [application/json]. |
Query Parameters
n/a
Body
Field Name | Mandatory | Type | Description |
---|---|---|---|
visitors | true | array | Array of visitor objects. [up to 10 visitor/site combinations] |
> visitorFirstName | true | string(20) | First name of the visitor. |
> visitorLastName | true | string(20) | Last name of the visitor. |
> visitorEmail | true | string(50) | Visitor’s email address. |
> visitorPhone | false | string(40) | Visitor’s phone number. |
sites | true | array | Array of site objects. [up to 10 visitors/site combinations] |
> site | true | string(6) | Site work will be performed. |
> locations | true | array | Array of location objects. |
> > location | true | string | Space within the facility where access needed (suite, cage, etc.) |
> > accessStartDate | true | string($date) |
Date specific access privileges start accessStartDate >= visitorBadgeStartDate but < visitorBadgeEndDate |
> > accessEndDate | true | string($date) |
Date specific access privileges end accessEndDate <= visitorBadgeStartDate but >= visitorBadgeEndDate |
visitorType | true | boolean | Indicates if visitors access is escorted. Values: [true = Escorted visitor, false = Unescorted visitor] Default Value for visitorType = true. |
escortFirstName | false* | string(20) | First name of person escorting visitor. * Mandatory if the visitor is to be escorted. |
escortLastName | false* | string(20) | Last name of person escorting visitor. * Mandatory if the visitor is to be escorted. |
visitorHostFirstName | true | string(20) | First name of host. |
visitorHostLastName | true | string(20) | Last name of host. |
visitorHostCompany | true | string(120) | Company hosting the visitor. |
visitorBadgeStartDate | true | string($date) | Date the visitor access will begin. format: [yyyy-MM-dd] visitorBadgeStartDate >= current date but not > 90 days in the future |
visitorBadgeEndDate | true | string($date) | Date the visitor access will end. format: [yyyy-MM-dd] visitorBadgeEndDate >= visitorBadgeStartDate but not greater than 365 days from visitorBadgeStartDate |
company | true | string(120) | Company name. |
emailNotifications | false | string(32k) | Personnel's email addresses designated to be notified of the request. You can add one or more email addresses in the field by inserting a comma as a separator : "email_1, email_2, email_3". |
notes | false | string(32k) | Add additional information needed. |
isExtendedVisitorBadge | false* | boolean |
Not required to check in daily. (valid up to 30 days)
Extended Visitor Badge: Remains continuously active for up to 30 days and is in the possession of the approved individual. After 30 days, a new request must be submitted for approval. |
isBulkRequest | true | boolean | Deprecated. Please see details below |
Bulk request:
This feature is deprecated for now. Team is working on a better business process to enable bulk facility access requests.
Sample JSON Response
{
"workOrder": [
{
"workOrderId": "WO8744051"
}
]
}
Payload Description
Field Name | Type | Description |
---|---|---|
workOrder | array | Array of workOrderId objects |
workOrderId | string(20) | Identifier of the facility access work order. |
5. Retrieve Visitor Access Ticket Information
The method can be used to retrieve details of a facility access request.
Method | GET |
---|---|
End point | /v1/facility-access/access-tickets/{ticketId} |
Headers | Authorization, Master-Account-Id, Account-Id |
Query Parameters | n/a |
Body | n/a |
Sample Curl Request
curl --location --request GET 'https://api.digitalrealty.com/v1/facility-access/access-tickets/<ticketId>' \
--header 'Master-Account-Id: <Master-Account-Id>' \
--header 'Account-Id: <Account-Id>' \
--header 'Authorization: Bearer <access_token>'
Headers
Field Name | Mandatory | Type | Description |
---|---|---|---|
Master-Account-Id | true | string | Customer master account identifier. |
Account-Id | true | string | Customer account identifier. |
Authorization | true | string | Token-based authentication. |
Query Parameters
n/a
Body
n/a
Sample JSON Response
{
"ticketId": "WO9282943",
"ticketType": "Security",
"ticketStatus": "Approved",
"requester": "Random User",
"ticketCreatedDate": "2023-06-07 11:01:06",
"ticketUpdatedDate": "2023-06-07 11:02:03",
"requestType": "Visitor Access",
"ticketCategory": "New Visitor Access",
"contactFirstName": "Jake",
"contactLastName": "Doe",
"contactEmail": "jake_doe@email.com",
"contactPhone": "+918898805959",
"representingCompany": "DEF Company",
"badgeStartDate": "2023-06-07",
"badgeEndDate": "2023-06-07",
"site": [
{
"site": "IAD024",
"locations": [
{
"location": "ABC Cage F150-B"
}
],
"address": "43830 Devin Shafron Drive (Bldg F)"
}
],
"modifiedBy": "system",
"emailNotifications": "",
"visitorType": "Escorted visitor",
"visitorBadgeType": "Visitor Access (Escorted)",
"visitorHostFirstName": "John",
"visitorHostLastName": "Doe",
"hostCompany": "ABC Company",
"notes": "Datacenter Tour",
"contactType": "Jake Doe going to visit IAD024 - ABC Cage F150-B on 06/07/2023",
"escortFirstName": "Jane",
"escortLastName": "Doe",
"visitorBadgeStartDate": "2023-06-07",
"visitorBadgeEndDate": "2023-06-07",
"customerExternalReference": "",
"workDescription": "Datacenter Tour",
"description": "Jake Doe going to visit IAD024 - ABC Cage F150-B on 06/07/2023",
"bulkRequest": false
}
Payload Description
Field Name | Type | Description |
---|---|---|
ticketId | string(20) | Identifier of the ticket. |
ticketType | string(enum) |
The type of the ticket. Value: [Facility Access] |
ticketStatus | string(enum) |
Designates the stage of the ticket.
In Progress = ticket has been assigned to a DLR resource and in the process of being addressed. |
requester | string(40) | Designates the user that initially generated the work order. |
ticketCreatedDate | string(date-time) | Date on which the work order was generated. format: [yyyy-MM-dd HH:mm:ss] timezone: [UTC] |
ticketUpdatedDate | string(date-time) | Last date on which the work order details were modified. format: [yyyy-MM-dd HH:mm:ss] timezone: [UTC] |
requestType | string(enum) |
Type of the facility access request. Value: [Visitor Access] |
ticketCategory | string(enum) |
Category of the facility access request. Value: [New Visitor Access] |
contactFirstName | string(20) | First name of the contact. |
contactLastName | string(20) | Last name of the contact. |
contactEmail | string(50) | Contact’s email address. |
contactPhone | string(40) | Contact’s phone number. |
representingCompany | string(120) | Company representing. |
badgeStartDate | string($date) | Date of the badge activation. format: [yyyy-MM-dd] |
badgeEndDate | string($date) | Date of the badge expiration. format: [yyyy-MM-dd] |
site | array | Array of site objects. |
>site | string(6) | Assigned Site. |
> locations | array | Array of location objects. |
>> location | string | Space within the facility where access needed (suite, cage, etc.) |
> address | string | Site Address. |
modifiedBy | string(40) | Designates the user that modified the work order. |
emailNotifications | string(32k) | Personnel's email addresses designated to be notified of the request. You can add one or more email addresses in the field by inserting a comma as a separator : "email_1, email_2, email_3". |
visitorType | string(enum) | Indicates if visitors access is escorted. Values: [true = Escorted visitor, false = Unescorted visitor] Default Value for visitorType = true. |
visitorBadgeType | string(enum) | The Type of visitor badge. Values: [Visitor Access (Escorted),Visitor Access (Extended),Visitor Access (Unescorted)] |
visitorHostFirstName | string(20) | First name of host. |
visitorHostLastName | string(20) | Last name of host. |
hostCompany | string(120) | Company hosting the visitor. |
notes | string(32k) | Add additional information needed. |
contactType | string | Short description of the visit. |
escortFirstName | string(20) | First name of person escorting visitor. |
escortLastName | string(20) | Last name of person escorting visitor. |
visitorBadgeStartDate | string($date) | Date the visitor access will begin. format: [yyyy-MM-dd] visitorBadgeStartDate >= current date but not > 90 days in the future |
visitorBadgeEndDate | string($date) | Date the visitor access will end. format: [yyyy-MM-dd] visitorBadgeEndDate >= visitorBadgeStartDate but not greater than 365 days from visitorBadgeStartDate |
customerExternalReference | string(40) | Customer external reference number. |
workDescription | string(32k) | The Description of the work. |
description | string | Short description of work order. |
bulkRequest | boolean | Indicates if this is a request for more than four visitors. |
Retrieve Visitor Access List
The method can be used to retrieve all visitor access requests of the customers account.
Method | GET |
---|---|
End point | /v1/facility-access/visitors |
Headers | Authorization, Master-Account-Id, Account-Id |
Query Parameters | site, status, createdBy, size, page |
Body | n/a |
Sample Curl Request
curl --location --request GET 'https://api.digitalrealty.com/v1/facility-access/visitors' \
--header 'Master-Account-Id: <Master-Account-Id>' \
--header 'Account-Id: <Account-Id>' \
--header 'Authorization: Bearer <access_token>'
Headers
Field Name | Mandatory | Type | Description |
---|---|---|---|
Master-Account-Id | true | string | Customer master account identifier. |
Account-Id | true | string | Customer account identifier. |
Authorization | true | string | Token-based authentication. |
Query Parameters
Field Name | Mandatory | Type | Description |
---|---|---|---|
site | false | string(6) | Filter by the DLR facility that handles the tickets. |
status | false | string(enum) |
Filter by state of the tickets. Values: [Pending Approval,Approved,In Progress,Completed,Approval Denied,Cancelled] |
createdBy | false | string(40) | Filter by user who generated the work order. |
size | false | integer | The maximum number of search results to return. Default value: 25 |
page | false | integer | The page number of the returning search results. Default value: 0 |
Body
n/a
Sample JSON Response
{
"content": [
{
"id": "WO9283130",
"title": "Jake Doe going to visit IAD024 - ABC Cage F150-B on 06/07/2023",
"status": "Approved",
"site": "IAD024",
"requestType": "Visitor Access",
"category": "New Visitor Access",
"isBulkRequest": false,
"createdOn": "2023-06-07 11:39:17",
"updatedOn": "2023-06-07 11:40:15",
"closedOn": "",
"createdBy": "Random User",
"ticketType": "Facility Access",
"description": "New Visitor Access",
"location": "ABC Cage F150-B"
}
],
"pageable": {
"last": true,
"totalPages": 1,
"totalElements": 1,
"size": 25,
"number": 0,
"first": true,
"numberOfElements": 1,
"empty": false
}
}
Payload Description
Field Name | Type | Description |
---|---|---|
id | string(20) | Identifier of the ticket. |
title | string(160) | Label on the work order. |
status | string(enum) |
Designates the stage of the ticket. Values: [Pending Approval,Approved,In Progress,Completed,Approval Denied,Cancelled] |
site | string(6) | Identifier of the DLR facility. |
requestType | string(enum) | Type of the facility access request. value: [Visitor Access] |
category | string(enum) | Category of the facility access request. Value: [New Visitor Access] |
isBulkRequest | boolean | Indication if for multiple visitors is use. |
createdOn | string(date-time) | Date on which the work order was generated. format: [yyyy-MM-dd HH:mm:ss] timezone: [GMT] |
updatedOn | string(date-time) | Last date on which the work order details were modified. format: [yyyy-MM-dd HH:mm:ss] timezone: [GMT] |
closedOn | string(date-time) | Date on which the work order’s status was marked Completed. format: [yyyy-MM-dd HH:mm:ss] timezone: [GMT] |
createdBy | string(40) | Designates the user that initially generated the work order. |
ticketType | string(enum) | Type of the ticket. value: [Facility Access] |
description | string | Short description of work order. |
location | string | Identifier of customer premise within DLR facility. |
6. Edit Visitor Access Ticket Information
The method can be used to edit a facility access ticket.
Method | PUT |
---|---|
End point | /v1/facility-access/access-tickets/{workOrderId} |
Headers | Authorization, Master-Account-Id, Account-Id, Content-Type |
Query Parameters | n/a |
Body | visitorPhone,emailNotifications |
The following fields are editable BASED on the (Ticket Status)
Field Name | Status |
visitorPhone | All statuses except Approval Denied, Completed, or Cancelled |
emailNotifications | All statuses except Approval Denied, Completed, or Cancelled |
Sample Curl Request
curl --location --request PUT 'https://api.digitalrealty.com/v1/facility-access/access-tickets/<workOrderId>' \
--header 'Master-Account-Id: <Master-Account-Id>' \
--header 'Account-Id: <Account-Id>' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data-raw '{
"visitorPhone":"+918898805959",
"emailNotifications": "test2@email.com,jane_doe@email.com"
}'
Headers
Field Name | Mandatory | Type | Description |
---|---|---|---|
Master-Account-Id | true | string | Customer master account identifier. |
Account-Id | true | string | Customer account identifier. |
Authorization | true | string | Token-based authentication. |
Content-Type | true | string | Indicates the request body format. value: [application/json] |
Query Parameters
n/a
Body
Field Name | Mandatory | Type | Description |
---|---|---|---|
visitorPhone | false | string(40) | Phone number of the requestor. |
emailNotifications | false | string(32k) | Personnel's email addresses designated to be notified of the request. You can add one or more email addresses in the field by inserting a comma as a separator : "email_1, email_2, email_3". |
Sample JSON Response
{
"workOrderId": "WO8741409"
}
Payload Description
Field Name | Type | Description |
---|---|---|
workOrderId | string(20) | Identifier of the facility access work order. |
7. Cancel Visitor Access Ticket
The method can be used to cancel a facility access request while the ticket status is still "New" or "In Progress".
Method | PUT |
---|---|
End point | /v1/facility-access/access-tickets/{workOrderId}/cancel |
Headers | Authorization, Master-Account-Id, Account-Id, Content-Type |
Query Parameters | n/a |
Body | cancelReason |
Sample Curl Request
curl --location --request PUT 'https://api.digitalrealty.com/v1/facility-access/access-tickets/<workOrderId>/cancel' \
--header 'Master-Account-Id: <Master-Account-Id>' \
--header 'Account-Id: <Account-Id>' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data-raw '{
"cancelReason": "Duplicate request"
}'
Headers
Field Name | Mandatory | Type | Description |
---|---|---|---|
Master-Account-Id | true | string | Customer master account identifier. |
Account-Id | true | string | Customer account identifier. |
Authorization | true | string | Token-based authentication. |
Content-Type | true | string | Indicates the request body format. value: [application/json] |
Query Parameters
n/a
Body
Field Name | Mandatory | Type | Description |
---|---|---|---|
cancelReason | false | string(enum) | Reason of the cancellation. values: [Duplicate request, Request entered in error, Request no longer needed] default: [Request no longer needed] |
Sample JSON Response
{
"result": {
"status": "Work Order WO8741481 has been cancelled."
}
}
Payload Description
Field Name | Type | Description |
---|---|---|
status | string(255) | Acknowledgement message of the cancellation. |
8. Add a Comment or Attachment
Add Comments
Add comments to an existing work order. Multiple comments can be added to a work order as long as the status of the order is not closed or cancelled. Refer to the Comments API instructions on how to add comments. You may skip this step if you already know how to add comments.
Add Attachments
Add attachments to an existing work order. Multiple attachments can be added to a work order as long as the status of the order is not closed or cancelled. Refer to the Attachments API for instructions on how to add attachments. You may skip this step if you already know how to add attachments.