Chili Piper Distribution API

The distribution API from Chili Piper — 3 operation(s) for distribution.

OpenAPI Specification

chili-piper-distribution-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Chili Piper Distribution API
  version: '1.0'
  description: 'Operations tagged distribution across 9 of this provider''s published API definitions: chili-piper-concierge-router-builder-openapi.yaml, chili-piper-concierge-router-configuration-openapi.yaml, chili-piper-distribution-analysis-openapi.yaml, chili-piper-distro-debugger-openapi.yaml, chili-piper-distro-router-configuration-openapi.yaml, chili-piper-handoff-router-configuration-openapi.yaml, chili-piper-routing-audit-openapi.yaml, chili-piper-scheduling-link-management-openapi.yaml, chili-piper-user-offboarding-openapi.yaml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://fire.chilipiper.com/api/fire-edge
  description: Production
security:
- apiKeyAuth: []
tags:
- name: distribution
paths:
  /v1/org/distribution:
    servers:
    - url: https://fire.chilipiper.com/api/fire-edge
      description: Production
    post:
      tags:
      - distribution
      summary: Create distribution
      description: "[operation: distribution-create]\n\n\n\nMUTATING\n\n\n\nCreates and immediately publishes a distribution — a reusable assignment pool that routing rules and round-robin scheduling links reference. `name` is required: a nameless distribution is a legacy (v1) one that never appears in distribution-list and cannot be used until named. `assignmentTypeConfig` fixes what it distributes (records, meetings, or conversations). Tune weights/caps afterwards with distribution-update-v3 or distribution-adjust-v3.\n\n- assignmentTypeConfig (req): discriminated by `type`:\n\n    {type: \"Record\", handling: {type: \"WorkingHours\"}|{type: \"Strict\"}}\n    {type: \"Meeting\", handling: {type: \"Flexible\", reassignmentType: \"SameUser\"|\"AnyTeamMember\", allowPickingAssignee: bool}\n                              |{type: \"Strict\", hideAssignee: bool},\n                   limits: {type: \"MeetingLimitUnset\"}\n                           |{type: \"MeetingLimitSet\", userCaps: [{userId, limit}], resetPeriodicity: {type: \"HourlyRolling\"}|{type: \"Daily\", timeZone}|{type: \"Weekly\", timeZone, dayOfWeek(1-7)}|{type: \"Monthly\", timeZone}}}\n    {type: \"Conversation\"}\n\n- weights (opt): [{userId, weight}]; manualCalibration (opt): [{userId, count}]; capping (opt): per-user caps\n\n→\n\n    {distributionId}\n\nsee: team-list (find teamId), distribution-list (verify after)"
      operationId: distributionCreate
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateDistributionRequest'
        required: true
      responses:
        '200':
          description: ''
          headers:
            Cache-Control:
              required: true
              schema:
                type: string
            X-Robots-Tag:
              required: true
              schema:
                type: string
            Pragma:
              required: true
              schema:
                type: string
            Expires:
              required: true
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateDistributionResponse'
        '400':
          description: 'Invalid value for: body'
          content:
            text/plain:
              schema:
                type: string
        default:
          description: ''
          headers:
            Location:
              required: false
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                required:
                - errorCode
                - errorMessage
                properties:
                  errorCode:
                    type: string
                  errorMessage:
                    type: string
                  arguments:
                    $ref: '#/components/schemas/Map_String'
      security:
      - apiKeyAuth: []
      X-Chili-Required-Permissions:
      - distribution.modify
  /v2/org/distribution/list:
    servers:
    - url: https://fire.chilipiper.com/api/fire-edge
      description: Production
    put:
      tags:
      - distribution
      summary: List all distributions (PUT)
      description: "[operation: distribution-list-put]\n\n\n\nREAD-ONLY\n\n\n\nBrowses published distributions in the org — the preferred, non-deprecated list. Filters go in the request body (avoiding query-string length limits): workspaceIds, name (substring match), and assignmentType (\"Record\" | \"Meeting\" | \"Conversation\"). Paginated (pageSize default 200).\n\n→\n\n    {results: [{distributionId, name, teamId, assignees, assignmentTypeConfig, capping}]}\n\nsee: distribution-list (GET equivalent)"
      operationId: distributionListPut
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ListRequest'
        required: true
      responses:
        '200':
          description: ''
          headers:
            Cache-Control:
              required: true
              schema:
                type: string
            X-Robots-Tag:
              required: true
              schema:
                type: string
            Pragma:
              required: true
              schema:
                type: string
            Expires:
              required: true
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedResult_Distribution'
        '400':
          description: 'Invalid value for: body'
          content:
            text/plain:
              schema:
                type: string
        default:
          description: ''
          headers:
            Location:
              required: false
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                required:
                - errorCode
                - errorMessage
                properties:
                  errorCode:
                    type: string
                  errorMessage:
                    type: string
                  arguments:
                    $ref: '#/components/schemas/Map_String'
      security:
      - apiKeyAuth: []
      X-Chili-Required-Permissions:
      - distribution.read
  /v1/org/distribution/workspace-settings:
    servers:
    - url: https://fire.chilipiper.com/api/fire-edge
      description: Production
    get:
      tags:
      - distribution
      summary: Get workspace distribution settings
      description: "[operation: distribution-workspace-settings-get]\n\n\n\nREAD-ONLY\n\n\n\nRead a workspace's round-robin distribution (fairness/leveling) settings.\n\n\n\nReturns the workspace-level round-robin settings that shape the fairness/leveling equation applied on top of each distribution's per-user weights and calibration. These knobs are shared by every distribution in the workspace, so an analysis skill should read them before reasoning about how assignments are balanced (otherwise it may misassume the leveling rules). Reflects the published (live) settings only. Pass the target `workspaceId` (from workspace-list).\n\n→\n\n    {calibrateVacation, creditBackCancelled, creditBackNoShow, orderIfEqualState (\"Random\"|\"AsConfigured\"), resetPeriodicity, vacationBuffer: {daysBeforeStart, daysBeforeEnd, recognitionEnabled, freshness (\"RealTime\"|\"Cached\")}}\n\n- resetPeriodicity: discriminated by `type`:\n\n    {type: \"Monthly\", timeZone}\n    {type: \"Quarterly\", firstMonth (1-3), timeZone}\n    {type: \"Yearly\", monthOfYear (1-12), timeZone}\n    {type: \"Never\"}\n\n  Note: creditBackCancelled / creditBackNoShow move a user back up the queue when a meeting is cancelled / no-showed; calibrateVacation excuses vacationing users from the fairness penalty.\n\nsee: distribution-workspace-settings-update (edit these settings), workspace-list (resolve workspaceId), distribution-list-put (per-distribution weights/calibration)"
      operationId: distributionWorkspaceSettingsGet
      parameters:
      - name: workspaceId
        in: query
        description: Id of the workspace
        required: true
        schema:
          type: string
          pattern: '[^\s\\/]+'
      responses:
        '200':
          description: ''
          headers:
            Cache-Control:
              required: true
              schema:
                type: string
            X-Robots-Tag:
              required: true
              schema:
                type: string
            Pragma:
              required: true
              schema:
                type: string
            Expires:
              required: true
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkspaceDistributionSettings'
        '400':
          description: 'Invalid value for: query parameter workspaceId'
          content:
            text/plain:
              schema:
                type: string
        default:
          description: ''
          headers:
            Location:
              required: false
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                required:
                - errorCode
                - errorMessage
                properties:
                  errorCode:
                    type: string
                  errorMessage:
                    type: string
                  arguments:
                    $ref: '#/components/schemas/Map_String'
      security:
      - apiKeyAuth: []
      X-Chili-Required-Permissions:
      - distribution.read
