Skip to content

feat: add Workday ATS integration#653

Open
maoshuorz wants to merge 1 commit into
revertinc:mainfrom
maoshuorz:feat/workday-integration
Open

feat: add Workday ATS integration#653
maoshuorz wants to merge 1 commit into
revertinc:mainfrom
maoshuorz:feat/workday-integration

Conversation

@maoshuorz
Copy link
Copy Markdown

Summary

Adds Workday as a new ATS integration, following the existing patterns established by Greenhouse and Lever integrations.

/claim #372

Changes

Schema & Config

  • Added workday to Prisma TP_ID enum
  • Added Workday config variables: WORKDAY_CLIENT_ID, WORKDAY_CLIENT_SECRET, WORKDAY_TOKEN_URL, WORKDAY_API_BASE_URL
  • Added 'workday' to ATS_TP_ID type, DEFAULT_SCOPE, and mapIntegrationIdToIntegrationName

Authentication

  • Created WorkdayAuthHandler (routes/v1/ats/authHandlers/workday.ts) implementing OAuth2 token exchange, following the Lever auth handler pattern
  • Wired up case TP_ID.workday in the ATS auth router

ATS Service Endpoints

Added Workday cases to all ATS service files:

  • Candidate (CRUD) - Maps to Workday /api/staffing/v6/candidates
  • Job (CRUD) - Maps to Workday /api/staffing/v6/jobPostings
  • Department (read) - Maps to Workday /api/staffing/v6/organizations
  • Offer (read) - Maps to Workday /api/staffing/v6/jobOffers
  • Proxy - Generic proxy through Workday API base URL

Data Transforms

  • Added Workday field mappings in prisma/fields.ts for all 4 ATS object types (candidate, job, offer, department)
  • Added [TP_ID.workday]: {} to postprocessDisUnifyAtsObject preprocess map
  • Added case TP_ID.workday to disunifyAtsObject in disunify.ts

Design Decisions

  • Workday API base URL is configurable per-connection via app_config.org_url (falls back to WORKDAY_API_BASE_URL env var), since Workday uses tenant-specific URLs
  • Offset-based pagination for list endpoints, computing next cursor from total in response
  • Delete endpoints return "not supported" (consistent with Workday API constraints)

Test Plan

  • Verify TypeScript compilation passes
  • Test OAuth2 flow with Workday sandbox credentials
  • Test CRUD operations for candidates and jobs
  • Test read operations for departments and offers
  • Verify proxy endpoint forwards requests correctly

- Add 'workday' to Prisma TP_ID enum
- Add Workday OAuth2 auth handler following Lever pattern
- Add Workday config variables (client_id, client_secret, token_url, api_base_url)
- Add Workday cases to all ATS service files (candidate, job, department, offer, proxy)
- Add Workday field mappings for all ATS object types
- Add Workday to disunify/preprocess transforms
- Wire up auth router to dispatch to Workday handler

Closes revertinc#372
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Mar 7, 2026

Thank you for following the naming conventions for pull request titles! 🙏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant