> ## 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.

# Paradox ATS

> Feature coverage and implementation details for Paradox (Kombo) integration

## Implementation Overview

**Implementation Type:** Kombo-based Integration (open beta connector)
**Note Format:** Plain Text
**Status:** Open beta (Kombo connector)

Paradox integrates through [Kombo's unified ATS API](https://docs.kombo.dev/ats/connectors/paradox)
(`tool` slug `paradox`). Sync, stage movement, application notes, create-application, and
result-link writebacks inherit from the shared Kombo client. This is **not** a read-only
integration like Paycor: notes and stage moves are documented Kombo actions.

Kombo lists this connector as **open beta**. Enable it on the Kombo account before customers
can connect.

## Configuration

| Property            | Value                              | Description                                                                                                                             |
| ------------------- | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| Provider Enum       | `paradox`                          | Same as Kombo tool slug — no alias needed                                                                                               |
| Note Format         | `PLAIN`                            | Application notes only                                                                                                                  |
| Disposition Reasons | Not supported                      | Fail/reject is a **stage move**, not Kombo reject                                                                                       |
| Note Targets        | Application (+ candidate remapped) | Kombo only documents Add note to application. Sourced candidate notes post to the first application because candidate ≡ application.    |
| Passthrough         | `paradox/v1public` (primary)       | Native Olivia API at `{api_url}/api/v1/public`. Also `paradox/v1` → `{api_url}/api/v1`. Docs: [Paradox API](https://paradox.readme.io/) |

Admin config follows other Kombo providers (start / resume-review / AI interview pass-fail
stages, interview link, application score) with job link, interview PDF, and disposition
fields disabled — see [Known Limitations](#known-limitations).

## Connection

Customers connect via Tenzo → ATS Integrations → Kombo connect link, same as other Kombo ATS
providers. Kombo's [Paradox connection guide](https://help.kombo.dev/hc/en-us/articles/40931059163921-Paradox-How-do-I-link-my-account)
covers credential setup in Paradox.

Search jobs by **Kombo `remote_id`**, not a Paradox UI URL id. Draft jobs in Paradox Job
Builder never appear in Kombo until they are published with a `jobreqid`.

## Feature Coverage

<AccordionGroup>
  <Accordion title="Streaming Operations" defaultOpen>
    * Stream Jobs / Applications / Candidates — Inherited
    * Delta syncs — Kombo Feature
    * **Job-on-application is id-only.** Paradox's XML feed does not expand the job an applicant
      applied to. Tenzo joins `application.job_id` to the Jobs stream / get-job-by-id.
  </Accordion>

  <Accordion title="Application Management">
    * Move to Stage — Inherited. Paradox returns a stage name; Tenzo maps
      interview / hiring / rejection via admin stage config. - Create Applications /
      Create Candidates — Inherited. Same payload shape; Kombo notes that
      **candidates and applications are the same entity** in Paradox. - Get Stages /
      job-specific stages — Inherited - Reject + Disposition Reasons — **Not
      supported.** Use fail stages. - Stage rename in Paradox is treated as a
      **new** stage. Changing a job's Candidate Journey requires moving existing
      applications onto the new journey before Kombo will show them.
  </Accordion>

  <Accordion title="Job Management / Enhanced Job">
    * Get Job by ID — Inherited (Jobs model exists independently of the XML-feed application join)
    * Get Enhanced Job — Kombo AtsJob + raw `/ats/jobs` payload
      * Promoted scalars: `status`, `experience_level`, `salary_amount`, `opened_at`
        (`location` is on `AtsJob`, not duplicated as a custom field)
      * Job `custom_fields` into `custom_field_values` for the rules engine
        (catalog unions promoted scalars with keys sampled from Kombo jobs)
      * Job postings provide `description_html` / `url` when present
      * **No `job_code`.** Campaign names use `{job title} - {remote_id}`
      * Thinner than Workable: no department, employment\_type, category, visibility, confidential,
        or salary range
  </Accordion>

  <Accordion title="Notes & Attachments">
    * Add Note to Application — Inherited (call summary, SMS, email activity) -
      Add Note to Candidate — **Not a Kombo action.** Sourced-candidate notes post
      to the application once one exists (same Paradox entity). - Attachments — **CV
      only.** Uploading a new CV overwrites the existing one. Interview-result PDFs
      are not sent (would clobber the resume or fail as type `OTHER`). - Resume
      download — **Not supported.** See [Known Limitations](#known-limitations).
  </Accordion>

  <Accordion title="Custom Fields">
    * Job Custom Fields — **Read-only** for rules. Writeback not supported → Tenzo job link disabled.
    * Application score + interview link — Kombo **Add result link to application**
      (`url` / `label` / `custom_field_name_prefix` + attributes). Not a generic CF-update-by-id API.
    * Candidate interview score — no candidate result-link action. Routed through the application
      result-link (candidate ≡ application).
    * Custom Field Explorer — Kombo Feature (read catalog).
  </Accordion>
</AccordionGroup>

## Known Limitations

These v1 checklist items are not implemented because Kombo and/or Olivia cannot support them.
Passthrough does not close the gaps: Olivia has no job write and no CV download, and
`POST /candidates/{OID}/documents` is upload-only.

<Note>
  **Tenzo job link cannot be written to the job** Kombo has no Paradox job
  update or job custom-field write action. The Olivia public API also has no
  job/requisition write. The Tenzo job link admin field is disabled.
</Note>

<Note>
  **Call-summary / interview PDF is not uploaded** Paradox attachments are
  CV-only. A new upload overwrites the existing resume. Tenzo no-ops application
  and candidate attachment writes so interview PDFs cannot clobber the CV.
</Note>

<Note>
  **Reject + disposition reasons are not supported** Paradox is not on Kombo's
  unified reject-application list, and Kombo exposes no Paradox
  disposition-reason catalog. Pass and fail are **stage moves** only. Admin
  config omits rejection-reason fields.
</Note>

<Note>
  **No candidate-scoped notes, attachments, or result-links** Kombo only
  documents application-scoped actions. In Paradox, candidate and application
  are the same entity, so sourced-candidate notes and scores are remapped to the
  first application. There is no dedicated candidate attachment or result-link
  action.
</Note>

<Note>
  **Candidate resumes cannot be downloaded** Kombo `GET /ats/candidates/{id}
      /attachments` and `GET /ats/applications/{id}/attachments` return
  `INTEGRATION.ACTION_NOT_AVAILABLE` for Paradox. Olivia [GET
  candidate](https://readme.paradox.ai/reference/get-candidate) has no resume
  field; `GET /candidates/{OID}/documents` is 405 (POST/DELETE only); `GET
      /resume` and `GET /attachments` are 404. Candidates sync without CVs.
</Note>

<Info>
  **Thinner job metadata than other Kombo ATS clients** No `job_code`,
  department, employment type, category, visibility, confidential, or salary
  range. Applications carry job id only (XML-feed limitation). Draft Job Builder
  jobs are invisible to Kombo until published with a `jobreqid`.
</Info>

## Related Files

* Implementation: `server/ats/paradox/paradox_ats_client.py`
* Models: `server/ats/paradox/paradox_models.py`
* Job enrichment: `server/ats/paradox/paradox_job_enrichment.py`
* Result-link helper: `server/ats/kombo_result_link.py`
* Config: `server/ats/config/providers.py` (`ParadoxConfig`)
* Field mappings: `server/ats/field_type_mapper.py` (`PARADOX_FIELD_MAPPINGS`)

## See Also

* [ATS Coverage Matrix](/internal/ats-coverage)
* [Kombo Paradox connector](https://docs.kombo.dev/ats/connectors/paradox)
