> ## Documentation Index
> Fetch the complete documentation index at: https://f4c7a9e2d8b1-docs.tenzo.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Crelate ATS

> Feature coverage and implementation details for Crelate integration

## Implementation Overview

**Implementation Type:** Kombo-based Integration\
**Note Format:** Plain Text\
**Status:** Production Ready

## Configuration

| Property               | Value                      |
| ---------------------- | -------------------------- |
| Provider Enum          | `crelate`                  |
| Note Format            | `PLAIN`                    |
| Disposition Reasons    | Partial                    |
| All Application Stages | Supported                  |
| Passthrough URL        | `/passthrough/crelate/api` |
| Remote ID Field        | `Id` (capital I)           |

## Feature Summary

Kombo-based integration with selective implementation. Some features partially implemented or pending.

<AccordionGroup>
  <Accordion title="Streaming Operations" defaultOpen>
    ### Stream Jobs

    **Status:** Supported (Custom Implementation)\
    **Method:** `_get_specific_ats_jobs_batch(limit, include_closed, cursor)`

    Uses custom batch fetching via Crelate passthrough API to retrieve jobs with custom field values and pagination support.

    ### Stream Applications

    **Status:** Supported (Custom Implementation with Limitations)\
    **Method:** `_stream_applications(updated_after, for_job_ids)`

    Crelate's `updated_after` parameter doesn't work correctly in their API, so the implementation ignores it and uses a custom filtering strategy:

    1. Process applications in START stage (new applicants)
    2. Process applications already tracked in our system (to sync updates)
    3. Skip applications in later stages that we've never seen before

    This ensures we capture new applications while avoiding duplicate processing of applications that moved through stages before we started tracking them.

    ### Stream Candidates

    **Status:** Not Implemented\
    **Method:** Inherits from BaseKomboAtsClient (returns empty generator)

    Candidate streaming is not yet implemented for Crelate. Use candidate lookup by ID instead.
  </Accordion>

  <Accordion title="Application Management">
    ### Move to Stage

    **Status:** Supported (Inherited)\
    **Method:** `_move_application_to_stage(application, stage)`

    Moves applications between stages using Kombo's unified API. Implementation inherited from BaseKomboAtsClient and functional for Crelate, though not extensively tested across all stage transitions.

    ### Get Rejection Reasons

    **Status:** Supported (Inherited)\
    **Method:** `get_disposition_reasons()`

    Retrieves rejection reasons from Crelate through Kombo. Functional but coverage of Crelate-specific rejection reasons may vary.

    ### Reject Application

    **Status:** Supported (Inherited)\
    **Method:** `reject_application(application_id, reason_id)`

    Rejects applications using Kombo's unified API. Works with Crelate but may have limitations with certain rejection reason types.

    ### Bulk Reject Applications

    **Status:** Supported (Inherited)\
    **Method:** `bulk_reject_applications(application_ids, reason_id)`

    Bulk rejection of multiple applications. Inherited from Kombo with standard functionality.

    ### Create Application

    **Status:** Supported (Inherited)\
    **Method:** `_create_application_for_candidate(candidate, job)`

    Creates new application records for candidates in Crelate via Kombo. Some Crelate-specific application fields may not be populated.

    ### Get All Application Stages

    **Status:** Supported (Inherited)\
    **Method:** `_get_all_application_stages()`

    Fetches all available application stages from Crelate through Kombo.
  </Accordion>

  <Accordion title="Job Management (Mostly Supported)">
    * Get Job by ID (**Supported** - Custom Implementation)
    * Get Enhanced Job (**Supported** - Custom Implementation)
    * Batch Job Operations (**Supported** - Custom Implementation)

    Strong job management implementation with custom field support.
  </Accordion>

  <Accordion title="Candidate Management">
    ### Get Candidate by ID

    **Status:** Supported (Inherited)\
    **Method:** `_get_candidate_by_id(candidate_id)`

    Retrieves candidate information from Crelate via Kombo.

    ### Find Candidates by Details

    **Status:** Supported (Inherited)\
    **Method:** `_find_candidates_by_details(first_name, last_name, email, phone)`

    Searches for candidates by name, email, or phone number through Kombo.

    ### Get Resume

    **Status:** Supported (Inherited)\
    **Method:** `_get_resume_for_candidate_id(candidate_id)`

    Retrieves candidate resume data through Kombo. Functionality inherited from BaseKomboAtsClient and expected to work with Crelate, though not extensively verified.
  </Accordion>

  <Accordion title="Notes & Attachments">
    ### Add Note to Application

    **Status:** Supported (Custom Implementation)\
    **Method:** `_add_note_to_application(application, note, note_action_type)`

    Adds plain text notes to applications using Crelate's passthrough API.

    ### Add Note to Candidate

    **Status:** Supported (Custom Implementation)\
    **Method:** `_add_note_to_candidate(candidate, note, note_action_type)`

    Adds plain text notes to candidate records using Crelate's passthrough API.

    ### Add Attachment to Application

    **Status:** Not Implemented\
    **Method:** Inherits NotImplementedError from BaseKomboAtsClient

    File attachment functionality for applications is not yet implemented. Attachments cannot be uploaded to applications in Crelate through this integration.

    ### Add Attachment to Candidate

    **Status:** Not Implemented\
    **Method:** Inherits NotImplementedError from BaseKomboAtsClient

    File attachment functionality for candidates is not yet implemented. Attachments cannot be uploaded to candidates in Crelate through this integration.
  </Accordion>

  <Accordion title="Custom Fields">
    ### Application Custom Fields

    **Status:** Not Supported (Crelate API Limitation)\
    **Methods:** Inherits NotImplementedError from BaseKomboAtsClient

    Crelate's API does not support application-level custom fields in a way that's accessible through Kombo. Attempts to query application custom field schemas return errors from Crelate's API. This is a limitation of Crelate's system architecture, not our implementation.

    ### Candidate Custom Fields

    **Status:** Supported (Custom Implementation)\
    **Methods:**

    * `_get_candidate_custom_fields()` - Retrieves custom field definitions
    * `_update_candidate_custom_fields(candidate, updates)` - Updates custom field values

    Full support for getting and updating candidate custom fields through Crelate's passthrough API.

    ### Job Custom Fields

    **Status:** Supported (Custom Implementation)\
    **Methods:**

    * `_get_job_custom_fields()` - Retrieves custom field definitions
    * `_get_job_custom_field_values(job_id)` - Gets custom field values
    * `_update_job_custom_fields(job, updates)` - Updates custom field values

    Comprehensive job custom field support using Crelate's passthrough API.
  </Accordion>
