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

# Workable ATS

> Feature coverage and implementation details for standalone Workable (Kombo) integration

## Implementation Overview

**Implementation Type:** Kombo-based Integration\
**Note Format:** Plain Text\
**Status:** Beta — early customers

Standalone Workable integrates through Kombo's unified API for sync, stage movement,
application notes, attachments, create application, and disposition. Candidate comments
and custom-attribute writebacks use Workable SPI v3 via Kombo passthrough
(`/passthrough/workable/v3`).

This is **not** the MW Resources Tracker–Workable hybrid (`tracker-workable`). That
customer-specific client remains separate; only MW's known Kombo integration ID still
routes to the hybrid.

## Configuration

| Property            | Value                      | Description                                             |
| ------------------- | -------------------------- | ------------------------------------------------------- |
| Provider Enum       | `workable`                 | Identifier in ProviderEnum                              |
| Note Format         | `PLAIN`                    | Plain-text notes                                        |
| Disposition Reasons | Supported                  | Kombo Workable reject + rejection reasons               |
| Note Targets        | Application + Candidate    | App notes via Kombo; candidate comments via passthrough |
| Passthrough URL     | `/passthrough/workable/v3` | Workable SPI v3                                         |

## Coexistence with Tracker Workable

| Integration                                        | Provider           | Sync                                  |
| -------------------------------------------------- | ------------------ | ------------------------------------- |
| New Workable Kombo connections                     | `workable`         | Normal Kombo `sync-finished` webhooks |
| MW Resources (`workable:5iX8TrRmpARQNFQfp2Q8Bm64`) | `tracker-workable` | Webhooks disabled; custom cron        |

## Feature Coverage

<AccordionGroup>
  <Accordion title="Streaming Operations" defaultOpen>
    * Stream Jobs / Applications / Candidates — Inherited from BaseKomboAtsClient
  </Accordion>

  <Accordion title="Application Management">
    * Move to Stage — Inherited
    * Create Applications — Inherited
    * Get All Stages — Inherited
    * Reject + Disposition Reasons — Inherited (supported for Workable)
  </Accordion>

  <Accordion title="Job Management / Enhanced Job">
    * Get Job by ID — Inherited
    * Get Enhanced Job — Kombo AtsJob + raw Kombo `/ats/jobs` payload
      * Promotes scalars KomboClient drops onto `AtsJob` (`department`, `employment_type`,
        `category`, `experience_level`, `visibility`, `confidential`, salary\_\*) into
        `custom_field_values` for the rules engine
      * Maps Kombo job `custom_fields` into `custom_field_values`
    * Batch enhanced fetch — pages Kombo jobs up to the requested limit (Kombo page size
      250\) and batch-enriches from raw `/ats/jobs` payloads; per-job enrich failures
      soft-fail to the base job without custom fields
  </Accordion>

  <Accordion title="Notes & Attachments">
    * Add Note to Application — Inherited (Kombo unified)
    * Add Note to Candidate — Passthrough `POST /candidates/{id}/comments` (requires a
      Workable `member_id`; client caches an `ats.admin` / `workable.superadmin` member
      from `GET /members`, with legacy `role` string fallback)
    * Attachments — Inherited; prefer type `OTHER` so Workable does not overwrite the CV.
      Non-CV uploads may surface as comments; app attach can fall back to the candidate.
  </Accordion>

  <Accordion title="Custom Fields & Writebacks">
    * **Job Custom Fields**: **Read-only** for rules (from enhanced job). Schema exposes
      promoted Kombo scalars (`department`, `employment_type`, salary\_\*, etc.) for the
      rules builder. Writeback not supported by Workable's API → Tenzo job link admin
      field is disabled.
    * **Candidate / Application Custom Fields**: Listed dynamically via `GET /custom_attributes`
      and updated via `PATCH /candidates/{id}/update_custom_attribute_value`.
      * Application writebacks resolve the associated candidate remote ID and update
        candidate-scoped attributes (powers interview link, scores, and Meeting Copilot).
      * Choice attributes (`dropdown`, `multiple_choice`) dynamically map extracted option labels (e.g. `"Python"`, `"A"`)
        to Workable choice option IDs (e.g. `"91ea0"`, `"91ea3"`) discovered from `GET /custom_attributes`.
      * Workable expects one attribute update per `PATCH` request with type-specific payload shapes:

    | Workable Attribute Type       | Request Body Format                                       | Tenzo Writeback Mapping                                                                                        |
    | :---------------------------- | :-------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------- |
    | `dropdown`, `multiple_choice` | `{"custom_attribute_key": key, "choices": ["choice_id"]}` | `ExtractionFieldType.SINGLE_SELECT`, `MULTI_SELECT`, list/collection values (auto-resolved from option labels) |
    | `boolean`                     | `{"custom_attribute_key": key, "checked": bool}`          | Boolean values                                                                                                 |
    | `numeric`, `integer`          | `{"custom_attribute_key": key, "value": number}`          | Number / integer values                                                                                        |
    | `string`, `text`, `url`       | `{"custom_attribute_key": key, "value": "text"}`          | Text / string values                                                                                           |
    | `date`                        | `{"custom_attribute_key": key, "date": "YYYY-MM-DD"}`     | Omitted from catalog                                                                                           |
    | `file`                        | `{"custom_attribute_key": key, "file_url": "url"}`        | Omitted from catalog                                                                                           |
  </Accordion>
</AccordionGroup>

## Known Gaps

* Tenzo job link cannot be written to Workable (API has no job-level CF write).
* Candidate notes are not on Kombo's unified Workable Actions list; implemented via
  passthrough only.
* Date and file custom attributes require specialized payloads (`date`, `file_url`);
  they remain omitted from the writeback field catalog until required.
* Kombo Workable tool webhooks are delayed and cover limited events; Tenzo sync relies
  on Kombo `sync-finished`.
* MW Resources hybrid routing is pinned to Kombo integration id
  `workable:5iX8TrRmpARQNFQfp2Q8Bm64`. A reconnect that mints a new id must update
  that constant (and `OrgConfigRegistry`) or MW will register as standalone Workable.

## Related

* [Tracker Workable (MW Resources hybrid)](/internal/ats/tracker-workable)
