## **Table of Contents**
- General App Information
- Authentication from ChatGPT to Workday
- Sample Use Case: PTO Submission and Benefit Plan Inquiry
- Additional Resources
- Conclusion
## General App Information
Workday delivers cloud-based solutions for human capital management (HCM), payroll processing, and financial oversight. By linking ChatGPT to Workday via Custom Actions, companies can streamline HR tasks, deliver instant answers to employee questions, assist with HR workflows, and pull essential data directly from Workday.
Custom Actions in ChatGPT connected to Workday empower organizations to leverage AI for optimizing HR workflows, handling routine tasks automatically, and delivering tailored support to staff. Key applications include AI-driven HR assistants that address queries on benefits, time-off policies, and payroll information.
## Authentication from ChatGPT to Workday
Connecting ChatGPT to Workday relies on OAuth authentication:
- You'll need Workday Admin privileges to generate the Client ID and Client Secret.
- Key URLs:
**Authorization URL**: `[Workday Tenant URL]/authorize`, commonly formatted as: `https://wd5-impl.workday.com/<your_tenant>/authorize`
- **Token URL**: `[Workday Tenant URL]/token`, commonly formatted as: `https://wd5-impl-services1.workday.com/ccx/oauth2/<your_tenant>/token`
*Always use the exact URLs supplied by Workday after creating the API Client in your tenant, tailored to your data center.*
**Steps to Set Up OAuth**:
- Launch the Register API client task within Workday.
- Configure your API client settings in Workday following the example provided.
- Scopes depend on the GPT actions; for this scenario, include: `Staffing`, `Tenant Non-Configurable`, `Time Off and Leave`, `Include Workday Owned Scope`
- Input the **Redirection URI** obtained from GPT into the API client configuration.
- Securely save the **Client ID** and **Client Secret** for GPT configuration.
- Input these OAuth credentials into the GPT's Authentication section as illustrated.
*The Redirection URI appears in the GPT configuration interface after selecting OAuth authentication.*
For more in-depth guidance, check the Workday Community page on API clients *(requires a community login)*.
## Sample Use Case: PTO Submission and Benefit Plan Inquiry
### Overview
This example showcases assisting employees with PTO submissions, accessing worker information, and reviewing benefit plans via a RAAS report.
## GPT Instructions
Use the following instructions to cover PTO Submission use-cases, Worker details retrieval and benefit plan inquiry:
```
# **Context:** You support employees by providing detailed information about their PTO submissions, worker details, and benefit plans through the Workday system. You help them submit PTO requests, retrieve personal and job-related information, and view their benefit plans. Assume the employees are familiar with basic HR terminologies.
# **Instructions:**
## Scenarios
### - When the user asks to submit a PTO request, follow this 3 step process:
1. Ask the user for PTO details, including start date, end date, and type of leave.
2. Submit the request using the `Request_Time_Off` API call.
3. Provide a summary of the submitted PTO request, including any information on approvals.
### - When the user asks to retrieve worker details, follow this 2 step process:
1. Retrieve the worker’s details using `Get_Workers`.
2. Summarize the employee’s job title, department, and contact details for easy reference.
### - When the user asks to inquire about benefit plans, follow this 2 step process:
1. Retrieve benefit plan details using `Get_Report_As_A_Service`.
2. Present a summary of the benefits.
```
### Creating request on behalf of the employee
Since actions in Workday require the employee ID, this must be fetched first. We achieve this by invoking a RAAS report post-authentication that identifies the logged-in user. Alternatively, a direct REST API might work. The retrieved ID then drives all subsequent operations.
Sample RAAS Report: The 'Current User' field yields the OAuth-authenticated worker's details.
### OpenAPI Schema
Below is an example OpenAPI schema generated using the Workday REST API Reference and ActionsGPT.
We're using the following API calls:
- **[POST] Request_Time_Off**: Creates a time off request for an employee.
- **[GET] Get_Workers**: Retrieves information on worker details.
- **[GET] Get_eligibleAbsenceTypes**: Retrieves eligible time off plans.
- **[GET] Get_Report_As_A_Service (RAAS)**: Pulls reports, including custom RAAS reports, for benefit details.
Replace the paths with the correct tenant ID and configure them to the appropriate servers. Ensure the required IDs are set correctly for different PTO types.
```
openapi: 3.1.0
info:
title: Workday Employee API
description: API to manage worker details, absence types, and benefit plans in Workday.
version: 1.3.0
servers:
- url: https://wd5-impl-services1.workday.com/ccx
description: Workday Absence Management API Server
paths:
/service/customreport2/tenant/GPT_RAAS:
get:
operationId: getAuthenticatedUserIdRaaS
summary: Retrieve the Employee ID for the authenticated user.
description: Fetches the Employee ID for the authenticated user from Workday.
responses:
'200':
description: A JSON object containing the authenticated user's Employee ID.
content:
application/json:
schema:
type: object
properties:
employeeId:
type: string
description: The Employee ID of the authenticated user.
example: "5050"
'401':
description: Unauthorized - Invalid or missing Bearer token.
security:
- bearerAuth: []
/api/absenceManagement/v1/tenant/workers/Employee_ID={employeeId}/eligibleAbsenceTypes:
get:
operationId: getEligibleAbsenceTypes
summary: Retrieve eligible absence types by Employee ID.
description: Fetches a list of eligible absence types for a worker by their Employee ID, with a fixed category filter.
parameters:
- name: employeeId
in: path
required: true
description: The Employee ID of the worker (passed as `Employee_ID=3050` in the URL).
schema:
type: string
example: "5050"
- name: category
in: query
required: true
description: Fixed category filter for the request. This cannot be changed.
schema:
type: string
example: "17bd6531c90c100016d4b06f2b8a07ce"
responses:
'200':
description: A JSON array of eligible absence types.
content:
application/json:
schema:
type: object
properties:
absenceTypes:
type: array
items:
type: object
properties:
id:
type: string
name:
type: string
'401':
description: Unauthorized - Invalid or missing Bearer token.
'404':
description: Worker or absence types not found.
security:
- bearerAuth: []
/api/absenceManagement/v1/tenant/workers/Employee_ID={employeeId}:
get:
operationId: getWorkerById
summary: Retrieve worker details by Employee ID.
description: Fetches detailed information of a worker using their Employee ID.
parameters:
- name: employeeId
in: path
required: true
description: The Employee ID of the worker.
schema:
type: string
example: "5050"
responses:
'200':
description: A JSON object containing worker details.
content:
application/json:
schema:
type: object
properties:
id:
type: string
name:
type: object
properties:
firstName:
type: string
lastName:
type: string
position:
type: string
email:
type: string
'401':
description: Unauthorized - Invalid or missing Bearer token.
'404':
description: Worker not found.
security:
- bearerAuth: []
/api/absenceManagement/v1/tenant/workers/Employee_ID={employeeId}/requestTimeOff:
post:
operationId: requestTimeOff
summary: Request time off for a worker.
description: Allows a worker to request time off by providing the necessary details.
parameters:
- name: employeeId
in: path
required: true
description: The Employee ID of the worker requesting time off.
schema:
type: string
example: "5050"
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
days:
type: array
description: Array of days for which the time off is being requested.
items:
type: object
properties:
start:
type: string
format: date
description: The start date of the time off.
example: "2024-11-26"
date:
type: string
format: date
description: The specific date for the time off.
example: "2024-11-26"
end:
type: string
format: date
description: The end date of the time off.
example: "2024-11-26"
dailyQuantity:
type: number
description: The number of hours per day to take off.
example: 8
timeOffType:
type: object
description: Time off type with corresponding ID.
properties:
id:
type: string
description: The ID of the time off type.
example: "b35340ce4321102030f8b5a848bc0000"
enum:
- <flexible_time_off_id_from_workday> # Flexible Time Off ID (hexa format)
- <sick_leave_id_from_workday> # Sick Leave ID (hexa format)
responses:
'200':
description: Time off request created successfully.
'400':
description: Invalid input or missing parameters.
'401':
description: Unauthorized - Invalid or missing Bearer token.
'404':
description: Worker not found.
security:
- bearerAuth: []
/service/customreport2/tenant/GPT_Worker_Benefit_Data:
get:
operationId: getWorkerBenefitPlans
summary: Retrieve worker benefit plans enrolled by Employee ID.
description: Fetches the benefit plans in which the worker is enrolled using their Employee ID.
parameters:
- name: Worker!Employee_ID
in: query
required: true
description: The Employee ID of the worker.
schema:
type: string
example: "5020"
- name: format
in: query
required: true
description: The format of the response (e.g., `json`).
schema:
type: string
example: "json"
responses:
'200':
description: A JSON array of the worker's enrolled benefit plans.
content:
application/json:
schema:
type: object
properties:
benefitPlans:
type: array
items:
type: object
properties:
planName:
type: string
coverage:
type: string
startDate:
type: string
format: date
endDate:
type: string
format: date
'401':
description: Unauthorized - Invalid or missing Bearer token.
'404':
description: Worker or benefit plans not found.
security:
- bearerAuth: []
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
schemas:
worker:
type: object
properties:
id:
type: string
name:
type: object
properties:
firstName:
type: string
lastName:
type: string
position:
type: string
email:
type: string
absenceTypes:
type: array
items:
type: object
properties:
id:
type: string
name:
type: string
benefitPlans:
type: array
items:
type: object
properties:
planName:
type: string
coverage:
type: string
startDate:
type: string
format: date
endDate:
type: string
format: date
timeOffTypes:
type: object
description: Mapping of human-readable time off types to their corresponding IDs.
properties:
Flexible Time Off:
type: string
example: "b35340ce4321102030f8b5a848bc0000"
Sick Leave:
type: string
example: "21bd0afbfbf21011e6ccc4dc170e0000"
```
## Conclusion
Great job configuring your GPT for Workday, now equipped for PTO submissions, fetching employee information, and querying benefit plans!
Such connectivity simplifies HR operations, grants rapid access to individual records, and simplifies PTO requests for staff. This guide equips you with everything needed for a robust setup.