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

# Prepare a protected write

> Creates a five-minute preview and confirmation token without modifying Jointl data.



## OpenAPI

````yaml /specs/openapi/jointl-api-v1.openapi.yaml post /api/v1/actions/prepare
openapi: 3.1.2
info:
  title: Jointl REST API and OAuth
  version: 1.0.0
  summary: Supported public HTTP contract for Jointl third-party connections.
  description: >-
    HTTP contract for Jointl REST operations, OAuth, and Zapier subscription and
    action endpoints. Jointl does not provide a public sandbox.
  termsOfService: https://join.tl/legal/terms-of-service
  contact:
    name: Jointl Support
    url: https://join.tl
servers:
  - url: https://api.join.tl
    description: Jointl production API
security: []
tags:
  - name: OAuth
    description: OAuth 2.0 and OpenID Connect endpoints.
  - name: Discovery
    description: OAuth resource and issuer discovery.
  - name: Operations
    description: Permission-filtered read operations.
  - name: Actions
    description: Prepare, human approval, and confirmation.
  - name: Zapier
    description: Endpoints restricted to the approved Jointl Zapier app.
paths:
  /api/v1/actions/prepare:
    post:
      tags:
        - Actions
      summary: Prepare a protected write
      description: >-
        Creates a five-minute preview and confirmation token without modifying
        Jointl data.
      operationId: prepareAction
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ActionPrepareRequest'
            example:
              idempotencyKey: intent.example.0001
              input:
                flowId: flowid_example_01
              operationId: glowMoments.send
      responses:
        '200':
          description: Action prepared or a completed replay returned.
          headers:
            X-Request-Id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/ActionPrepareResult'
                  requestId:
                    type: string
                    description: Request correlation identifier.
                required:
                  - data
                  - requestId
                additionalProperties: false
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '413':
          $ref: '#/components/responses/TooLarge'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/ServerError'
        '503':
          $ref: '#/components/responses/Unavailable'
      security:
        - JointlOAuth:
            - workspace.write
        - JointlApiKey: []
