Implementation Overview
Implementation Type: Direct API IntegrationNote Format: Plain Text
Status: Production Ready
Configuration
Feature Summary
Direct API integration with comprehensive functionality. Notable limitations: no disposition-reason enumeration, and application rejection APIs are not wired through yet (see Application Management).Code-Verified Support Checklist
This checklist reflects the currentTrackerAtsClient implementation.
Streaming Operations (All Supported)
Streaming Operations (All Supported)
- Stream Jobs (Custom Implementation)
- Stream Applications (Custom Implementation)
- Stream Candidates (Custom Implementation)
Custom timezone adjustment logic subtracts 8 hours from
updated_after timestamps because Tracker returns local time instead of UTC.Application Management
Application Management
Move to Stage
Status: Supported (Custom Implementation)Method:
_move_application_to_stage(application, stage)Moves applications between stages using Tracker’s API. Works with known stage IDs.Get Rejection Reasons
Status: Not SupportedMethod:
get_disposition_reasons()Returns an empty list. supports_disposition_reasons is False; there is no usable enumeration of rejection reasons for the product flow.Reject Application
Status: Not Supported (not implemented)Method:
reject_application(application_id, reason_id)Raises NotImplementedError. Stage moves (_move_application_to_stage) are the supported path for workflow updates.Bulk Reject Applications
Status: Not Supported (stub)Method:
bulk_reject_applications(application_ids, reason_id)Returns an empty BulkRejectResult until batch rejection is implemented against Tracker’s API.Create Application
Status: Supported (Custom Implementation)Method:
_create_application_for_candidate(candidate, job)Creates new application records for candidates in Tracker.Get All Application Stages
Status: Supported (Custom Implementation)Method:
_get_all_application_stages()Loads cached Tracker metadata and maps opportunityResourceStatuses to ApplicationStage objects. supports_get_all_application_stages is True.Job Management (All Supported)
Job Management (All Supported)
- Get Job by ID (Custom Implementation)
- Get Enhanced Job (Custom Implementation)
- Batch Job Operations (Custom Implementation)
Candidate Management
Candidate Management
- Get Candidate by ID (Custom Implementation)
- Find by Details (Custom Implementation; currently name-based search in practice)
- Get Resume: Supported — lists resource documents and downloads the file for the first document with
documentType == "resume"andisPrimary
Notes & Attachments
Notes & Attachments
- Application Notes (Custom Implementation)
- Candidate Notes (Custom Implementation)
- Application Attachments (Custom Implementation)
- Candidate Attachments (Custom Implementation)
documentType == "resume" and isPrimary).Custom Fields (All Supported)
Custom Fields (All Supported)
- Application Custom Fields (Custom Implementation)
- Candidate Custom Fields (Custom Implementation)
- Job Custom Fields (Custom Implementation)
Implementation Notes
Timezone Handling
Critical implementation detail:Tracker API returns timestamps in local time (not UTC). The client automatically adjusts
updated_after parameters by subtracting 8 hours to cover all US timezones and prevent data loss.
Metadata Management
Tracker uses a metadata system (TrackerMetaData) that caches:
- Available job categories
- Application statuses
- Workflow configurations
Library Architecture
UsesTrackerAtsLibrary for API communication with MW Resources API key configuration.
Known Limitations
The following limitations apply:- Rejection Reason Enumeration: No disposition list for the product (
supports_disposition_reasons = False;get_disposition_reasons()returns[]). - Reject / Bulk Reject:
reject_applicationis not implemented;bulk_reject_applicationsis a stub. Use stage movement where a rejection stage is configured. - Resume download: Only primary resume documents are fetched (
documentType == "resume"andisPrimary). Non-primary resumes and other document types (e.g. photos) are skipped. - Local Time Handling: Streaming filters adjust
updated_after(subtract 8 hours) because Tracker returns local-time semantics; see_adjust_datetime_for_timezone.
Related Files
- Implementation:
server/ats/tracker_ats/tracker_ats_client.py(~1,200 lines) - Library:
server/ats/tracker_ats/tracker_library.py - Models:
server/ats/tracker_ats/tracker_models.py - Field Mappings:
server/ats/field_type_mapper.py(TRACKER_FIELD_MAPPINGS) - Base Class:
server/ats/base_ats_client.py
See Also
- ATS Coverage Matrix
- Tracker Workable Wrapper - Hybrid client for MW Resources