Skip to main content

Implementation Overview

Implementation Type: Direct API Integration
Note 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 current TrackerAtsClient implementation.

Streaming Operations (All Supported)

  • Stream Jobs (Custom Implementation)
  • Stream Applications (Custom Implementation)
  • Stream Candidates (Custom Implementation)
Implementation Notes:
Custom timezone adjustment logic subtracts 8 hours from updated_after timestamps because Tracker returns local time instead of UTC.

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 Supported
Method: 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.
  • Get Job by ID (Custom Implementation)
  • Get Enhanced Job (Custom Implementation)
  • Batch Job Operations (Custom Implementation)
Job data includes Tracker-specific metadata like categories and custom workflows.
  • 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" and isPrimary
Advanced candidate search with multiple criteria and pagination support.
  • Application Notes (Custom Implementation)
  • Candidate Notes (Custom Implementation)
  • Application Attachments (Custom Implementation)
  • Candidate Attachments (Custom Implementation)
Write-path support for notes and attachments through Tracker’s document API. Resume retrieval is supported for primary resume documents (documentType == "resume" and isPrimary).
  • Application Custom Fields (Custom Implementation)
  • Candidate Custom Fields (Custom Implementation)
  • Job Custom Fields (Custom Implementation)
Tracker has rich custom field support across all entities.

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
Metadata is loaded once per client instance for performance.

Library Architecture

Uses TrackerAtsLibrary 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_application is not implemented; bulk_reject_applications is a stub. Use stage movement where a rejection stage is configured.
  • Resume download: Only primary resume documents are fetched (documentType == "resume" and isPrimary). 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.
  • 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