components:
  schemas:
    ActionPrepareRequest:
      oneOf:
        - $ref: '#/components/schemas/GlowMomentsSendPrepareRequest'
        - $ref: '#/components/schemas/GlowMomentsCycleStatusSetPrepareRequest'
        - $ref: '#/components/schemas/TeamPulseSendPrepareRequest'
        - $ref: '#/components/schemas/TeamPulseCycleStatusSetPrepareRequest'
        - $ref: '#/components/schemas/ChecksVerificationsRunAllPrepareRequest'
        - $ref: '#/components/schemas/ChecksPublicProfilesFindPrepareRequest'
        - $ref: '#/components/schemas/FlowsDraftCreatePrepareRequest'
        - $ref: '#/components/schemas/FlowsDraftRevisePrepareRequest'
        - $ref: '#/components/schemas/FlowsStatusSetPrepareRequest'
        - $ref: '#/components/schemas/FlowsDeletePrepareRequest'
        - $ref: '#/components/schemas/ChecksStatusSetPrepareRequest'
        - $ref: '#/components/schemas/ChecksDeletePrepareRequest'
        - $ref: '#/components/schemas/EmployeesStatusSetPrepareRequest'
        - $ref: '#/components/schemas/EmployeesDeletePrepareRequest'
        - $ref: '#/components/schemas/TalentsStatusSetPrepareRequest'
        - $ref: '#/components/schemas/AutopilotsCreatePrepareRequest'
        - $ref: '#/components/schemas/AutopilotsLinksGeneratePrepareRequest'
        - $ref: '#/components/schemas/AutopilotsStatusSetPrepareRequest'
        - $ref: '#/components/schemas/AutopilotsDeletePrepareRequest'
        - $ref: '#/components/schemas/ReferencesRequestPrepareRequest'
        - $ref: '#/components/schemas/ChecksBulkCreatePrepareRequest'
        - $ref: '#/components/schemas/EmployeesBulkImportPrepareRequest'
        - $ref: '#/components/schemas/ChecksAddNotePrepareRequest'
        - $ref: '#/components/schemas/EmployeesAddNotePrepareRequest'
        - $ref: '#/components/schemas/TalentsAddNotePrepareRequest'
      discriminator:
        propertyName: operationId
    ActionPrepareResult:
      oneOf:
        - additionalProperties: true
          properties:
            confirmationId:
              type: string
            confirmationToken:
              type: string
            expiresAt:
              type: string
            instruction:
              type: string
            operation:
              additionalProperties: true
              properties:
                id:
                  type: string
                title:
                  type: string
              required:
                - id
                - title
              type: object
            preview:
              additionalProperties: true
              type: object
            state:
              const: pending
          required:
            - confirmationId
            - state
            - confirmationToken
            - expiresAt
            - operation
            - preview
            - instruction
          type: object
        - additionalProperties: true
          properties:
            confirmationId:
              type: string
            result: {}
            state:
              const: completed
          required:
            - confirmationId
            - state
            - result
          type: object
    GlowMomentsSendPrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: glowMoments.send
        input:
          $ref: '#/components/schemas/GlowMomentsSendInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: glowMoments.send
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - mcp
      x-jointl-mcp-exposed: true
      x-jointl-confirmation-required: true
      x-jointl-destructive: false
      x-jointl-retry-safety: at-most-once
      x-jointl-standing-automation: false
      x-jointl-prerequisites: >-
        Use only when the user explicitly asks to send Glow Moments now;
        publishing alone follows the configured cadence and is not a manual-send
        request
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    GlowMomentsCycleStatusSetPrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: glowMoments.cycle.status.set
        input:
          $ref: '#/components/schemas/GlowMomentsCycleStatusSetInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: glowMoments.cycle.status.set
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - mcp
      x-jointl-mcp-exposed: true
      x-jointl-confirmation-required: true
      x-jointl-destructive: false
      x-jointl-retry-safety: idempotent
      x-jointl-standing-automation: false
      x-jointl-prerequisites: >-
        Use only after performance.operations.get when the user explicitly asks
        to cancel or restore that exact Glow Moments cycle
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    TeamPulseSendPrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: teamPulse.send
        input:
          $ref: '#/components/schemas/TeamPulseSendInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: teamPulse.send
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - mcp
      x-jointl-mcp-exposed: true
      x-jointl-confirmation-required: true
      x-jointl-destructive: false
      x-jointl-retry-safety: at-most-once
      x-jointl-standing-automation: false
      x-jointl-prerequisites: >-
        Use only when the user explicitly asks to send Team Pulse now;
        publishing alone follows the configured cadence and is not a manual-send
        request
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    TeamPulseCycleStatusSetPrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: teamPulse.cycle.status.set
        input:
          $ref: '#/components/schemas/TeamPulseCycleStatusSetInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: teamPulse.cycle.status.set
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - mcp
      x-jointl-mcp-exposed: true
      x-jointl-confirmation-required: true
      x-jointl-destructive: false
      x-jointl-retry-safety: idempotent
      x-jointl-standing-automation: false
      x-jointl-prerequisites: >-
        Use only after performance.operations.get when the user explicitly asks
        to cancel or restore that exact Team Pulse cycle
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    ChecksVerificationsRunAllPrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: checks.verifications.runAll
        input:
          $ref: '#/components/schemas/ChecksVerificationsRunAllInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: checks.verifications.runAll
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - zapier
      x-jointl-mcp-exposed: false
      x-jointl-confirmation-required: true
      x-jointl-destructive: false
      x-jointl-retry-safety: idempotent
      x-jointl-standing-automation: true
      x-jointl-prerequisites: >-
        Use when an external event should start the Run All Checks workflow;
        verification types that require unavailable applicant details are
        skipped
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    ChecksPublicProfilesFindPrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: checks.publicProfiles.find
        input:
          $ref: '#/components/schemas/ChecksPublicProfilesFindInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: checks.publicProfiles.find
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - zapier
      x-jointl-mcp-exposed: false
      x-jointl-confirmation-required: true
      x-jointl-destructive: false
      x-jointl-retry-safety: idempotent
      x-jointl-standing-automation: true
      x-jointl-prerequisites: >-
        Use when an external event should start the Find Profiles workflow;
        provide only known identity, location, or profile-URL hints and never
        speculative personal data
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    FlowsDraftCreatePrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: flows.draft.create
        input:
          $ref: '#/components/schemas/FlowsDraftCreateInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: flows.draft.create
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - mcp
      x-jointl-mcp-exposed: true
      x-jointl-confirmation-required: true
      x-jointl-destructive: false
      x-jointl-retry-safety: idempotent
      x-jointl-standing-automation: false
      x-jointl-prerequisites: >-
        Use after capabilities, companies, and relevant question/template
        discovery have produced a complete supported design and the user wants
        it saved as a new draft
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    FlowsDraftRevisePrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: flows.draft.revise
        input:
          $ref: '#/components/schemas/FlowsDraftReviseInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: flows.draft.revise
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - mcp
      x-jointl-mcp-exposed: true
      x-jointl-confirmation-required: true
      x-jointl-destructive: false
      x-jointl-retry-safety: idempotent
      x-jointl-standing-automation: false
      x-jointl-prerequisites: >-
        Use only after flows.blueprint.get when the user wants to replace
        supported sections of that still-unpublished draft
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    FlowsStatusSetPrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: flows.status.set
        input:
          $ref: '#/components/schemas/FlowsStatusSetInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: flows.status.set
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - mcp
      x-jointl-mcp-exposed: true
      x-jointl-confirmation-required: true
      x-jointl-destructive: false
      x-jointl-retry-safety: idempotent
      x-jointl-standing-automation: false
      x-jointl-prerequisites: >-
        Use only when the user explicitly asks to publish, activate, archive, or
        restore one known Flow; never infer a status change from scores or
        recommendations
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    FlowsDeletePrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: flows.delete
        input:
          $ref: '#/components/schemas/FlowsDeleteInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: flows.delete
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - mcp
      x-jointl-mcp-exposed: true
      x-jointl-confirmation-required: true
      x-jointl-destructive: true
      x-jointl-retry-safety: at-most-once
      x-jointl-standing-automation: false
      x-jointl-prerequisites: >-
        Use only when the user explicitly asks to permanently delete one known
        Flow; offer flows.status.set with ARCHIVED when preserving history is
        acceptable
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    ChecksStatusSetPrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: checks.status.set
        input:
          $ref: '#/components/schemas/ChecksStatusSetInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: checks.status.set
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - mcp
      x-jointl-mcp-exposed: true
      x-jointl-confirmation-required: true
      x-jointl-destructive: false
      x-jointl-retry-safety: idempotent
      x-jointl-standing-automation: true
      x-jointl-prerequisites: >-
        Use only when the user explicitly asks to change one Check status; never
        shortlist or reject someone solely because an analysis, score, or
        ranking suggests it
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    ChecksDeletePrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: checks.delete
        input:
          $ref: '#/components/schemas/ChecksDeleteInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: checks.delete
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - mcp
      x-jointl-mcp-exposed: true
      x-jointl-confirmation-required: true
      x-jointl-destructive: true
      x-jointl-retry-safety: at-most-once
      x-jointl-standing-automation: false
      x-jointl-prerequisites: >-
        Use only when the user explicitly asks to permanently delete one known
        Check; do not derive deletion from a score, rank, recommendation, or
        status
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    EmployeesStatusSetPrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: employees.status.set
        input:
          $ref: '#/components/schemas/EmployeesStatusSetInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: employees.status.set
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - mcp
      x-jointl-mcp-exposed: true
      x-jointl-confirmation-required: true
      x-jointl-destructive: false
      x-jointl-retry-safety: idempotent
      x-jointl-standing-automation: true
      x-jointl-prerequisites: >-
        Use only when the user explicitly asks to mark a known Employee active
        or left and has supplied any required position end dates, or explicitly
        asks to send Exit Intelligence to an Employee already marked left; never
        infer this action from performance analytics
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    EmployeesDeletePrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: employees.delete
        input:
          $ref: '#/components/schemas/EmployeesDeleteInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: employees.delete
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - mcp
      x-jointl-mcp-exposed: true
      x-jointl-confirmation-required: true
      x-jointl-destructive: true
      x-jointl-retry-safety: at-most-once
      x-jointl-standing-automation: false
      x-jointl-prerequisites: >-
        Use only when the user explicitly asks to permanently delete one known
        Employee; do not derive deletion from performance evidence, rankings, or
        attention signals
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    TalentsStatusSetPrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: talents.status.set
        input:
          $ref: '#/components/schemas/TalentsStatusSetInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: talents.status.set
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - mcp
      x-jointl-mcp-exposed: true
      x-jointl-confirmation-required: true
      x-jointl-destructive: false
      x-jointl-retry-safety: idempotent
      x-jointl-standing-automation: true
      x-jointl-prerequisites: >-
        Use only when the user explicitly asks to change one Talent Pool status;
        never infer shortlisting from an analysis or ranking
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    AutopilotsCreatePrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: autopilots.create
        input:
          $ref: '#/components/schemas/AutopilotsCreateInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: autopilots.create
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - mcp
      x-jointl-mcp-exposed: true
      x-jointl-confirmation-required: true
      x-jointl-destructive: false
      x-jointl-retry-safety: idempotent
      x-jointl-standing-automation: false
      x-jointl-prerequisites: >-
        Use when the user explicitly asks to run a new Autopilot or generate a
        new Autopilot link group for one exact active Flow
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    AutopilotsLinksGeneratePrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: autopilots.links.generate
        input:
          $ref: '#/components/schemas/AutopilotsLinksGenerateInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: autopilots.links.generate
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - mcp
      x-jointl-mcp-exposed: true
      x-jointl-confirmation-required: true
      x-jointl-destructive: false
      x-jointl-retry-safety: idempotent
      x-jointl-standing-automation: false
      x-jointl-prerequisites: >-
        Use when the user explicitly asks for more links on an existing known
        Autopilot; do not create a second Autopilot group for the same intent
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    AutopilotsStatusSetPrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: autopilots.status.set
        input:
          $ref: '#/components/schemas/AutopilotsStatusSetInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: autopilots.status.set
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - mcp
      x-jointl-mcp-exposed: true
      x-jointl-confirmation-required: true
      x-jointl-destructive: false
      x-jointl-retry-safety: idempotent
      x-jointl-standing-automation: false
      x-jointl-prerequisites: >-
        Use only when the user explicitly asks to archive, disable, restore, or
        reactivate one known Autopilot
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    AutopilotsDeletePrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: autopilots.delete
        input:
          $ref: '#/components/schemas/AutopilotsDeleteInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: autopilots.delete
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - mcp
      x-jointl-mcp-exposed: true
      x-jointl-confirmation-required: true
      x-jointl-destructive: true
      x-jointl-retry-safety: at-most-once
      x-jointl-standing-automation: false
      x-jointl-prerequisites: >-
        Use only when the user explicitly asks to permanently delete one known
        Autopilot; offer autopilots.status.set with ARCHIVED when disabling
        links while preserving Checks is acceptable
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    ReferencesRequestPrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: references.request
        input:
          $ref: '#/components/schemas/ReferencesRequestInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: references.request
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - mcp
      x-jointl-mcp-exposed: true
      x-jointl-confirmation-required: true
      x-jointl-destructive: false
      x-jointl-retry-safety: idempotent
      x-jointl-standing-automation: true
      x-jointl-prerequisites: >-
        Use after resolving the Check and selecting a template from
        flows.referenceTemplates.list
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    ChecksBulkCreatePrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: checks.bulkCreate
        input:
          $ref: '#/components/schemas/ChecksBulkCreateInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: checks.bulkCreate
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - mcp
      x-jointl-mcp-exposed: true
      x-jointl-confirmation-required: true
      x-jointl-destructive: false
      x-jointl-retry-safety: idempotent
      x-jointl-standing-automation: true
      x-jointl-prerequisites: >-
        Use after the client has parsed a file into validated fullName and email
        rows and resolved one authorized Flow ID; never pass a file or URL
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    EmployeesBulkImportPrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: employees.bulkImport
        input:
          $ref: '#/components/schemas/EmployeesBulkImportInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: employees.bulkImport
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - mcp
      x-jointl-mcp-exposed: true
      x-jointl-confirmation-required: true
      x-jointl-destructive: false
      x-jointl-retry-safety: idempotent
      x-jointl-standing-automation: true
      x-jointl-prerequisites: >-
        Use after the client has parsed and validated Employee rows and resolved
        exact authorized company IDs; use create for Search-or-Create, update
        for one exact existing work record, and upsert for bulk imports; never
        pass a file or URL
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    ChecksAddNotePrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: checks.addNote
        input:
          $ref: '#/components/schemas/ChecksAddNoteInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: checks.addNote
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - mcp
      x-jointl-mcp-exposed: true
      x-jointl-confirmation-required: true
      x-jointl-destructive: false
      x-jointl-retry-safety: idempotent
      x-jointl-standing-automation: true
      x-jointl-prerequisites: >-
        Use only when the user explicitly asks to add text to one authorized
        Check, after resolving its applicant ID
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    EmployeesAddNotePrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: employees.addNote
        input:
          $ref: '#/components/schemas/EmployeesAddNoteInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: employees.addNote
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - mcp
      x-jointl-mcp-exposed: true
      x-jointl-confirmation-required: true
      x-jointl-destructive: false
      x-jointl-retry-safety: idempotent
      x-jointl-standing-automation: true
      x-jointl-prerequisites: >-
        Use only when the user explicitly asks to add text to one authorized
        Employee, after resolving its Employee ID
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    TalentsAddNotePrepareRequest:
      type: object
      properties:
        operationId:
          type: string
          const: talents.addNote
        input:
          $ref: '#/components/schemas/TalentsAddNoteInput'
        idempotencyKey:
          $ref: '#/components/schemas/IdempotencyKey'
      required:
        - operationId
        - input
        - idempotencyKey
      additionalProperties: false
      x-jointl-logical-operation: talents.addNote
      x-jointl-scope: workspace.write
      x-jointl-audiences:
        - rest
        - mcp
      x-jointl-mcp-exposed: true
      x-jointl-confirmation-required: true
      x-jointl-destructive: false
      x-jointl-retry-safety: idempotent
      x-jointl-standing-automation: true
      x-jointl-prerequisites: >-
        Use only when the user explicitly asks to add text to one authorized
        Talent Pool profile, after resolving its profile ID
      x-jointl-side-effects: >-
        The exact effects are returned by the prepare preview and revalidated at
        confirmation.
    ErrorEnvelope:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
            message:
              type: string
          required:
            - code
            - message
          additionalProperties: false
        requestId:
          type: string
      required:
        - error
        - requestId
      additionalProperties: false
    GlowMomentsSendInput:
      additionalProperties: false
      properties:
        expectedFlowStatus:
          const: ACTIVE
          default: ACTIVE
          description: The Flow must still be ACTIVE when the confirmed send executes.
          type: string
        flowId:
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
      required:
        - flowId
      type: object
    IdempotencyKey:
      type: string
      minLength: 8
      maxLength: 160
      pattern: ^[A-Za-z0-9._:-]{8,160}$
      description: Stable identity for one logical intent. Reuse only for identical input.
    GlowMomentsCycleStatusSetInput:
      additionalProperties: false
      properties:
        cycleId:
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
        enabled:
          description: >-
            False cancels pending delivery and incomplete requests; true
            restores the cycle where possible.
          type: boolean
        expectedStatus:
          description: >-
            Current Glow Moments cycle status read from
            performance.operations.get.
          enum:
            - SCHEDULED
            - SENT
            - CANCELLED
          type: string
      required:
        - cycleId
        - expectedStatus
        - enabled
      type: object
    TeamPulseSendInput:
      additionalProperties: false
      properties:
        expectedFlowStatus:
          const: ACTIVE
          default: ACTIVE
          description: The Flow must still be ACTIVE when the confirmed send executes.
          type: string
        flowId:
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
      required:
        - flowId
      type: object
    TeamPulseCycleStatusSetInput:
      additionalProperties: false
      properties:
        cycleId:
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
        enabled:
          description: >-
            False cancels pending delivery and incomplete requests; true
            restores the cycle where possible.
          type: boolean
        expectedStatus:
          description: >-
            Current Team Pulse cycle status read from
            performance.operations.get.
          enum:
            - SCHEDULED
            - PROCESSING
            - SENT
            - CANCELLED
            - FAILED
          type: string
      required:
        - cycleId
        - expectedStatus
        - enabled
      type: object
    ChecksVerificationsRunAllInput:
      additionalProperties: false
      properties:
        applicantId:
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
      required:
        - applicantId
      type: object
    ChecksPublicProfilesFindInput:
      additionalProperties: false
      properties:
        applicantId:
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
        profileMatchingDetails:
          additionalProperties: false
          description: >-
            Optional corroborating identity and location hints. Jointl also
            reuses the Check name, email, stored verification location, and
            confirmed profile links.
          properties:
            aliases:
              items:
                maxLength: 256
                minLength: 1
                type: string
              maxItems: 8
              type: array
            cities:
              items:
                maxLength: 128
                minLength: 1
                type: string
              maxItems: 8
              type: array
            fullName:
              maxLength: 256
              minLength: 1
              type: string
            profileUrls:
              items:
                maxLength: 2048
                minLength: 1
                type: string
              maxItems: 16
              type: array
            relevantCountries:
              items:
                pattern: ^[A-Za-z]{2}$
                type: string
              maxItems: 12
              type: array
            states:
              items:
                maxLength: 128
                minLength: 1
                type: string
              maxItems: 8
              type: array
          type: object
      required:
        - applicantId
      type: object
    FlowsDraftCreateInput:
      additionalProperties: false
      properties:
        design:
          additionalProperties: false
          properties:
            authoredTemplates:
              additionalProperties: false
              default: {}
              description: >-
                Original template/question blocks to create with this draft.
                Every evaluative multiple-choice question uses explicit non-flat
                option scores; Tests may also use native scale scoring. Open
                text is qualitative context without an attribute; unsupported
                types and automation are rejected.
              properties:
                assessmentQuestions:
                  default: []
                  items:
                    additionalProperties: false
                    properties:
                      clientRef:
                        maxLength: 64
                        minLength: 1
                        pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                        type: string
                      confetti:
                        default: true
                        type: boolean
                      conversationMode:
                        default: true
                        type: boolean
                      questions:
                        items:
                          additionalProperties: false
                          properties:
                            aiFollowUpEnabled:
                              default: false
                              description: >-
                                Enable only for a critical open-text question
                                where a vague or incomplete answer needs an
                                adaptive follow-up.
                              type: boolean
                            attribute:
                              description: >-
                                One exact numeric evidence attribute from
                                design.matchingScoreAttributes. Omit for
                                open-text narratives and all other non-scored
                                questions.
                              maxLength: 120
                              minLength: 1
                              type: string
                            clientRef:
                              maxLength: 64
                              minLength: 1
                              pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                              type: string
                            evidenceRole:
                              default: evaluative
                              description: >-
                                Evaluative means the question produces a numeric
                                Matching Score input and requires an attribute.
                                Use context for qualitative narratives,
                                logistics, consent, relationship context, or any
                                other unscored prompt.
                              enum:
                                - evaluative
                                - context
                              type: string
                            insightsExtraction:
                              description: >-
                                Enable for substantive Reference, Exit
                                Intelligence, or Team Pulse narratives.
                                Structured reference types default to enabled
                                except employmentCheck.
                              type: boolean
                            maxAnswers:
                              default: 1
                              description: >-
                                Maximum options a respondent may select. Use 1
                                for single-answer multiple choice; when the
                                prompt states a limit such as “choose up to
                                three”, set this to that exact limit.
                              maximum: 20
                              minimum: 1
                              type: integer
                            options:
                              items:
                                anyOf:
                                  - maxLength: 200
                                    minLength: 1
                                    type: string
                                  - additionalProperties: false
                                    properties:
                                      score:
                                        description: >-
                                          Non-negative numeric score for this
                                          answer. Required on every option of an
                                          evaluative multiple-choice question,
                                          with at least two distinct scores.
                                        maximum: 100
                                        minimum: 0
                                        type: number
                                      title:
                                        maxLength: 200
                                        minLength: 1
                                        type: string
                                    required:
                                      - title
                                    type: object
                              maxItems: 20
                              minItems: 2
                              type: array
                            prompt:
                              maxLength: 1500
                              minLength: 1
                              type: string
                            scoringPoints:
                              description: >-
                                Optional start/end score mapping for an authored
                                Test scale; reverse order enables reverse
                                scoring.
                              items:
                                maximum: 100
                                minimum: -100
                                type: number
                              maxItems: 2
                              minItems: 2
                              type: array
                            type:
                              description: >-
                                Question type. Reference forms also support the
                                structured single-use types strengths,
                                keyAchievements, weaknesses,
                                reasonsForLeavingJob, and employmentCheck.
                              enum:
                                - shortText
                                - longText
                                - multipleChoice
                                - opinionScale
                                - rating
                                - precisionScale
                                - strengths
                                - keyAchievements
                                - weaknesses
                                - reasonsForLeavingJob
                                - employmentCheck
                              type: string
                          required:
                            - clientRef
                            - type
                            - prompt
                          type: object
                        maxItems: 50
                        minItems: 1
                        type: array
                      thankYouScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific completion copy; omit when the
                          native template default fits.
                        properties:
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                      title:
                        maxLength: 120
                        minLength: 1
                        type: string
                      welcomeScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific welcome copy; omit when the
                          native template default fits.
                        properties:
                          button:
                            default: Begin
                            maxLength: 80
                            minLength: 1
                            type: string
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                    required:
                      - clientRef
                      - title
                      - questions
                    type: object
                  maxItems: 10
                  type: array
                assessmentTests:
                  default: []
                  items:
                    additionalProperties: false
                    properties:
                      clientRef:
                        maxLength: 64
                        minLength: 1
                        pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                        type: string
                      confetti:
                        default: true
                        type: boolean
                      conversationMode:
                        default: true
                        type: boolean
                      questions:
                        items:
                          additionalProperties: false
                          properties:
                            aiFollowUpEnabled:
                              default: false
                              description: >-
                                Enable only for a critical open-text question
                                where a vague or incomplete answer needs an
                                adaptive follow-up.
                              type: boolean
                            attribute:
                              description: >-
                                One exact numeric evidence attribute from
                                design.matchingScoreAttributes. Omit for
                                open-text narratives and all other non-scored
                                questions.
                              maxLength: 120
                              minLength: 1
                              type: string
                            clientRef:
                              maxLength: 64
                              minLength: 1
                              pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                              type: string
                            evidenceRole:
                              default: evaluative
                              description: >-
                                Evaluative means the question produces a numeric
                                Matching Score input and requires an attribute.
                                Use context for qualitative narratives,
                                logistics, consent, relationship context, or any
                                other unscored prompt.
                              enum:
                                - evaluative
                                - context
                              type: string
                            insightsExtraction:
                              description: >-
                                Enable for substantive Reference, Exit
                                Intelligence, or Team Pulse narratives.
                                Structured reference types default to enabled
                                except employmentCheck.
                              type: boolean
                            maxAnswers:
                              default: 1
                              description: >-
                                Maximum options a respondent may select. Use 1
                                for single-answer multiple choice; when the
                                prompt states a limit such as “choose up to
                                three”, set this to that exact limit.
                              maximum: 20
                              minimum: 1
                              type: integer
                            options:
                              items:
                                anyOf:
                                  - maxLength: 200
                                    minLength: 1
                                    type: string
                                  - additionalProperties: false
                                    properties:
                                      score:
                                        description: >-
                                          Non-negative numeric score for this
                                          answer. Required on every option of an
                                          evaluative multiple-choice question,
                                          with at least two distinct scores.
                                        maximum: 100
                                        minimum: 0
                                        type: number
                                      title:
                                        maxLength: 200
                                        minLength: 1
                                        type: string
                                    required:
                                      - title
                                    type: object
                              maxItems: 20
                              minItems: 2
                              type: array
                            prompt:
                              maxLength: 1500
                              minLength: 1
                              type: string
                            scoringPoints:
                              description: >-
                                Optional start/end score mapping for an authored
                                Test scale; reverse order enables reverse
                                scoring.
                              items:
                                maximum: 100
                                minimum: -100
                                type: number
                              maxItems: 2
                              minItems: 2
                              type: array
                            type:
                              description: >-
                                Question type. Reference forms also support the
                                structured single-use types strengths,
                                keyAchievements, weaknesses,
                                reasonsForLeavingJob, and employmentCheck.
                              enum:
                                - shortText
                                - longText
                                - multipleChoice
                                - opinionScale
                                - rating
                                - precisionScale
                                - strengths
                                - keyAchievements
                                - weaknesses
                                - reasonsForLeavingJob
                                - employmentCheck
                              type: string
                          required:
                            - clientRef
                            - type
                            - prompt
                          type: object
                        maxItems: 50
                        minItems: 1
                        type: array
                      thankYouScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific completion copy; omit when the
                          native template default fits.
                        properties:
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                      title:
                        maxLength: 120
                        minLength: 1
                        type: string
                      welcomeScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific welcome copy; omit when the
                          native template default fits.
                        properties:
                          button:
                            default: Begin
                            maxLength: 80
                            minLength: 1
                            type: string
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                    required:
                      - clientRef
                      - title
                      - questions
                    type: object
                  maxItems: 10
                  type: array
                exitIntelligence:
                  default: []
                  items:
                    additionalProperties: false
                    properties:
                      clientRef:
                        maxLength: 64
                        minLength: 1
                        pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                        type: string
                      confetti:
                        default: true
                        type: boolean
                      conversationMode:
                        default: true
                        type: boolean
                      questions:
                        items:
                          additionalProperties: false
                          properties:
                            aiFollowUpEnabled:
                              default: false
                              description: >-
                                Enable only for a critical open-text question
                                where a vague or incomplete answer needs an
                                adaptive follow-up.
                              type: boolean
                            attribute:
                              description: >-
                                One exact numeric evidence attribute from
                                design.matchingScoreAttributes. Omit for
                                open-text narratives and all other non-scored
                                questions.
                              maxLength: 120
                              minLength: 1
                              type: string
                            clientRef:
                              maxLength: 64
                              minLength: 1
                              pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                              type: string
                            evidenceRole:
                              default: evaluative
                              description: >-
                                Evaluative means the question produces a numeric
                                Matching Score input and requires an attribute.
                                Use context for qualitative narratives,
                                logistics, consent, relationship context, or any
                                other unscored prompt.
                              enum:
                                - evaluative
                                - context
                              type: string
                            insightsExtraction:
                              description: >-
                                Enable for substantive Reference, Exit
                                Intelligence, or Team Pulse narratives.
                                Structured reference types default to enabled
                                except employmentCheck.
                              type: boolean
                            maxAnswers:
                              default: 1
                              description: >-
                                Maximum options a respondent may select. Use 1
                                for single-answer multiple choice; when the
                                prompt states a limit such as “choose up to
                                three”, set this to that exact limit.
                              maximum: 20
                              minimum: 1
                              type: integer
                            options:
                              items:
                                anyOf:
                                  - maxLength: 200
                                    minLength: 1
                                    type: string
                                  - additionalProperties: false
                                    properties:
                                      score:
                                        description: >-
                                          Non-negative numeric score for this
                                          answer. Required on every option of an
                                          evaluative multiple-choice question,
                                          with at least two distinct scores.
                                        maximum: 100
                                        minimum: 0
                                        type: number
                                      title:
                                        maxLength: 200
                                        minLength: 1
                                        type: string
                                    required:
                                      - title
                                    type: object
                              maxItems: 20
                              minItems: 2
                              type: array
                            prompt:
                              maxLength: 1500
                              minLength: 1
                              type: string
                            scoringPoints:
                              description: >-
                                Optional start/end score mapping for an authored
                                Test scale; reverse order enables reverse
                                scoring.
                              items:
                                maximum: 100
                                minimum: -100
                                type: number
                              maxItems: 2
                              minItems: 2
                              type: array
                            type:
                              description: >-
                                Question type. Reference forms also support the
                                structured single-use types strengths,
                                keyAchievements, weaknesses,
                                reasonsForLeavingJob, and employmentCheck.
                              enum:
                                - shortText
                                - longText
                                - multipleChoice
                                - opinionScale
                                - rating
                                - precisionScale
                                - strengths
                                - keyAchievements
                                - weaknesses
                                - reasonsForLeavingJob
                                - employmentCheck
                              type: string
                          required:
                            - clientRef
                            - type
                            - prompt
                          type: object
                        maxItems: 50
                        minItems: 1
                        type: array
                      thankYouScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific completion copy; omit when the
                          native template default fits.
                        properties:
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                      title:
                        maxLength: 120
                        minLength: 1
                        type: string
                      welcomeScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific welcome copy; omit when the
                          native template default fits.
                        properties:
                          button:
                            default: Begin
                            maxLength: 80
                            minLength: 1
                            type: string
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                    required:
                      - clientRef
                      - title
                      - questions
                    type: object
                  maxItems: 10
                  type: array
                preScreening:
                  default: []
                  items:
                    additionalProperties: false
                    properties:
                      clientRef:
                        maxLength: 64
                        minLength: 1
                        pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                        type: string
                      confetti:
                        default: true
                        type: boolean
                      conversationMode:
                        default: true
                        type: boolean
                      questions:
                        items:
                          additionalProperties: false
                          properties:
                            aiFollowUpEnabled:
                              default: false
                              description: >-
                                Enable only for a critical open-text question
                                where a vague or incomplete answer needs an
                                adaptive follow-up.
                              type: boolean
                            attribute:
                              description: >-
                                One exact numeric evidence attribute from
                                design.matchingScoreAttributes. Omit for
                                open-text narratives and all other non-scored
                                questions.
                              maxLength: 120
                              minLength: 1
                              type: string
                            clientRef:
                              maxLength: 64
                              minLength: 1
                              pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                              type: string
                            evidenceRole:
                              default: evaluative
                              description: >-
                                Evaluative means the question produces a numeric
                                Matching Score input and requires an attribute.
                                Use context for qualitative narratives,
                                logistics, consent, relationship context, or any
                                other unscored prompt.
                              enum:
                                - evaluative
                                - context
                              type: string
                            insightsExtraction:
                              description: >-
                                Enable for substantive Reference, Exit
                                Intelligence, or Team Pulse narratives.
                                Structured reference types default to enabled
                                except employmentCheck.
                              type: boolean
                            maxAnswers:
                              default: 1
                              description: >-
                                Maximum options a respondent may select. Use 1
                                for single-answer multiple choice; when the
                                prompt states a limit such as “choose up to
                                three”, set this to that exact limit.
                              maximum: 20
                              minimum: 1
                              type: integer
                            options:
                              items:
                                anyOf:
                                  - maxLength: 200
                                    minLength: 1
                                    type: string
                                  - additionalProperties: false
                                    properties:
                                      score:
                                        description: >-
                                          Non-negative numeric score for this
                                          answer. Required on every option of an
                                          evaluative multiple-choice question,
                                          with at least two distinct scores.
                                        maximum: 100
                                        minimum: 0
                                        type: number
                                      title:
                                        maxLength: 200
                                        minLength: 1
                                        type: string
                                    required:
                                      - title
                                    type: object
                              maxItems: 20
                              minItems: 2
                              type: array
                            prompt:
                              maxLength: 1500
                              minLength: 1
                              type: string
                            scoringPoints:
                              description: >-
                                Optional start/end score mapping for an authored
                                Test scale; reverse order enables reverse
                                scoring.
                              items:
                                maximum: 100
                                minimum: -100
                                type: number
                              maxItems: 2
                              minItems: 2
                              type: array
                            type:
                              description: >-
                                Question type. Reference forms also support the
                                structured single-use types strengths,
                                keyAchievements, weaknesses,
                                reasonsForLeavingJob, and employmentCheck.
                              enum:
                                - shortText
                                - longText
                                - multipleChoice
                                - opinionScale
                                - rating
                                - precisionScale
                                - strengths
                                - keyAchievements
                                - weaknesses
                                - reasonsForLeavingJob
                                - employmentCheck
                              type: string
                          required:
                            - clientRef
                            - type
                            - prompt
                          type: object
                        maxItems: 50
                        minItems: 1
                        type: array
                      thankYouScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific completion copy; omit when the
                          native template default fits.
                        properties:
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                      title:
                        maxLength: 120
                        minLength: 1
                        type: string
                      welcomeScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific welcome copy; omit when the
                          native template default fits.
                        properties:
                          button:
                            default: Begin
                            maxLength: 80
                            minLength: 1
                            type: string
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                    required:
                      - clientRef
                      - title
                      - questions
                    type: object
                  maxItems: 10
                  type: array
                references:
                  default: []
                  items:
                    additionalProperties: false
                    properties:
                      clientRef:
                        maxLength: 64
                        minLength: 1
                        pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                        type: string
                      confetti:
                        default: true
                        type: boolean
                      conversationMode:
                        default: true
                        type: boolean
                      questions:
                        items:
                          additionalProperties: false
                          properties:
                            aiFollowUpEnabled:
                              default: false
                              description: >-
                                Enable only for a critical open-text question
                                where a vague or incomplete answer needs an
                                adaptive follow-up.
                              type: boolean
                            attribute:
                              description: >-
                                One exact numeric evidence attribute from
                                design.matchingScoreAttributes. Omit for
                                open-text narratives and all other non-scored
                                questions.
                              maxLength: 120
                              minLength: 1
                              type: string
                            clientRef:
                              maxLength: 64
                              minLength: 1
                              pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                              type: string
                            evidenceRole:
                              default: evaluative
                              description: >-
                                Evaluative means the question produces a numeric
                                Matching Score input and requires an attribute.
                                Use context for qualitative narratives,
                                logistics, consent, relationship context, or any
                                other unscored prompt.
                              enum:
                                - evaluative
                                - context
                              type: string
                            insightsExtraction:
                              description: >-
                                Enable for substantive Reference, Exit
                                Intelligence, or Team Pulse narratives.
                                Structured reference types default to enabled
                                except employmentCheck.
                              type: boolean
                            maxAnswers:
                              default: 1
                              description: >-
                                Maximum options a respondent may select. Use 1
                                for single-answer multiple choice; when the
                                prompt states a limit such as “choose up to
                                three”, set this to that exact limit.
                              maximum: 20
                              minimum: 1
                              type: integer
                            options:
                              items:
                                anyOf:
                                  - maxLength: 200
                                    minLength: 1
                                    type: string
                                  - additionalProperties: false
                                    properties:
                                      score:
                                        description: >-
                                          Non-negative numeric score for this
                                          answer. Required on every option of an
                                          evaluative multiple-choice question,
                                          with at least two distinct scores.
                                        maximum: 100
                                        minimum: 0
                                        type: number
                                      title:
                                        maxLength: 200
                                        minLength: 1
                                        type: string
                                    required:
                                      - title
                                    type: object
                              maxItems: 20
                              minItems: 2
                              type: array
                            prompt:
                              maxLength: 1500
                              minLength: 1
                              type: string
                            scoringPoints:
                              description: >-
                                Optional start/end score mapping for an authored
                                Test scale; reverse order enables reverse
                                scoring.
                              items:
                                maximum: 100
                                minimum: -100
                                type: number
                              maxItems: 2
                              minItems: 2
                              type: array
                            type:
                              description: >-
                                Question type. Reference forms also support the
                                structured single-use types strengths,
                                keyAchievements, weaknesses,
                                reasonsForLeavingJob, and employmentCheck.
                              enum:
                                - shortText
                                - longText
                                - multipleChoice
                                - opinionScale
                                - rating
                                - precisionScale
                                - strengths
                                - keyAchievements
                                - weaknesses
                                - reasonsForLeavingJob
                                - employmentCheck
                              type: string
                          required:
                            - clientRef
                            - type
                            - prompt
                          type: object
                        maxItems: 50
                        minItems: 1
                        type: array
                      thankYouScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific completion copy; omit when the
                          native template default fits.
                        properties:
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                      title:
                        maxLength: 120
                        minLength: 1
                        type: string
                      welcomeScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific welcome copy; omit when the
                          native template default fits.
                        properties:
                          button:
                            default: Begin
                            maxLength: 80
                            minLength: 1
                            type: string
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                    required:
                      - clientRef
                      - title
                      - questions
                    type: object
                  maxItems: 10
                  type: array
                teamPulse:
                  default: []
                  items:
                    additionalProperties: false
                    properties:
                      clientRef:
                        maxLength: 64
                        minLength: 1
                        pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                        type: string
                      confetti:
                        default: true
                        type: boolean
                      conversationMode:
                        default: true
                        type: boolean
                      questions:
                        items:
                          additionalProperties: false
                          properties:
                            aiFollowUpEnabled:
                              default: false
                              description: >-
                                Enable only for a critical open-text question
                                where a vague or incomplete answer needs an
                                adaptive follow-up.
                              type: boolean
                            attribute:
                              description: >-
                                One exact numeric evidence attribute from
                                design.matchingScoreAttributes. Omit for
                                open-text narratives and all other non-scored
                                questions.
                              maxLength: 120
                              minLength: 1
                              type: string
                            clientRef:
                              maxLength: 64
                              minLength: 1
                              pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                              type: string
                            evidenceRole:
                              default: evaluative
                              description: >-
                                Evaluative means the question produces a numeric
                                Matching Score input and requires an attribute.
                                Use context for qualitative narratives,
                                logistics, consent, relationship context, or any
                                other unscored prompt.
                              enum:
                                - evaluative
                                - context
                              type: string
                            insightsExtraction:
                              description: >-
                                Enable for substantive Reference, Exit
                                Intelligence, or Team Pulse narratives.
                                Structured reference types default to enabled
                                except employmentCheck.
                              type: boolean
                            maxAnswers:
                              default: 1
                              description: >-
                                Maximum options a respondent may select. Use 1
                                for single-answer multiple choice; when the
                                prompt states a limit such as “choose up to
                                three”, set this to that exact limit.
                              maximum: 20
                              minimum: 1
                              type: integer
                            options:
                              items:
                                anyOf:
                                  - maxLength: 200
                                    minLength: 1
                                    type: string
                                  - additionalProperties: false
                                    properties:
                                      score:
                                        description: >-
                                          Non-negative numeric score for this
                                          answer. Required on every option of an
                                          evaluative multiple-choice question,
                                          with at least two distinct scores.
                                        maximum: 100
                                        minimum: 0
                                        type: number
                                      title:
                                        maxLength: 200
                                        minLength: 1
                                        type: string
                                    required:
                                      - title
                                    type: object
                              maxItems: 20
                              minItems: 2
                              type: array
                            prompt:
                              maxLength: 1500
                              minLength: 1
                              type: string
                            scoringPoints:
                              description: >-
                                Optional start/end score mapping for an authored
                                Test scale; reverse order enables reverse
                                scoring.
                              items:
                                maximum: 100
                                minimum: -100
                                type: number
                              maxItems: 2
                              minItems: 2
                              type: array
                            type:
                              description: >-
                                Question type. Reference forms also support the
                                structured single-use types strengths,
                                keyAchievements, weaknesses,
                                reasonsForLeavingJob, and employmentCheck.
                              enum:
                                - shortText
                                - longText
                                - multipleChoice
                                - opinionScale
                                - rating
                                - precisionScale
                                - strengths
                                - keyAchievements
                                - weaknesses
                                - reasonsForLeavingJob
                                - employmentCheck
                              type: string
                          required:
                            - clientRef
                            - type
                            - prompt
                          type: object
                        maxItems: 50
                        minItems: 1
                        type: array
                      thankYouScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific completion copy; omit when the
                          native template default fits.
                        properties:
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                      title:
                        maxLength: 120
                        minLength: 1
                        type: string
                      welcomeScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific welcome copy; omit when the
                          native template default fits.
                        properties:
                          button:
                            default: Begin
                            maxLength: 80
                            minLength: 1
                            type: string
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                    required:
                      - clientRef
                      - title
                      - questions
                    type: object
                  maxItems: 10
                  type: array
              type: object
            clearCopyOverrideFields:
              default: []
              description: >-
                On a draft revision, reset only these existing copy overrides to
                Jointl defaults.
              items:
                enum:
                  - welcomeScreen
                  - referenceCheckingCandidateScreen
                  - thankYouScreen
                  - welcomeEmail
                  - reminderWelcomeEmail
                  - emailRequestToReferee
                  - reminderEmailRequestToReferee
                  - thankYouEmail
                  - teamPulseEmailRequestToEmployee
                  - teamPulseReminderEmailRequestToEmployee
                type: string
              maxItems: 10
              type: array
            companyId:
              description: >-
                Exact companies.list ID. Required for HIRING_REVIEW and must be
                within the member's current company access.
              maxLength: 128
              minLength: 1
              pattern: ^[A-Za-z0-9_-]+$
              type: string
            copyOverrides:
              additionalProperties: false
              default: {}
              description: >-
                Override only copy whose native Jointl default materially
                conflicts with this Flow; omit ordinary defaults.
              properties:
                emailRequestToReferee:
                  description: >-
                    Plain text only; separate title and paragraphs with
                    newlines. Supported ##...## placeholders are preserved.
                  maxLength: 6000
                  minLength: 1
                  type: string
                referenceCheckingCandidateScreen:
                  description: >-
                    Plain text only; separate title and paragraphs with
                    newlines. Supported ##...## placeholders are preserved.
                  maxLength: 6000
                  minLength: 1
                  type: string
                reminderEmailRequestToReferee:
                  description: >-
                    Plain text only; separate title and paragraphs with
                    newlines. Supported ##...## placeholders are preserved.
                  maxLength: 6000
                  minLength: 1
                  type: string
                reminderWelcomeEmail:
                  description: >-
                    Plain text only; separate title and paragraphs with
                    newlines. Supported ##...## placeholders are preserved.
                  maxLength: 6000
                  minLength: 1
                  type: string
                teamPulseEmailRequestToEmployee:
                  description: >-
                    Plain text only; separate title and paragraphs with
                    newlines. Supported ##...## placeholders are preserved.
                  maxLength: 6000
                  minLength: 1
                  type: string
                teamPulseReminderEmailRequestToEmployee:
                  description: >-
                    Plain text only; separate title and paragraphs with
                    newlines. Supported ##...## placeholders are preserved.
                  maxLength: 6000
                  minLength: 1
                  type: string
                thankYouEmail:
                  description: >-
                    Plain text only; separate title and paragraphs with
                    newlines. Supported ##...## placeholders are preserved.
                  maxLength: 6000
                  minLength: 1
                  type: string
                thankYouScreen:
                  description: >-
                    Plain text only; separate title and paragraphs with
                    newlines. Supported ##...## placeholders are preserved.
                  maxLength: 6000
                  minLength: 1
                  type: string
                welcomeEmail:
                  description: >-
                    Plain text only; separate title and paragraphs with
                    newlines. Supported ##...## placeholders are preserved.
                  maxLength: 6000
                  minLength: 1
                  type: string
                welcomeScreen:
                  description: >-
                    Plain text only; separate title and paragraphs with
                    newlines. Supported ##...## placeholders are preserved.
                  maxLength: 6000
                  minLength: 1
                  type: string
              type: object
            jobTitle:
              description: >-
                Job title assessed by a HIRING_REVIEW Flow; required for that
                type.
              maxLength: 80
              minLength: 1
              type: string
            matchingScoreAttributes:
              default: []
              description: >-
                Up to 15 job-related attributes used by Jointl Matching Score,
                deliberately ordered from highest to lowest importance. With N
                attributes, Jointl applies linear weights N through 1 in this
                exact order. Every Hiring Review attribute must have at least
                one selected or authored question with valid numeric scoring.
              items:
                maxLength: 120
                minLength: 1
                type: string
              maxItems: 15
              type: array
            performance:
              additionalProperties: false
              description: >-
                Required complete participant and cadence configuration for
                PERFORMANCE Flows; omit for other types.
              properties:
                employeeIds:
                  description: >-
                    Exact visible Employee IDs who participate in enabled Glow
                    Moments and Team Pulse cycles.
                  items:
                    maxLength: 128
                    minLength: 1
                    pattern: ^[A-Za-z0-9_-]+$
                    type: string
                  maxItems: 250
                  type: array
                glowMoments:
                  additionalProperties: false
                  properties:
                    cadence:
                      additionalProperties: false
                      properties:
                        firstSendAt:
                          anyOf:
                            - type: string
                              format: date-time
                            - type: string
                              format: date-time
                          description: ISO 8601 date-time for the first Glow Moments send.
                        interval:
                          enum:
                            - MONTHLY
                            - QUARTERLY
                          type: string
                        mode:
                          enum:
                            - ONE_TIME
                            - RECURRING
                          type: string
                        repeatUntil:
                          anyOf:
                            - type: string
                              format: date-time
                            - type: string
                              format: date-time
                          description: >-
                            Optional inclusive end date-time for a recurring
                            cadence.
                      required:
                        - mode
                        - firstSendAt
                      type: object
                    enabled:
                      type: boolean
                  required:
                    - enabled
                  type: object
                teamPulse:
                  additionalProperties: false
                  properties:
                    cadence:
                      additionalProperties: false
                      properties:
                        firstSendAt:
                          anyOf:
                            - type: string
                              format: date-time
                            - type: string
                              format: date-time
                          description: ISO 8601 date-time for the first Team Pulse send.
                        interval:
                          enum:
                            - MONTHLY
                            - QUARTERLY
                            - SEMI_ANNUAL
                          type: string
                        mode:
                          enum:
                            - ONE_TIME
                            - RECURRING
                          type: string
                        repeatUntil:
                          anyOf:
                            - type: string
                              format: date-time
                            - type: string
                              format: date-time
                          description: >-
                            Optional inclusive end date-time for a recurring
                            cadence.
                      required:
                        - mode
                        - firstSendAt
                      type: object
                    enabled:
                      type: boolean
                  required:
                    - enabled
                  type: object
              required:
                - employeeIds
                - glowMoments
                - teamPulse
              type: object
            referenceCollection:
              additionalProperties: false
              description: >-
                Hiring Review reference collection mode and thresholds; omit for
                other Flow types.
              properties:
                method:
                  default: AUTO
                  enum:
                    - AUTO
                    - MANUAL
                  type: string
                minReferenceCount:
                  default: 3
                  maximum: 10
                  minimum: 1
                  type: integer
                minReferenceGap:
                  default: 1
                  maximum: 10
                  minimum: 0
                  type: integer
              type: object
            tagIds:
              default: []
              description: Existing Jointl tag IDs to attach.
              items:
                maxLength: 128
                minLength: 1
                pattern: ^[A-Za-z0-9_-]+$
                type: string
              maxItems: 40
              type: array
            templateIds:
              additionalProperties: false
              default: {}
              description: Existing visible templates selected by category.
              properties:
                assessmentQuestions:
                  default: []
                  description: Existing assessment-question template IDs.
                  items:
                    maxLength: 128
                    minLength: 1
                    pattern: ^[A-Za-z0-9_-]+$
                    type: string
                  maxItems: 40
                  type: array
                assessmentTests:
                  default: []
                  description: >-
                    Existing visible Test template IDs. Search Private and
                    Public Test Libraries before authoring a new Test.
                  items:
                    maxLength: 128
                    minLength: 1
                    pattern: ^[A-Za-z0-9_-]+$
                    type: string
                  maxItems: 40
                  type: array
                exitIntelligence:
                  default: []
                  description: Existing Exit Intelligence template IDs.
                  items:
                    maxLength: 128
                    minLength: 1
                    pattern: ^[A-Za-z0-9_-]+$
                    type: string
                  maxItems: 40
                  type: array
                preScreening:
                  default: []
                  description: Existing pre-screening template IDs.
                  items:
                    maxLength: 128
                    minLength: 1
                    pattern: ^[A-Za-z0-9_-]+$
                    type: string
                  maxItems: 40
                  type: array
                references:
                  default: []
                  description: Existing reference template IDs.
                  items:
                    maxLength: 128
                    minLength: 1
                    pattern: ^[A-Za-z0-9_-]+$
                    type: string
                  maxItems: 40
                  type: array
                teamPulse:
                  default: []
                  description: Existing Team Pulse template IDs.
                  items:
                    maxLength: 128
                    minLength: 1
                    pattern: ^[A-Za-z0-9_-]+$
                    type: string
                  maxItems: 40
                  type: array
              type: object
            title:
              description: Human-readable Flow title.
              maxLength: 80
              minLength: 1
              type: string
            type:
              description: Flow type. The allowed sections depend on this value.
              enum:
                - HIRING_REVIEW
                - EXIT_INTELLIGENCE
                - PERFORMANCE
              type: string
          required:
            - title
            - type
          type: object
      required:
        - design
      type: object
    FlowsDraftReviseInput:
      additionalProperties: false
      properties:
        design:
          additionalProperties: false
          properties:
            authoredTemplates:
              additionalProperties: false
              default: {}
              description: >-
                Original template/question blocks to create with this draft.
                Every evaluative multiple-choice question uses explicit non-flat
                option scores; Tests may also use native scale scoring. Open
                text is qualitative context without an attribute; unsupported
                types and automation are rejected.
              properties:
                assessmentQuestions:
                  default: []
                  items:
                    additionalProperties: false
                    properties:
                      clientRef:
                        maxLength: 64
                        minLength: 1
                        pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                        type: string
                      confetti:
                        default: true
                        type: boolean
                      conversationMode:
                        default: true
                        type: boolean
                      questions:
                        items:
                          additionalProperties: false
                          properties:
                            aiFollowUpEnabled:
                              default: false
                              description: >-
                                Enable only for a critical open-text question
                                where a vague or incomplete answer needs an
                                adaptive follow-up.
                              type: boolean
                            attribute:
                              description: >-
                                One exact numeric evidence attribute from
                                design.matchingScoreAttributes. Omit for
                                open-text narratives and all other non-scored
                                questions.
                              maxLength: 120
                              minLength: 1
                              type: string
                            clientRef:
                              maxLength: 64
                              minLength: 1
                              pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                              type: string
                            evidenceRole:
                              default: evaluative
                              description: >-
                                Evaluative means the question produces a numeric
                                Matching Score input and requires an attribute.
                                Use context for qualitative narratives,
                                logistics, consent, relationship context, or any
                                other unscored prompt.
                              enum:
                                - evaluative
                                - context
                              type: string
                            insightsExtraction:
                              description: >-
                                Enable for substantive Reference, Exit
                                Intelligence, or Team Pulse narratives.
                                Structured reference types default to enabled
                                except employmentCheck.
                              type: boolean
                            maxAnswers:
                              default: 1
                              description: >-
                                Maximum options a respondent may select. Use 1
                                for single-answer multiple choice; when the
                                prompt states a limit such as “choose up to
                                three”, set this to that exact limit.
                              maximum: 20
                              minimum: 1
                              type: integer
                            options:
                              items:
                                anyOf:
                                  - maxLength: 200
                                    minLength: 1
                                    type: string
                                  - additionalProperties: false
                                    properties:
                                      score:
                                        description: >-
                                          Non-negative numeric score for this
                                          answer. Required on every option of an
                                          evaluative multiple-choice question,
                                          with at least two distinct scores.
                                        maximum: 100
                                        minimum: 0
                                        type: number
                                      title:
                                        maxLength: 200
                                        minLength: 1
                                        type: string
                                    required:
                                      - title
                                    type: object
                              maxItems: 20
                              minItems: 2
                              type: array
                            prompt:
                              maxLength: 1500
                              minLength: 1
                              type: string
                            scoringPoints:
                              description: >-
                                Optional start/end score mapping for an authored
                                Test scale; reverse order enables reverse
                                scoring.
                              items:
                                maximum: 100
                                minimum: -100
                                type: number
                              maxItems: 2
                              minItems: 2
                              type: array
                            type:
                              description: >-
                                Question type. Reference forms also support the
                                structured single-use types strengths,
                                keyAchievements, weaknesses,
                                reasonsForLeavingJob, and employmentCheck.
                              enum:
                                - shortText
                                - longText
                                - multipleChoice
                                - opinionScale
                                - rating
                                - precisionScale
                                - strengths
                                - keyAchievements
                                - weaknesses
                                - reasonsForLeavingJob
                                - employmentCheck
                              type: string
                          required:
                            - clientRef
                            - type
                            - prompt
                          type: object
                        maxItems: 50
                        minItems: 1
                        type: array
                      thankYouScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific completion copy; omit when the
                          native template default fits.
                        properties:
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                      title:
                        maxLength: 120
                        minLength: 1
                        type: string
                      welcomeScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific welcome copy; omit when the
                          native template default fits.
                        properties:
                          button:
                            default: Begin
                            maxLength: 80
                            minLength: 1
                            type: string
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                    required:
                      - clientRef
                      - title
                      - questions
                    type: object
                  maxItems: 10
                  type: array
                assessmentTests:
                  default: []
                  items:
                    additionalProperties: false
                    properties:
                      clientRef:
                        maxLength: 64
                        minLength: 1
                        pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                        type: string
                      confetti:
                        default: true
                        type: boolean
                      conversationMode:
                        default: true
                        type: boolean
                      questions:
                        items:
                          additionalProperties: false
                          properties:
                            aiFollowUpEnabled:
                              default: false
                              description: >-
                                Enable only for a critical open-text question
                                where a vague or incomplete answer needs an
                                adaptive follow-up.
                              type: boolean
                            attribute:
                              description: >-
                                One exact numeric evidence attribute from
                                design.matchingScoreAttributes. Omit for
                                open-text narratives and all other non-scored
                                questions.
                              maxLength: 120
                              minLength: 1
                              type: string
                            clientRef:
                              maxLength: 64
                              minLength: 1
                              pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                              type: string
                            evidenceRole:
                              default: evaluative
                              description: >-
                                Evaluative means the question produces a numeric
                                Matching Score input and requires an attribute.
                                Use context for qualitative narratives,
                                logistics, consent, relationship context, or any
                                other unscored prompt.
                              enum:
                                - evaluative
                                - context
                              type: string
                            insightsExtraction:
                              description: >-
                                Enable for substantive Reference, Exit
                                Intelligence, or Team Pulse narratives.
                                Structured reference types default to enabled
                                except employmentCheck.
                              type: boolean
                            maxAnswers:
                              default: 1
                              description: >-
                                Maximum options a respondent may select. Use 1
                                for single-answer multiple choice; when the
                                prompt states a limit such as “choose up to
                                three”, set this to that exact limit.
                              maximum: 20
                              minimum: 1
                              type: integer
                            options:
                              items:
                                anyOf:
                                  - maxLength: 200
                                    minLength: 1
                                    type: string
                                  - additionalProperties: false
                                    properties:
                                      score:
                                        description: >-
                                          Non-negative numeric score for this
                                          answer. Required on every option of an
                                          evaluative multiple-choice question,
                                          with at least two distinct scores.
                                        maximum: 100
                                        minimum: 0
                                        type: number
                                      title:
                                        maxLength: 200
                                        minLength: 1
                                        type: string
                                    required:
                                      - title
                                    type: object
                              maxItems: 20
                              minItems: 2
                              type: array
                            prompt:
                              maxLength: 1500
                              minLength: 1
                              type: string
                            scoringPoints:
                              description: >-
                                Optional start/end score mapping for an authored
                                Test scale; reverse order enables reverse
                                scoring.
                              items:
                                maximum: 100
                                minimum: -100
                                type: number
                              maxItems: 2
                              minItems: 2
                              type: array
                            type:
                              description: >-
                                Question type. Reference forms also support the
                                structured single-use types strengths,
                                keyAchievements, weaknesses,
                                reasonsForLeavingJob, and employmentCheck.
                              enum:
                                - shortText
                                - longText
                                - multipleChoice
                                - opinionScale
                                - rating
                                - precisionScale
                                - strengths
                                - keyAchievements
                                - weaknesses
                                - reasonsForLeavingJob
                                - employmentCheck
                              type: string
                          required:
                            - clientRef
                            - type
                            - prompt
                          type: object
                        maxItems: 50
                        minItems: 1
                        type: array
                      thankYouScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific completion copy; omit when the
                          native template default fits.
                        properties:
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                      title:
                        maxLength: 120
                        minLength: 1
                        type: string
                      welcomeScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific welcome copy; omit when the
                          native template default fits.
                        properties:
                          button:
                            default: Begin
                            maxLength: 80
                            minLength: 1
                            type: string
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                    required:
                      - clientRef
                      - title
                      - questions
                    type: object
                  maxItems: 10
                  type: array
                exitIntelligence:
                  default: []
                  items:
                    additionalProperties: false
                    properties:
                      clientRef:
                        maxLength: 64
                        minLength: 1
                        pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                        type: string
                      confetti:
                        default: true
                        type: boolean
                      conversationMode:
                        default: true
                        type: boolean
                      questions:
                        items:
                          additionalProperties: false
                          properties:
                            aiFollowUpEnabled:
                              default: false
                              description: >-
                                Enable only for a critical open-text question
                                where a vague or incomplete answer needs an
                                adaptive follow-up.
                              type: boolean
                            attribute:
                              description: >-
                                One exact numeric evidence attribute from
                                design.matchingScoreAttributes. Omit for
                                open-text narratives and all other non-scored
                                questions.
                              maxLength: 120
                              minLength: 1
                              type: string
                            clientRef:
                              maxLength: 64
                              minLength: 1
                              pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                              type: string
                            evidenceRole:
                              default: evaluative
                              description: >-
                                Evaluative means the question produces a numeric
                                Matching Score input and requires an attribute.
                                Use context for qualitative narratives,
                                logistics, consent, relationship context, or any
                                other unscored prompt.
                              enum:
                                - evaluative
                                - context
                              type: string
                            insightsExtraction:
                              description: >-
                                Enable for substantive Reference, Exit
                                Intelligence, or Team Pulse narratives.
                                Structured reference types default to enabled
                                except employmentCheck.
                              type: boolean
                            maxAnswers:
                              default: 1
                              description: >-
                                Maximum options a respondent may select. Use 1
                                for single-answer multiple choice; when the
                                prompt states a limit such as “choose up to
                                three”, set this to that exact limit.
                              maximum: 20
                              minimum: 1
                              type: integer
                            options:
                              items:
                                anyOf:
                                  - maxLength: 200
                                    minLength: 1
                                    type: string
                                  - additionalProperties: false
                                    properties:
                                      score:
                                        description: >-
                                          Non-negative numeric score for this
                                          answer. Required on every option of an
                                          evaluative multiple-choice question,
                                          with at least two distinct scores.
                                        maximum: 100
                                        minimum: 0
                                        type: number
                                      title:
                                        maxLength: 200
                                        minLength: 1
                                        type: string
                                    required:
                                      - title
                                    type: object
                              maxItems: 20
                              minItems: 2
                              type: array
                            prompt:
                              maxLength: 1500
                              minLength: 1
                              type: string
                            scoringPoints:
                              description: >-
                                Optional start/end score mapping for an authored
                                Test scale; reverse order enables reverse
                                scoring.
                              items:
                                maximum: 100
                                minimum: -100
                                type: number
                              maxItems: 2
                              minItems: 2
                              type: array
                            type:
                              description: >-
                                Question type. Reference forms also support the
                                structured single-use types strengths,
                                keyAchievements, weaknesses,
                                reasonsForLeavingJob, and employmentCheck.
                              enum:
                                - shortText
                                - longText
                                - multipleChoice
                                - opinionScale
                                - rating
                                - precisionScale
                                - strengths
                                - keyAchievements
                                - weaknesses
                                - reasonsForLeavingJob
                                - employmentCheck
                              type: string
                          required:
                            - clientRef
                            - type
                            - prompt
                          type: object
                        maxItems: 50
                        minItems: 1
                        type: array
                      thankYouScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific completion copy; omit when the
                          native template default fits.
                        properties:
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                      title:
                        maxLength: 120
                        minLength: 1
                        type: string
                      welcomeScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific welcome copy; omit when the
                          native template default fits.
                        properties:
                          button:
                            default: Begin
                            maxLength: 80
                            minLength: 1
                            type: string
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                    required:
                      - clientRef
                      - title
                      - questions
                    type: object
                  maxItems: 10
                  type: array
                preScreening:
                  default: []
                  items:
                    additionalProperties: false
                    properties:
                      clientRef:
                        maxLength: 64
                        minLength: 1
                        pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                        type: string
                      confetti:
                        default: true
                        type: boolean
                      conversationMode:
                        default: true
                        type: boolean
                      questions:
                        items:
                          additionalProperties: false
                          properties:
                            aiFollowUpEnabled:
                              default: false
                              description: >-
                                Enable only for a critical open-text question
                                where a vague or incomplete answer needs an
                                adaptive follow-up.
                              type: boolean
                            attribute:
                              description: >-
                                One exact numeric evidence attribute from
                                design.matchingScoreAttributes. Omit for
                                open-text narratives and all other non-scored
                                questions.
                              maxLength: 120
                              minLength: 1
                              type: string
                            clientRef:
                              maxLength: 64
                              minLength: 1
                              pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                              type: string
                            evidenceRole:
                              default: evaluative
                              description: >-
                                Evaluative means the question produces a numeric
                                Matching Score input and requires an attribute.
                                Use context for qualitative narratives,
                                logistics, consent, relationship context, or any
                                other unscored prompt.
                              enum:
                                - evaluative
                                - context
                              type: string
                            insightsExtraction:
                              description: >-
                                Enable for substantive Reference, Exit
                                Intelligence, or Team Pulse narratives.
                                Structured reference types default to enabled
                                except employmentCheck.
                              type: boolean
                            maxAnswers:
                              default: 1
                              description: >-
                                Maximum options a respondent may select. Use 1
                                for single-answer multiple choice; when the
                                prompt states a limit such as “choose up to
                                three”, set this to that exact limit.
                              maximum: 20
                              minimum: 1
                              type: integer
                            options:
                              items:
                                anyOf:
                                  - maxLength: 200
                                    minLength: 1
                                    type: string
                                  - additionalProperties: false
                                    properties:
                                      score:
                                        description: >-
                                          Non-negative numeric score for this
                                          answer. Required on every option of an
                                          evaluative multiple-choice question,
                                          with at least two distinct scores.
                                        maximum: 100
                                        minimum: 0
                                        type: number
                                      title:
                                        maxLength: 200
                                        minLength: 1
                                        type: string
                                    required:
                                      - title
                                    type: object
                              maxItems: 20
                              minItems: 2
                              type: array
                            prompt:
                              maxLength: 1500
                              minLength: 1
                              type: string
                            scoringPoints:
                              description: >-
                                Optional start/end score mapping for an authored
                                Test scale; reverse order enables reverse
                                scoring.
                              items:
                                maximum: 100
                                minimum: -100
                                type: number
                              maxItems: 2
                              minItems: 2
                              type: array
                            type:
                              description: >-
                                Question type. Reference forms also support the
                                structured single-use types strengths,
                                keyAchievements, weaknesses,
                                reasonsForLeavingJob, and employmentCheck.
                              enum:
                                - shortText
                                - longText
                                - multipleChoice
                                - opinionScale
                                - rating
                                - precisionScale
                                - strengths
                                - keyAchievements
                                - weaknesses
                                - reasonsForLeavingJob
                                - employmentCheck
                              type: string
                          required:
                            - clientRef
                            - type
                            - prompt
                          type: object
                        maxItems: 50
                        minItems: 1
                        type: array
                      thankYouScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific completion copy; omit when the
                          native template default fits.
                        properties:
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                      title:
                        maxLength: 120
                        minLength: 1
                        type: string
                      welcomeScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific welcome copy; omit when the
                          native template default fits.
                        properties:
                          button:
                            default: Begin
                            maxLength: 80
                            minLength: 1
                            type: string
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                    required:
                      - clientRef
                      - title
                      - questions
                    type: object
                  maxItems: 10
                  type: array
                references:
                  default: []
                  items:
                    additionalProperties: false
                    properties:
                      clientRef:
                        maxLength: 64
                        minLength: 1
                        pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                        type: string
                      confetti:
                        default: true
                        type: boolean
                      conversationMode:
                        default: true
                        type: boolean
                      questions:
                        items:
                          additionalProperties: false
                          properties:
                            aiFollowUpEnabled:
                              default: false
                              description: >-
                                Enable only for a critical open-text question
                                where a vague or incomplete answer needs an
                                adaptive follow-up.
                              type: boolean
                            attribute:
                              description: >-
                                One exact numeric evidence attribute from
                                design.matchingScoreAttributes. Omit for
                                open-text narratives and all other non-scored
                                questions.
                              maxLength: 120
                              minLength: 1
                              type: string
                            clientRef:
                              maxLength: 64
                              minLength: 1
                              pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                              type: string
                            evidenceRole:
                              default: evaluative
                              description: >-
                                Evaluative means the question produces a numeric
                                Matching Score input and requires an attribute.
                                Use context for qualitative narratives,
                                logistics, consent, relationship context, or any
                                other unscored prompt.
                              enum:
                                - evaluative
                                - context
                              type: string
                            insightsExtraction:
                              description: >-
                                Enable for substantive Reference, Exit
                                Intelligence, or Team Pulse narratives.
                                Structured reference types default to enabled
                                except employmentCheck.
                              type: boolean
                            maxAnswers:
                              default: 1
                              description: >-
                                Maximum options a respondent may select. Use 1
                                for single-answer multiple choice; when the
                                prompt states a limit such as “choose up to
                                three”, set this to that exact limit.
                              maximum: 20
                              minimum: 1
                              type: integer
                            options:
                              items:
                                anyOf:
                                  - maxLength: 200
                                    minLength: 1
                                    type: string
                                  - additionalProperties: false
                                    properties:
                                      score:
                                        description: >-
                                          Non-negative numeric score for this
                                          answer. Required on every option of an
                                          evaluative multiple-choice question,
                                          with at least two distinct scores.
                                        maximum: 100
                                        minimum: 0
                                        type: number
                                      title:
                                        maxLength: 200
                                        minLength: 1
                                        type: string
                                    required:
                                      - title
                                    type: object
                              maxItems: 20
                              minItems: 2
                              type: array
                            prompt:
                              maxLength: 1500
                              minLength: 1
                              type: string
                            scoringPoints:
                              description: >-
                                Optional start/end score mapping for an authored
                                Test scale; reverse order enables reverse
                                scoring.
                              items:
                                maximum: 100
                                minimum: -100
                                type: number
                              maxItems: 2
                              minItems: 2
                              type: array
                            type:
                              description: >-
                                Question type. Reference forms also support the
                                structured single-use types strengths,
                                keyAchievements, weaknesses,
                                reasonsForLeavingJob, and employmentCheck.
                              enum:
                                - shortText
                                - longText
                                - multipleChoice
                                - opinionScale
                                - rating
                                - precisionScale
                                - strengths
                                - keyAchievements
                                - weaknesses
                                - reasonsForLeavingJob
                                - employmentCheck
                              type: string
                          required:
                            - clientRef
                            - type
                            - prompt
                          type: object
                        maxItems: 50
                        minItems: 1
                        type: array
                      thankYouScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific completion copy; omit when the
                          native template default fits.
                        properties:
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                      title:
                        maxLength: 120
                        minLength: 1
                        type: string
                      welcomeScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific welcome copy; omit when the
                          native template default fits.
                        properties:
                          button:
                            default: Begin
                            maxLength: 80
                            minLength: 1
                            type: string
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                    required:
                      - clientRef
                      - title
                      - questions
                    type: object
                  maxItems: 10
                  type: array
                teamPulse:
                  default: []
                  items:
                    additionalProperties: false
                    properties:
                      clientRef:
                        maxLength: 64
                        minLength: 1
                        pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                        type: string
                      confetti:
                        default: true
                        type: boolean
                      conversationMode:
                        default: true
                        type: boolean
                      questions:
                        items:
                          additionalProperties: false
                          properties:
                            aiFollowUpEnabled:
                              default: false
                              description: >-
                                Enable only for a critical open-text question
                                where a vague or incomplete answer needs an
                                adaptive follow-up.
                              type: boolean
                            attribute:
                              description: >-
                                One exact numeric evidence attribute from
                                design.matchingScoreAttributes. Omit for
                                open-text narratives and all other non-scored
                                questions.
                              maxLength: 120
                              minLength: 1
                              type: string
                            clientRef:
                              maxLength: 64
                              minLength: 1
                              pattern: ^[A-Za-z0-9][A-Za-z0-9._-]*$
                              type: string
                            evidenceRole:
                              default: evaluative
                              description: >-
                                Evaluative means the question produces a numeric
                                Matching Score input and requires an attribute.
                                Use context for qualitative narratives,
                                logistics, consent, relationship context, or any
                                other unscored prompt.
                              enum:
                                - evaluative
                                - context
                              type: string
                            insightsExtraction:
                              description: >-
                                Enable for substantive Reference, Exit
                                Intelligence, or Team Pulse narratives.
                                Structured reference types default to enabled
                                except employmentCheck.
                              type: boolean
                            maxAnswers:
                              default: 1
                              description: >-
                                Maximum options a respondent may select. Use 1
                                for single-answer multiple choice; when the
                                prompt states a limit such as “choose up to
                                three”, set this to that exact limit.
                              maximum: 20
                              minimum: 1
                              type: integer
                            options:
                              items:
                                anyOf:
                                  - maxLength: 200
                                    minLength: 1
                                    type: string
                                  - additionalProperties: false
                                    properties:
                                      score:
                                        description: >-
                                          Non-negative numeric score for this
                                          answer. Required on every option of an
                                          evaluative multiple-choice question,
                                          with at least two distinct scores.
                                        maximum: 100
                                        minimum: 0
                                        type: number
                                      title:
                                        maxLength: 200
                                        minLength: 1
                                        type: string
                                    required:
                                      - title
                                    type: object
                              maxItems: 20
                              minItems: 2
                              type: array
                            prompt:
                              maxLength: 1500
                              minLength: 1
                              type: string
                            scoringPoints:
                              description: >-
                                Optional start/end score mapping for an authored
                                Test scale; reverse order enables reverse
                                scoring.
                              items:
                                maximum: 100
                                minimum: -100
                                type: number
                              maxItems: 2
                              minItems: 2
                              type: array
                            type:
                              description: >-
                                Question type. Reference forms also support the
                                structured single-use types strengths,
                                keyAchievements, weaknesses,
                                reasonsForLeavingJob, and employmentCheck.
                              enum:
                                - shortText
                                - longText
                                - multipleChoice
                                - opinionScale
                                - rating
                                - precisionScale
                                - strengths
                                - keyAchievements
                                - weaknesses
                                - reasonsForLeavingJob
                                - employmentCheck
                              type: string
                          required:
                            - clientRef
                            - type
                            - prompt
                          type: object
                        maxItems: 50
                        minItems: 1
                        type: array
                      thankYouScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific completion copy; omit when the
                          native template default fits.
                        properties:
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                      title:
                        maxLength: 120
                        minLength: 1
                        type: string
                      welcomeScreen:
                        additionalProperties: false
                        description: >-
                          Optional form-specific welcome copy; omit when the
                          native template default fits.
                        properties:
                          button:
                            default: Begin
                            maxLength: 80
                            minLength: 1
                            type: string
                          content:
                            description: >-
                              Plain text only; separate title and paragraphs
                              with newlines. Supported ##...## placeholders are
                              preserved.
                            maxLength: 6000
                            minLength: 1
                            type: string
                        required:
                          - content
                        type: object
                    required:
                      - clientRef
                      - title
                      - questions
                    type: object
                  maxItems: 10
                  type: array
              type: object
            clearCopyOverrideFields:
              default: []
              description: >-
                On a draft revision, reset only these existing copy overrides to
                Jointl defaults.
              items:
                enum:
                  - welcomeScreen
                  - referenceCheckingCandidateScreen
                  - thankYouScreen
                  - welcomeEmail
                  - reminderWelcomeEmail
                  - emailRequestToReferee
                  - reminderEmailRequestToReferee
                  - thankYouEmail
                  - teamPulseEmailRequestToEmployee
                  - teamPulseReminderEmailRequestToEmployee
                type: string
              maxItems: 10
              type: array
            companyId:
              description: >-
                Exact companies.list ID. Required for HIRING_REVIEW and must be
                within the member's current company access.
              maxLength: 128
              minLength: 1
              pattern: ^[A-Za-z0-9_-]+$
              type: string
            copyOverrides:
              additionalProperties: false
              default: {}
              description: >-
                Override only copy whose native Jointl default materially
                conflicts with this Flow; omit ordinary defaults.
              properties:
                emailRequestToReferee:
                  description: >-
                    Plain text only; separate title and paragraphs with
                    newlines. Supported ##...## placeholders are preserved.
                  maxLength: 6000
                  minLength: 1
                  type: string
                referenceCheckingCandidateScreen:
                  description: >-
                    Plain text only; separate title and paragraphs with
                    newlines. Supported ##...## placeholders are preserved.
                  maxLength: 6000
                  minLength: 1
                  type: string
                reminderEmailRequestToReferee:
                  description: >-
                    Plain text only; separate title and paragraphs with
                    newlines. Supported ##...## placeholders are preserved.
                  maxLength: 6000
                  minLength: 1
                  type: string
                reminderWelcomeEmail:
                  description: >-
                    Plain text only; separate title and paragraphs with
                    newlines. Supported ##...## placeholders are preserved.
                  maxLength: 6000
                  minLength: 1
                  type: string
                teamPulseEmailRequestToEmployee:
                  description: >-
                    Plain text only; separate title and paragraphs with
                    newlines. Supported ##...## placeholders are preserved.
                  maxLength: 6000
                  minLength: 1
                  type: string
                teamPulseReminderEmailRequestToEmployee:
                  description: >-
                    Plain text only; separate title and paragraphs with
                    newlines. Supported ##...## placeholders are preserved.
                  maxLength: 6000
                  minLength: 1
                  type: string
                thankYouEmail:
                  description: >-
                    Plain text only; separate title and paragraphs with
                    newlines. Supported ##...## placeholders are preserved.
                  maxLength: 6000
                  minLength: 1
                  type: string
                thankYouScreen:
                  description: >-
                    Plain text only; separate title and paragraphs with
                    newlines. Supported ##...## placeholders are preserved.
                  maxLength: 6000
                  minLength: 1
                  type: string
                welcomeEmail:
                  description: >-
                    Plain text only; separate title and paragraphs with
                    newlines. Supported ##...## placeholders are preserved.
                  maxLength: 6000
                  minLength: 1
                  type: string
                welcomeScreen:
                  description: >-
                    Plain text only; separate title and paragraphs with
                    newlines. Supported ##...## placeholders are preserved.
                  maxLength: 6000
                  minLength: 1
                  type: string
              type: object
            jobTitle:
              description: >-
                Job title assessed by a HIRING_REVIEW Flow; required for that
                type.
              maxLength: 80
              minLength: 1
              type: string
            matchingScoreAttributes:
              default: []
              description: >-
                Up to 15 job-related attributes used by Jointl Matching Score,
                deliberately ordered from highest to lowest importance. With N
                attributes, Jointl applies linear weights N through 1 in this
                exact order. Every Hiring Review attribute must have at least
                one selected or authored question with valid numeric scoring.
              items:
                maxLength: 120
                minLength: 1
                type: string
              maxItems: 15
              type: array
            performance:
              additionalProperties: false
              description: >-
                Required complete participant and cadence configuration for
                PERFORMANCE Flows; omit for other types.
              properties:
                employeeIds:
                  description: >-
                    Exact visible Employee IDs who participate in enabled Glow
                    Moments and Team Pulse cycles.
                  items:
                    maxLength: 128
                    minLength: 1
                    pattern: ^[A-Za-z0-9_-]+$
                    type: string
                  maxItems: 250
                  type: array
                glowMoments:
                  additionalProperties: false
                  properties:
                    cadence:
                      additionalProperties: false
                      properties:
                        firstSendAt:
                          anyOf:
                            - type: string
                              format: date-time
                            - type: string
                              format: date-time
                          description: ISO 8601 date-time for the first Glow Moments send.
                        interval:
                          enum:
                            - MONTHLY
                            - QUARTERLY
                          type: string
                        mode:
                          enum:
                            - ONE_TIME
                            - RECURRING
                          type: string
                        repeatUntil:
                          anyOf:
                            - type: string
                              format: date-time
                            - type: string
                              format: date-time
                          description: >-
                            Optional inclusive end date-time for a recurring
                            cadence.
                      required:
                        - mode
                        - firstSendAt
                      type: object
                    enabled:
                      type: boolean
                  required:
                    - enabled
                  type: object
                teamPulse:
                  additionalProperties: false
                  properties:
                    cadence:
                      additionalProperties: false
                      properties:
                        firstSendAt:
                          anyOf:
                            - type: string
                              format: date-time
                            - type: string
                              format: date-time
                          description: ISO 8601 date-time for the first Team Pulse send.
                        interval:
                          enum:
                            - MONTHLY
                            - QUARTERLY
                            - SEMI_ANNUAL
                          type: string
                        mode:
                          enum:
                            - ONE_TIME
                            - RECURRING
                          type: string
                        repeatUntil:
                          anyOf:
                            - type: string
                              format: date-time
                            - type: string
                              format: date-time
                          description: >-
                            Optional inclusive end date-time for a recurring
                            cadence.
                      required:
                        - mode
                        - firstSendAt
                      type: object
                    enabled:
                      type: boolean
                  required:
                    - enabled
                  type: object
              required:
                - employeeIds
                - glowMoments
                - teamPulse
              type: object
            referenceCollection:
              additionalProperties: false
              description: >-
                Hiring Review reference collection mode and thresholds; omit for
                other Flow types.
              properties:
                method:
                  default: AUTO
                  enum:
                    - AUTO
                    - MANUAL
                  type: string
                minReferenceCount:
                  default: 3
                  maximum: 10
                  minimum: 1
                  type: integer
                minReferenceGap:
                  default: 1
                  maximum: 10
                  minimum: 0
                  type: integer
              type: object
            tagIds:
              default: []
              description: Existing Jointl tag IDs to attach.
              items:
                maxLength: 128
                minLength: 1
                pattern: ^[A-Za-z0-9_-]+$
                type: string
              maxItems: 40
              type: array
            templateIds:
              additionalProperties: false
              default: {}
              description: Existing visible templates selected by category.
              properties:
                assessmentQuestions:
                  default: []
                  description: Existing assessment-question template IDs.
                  items:
                    maxLength: 128
                    minLength: 1
                    pattern: ^[A-Za-z0-9_-]+$
                    type: string
                  maxItems: 40
                  type: array
                assessmentTests:
                  default: []
                  description: >-
                    Existing visible Test template IDs. Search Private and
                    Public Test Libraries before authoring a new Test.
                  items:
                    maxLength: 128
                    minLength: 1
                    pattern: ^[A-Za-z0-9_-]+$
                    type: string
                  maxItems: 40
                  type: array
                exitIntelligence:
                  default: []
                  description: Existing Exit Intelligence template IDs.
                  items:
                    maxLength: 128
                    minLength: 1
                    pattern: ^[A-Za-z0-9_-]+$
                    type: string
                  maxItems: 40
                  type: array
                preScreening:
                  default: []
                  description: Existing pre-screening template IDs.
                  items:
                    maxLength: 128
                    minLength: 1
                    pattern: ^[A-Za-z0-9_-]+$
                    type: string
                  maxItems: 40
                  type: array
                references:
                  default: []
                  description: Existing reference template IDs.
                  items:
                    maxLength: 128
                    minLength: 1
                    pattern: ^[A-Za-z0-9_-]+$
                    type: string
                  maxItems: 40
                  type: array
                teamPulse:
                  default: []
                  description: Existing Team Pulse template IDs.
                  items:
                    maxLength: 128
                    minLength: 1
                    pattern: ^[A-Za-z0-9_-]+$
                    type: string
                  maxItems: 40
                  type: array
              type: object
            title:
              description: Human-readable Flow title.
              maxLength: 80
              minLength: 1
              type: string
            type:
              description: Flow type. The allowed sections depend on this value.
              enum:
                - HIRING_REVIEW
                - EXIT_INTELLIGENCE
                - PERFORMANCE
              type: string
          required:
            - title
            - type
          type: object
        expectedRevision:
          anyOf:
            - type: string
              format: date-time
            - type: string
              format: date-time
        flowId:
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
      required:
        - flowId
        - expectedRevision
        - design
      type: object
    FlowsStatusSetInput:
      additionalProperties: false
      properties:
        expectedStatus:
          description: >-
            Current status read from flows.get or flows.blueprint.get; used for
            concurrency safety.
          enum:
            - ACTIVE
            - DRAFT
            - ARCHIVED
          type: string
        flowId:
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
        status:
          description: >-
            Publish/restore as ACTIVE or archive as ARCHIVED. Returning a Flow
            to DRAFT is unsupported.
          enum:
            - ACTIVE
            - ARCHIVED
          type: string
      required:
        - flowId
        - expectedStatus
        - status
      type: object
    FlowsDeleteInput:
      additionalProperties: false
      properties:
        expectedStatus:
          description: >-
            Current status read from flows.get or flows.blueprint.get; used to
            prevent a stale destructive action.
          enum:
            - ACTIVE
            - DRAFT
            - ARCHIVED
          type: string
        flowId:
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
      required:
        - flowId
        - expectedStatus
      type: object
    ChecksStatusSetInput:
      additionalProperties: false
      properties:
        applicantId:
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
        expectedStatus:
          description: >-
            Current status read from checks.get or checks.list; used for
            concurrency safety.
          enum:
            - new
            - archived
            - inProgress
            - shortlisted
            - rejected
            - selected
          type: string
        status:
          description: >-
            New Check status. selected is intentionally excluded because
            selection creates an Employee.
          enum:
            - new
            - archived
            - inProgress
            - shortlisted
            - rejected
          type: string
      required:
        - applicantId
        - expectedStatus
        - status
      type: object
    ChecksDeleteInput:
      additionalProperties: false
      properties:
        applicantId:
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
        expectedStatus:
          description: >-
            Current status read from checks.get or checks.list; used to prevent
            a stale destructive action.
          enum:
            - new
            - archived
            - inProgress
            - shortlisted
            - rejected
            - selected
          type: string
      required:
        - applicantId
        - expectedStatus
      type: object
    EmployeesStatusSetInput:
      additionalProperties: false
      properties:
        employeeId:
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
        exitIntelligenceFlowId:
          description: >-
            Optional active Exit Intelligence Flow to launch after marking the
            Employee left.
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
        expectedStatus:
          description: >-
            Current status read from employees.get or employees.list; used for
            concurrency safety.
          enum:
            - active
            - left
          type: string
        positionEndAt:
          description: >-
            One leaving date to apply to every active position. Do not combine
            with positionEndDates.
          pattern: ^\d{4}-\d{2}-\d{2}$
          type: string
        positionEndDates:
          default: []
          description: >-
            When marking left, provide an end date for every active position
            returned by employees.get.
          items:
            additionalProperties: false
            properties:
              endAt:
                pattern: ^\d{4}-\d{2}-\d{2}$
                type: string
              positionId:
                maxLength: 128
                minLength: 1
                pattern: ^[A-Za-z0-9_-]+$
                type: string
            required:
              - positionId
              - endAt
            type: object
          maxItems: 50
          type: array
        status:
          enum:
            - active
            - left
          type: string
      required:
        - employeeId
        - expectedStatus
        - status
      type: object
    EmployeesDeleteInput:
      additionalProperties: false
      properties:
        employeeId:
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
        expectedStatus:
          description: >-
            Current status read from employees.get or employees.list; used to
            prevent a stale destructive action.
          enum:
            - active
            - left
          type: string
      required:
        - employeeId
        - expectedStatus
      type: object
    TalentsStatusSetInput:
      additionalProperties: false
      properties:
        expectedStatus:
          description: >-
            Current status read from talents.get or talents.list; used for
            concurrency safety.
          enum:
            - new
            - archived
            - shortlisted
          type: string
        status:
          enum:
            - new
            - archived
            - shortlisted
          type: string
        talentId:
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
      required:
        - talentId
        - expectedStatus
        - status
      type: object
    AutopilotsCreateInput:
      additionalProperties: false
      properties:
        flowId:
          description: Exact active Hiring Review Flow ID.
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
        linkCount:
          default: 1
          description: Number of independent reusable public access links to generate.
          maximum: 20
          minimum: 1
          type: integer
      required:
        - flowId
      type: object
    AutopilotsLinksGenerateInput:
      additionalProperties: false
      properties:
        autopilotGroupId:
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
        expectedStatus:
          const: ACTIVE
          default: ACTIVE
          description: Links can be added only while the Autopilot is ACTIVE.
          type: string
        linkCount:
          default: 1
          description: Number of independent reusable public access links to generate.
          maximum: 20
          minimum: 1
          type: integer
      required:
        - autopilotGroupId
      type: object
    AutopilotsStatusSetInput:
      additionalProperties: false
      properties:
        autopilotGroupId:
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
        expectedStatus:
          enum:
            - ACTIVE
            - ARCHIVED
          type: string
        status:
          enum:
            - ACTIVE
            - ARCHIVED
          type: string
      required:
        - autopilotGroupId
        - expectedStatus
        - status
      type: object
    AutopilotsDeleteInput:
      additionalProperties: false
      properties:
        autopilotGroupId:
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
        expectedStatus:
          description: >-
            Current status read from autopilots.get or autopilots.list; used to
            prevent a stale destructive action.
          enum:
            - ACTIVE
            - ARCHIVED
          type: string
      required:
        - autopilotGroupId
        - expectedStatus
      type: object
    ReferencesRequestInput:
      additionalProperties: false
      properties:
        applicantId:
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
        referee:
          additionalProperties: false
          properties:
            email:
              format: email
              maxLength: 254
              type: string
            name:
              maxLength: 180
              minLength: 1
              type: string
            phone:
              pattern: ^[1-9][0-9]{6,14}$
              type: string
            phoneMessageConsent:
              default: false
              type: boolean
          required:
            - name
            - email
          type: object
        templateId:
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
      required:
        - applicantId
        - templateId
        - referee
      type: object
    ChecksBulkCreateInput:
      additionalProperties: false
      properties:
        applicants:
          items:
            additionalProperties: false
            properties:
              email:
                format: email
                maxLength: 254
                type: string
              fullName:
                maxLength: 180
                minLength: 1
                type: string
              sourceRowNumber:
                description: >-
                  Original one-based spreadsheet row number for preview and
                  error reporting.
                maximum: 1000000
                minimum: 1
                type: integer
            required:
              - fullName
              - email
            type: object
          maxItems: 250
          minItems: 1
          type: array
        flowId:
          description: Exact authorized Hiring Review Flow ID.
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
      required:
        - flowId
        - applicants
      type: object
    EmployeesBulkImportInput:
      additionalProperties: false
      properties:
        employees:
          items:
            additionalProperties: false
            properties:
              companyId:
                maxLength: 128
                minLength: 1
                pattern: ^[A-Za-z0-9_-]+$
                type: string
              companyName:
                maxLength: 180
                minLength: 1
                type: string
              compensation:
                additionalProperties: false
                properties:
                  currency:
                    maxLength: 3
                    minLength: 3
                    type: string
                  effectiveAt:
                    pattern: ^\d{4}-\d{2}-\d{2}$
                    type: string
                  grossAmount:
                    minimum: 0
                    type: number
                  netAmount:
                    minimum: 0
                    type: number
                  payPeriod:
                    enum:
                      - annual
                      - monthly
                      - weekly
                      - daily
                      - hourly
                    type: string
                type: object
              email:
                format: email
                maxLength: 254
                type: string
              employeeId:
                description: Exact existing Employee ID. Required only in update mode.
                maxLength: 128
                minLength: 1
                pattern: ^[A-Za-z0-9_-]+$
                type: string
              endAt:
                pattern: ^\d{4}-\d{2}-\d{2}$
                type: string
              fullName:
                maxLength: 180
                minLength: 1
                type: string
              managerColumnMapped:
                description: >-
                  True only when the uploaded file explicitly mapped a manager
                  column; false preserves an existing matching position manager.
                type: boolean
              managerName:
                description: >-
                  Manager full name from the mapped column. Jointl resolves only
                  an unambiguous existing Employee.
                maxLength: 180
                minLength: 1
                type: string
              positionId:
                description: >-
                  Exact work-record ID on employeeId. Required only in update
                  mode.
                maxLength: 128
                minLength: 1
                pattern: ^[A-Za-z0-9_-]+$
                type: string
              positionTitle:
                maxLength: 180
                minLength: 1
                type: string
              sourceRowNumber:
                description: >-
                  Original one-based spreadsheet row number for preview and
                  error reporting.
                maximum: 1000000
                minimum: 1
                type: integer
              startAt:
                pattern: ^\d{4}-\d{2}-\d{2}$
                type: string
              tagNames:
                description: >-
                  Tag names parsed from the mapped column. Missing names are
                  created only on confirmation.
                items:
                  maxLength: 100
                  minLength: 1
                  type: string
                maxItems: 50
                type: array
              tagsColumnMapped:
                description: >-
                  True only when the uploaded file explicitly mapped a tags
                  column; false preserves existing tags on a matching position.
                type: boolean
            required:
              - fullName
              - companyId
              - positionTitle
              - startAt
            type: object
          maxItems: 500
          minItems: 1
          type: array
        mode:
          default: upsert
          description: >-
            upsert applies Jointl Employee matching; create rejects existing
            matches; update requires exact employeeId and positionId values.
          enum:
            - upsert
            - create
            - update
          type: string
      required:
        - employees
      type: object
    ChecksAddNoteInput:
      additionalProperties: false
      properties:
        applicantId:
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
        text:
          description: Exact note text the user asked to save.
          maxLength: 4000
          minLength: 1
          type: string
        visibleToTeam:
          default: false
          description: >-
            False keeps the note private to its author; true shares it with
            authorized workspace members.
          type: boolean
      required:
        - applicantId
        - text
      type: object
    EmployeesAddNoteInput:
      additionalProperties: false
      properties:
        employeeId:
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
        text:
          description: Exact note text the user asked to save.
          maxLength: 4000
          minLength: 1
          type: string
        visibleToTeam:
          default: false
          description: >-
            False keeps the note private to its author; true shares it with
            authorized workspace members.
          type: boolean
      required:
        - employeeId
        - text
      type: object
    TalentsAddNoteInput:
      additionalProperties: false
      properties:
        talentId:
          maxLength: 128
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type: string
        text:
          description: Exact note text the user asked to save.
          maxLength: 4000
          minLength: 1
          type: string
        visibleToTeam:
          default: false
          description: >-
            False keeps the note private to its author; true shares it with
            authorized workspace members.
          type: boolean
      required:
        - talentId
        - text
      type: object
  headers:
    RequestId:
      description: Request correlation identifier.
      schema:
        type: string
    RetryAfter:
      description: Seconds before retrying.
      schema:
        type: integer
        minimum: 1
  responses:
    BadRequest:
      description: Invalid request.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            error:
              code: invalid-external-operation-input
              message: The operation input is invalid.
            requestId: request_example_400
    Unauthorized:
      description: Authentication required.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            error:
              code: not-authenticated
              message: Authentication is required.
            requestId: request_example_401
    Forbidden:
      description: Insufficient scope or permission.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            error:
              code: not-authorized
              message: You are not allowed to perform this action.
            requestId: request_example_403
    NotFound:
      description: The operation or visible record was not found.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            error:
              code: not-found
              message: The requested record was not found.
            requestId: request_example_404
    Conflict:
      description: State, replay, or idempotency conflict.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            error:
              code: external-action-conflict
              message: The action conflicts with current state.
            requestId: request_example_409
    TooLarge:
      description: Request exceeds one MiB.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            error:
              code: request-too-large
              message: The request body is too large.
            requestId: request_example_413
    RateLimited:
      description: Rate limit exceeded.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            error:
              code: too-many-requests
              message: Too many requests.
            requestId: request_example_429
    ServerError:
      description: Server error.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            error:
              code: internal-error
              message: The request could not be completed.
            requestId: request_example_500
    Unavailable:
      description: Temporarily unavailable or action outcome unknown.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            error:
              code: temporarily-unavailable
              message: The service is temporarily unavailable.
            requestId: request_example_503
  securitySchemes:
    JointlOAuth:
      type: oauth2
      description: OAuth access token issued for the REST resource.
      flows:
        authorizationCode:
          authorizationUrl: https://api.join.tl/oauth/authorize
          tokenUrl: https://api.join.tl/oauth/token
          refreshUrl: https://api.join.tl/oauth/token
          scopes:
            openid: Authenticate the Jointl member.
            email: Read the authorized member email claim.
            workspace.read: Read authorized Jointl workspace data.
            workspace.write: Prepare and confirm authorized Jointl changes.
            offline_access: Receive a rotating refresh token.
      x-jointl-resource: https://api.join.tl/api/v1
      x-jointl-pkce-required: S256
    JointlApiKey:
      type: http
      scheme: bearer
      bearerFormat: Jointl personal or service-account API key
      description: >-
        Server-side personal or service credential. Never embed in browser or
        hosted AI clients.

````