</AccordionGroup>

## Implementation Notes

### Field Naming Convention

Crelate uses capital `'Id'` instead of lowercase `'id'` for remote IDs. The client sets `remote_id_field_name = "Id"` to handle this.

### Custom Job Fetching

Uses `_get_specific_ats_jobs_batch()` to fetch jobs via Crelate's passthrough API with enhanced data including:

* Custom field values
* Job-specific metadata
* Pagination support

### Note Implementation

Custom implementation for adding notes to both applications and candidates using Crelate's passthrough API.

## Implementation Progress

According to the implementation checklist:

* **15 methods implemented** (\~60-65% complete)
* **15 methods pending or not supported**
* Focus areas:
  * Job management (well supported)
  * Candidate custom fields (supported)
  * Missing: Application/candidate streaming, attachments, application custom fields

## Implementation Notes

### Application Streaming Workaround

Crelate's API has a bug where the `updated_after` parameter doesn't work correctly. Our implementation works around this by fetching all applications and using intelligent filtering to avoid duplicates while capturing new applicants.

### Field Naming Convention

Crelate uses capital `'Id'` instead of lowercase `'id'` for remote IDs. The client sets `remote_id_field_name = "Id"` to handle this consistently.

### Custom Job Fetching

Uses `_get_specific_ats_jobs_batch()` to fetch jobs via Crelate's passthrough API with enhanced data including custom field values and pagination support.

## Known Limitations

The following features are not yet available for Crelate:

* **Candidate Streaming:** Not implemented. Use individual candidate lookup instead.
* **File Attachments:** Cannot upload files to applications or candidates.
* **Application Custom Fields:** Crelate's API doesn't support this feature.

## Related Files

* Implementation: `server/ats/crelate/crelate_ats_client.py`
* Models: `server/ats/crelate/crelate_models.py`
* Checklist: `server/ats/crelate/COMPLETE_CRELATE_IMPLEMENTATION_CHECKLIST.md`
* Field Mappings: `server/ats/field_type_mapper.py` (CRELATE\_FIELD\_MAPPINGS)
* Base Class: `server/ats/base_kombo_ats_client.py`

## See Also

* [ATS Coverage Matrix](/internal/ats-coverage)
* [Crelate Setup Guide](/ats-integrations/crelate-setup)
