Use the PMI Data API to retrieve daily SMART forecast hours and assign them to the corresponding departments in your time-keeping system (TKS) or workforce management system. These productive hours support staff scheduling and shift planning.

The workflow is to retrieve the available properties, match department identifiers, and then retrieve forecasted hours for the required dates.

Before you start

You need a valid PMI API access token and the tenant identifier (client_id) supplied by d2o. The tenant identifier is a GUID; property and department identifiers are integers.

API base URL https://data.d2o.com

API documentation https://data.d2o.com/swagger/index.html

Send these headers with every request:

Authorization: Bearer <access_token> Accept: application/json

All identifiers and response values below are illustrative. Replace them with values for your integration. Example paths are relative to the API base URL.

1 Retrieve properties

Retrieve the properties your integration is allowed to access.

GET /api/Hierarchy/Properties/{client_id}

GET /api/Hierarchy/Properties/4f725e8a-d8e0-48bb-bb6e-84183edb581d

Example JSON response:

[ { "Id": 41, "Name": "Example Hotel" }, { "Id": 42, "Name": "Another Hotel" } ]

Id is the PMI property identifier. Use it as h_id when retrieving the property’s department mappings or labor data for all its departments.

2 Retrieve department mappings

Retrieve the relationships between departments in your TKS and PMI departments or labor cockpits.

GET /api/Mapping/TKS/Departments/{client_id}?h_id={property_id}

For property 41 and the example client_id:

GET /api/Mapping/TKS/Departments/4f725e8a-d8e0-48bb-bb6e-84183edb581d?h_id=41

FieldMeaning
HIdPMI department identifier; may be null when unmapped.
SourceDepartmentDepartment name in the source TKS.
SourceDepartmentIdentifierDepartment identifier in the source TKS.
Status0 = unmapped, 1 = mapped, 2 = ignored.

Example JSON response:

[ { "SourceDepartment": "Breakfast", "SourceDepartmentIdentifier": "BREAKFAST", "HId": 62, "Status": 1 }, { "SourceDepartment": "Housekeeping", "SourceDepartmentIdentifier": "HOUSEKEEPING", "HId": 63, "Status": 1 } ]

In this example, PMI department 62 corresponds to BREAKFAST and department 63 corresponds to HOUSEKEEPING in the external system.

Use entries with Status = 1 and a non-null HId. Flag unmapped or ignored entries for review instead of using them to route forecasted hours. Confirm that each destination has a usable SourceDepartmentIdentifier.

Match identifiers precisely

Match HId in the mapping response to H_Id in the labor response. Use SourceDepartmentIdentifier to identify the destination department in your system. Preserve the field names and casing exactly; do not match departments by name.

Store the mappings locally and refresh them periodically and after mapping changes. If multiple source departments map to one PMI department, agree how to allocate its forecast before importing it into multiple destinations.

3 Retrieve forecasted labor hours

Retrieve daily labor data for the labor-enabled departments within a property. Here, h_id is the property identifier and from and to are inclusive dates in YYYY-MM-DD format.

GET /api/Labor/Departments/Days/{client_id} ?h_id={property_id}&from={start_date}&to={end_date}

Example request path and query, shown on separate lines for readability; combine them into one URL:

GET /api/Labor/Departments/Days/4f725e8a-d8e0-48bb-bb6e-84183edb581d ?h_id=41&from=2026-11-01&to=2026-11-02

Example JSON response excerpt showing the fields needed for this integration:

[ { "H_Id": 62, "Date": "2026-11-01T00:00:00", "SMARTForecast": 24.5 }, { "H_Id": 63, "Date": "2026-11-01T00:00:00", "SMARTForecast": 48.0 } ]

Use SMART forecast hours

SMARTForecast contains PMI’s SMART forecast of productive labor hours for a department and date, expressed in decimal hours. It excludes non-productive hours and reflects the applicable SMART minimum/maximum constraints. For example, 24.5 means 24 hours and 30 minutes.

Use SMARTForecast for this integration. Hours, Productive and NonProductive are other labor measures and should not be substituted for the SMART forecast. A value of 0 may represent zero forecasted hours or absent SMART data; investigate unexpected zeros in the corresponding PMI labor cockpit.

For the example above, match H_Id = 62 to mapping HId = 62 and import 24.5 forecasted hours into BREAKFAST for November 1, 2026.

Retrieve a single department

For one department, use the singular Department endpoint. Here, h_id identifies the department, not the property:

GET /api/Labor/Department/Days/4f725e8a-d8e0-48bb-bb6e-84183edb581d ?h_id=62&from=2026-11-01&to=2026-11-07

Keep the integration up to date

Forecast values may change as underlying data and settings change. Refresh the dates needed by your scheduling process regularly. Do not assume a fixed daily refresh time unless agreed with d2o.

Handle expired tokens, unsuccessful requests and temporary connection failures. Compare unexpected results with the same department and date in PMI. Use the API documentation linked above for endpoint specifications.