components:
  schemas:
    DistributionAssignmentTypeConfig_Conversation:
      title: DistributionAssignmentTypeConfig_Conversation
      type: object
      required:
      - type
      properties:
        type:
          type: string
          const: Conversation
    TeamRef:
      title: TeamRef
      type: object
      required:
      - id
      - revision
      properties:
        id:
          $ref: '#/components/schemas/TeamId'
        revision:
          type: integer
          format: int32
    UserWeight:
      title: UserWeight
      type: object
      required:
      - userId
      - weight
      properties:
        userId:
          $ref: '#/components/schemas/UserId'
        weight:
          type: integer
          format: int32
          minimum: 0
          maximum: 10000
    ListRequest:
      title: ListRequest
      type: object
      properties:
        workspaceIds:
          type: array
          minItems: 1
          items:
            type: string
            pattern: '[^\s\\/]+'
        page:
          type: integer
          format: int64
          minimum: 0
        pageSize:
          type: integer
          format: int64
          exclusiveMinimum: 0
        name:
          type: string
        assignmentType:
          $ref: '#/components/schemas/DistributionAssignmentType'
    WorkspaceResetPeriodicity_Monthly:
      title: WorkspaceResetPeriodicity_Monthly
      description: Counters reset at the start of every month in the given time zone.
      type: object
      required:
      - timeZone
      - type
      properties:
        timeZone:
          description: IANA timezone identifier (e.g. America/New_York, Europe/London, Asia/Tokyo)
          examples:
          - America/New_York
          type: string
        type:
          type: string
          const: Monthly
    ReassignmentType:
      title: ReassignmentType
      type: string
      enum:
      - SameUser
      - AnyTeamMember
    DistributionId:
      title: DistributionId
      examples:
      - 7f8a1b2c-3d4e-4f5a-8b9c-0d1e2f3a4b5c
      type: string
      pattern: '[^\s\\/]+'
    RecordHandling:
      title: RecordHandling
      oneOf:
      - $ref: '#/components/schemas/RecordHandling_Strict'
      - $ref: '#/components/schemas/RecordHandling_WorkingHours'
      discriminator:
        propertyName: type
        mapping:
          Strict: '#/components/schemas/RecordHandling_Strict'
          WorkingHours: '#/components/schemas/RecordHandling_WorkingHours'
    UserLimit:
      title: UserLimit
      type: object
      required:
      - userId
      - limit
      properties:
        userId:
          $ref: '#/components/schemas/UserId'
        limit:
          type: integer
          format: int32
          minimum: 0
    MeetingLimit_MeetingLimitSet:
      title: MeetingLimit_MeetingLimitSet
      type: object
      required:
      - resetPeriodicity
      - type
      properties:
        userCaps:
          type: array
          uniqueItems: true
          items:
            $ref: '#/components/schemas/UserLimit'
        resetPeriodicity:
          $ref: '#/components/schemas/MeetingLimitReset'
        type:
          type: string
          const: MeetingLimitSet
    DistributionUserState:
      title: DistributionUserState
      oneOf:
      - $ref: '#/components/schemas/DistributionUserState_Active'
      - $ref: '#/components/schemas/DistributionUserState_Capped'
      - $ref: '#/components/schemas/DistributionUserState_Disabled'
      - $ref: '#/components/schemas/DistributionUserState_NoLicense'
      - $ref: '#/components/schemas/DistributionUserState_Removed'
      discriminator:
        propertyName: type
        mapping:
          Active: '#/components/schemas/DistributionUserState_Active'
          Capped: '#/components/schemas/DistributionUserState_Capped'
          Disabled: '#/components/schemas/DistributionUserState_Disabled'
          NoLicense: '#/components/schemas/DistributionUserState_NoLicense'
          Removed: '#/components/schemas/DistributionUserState_Removed'
    WorkspaceId:
      title: WorkspaceId
      examples:
      - b7263a5d-89cb-4f50-a532-ea4aff74688e
      type: string
      pattern: '[^\s\\/]+'
    DistributedAssignmentLimit:
      title: DistributedAssignmentLimit
      type: object
      required:
      - resetPeriodicity
      properties:
        userCaps:
          type: array
          uniqueItems: true
          items:
            $ref: '#/components/schemas/UserLimit'
        resetPeriodicity:
          $ref: '#/components/schemas/DistributedAssignmentLimitReset'
    RecordHandling_Strict:
      title: RecordHandling_Strict
      type: object
      required:
      - type
      properties:
        type:
          type: string
          const: Strict
    DistributionState:
      title: DistributionState
      type: object
      properties:
        userStates:
          type: array
          items:
            $ref: '#/components/schemas/DistributionUserState'
        lastReset:
          type: string
          format: date-time
    WorkspaceResetPeriodicity_Quarterly:
      title: WorkspaceResetPeriodicity_Quarterly
      description: Counters reset every quarter; `firstMonth` (1-3) is the first month of the quarter.
      type: object
      required:
      - firstMonth
      - timeZone
      - type
      properties:
        firstMonth:
          type: integer
          format: int32
        timeZone:
          description: IANA timezone identifier (e.g. America/New_York, Europe/London, Asia/Tokyo)
          examples:
          - America/New_York
          type: string
        type:
          type: string
          const: Quarterly
    MeetingHandling:
      title: MeetingHandling
      oneOf:
      - $ref: '#/components/schemas/MeetingHandling_Flexible'
      - $ref: '#/components/schemas/MeetingHandling_Strict'
      discriminator:
        propertyName: type
        mapping:
          Flexible: '#/components/schemas/MeetingHandling_Flexible'
          Strict: '#/components/schemas/MeetingHandling_Strict'
    MeetingLimitReset_Monthly:
      title: MeetingLimitReset_Monthly
      type: object
      required:
      - every
      - startsOn
      - resetDay
      - timezone
      - type
      properties:
        every:
          type: integer
          format: int32
          exclusiveMinimum: 0
        startsOn:
          type: string
          format: date
        resetDay:
          type: integer
          format: int32
          minimum: 1
          maximum: 28
        timezone:
          description: IANA timezone identifier (e.g. America/New_York, Europe/London, Asia/Tokyo)
          examples:
          - America/New_York
          type: string
        type:
          type: string
          const: Monthly
    DistributionUserState_Removed:
      title: DistributionUserState_Removed
      description: User was removed from the team entirely — historical record, no assignments will go to this user.
      type: object
      required:
      - userId
      - total
      - removedAt
      - statistics
      - type
      properties:
        userId:
          $ref: '#/components/schemas/UserId'
        total:
          type: integer
          format: int32
        removedAt:
          type: string
          format: date-time
        statistics:
          $ref: '#/components/schemas/UserStatistics'
        type:
          type: string
          const: Removed
    MeetingHandling_Strict:
      title: MeetingHandling_Strict
      type: object
      required:
      - hideAssignee
      - type
      properties:
        hideAssignee:
          type: boolean
        type:
          type: string
          const: Strict
    MeetingLimitReset:
      title: MeetingLimitReset
      oneOf:
      - $ref: '#/components/schemas/MeetingLimitReset_Daily'
      - $ref: '#/components/schemas/MeetingLimitReset_Monthly'
      - $ref: '#/components/schemas/MeetingLimitReset_Weekly'
      discriminator:
        propertyName: type
        mapping:
          Daily: '#/components/schemas/MeetingLimitReset_Daily'
          Monthly: '#/components/schemas/MeetingLimitReset_Monthly'
          Weekly: '#/components/schemas/MeetingLimitReset_Weekly'
    DistributionUserState_NoLicense:
      title: DistributionUserState_NoLicense
      description: User is still on the team but has lost their license, so they cannot receive assignments. Re-licensing restores them.
      type: object
      required:
      - userId
      - total
      - licenseRemovedAt
      - statistics
      - type
      properties:
        userId:
          $ref: '#/components/schemas/UserId'
        total:
          type: integer
          format: int32
        licenseRemovedAt:
          type: string
          format: date-time
        statistics:
          $ref: '#/components/schemas/UserStatistics'
        type:
          type: string
          const: NoLicense
    WorkspaceDistributionSettings:
      title: WorkspaceDistributionSettings
      type: object
      required:
      - calibrateVacation
      - creditBackCancelled
      - creditBackNoShow
      - orderIfEqualState
      - resetPeriodicity
      - vacationBuffer
      properties:
        calibrateVacation:
          description: Whether users on vacation are calibrated out of the fairness equation so they are not penalized for time off.
          type: boolean
        creditBackCancelled:
          description: Whether a cancelled meeting credits the assignment back to the user (they move back up the queue as if unassigned).
          type: boolean
        creditBackNoShow:
          description: Whether a no-show credits the assignment back to the user, like `creditBackCancelled`.
          type: boolean
        orderIfEqualState:
          $ref: '#/components/schemas/OrderIfEqualState'
        resetPeriodicity:
          $ref: '#/components/schemas/WorkspaceResetPeriodicity'
          description: When the per-period assignment counters reset.
        vacationBuffer:
          $ref: '#/components/schemas/VacationBuffer'
          description: Vacation-awareness configuration.
    UserCalibration:
      title: UserCalibration
      type: object
      required:
      - userId
      - calibration
      properties:
        userId:
          $ref: '#/components/schemas/UserId'
        calibration:
          type: integer
          format: int32
    ConfigurationDTO:
      title: ConfigurationDTO
      type: object
      required:
      - distributionId
      - workspaceId
      - assignmentTypeConfig
      - teamRef
      - metadata
      properties:
        distributionId:
          $ref: '#/components/schemas/DistributionId'
        workspaceId:
          $ref: '#/components/schemas/WorkspaceId'
        assignmentTypeConfig:
          $ref: '#/components/schemas/DistributionAssignmentTypeConfig'
        teamRef:
          $ref: '#/components/schemas/TeamRef'
        weights:
          type: array
          items:
            $ref: '#/components/schemas/UserWeight'
        name:
          type: string
        manualCalibration:
          type: array
          items:
            $ref: '#/components/schemas/UserCalibration'
        capping:
          $ref: '#/components/schemas/DistributedAssignmentLimit'
        metadata:
          $ref: '#/components/schemas/SimpleMetadata'
    DistributionAssignmentTypeConfig:
      title: DistributionAssignmentTypeConfig
      oneOf:
      - $ref: '#/components/schemas/DistributionAssignmentTypeConfig_Conversation'
      - $ref: '#/components/schemas/DistributionAssignmentTypeConfig_Meeting'
      - $ref: '#/components/schemas/DistributionAssignmentTypeConfig_Record'
      discriminator:
        propertyName: type
        mapping:
          Conversation: '#/components/schemas/DistributionAssignmentTypeConfig_Conversation'
          Meeting: '#/components/schemas/DistributionAssignmentTypeConfig_Meeting'
          Record: '#/components/schemas/DistributionAssignmentTypeConfig_Record'
    Prioritization:
      title: Prioritization
      type: object
      properties:
        queue:
          description: Ordered list of active user IDs in the order they will receive the next assignments. This is the authoritative assignment-ordering surface; level fields are informational.
          type: array
          items:
            type: string
            pattern: '[^\s\\/]+'
        onVacation:
          description: Users currently on vacation and skipped by the queue until they return.
          type: array
          uniqueItems: true
          items:
            type: string
            pattern: '[^\s\\/]+'
        reachedCap:
          description: Users who have reached their assignment cap for the current period and are skipped until the cap resets.
          type: array
          uniqueItems: true
          items:
            type: string
            pattern: '[^\s\\/]+'
    CreateDistributionRequest:
      title: CreateDistributionRequest
      type: object
      required:
      - teamId
      - workspaceId
      - assignmentTypeConfig
      - name
      properties:
        teamId:
          $ref: '#/components/schemas/TeamId'
        workspaceId:
          $ref: '#/components/schemas/WorkspaceId'
        assignmentTypeConfig:
          $ref: '#/components/schemas/DistributionAssignmentTypeConfig'
        weights:
          type: array
          items:
            $ref: '#/components/schemas/UserWeight'
        manualCalibration:
          type: array
          items:
            $ref: '#/components/schemas/UserCalibration'
        capping:
          $ref: '#/components/schemas/DistributedAssignmentLimit'
        name:
          type: string
    DistributionUserState_Capped:
      title: DistributionUserState_Capped
      description: User has reached their assignment cap for the current period and is temporarily excluded until the cap resets.
      type: object
      required:
      - userId
      - total
      - statistics
      - type
      properties:
        userId:
          $ref: '#/components/schemas/UserId'
        total:
          type: integer
          format: int32
        statistics:
          $ref: '#/components/schemas/UserStatistics'
        type:
          type: string
          const: Capped
    WorkspaceResetPeriodicity:
      title: WorkspaceResetPeriodicity
      oneOf:
      - $ref: '#/components/schemas/WorkspaceResetPeriodicity_Monthly'
      - $ref: '#/components/schemas/WorkspaceResetPeriodicity_Never'
      - $ref: '#/components/schemas/WorkspaceResetPeriodicity_Quarterly'
      - $ref: '#/components/schemas/WorkspaceResetPeriodicity_Yearly'
      discriminator:
        propertyName: type
        mapping:
          Monthly: '#/components/schemas/WorkspaceResetPeriodicity_Monthly'
          Never: '#/components/schemas/WorkspaceResetPeriodicity_Never'
          Quarterly: '#/components/schemas/WorkspaceResetPeriodicity_Quarterly'
          Yearly: '#/components/schemas/WorkspaceResetPeriodicity_Yearly'
    CreateDistributionResponse:
      title: CreateDistributionResponse
      type: object
      required:
      - distributionId
      properties:
        distributionId:
          $ref: '#/components/schemas/DistributionId'
    DistributedAssignmentLimitReset:
      title: DistributedAssignmentLimitReset
      oneOf:
      - $ref: '#/components/schemas/DistributedAssignmentLimitReset_Daily'
      - $ref: '#/components/schemas/DistributedAssignmentLimitReset_HourlyRolling'
      - $ref: '#/components/schemas/DistributedAssignmentLimitReset_Monthly'
      - $ref: '#/components/schemas/DistributedAssignmentLimitReset_Weekly'
      discriminator:
        propertyName: type
        mapping:
          Daily: '#/components/schemas/DistributedAssignmentLimitReset_Daily'
          HourlyRolling: '#/components/schemas/DistributedAssignmentLimitReset_HourlyRolling'
          Monthly: '#/components/schemas/DistributedAssignmentLimitReset_Monthly'
          Weekly: '#/components/schemas/DistributedAssignmentLimitReset_Weekly'
    WorkspaceResetPeriodicity_Never:
      title: WorkspaceResetPeriodicity_Never
      description: Counters never reset automatically.
      type: object
      required:
      - type
      properties:
        type:
          type: string
          const: Never
    VacationFreshness:
      title: VacationFreshness
      description: Whether vacation state is read live (RealTime) or from cache (Cached).
      type: string
      enum:
      - Cached
      - RealTime
    MeetingLimitReset_Weekly:
      title: MeetingLimitReset_Weekly
      type: object
      required:
      - every
      - startsOn
      - resetDayOfWeek
      - timezone
      - type
      properties:
        every:
          type: integer
          format: int32
          exclusiveMinimum: 0
        startsOn:
          type: string
          format: date
        resetDayOfWeek:
          examples:
          - MONDAY
          type: string
          enum:
          - MONDAY
          - TUESDAY
          - WEDNESDAY
          - THURSDAY
          - FRIDAY
          - SATURDAY
          - SUNDAY
        timezone:
          description: IANA timezone identifier (e.g. America/New_York, Europe/London, Asia/Tokyo)
          examples:
          - America/New_York
          type: string
        type:
          type: string
          const: Weekly
    DistributionAssignmentType:
      title: DistributionAssignmentType
      type: string
      enum:
      - Record
      - Meeting
      - Conversation
    WorkspaceResetPeriodicity_Yearly:
      title: WorkspaceResetPeriodicity_Yearly
      description: Counters reset once a year in `monthOfYear` (1-12) in the given time zone.
      type: object
      required:
      - monthOfYear
      - timeZone
      - type
      properties:
        monthOfYear:
          type: integer
          format: int32
        timeZone:
          description: IANA timezone identifier (e.g. America/New_York, Europe/London, Asia/Tokyo)
          examples:
          - America/New_York
          type: string
        type:
          type: string
          const: Yearly
    DistributionAssignmentTypeConfig_Record:
      title: DistributionAssignmentTypeConfig_Record
      type: object
      required:
      - handling
      - type
      properties:
        handling:
          $ref: '#/components/schemas/RecordHandling'
        type:
          type: string
          const: Record
    DistributedAssignmentLimitReset_Weekly:
      title: DistributedAssignmentLimitReset_Weekly
      type: object
      required:
      - timeZone
      - dayOfWeek
      - type
      properties:
        timeZone:
          description: IANA timezone identifier (e.g. America/New_York, Europe/London, Asia/Tokyo)
          examples:
          - America/New_York
          type: string
        dayOfWeek:
          type: integer
          format: int32
          minimum: 1
          maximum: 7
        type:
          type: string
          const: Weekly
    MeetingLimitReset_Daily:
      title: MeetingLimitReset_Daily
      type: object
      required:
      - every
      - startsOn
      - resetLocalTime
      - timezone
      - type
      properties:
        every:
          type: integer
          format: int32
          exclusiveMinimum: 0
        startsOn:
          type: string
          format: date
        resetLocalTime:
          type: string
        timezone:
          description: IANA timezone identifier (e.g. America/New_York, Europe/London, Asia/Tokyo)
          examples:
          - America/New_York
          type: string
        type:
          type: string
          const: Daily
    MeetingLimit:
      title: MeetingLimit
      oneOf:
      - $ref: '#/components/schemas/MeetingLimit_MeetingLimitSet'
      - $ref: '#/components/schemas/MeetingLimit_MeetingLimitUnset'
      discriminator:
        propertyName: type
        mapping:
          MeetingLimitSet: '#/components/schemas/MeetingLimit_MeetingLimitSet'
          MeetingLimitUnset: '#/components/schemas/MeetingLimit_MeetingLimitUnset'
    MeetingLimit_MeetingLimitUnset:
      title: MeetingLimit_MeetingLimitUnset
      type: object
      required:
      - type
      properties:
        type:
          type: string
          const: MeetingLimitUnset
    Levels:
      title: Levels
      type: object
      required:
      - current
      - nextAssignmentDelta
      - total
      properties:
        current:
          description: Earned score plus prolonged-reservation projection, before manual calibration.
          type: number
        nextAssignmentDelta:
          description: Score increment that will be added if this user receives the next assignment. Forward-looking; not included in `current` or `total`.
          type: number
        calibrationDelta:
          description: Manual-calibration adjustment applied on top of `current`. Absent when no calibration is in effect. When present, `total = current + calibrationDelta`.
          type: number
        total:
          description: Current score with manual calibration applied.
          type: number
    Distribution:
      title: Distribution
      type: object
      required:
      - id
      - published
      - state
      - prioritization
      properties:
        id:
          $ref: '#/components/schemas/DistributionId'
        published:
          $ref: '#/components/schemas/ConfigurationDTO'
        state:
          $ref: '#/components/schemas/DistributionState'
        prioritization:
          $ref: '#/components/schemas/Prioritization'
    DistributionUserState_Disabled:
      title: DistributionUserState_Disabled
      description: User has been explicitly disabled in this distribution (weight set to 0). Still on the team but won't receive assignments until re-enabled.
      type: object
      required:
      - userId
      - total
      - disabledAt
      - statistics
      - type
      properties:
        userId:
          $ref: '#/components/schemas/UserId'
        total:
          type: integer
          format: int32
        disabledAt:
          type: string
          format: date-time
        statistics:
          $ref: '#/components/schemas/UserStatistics'
        type:
          type: string
          const: Disabled
    VacationBuffer:
      title: VacationBuffer
      type: object
      required:
      - daysBeforeStart
      - daysBeforeEnd
      - recognitionEnabled
      - freshness
      properties:
        daysBeforeStart:
          description: Days before a vacation starts to stop assigning to the user.
          type: integer
          format: int32
        daysBeforeEnd:
          description: Days before a vacation ends after which the user becomes assignable again.
          type: integer
          fo

# --- truncated at 32 KB (38 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/chili-piper/refs/heads/main/openapi/chili-piper-distribution-api-openapi.yml