Chili Piper Distribution API

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

Operations 3

POST /v1/org/distribution Create distribution #
PUT /v2/org/distribution/list List all distributions (PUT) #
GET /v1/org/distribution/workspace-settings Get workspace distribution settings #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/chili-piper-distribution-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

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:
    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'
    TeamRef:
      title: TeamRef
      type: object
      required:
      - id
      - revision
      properties:
        id:
          $ref: '#/components/schemas/TeamId'
        revision:
          type: integer
          format: int32
    CallerRef:
      title: CallerRef
      description: stringified caller reference in format $type/$id
      examples:
      - user/17a3d4563d5a67a3d456ad635
      type: string
    DistributionId:
      title: DistributionId
      examples:
      - 7f8a1b2c-3d4e-4f5a-8b9c-0d1e2f3a4b5c
      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
    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'
    TeamId:
      title: TeamId
      examples:
      - 2a9c3f1e-8b7d-4a5c-9e6f-1b2c3d4e5f6a
      type: string
      pattern: '[^\s\\/]+'
    DistributionAssignmentTypeConfig_Meeting:
      title: DistributionAssignmentTypeConfig_Meeting
      type: object
      required:
      - handling
      - limits
      - type
      properties:
        handling:
          $ref: '#/components/schemas/MeetingHandling'
        limits:
          $ref: '#/components/schemas/MeetingLimit'
        type:
          type: string
          const: Meeting
    DistributionAssignmentTypeConfig_Conversation:
      title: DistributionAssignmentTypeConfig_Conversation
      type: object
      required:
      - type
      properties:
        type:
          type: string
          const: Conversation
    VacationFreshness:
      title: VacationFreshness
      description: Whether vacation state is read live (RealTime) or from cache (Cached).
      type: string
      enum:
      - Cached
      - RealTime
    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
    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'
    SimpleMetadata:
      title: SimpleMetadata
      type: object
      required:
      - createdAt
      - createdBy
      - updatedAt
      - updatedBy
      - revision
      properties:
        createdAt:
          type: string
          format: date-time
        createdBy:
          $ref: '#/components/schemas/CallerRef'
        updatedAt:
          type: string
          format: date-time
        updatedBy:
          $ref: '#/components/schemas/CallerRef'
        revision:
          type: integer
          format: int32
    DistributionState:
      title: DistributionState
      type: object
      properties:
        userStates:
          type: array
          items:
            $ref: '#/components/schemas/DistributionUserState'
        lastReset:
          type: string
          format: date-time
    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'
    DistributionAssignmentTypeConfig_Record:
      title: DistributionAssignmentTypeConfig_Record
      type: object
      required:
      - handling
      - type
      properties:
        handling:
          $ref: '#/components/schemas/RecordHandling'
        type:
          type: string
          const: Record
    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'
    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'
    RecordHandling_Strict:
      title: RecordHandling_Strict
      type: object
      required:
      - type
      properties:
        type:
          type: string
          const: Strict
    WorkspaceResetPeriodicity_Never:
      title: WorkspaceResetPeriodicity_Never
      description: Counters never reset automatically.
      type: object
      required:
      - type
      properties:
        type:
          type: string
          const: Never
    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'
    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_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
    DistributedAssignmentLimitReset_HourlyRolling:
      title: DistributedAssignmentLimitReset_HourlyRolling
      type: object
      required:
      - type
      properties:
        type:
          type: string
          const: HourlyRolling
    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
    PaginatedResult_Distribution:
      title: PaginatedResult_Distribution
      type: object
      required:
      - total
      - page
      - pageSize
      properties:
        results:
          type: array
          items:
            $ref: '#/components/schemas/Distribution'
        total:
          type: integer
          format: int64
        page:
          type: integer
          format: int64
          minimum: 0
        pageSize:
          type: integer
          format: int64
          exclusiveMinimum: 0
    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
    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
    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
    UserWeight:
      title: UserWeight
      type: object
      required:
      - userId
      - weight
      properties:
        userId:
          $ref: '#/components/schemas/UserId'
        weight:
          type: integer
          format: int32
          minimum: 0
          maximum: 10000
    UserLimit:
      title: UserLimit
      type: object
      required:
      - userId
      - limit
      properties:
        userId:
          $ref: '#/components/schemas/UserId'
        limit:
          type: integer
          format: int32
          minimum: 0
    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
    RecordHandling_WorkingHours:
      title: RecordHandling_WorkingHours
      type: object
      required:
      - type
      properties:
        type:
          type: string
          const: WorkingHours
    WorkspaceId:
      title: WorkspaceId
      examples:
      - b7263a5d-89cb-4f50-a532-ea4aff74688e
      type: string
      pattern: '[^\s\\/]+'
    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'
    DistributedAssignmentLimitReset_Daily:
      title: DistributedAssignmentLimitReset_Daily
      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: Daily
    DistributionAssignmentType:
      title: DistributionAssignmentType
      type: string
      enum:
      - Record
      - Meeting
      - Conversation
    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
    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\\/]+'
    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'
    DistributedAssignmentLimit:
      title: DistributedAssignmentLimit
      type: object
      required:
      - resetPeriodicity
      properties:
        userCaps:
          type: array
          uniqueItems: true
          items:
            $ref: '#/components/schemas/UserLimit'
        resetPeriodicity:
          $ref: '#/components/schemas/DistributedAssignmentLimitReset'
    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'
    Map_String:
      title: Map_String
      type: object
      additionalProperties:
        type: string
    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
          format: int32
        recognitionEnabled:
          description: Whether vacations are recognized at all (calendars are consulted).
          type: boolean
        freshness:
          $ref: '#/components/schemas/VacationFreshness'
    CreateDistributionResponse:
      title: CreateDistributionResponse
      type: object
      required:
      - distributionId
      properties:
        distributionId:
          $ref: '#/components/schemas/DistributionId'
    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'
    OrderIfEqualState:
      title: OrderIfEqualState
      description: Tie-break ordering when two users have an equal level. Currently always "AsConfigured" upstream.
      type: string
      enum:
      - AsConfigured
      - Random
    MeetingHandling_Flexible:
      title: MeetingHandling_Flexible
      type: object
      required:
      - reassignmentType
      - allowPickingAssignee
      - type
      properties:
        reassignmentType:
          $ref: '#/components/schemas/ReassignmentType'
        allowPickingAssignee:
          type: boolean
        type:
          type: string
          const: Flexible
    DistributionUserState_Active:
      title: DistributionUserState_Active
      description: User is active in the distribution and eligible for assignments. Carries the user's current level.
      type: object
      required:
      - userId
      - total
      - level
      - statistics
      - type
      properties:
        userId:
          $ref: '#/components/schemas/UserId'
        total:
          type: integer
          format: int32
        level:
          $ref: '#/components/schemas/Levels'
        statistics:
          $ref: '#/components/schemas/UserStatis

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