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

# Publish an authorized forecast configuration

> Requires mcp:schedules:write and the explicit mcp:schedules:publish grant, plus the issuer’s current native and referenced-source authority. The same grant is rechecked when a saved setup assessment publishes a forecast configuration.



## OpenAPI

````yaml /api-reference/workforce/openapi.json post /api/v1/workforce/forecast-groups
openapi: 3.1.0
info:
  title: Atlas workforce API
  version: 2026-10-preview
  description: >-
    Authenticated workforce staffing-to-draft operations. Released together with
    matching MCP operations. Deploy the reviewed native guard migrations before
    enabling this feature.
servers:
  - url: /
security:
  - AtlasIntegrationBearer: []
paths:
  /api/v1/workforce/forecast-groups:
    post:
      summary: Publish an authorized forecast configuration
      description: >-
        Requires mcp:schedules:write and the explicit mcp:schedules:publish
        grant, plus the issuer’s current native and referenced-source authority.
        The same grant is rechecked when a saved setup assessment publishes a
        forecast configuration.
      operationId: publish_forecast_group
      parameters:
        - name: X-Workspace-Id
          in: header
          required: true
          schema:
            type: string
            format: uuid
          description: >-
            Selector within saved grants and current issuer authority; never
            grants authority.
        - name: Idempotency-Key
          in: header
          required: true
          schema:
            type: string
            format: uuid
          description: Retain the exact key and body across retries and transports.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ForecastGroupPublication'
      responses:
        '200':
          description: >-
            Authorized native result. Configuration success does not establish
            operational readiness.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NativeEvidence'
        '400':
          description: Missing or malformed transport fields
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing, invalid or expired bearer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Saved grant or current authority denied
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Scoped resource not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Stale source/revision or conflicting request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '413':
          description: Body exceeds 64 KiB
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Invalid or unsupported input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Concurrent compute limit; retry after 5 seconds
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Required evidence or service unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    ForecastGroupPublication:
      type: object
      properties:
        forecastGroupId:
          anyOf:
            - type: string
              format: uuid
              pattern: >-
                ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
            - type: 'null'
        expectedRevision:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        operationKey:
          type: string
          minLength: 1
          maxLength: 256
        effectiveFrom:
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
        expectedSourceFingerprint:
          type: string
          pattern: ^[a-f0-9]{64}$
        configuration:
          type: object
          properties:
            name:
              type: string
              minLength: 1
              maxLength: 120
            ownerActorId:
              anyOf:
                - type: string
                  format: uuid
                  pattern: >-
                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                - type: 'null'
            scope:
              type: object
              properties:
                objectType:
                  type: string
                  minLength: 1
                objectId:
                  anyOf:
                    - type: string
                      format: uuid
                      pattern: >-
                        ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                    - type: 'null'
                filters:
                  anyOf:
                    - type: array
                      items:
                        type: object
                        properties:
                          targetType:
                            type: string
                            enum:
                              - object
                              - attribute
                              - metric
                              - time
                          ref:
                            type: string
                            minLength: 1
                          operator:
                            type: string
                            enum:
                              - eq
                              - neq
                              - in
                              - not_in
                              - gt
                              - gte
                              - lt
                              - lte
                              - between
                              - contains
                              - is_null
                              - is_not_null
                          value:
                            anyOf:
                              - anyOf:
                                  - type: string
                                  - type: number
                                  - type: boolean
                              - type: array
                                items:
                                  anyOf:
                                    - type: string
                                    - type: number
                                    - type: boolean
                              - type: 'null'
                        required:
                          - targetType
                          - ref
                          - operator
                        additionalProperties: false
                    - type: object
                      propertyNames:
                        type: string
                        minLength: 1
                      additionalProperties:
                        anyOf:
                          - anyOf:
                              - type: string
                              - type: number
                              - type: boolean
                          - type: array
                            items:
                              anyOf:
                                - type: string
                                - type: number
                                - type: boolean
                          - type: 'null'
                time:
                  oneOf:
                    - type: object
                      properties:
                        mode:
                          type: string
                          const: event_time
                      required:
                        - mode
                      additionalProperties: false
                    - type: object
                      properties:
                        mode:
                          type: string
                          const: reconstruction
                        effectiveAt:
                          type: string
                          format: date-time
                          pattern: >-
                            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
                      required:
                        - mode
                        - effectiveAt
                      additionalProperties: false
              required:
                - objectType
                - objectId
                - filters
              additionalProperties: false
            demand:
              anyOf:
                - anyOf:
                    - type: object
                      properties:
                        mode:
                          type: string
                          enum:
                            - prediction
                            - manual
                        prediction_definition_id:
                          anyOf:
                            - type: string
                              minLength: 1
                            - type: 'null'
                        queue_object_record_id:
                          anyOf:
                            - type: string
                              minLength: 1
                            - type: 'null'
                        aht_seconds:
                          type: number
                          exclusiveMinimum: 0
                        aht_source:
                          type: string
                          enum:
                            - config
                            - forecast
                        service_level:
                          type: object
                          properties:
                            pct:
                              type: number
                              exclusiveMinimum: 0
                              maximum: 100
                            seconds:
                              type: number
                              minimum: 0
                          required:
                            - pct
                            - seconds
                        service_model:
                          oneOf:
                            - type: object
                              properties:
                                kind:
                                  type: string
                                  const: live_voice
                              required:
                                - kind
                              additionalProperties: false
                            - type: object
                              properties:
                                kind:
                                  type: string
                                  const: concurrent_messaging
                                average_conversation_seconds:
                                  type: number
                                  exclusiveMinimum: 0
                                max_concurrent_conversations_per_person:
                                  type: number
                                  exclusiveMinimum: 0
                              required:
                                - kind
                                - average_conversation_seconds
                                - max_concurrent_conversations_per_person
                              additionalProperties: false
                            - type: object
                              properties:
                                kind:
                                  type: string
                                  const: backlog
                                opening_backlog_work_seconds:
                                  type: number
                                  minimum: 0
                                rework_rate:
                                  type: number
                                  minimum: 0
                                  maximum: 1
                                due_work_rate:
                                  type: number
                                  minimum: 0
                                  maximum: 1
                              required:
                                - kind
                                - opening_backlog_work_seconds
                                - rework_rate
                                - due_work_rate
                              additionalProperties: false
                            - type: object
                              properties:
                                kind:
                                  type: string
                                  const: ai
                                service_seconds_per_attempt:
                                  type: number
                                  exclusiveMinimum: 0
                                tokens_per_attempt:
                                  type: number
                                  minimum: 0
                                max_concurrency:
                                  type: number
                                  exclusiveMinimum: 0
                                request_limit:
                                  anyOf:
                                    - type: number
                                      minimum: 0
                                    - type: 'null'
                                token_limit:
                                  anyOf:
                                    - type: number
                                      minimum: 0
                                    - type: 'null'
                                attempt_success_rate:
                                  type: number
                                  minimum: 0
                                  maximum: 1
                                max_retries:
                                  type: integer
                                  minimum: 0
                                  maximum: 9007199254740991
                                escalation_rate:
                                  type: number
                                  minimum: 0
                                  maximum: 1
                                human_seconds_per_escalation:
                                  type: number
                                  minimum: 0
                              required:
                                - kind
                                - service_seconds_per_attempt
                                - tokens_per_attempt
                                - max_concurrency
                                - request_limit
                                - token_limit
                                - attempt_success_rate
                                - max_retries
                                - escalation_rate
                                - human_seconds_per_escalation
                              additionalProperties: false
                        shrinkage_pct:
                          default: 0
                          type: number
                          minimum: 0
                          exclusiveMaximum: 100
                        occupancy_cap_pct:
                          anyOf:
                            - type: number
                              exclusiveMinimum: 0
                              maximum: 100
                            - type: 'null'
                        min_agents:
                          anyOf:
                            - type: integer
                              minimum: 0
                              maximum: 9007199254740991
                            - type: 'null'
                        manual_volume_profile:
                          anyOf:
                            - type: object
                              propertyNames:
                                type: string
                                pattern: ^(sun|mon|tue|wed|thu|fri|sat)$
                              additionalProperties:
                                type: array
                                items:
                                  type: number
                                  minimum: 0
                            - type: 'null'
                      required:
                        - mode
                        - aht_seconds
                        - service_level
                    - type: object
                      properties:
                        mode:
                          type: string
                          const: 'off'
                      required:
                        - mode
                - type: 'null'
            calendarId:
              anyOf:
                - type: string
                  format: uuid
                  pattern: >-
                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                - type: 'null'
            serviceTargetId:
              anyOf:
                - type: string
                  format: uuid
                  pattern: >-
                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                - type: 'null'
            grainMinutes:
              type: integer
              exclusiveMinimum: 0
              maximum: 240
            planningTimezone:
              type: string
            reportingTimezone:
              type: string
            horizonDays:
              type: integer
              exclusiveMinimum: 0
              maximum: 730
            cadence:
              anyOf:
                - type: object
                  properties:
                    localTime:
                      type: string
                      pattern: ^(?:[01]\d|2[0-3]):[0-5]\d$
                  required:
                    - localTime
                  additionalProperties: false
                - type: 'null'
          required:
            - name
            - ownerActorId
            - scope
            - demand
            - calendarId
            - serviceTargetId
            - grainMinutes
            - planningTimezone
            - reportingTimezone
            - horizonDays
          additionalProperties: false
      required:
        - forecastGroupId
        - expectedRevision
        - effectiveFrom
        - configuration
      additionalProperties: false
    NativeEvidence:
      type: object
      description: >-
        Native domain evidence. Inspect state, errors, source_context and
        result; an issued request is not a committed schedule.
      additionalProperties: true
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
            message:
              type: string
            details: {}
          required:
            - code
            - message
          additionalProperties: false
      required:
        - error
      additionalProperties: false
  securitySchemes:
    AtlasIntegrationBearer:
      type: http
      scheme: bearer
      bearerFormat: atlas_mcp_
      description: >-
        Existing Atlas integration connection with explicit api:connect plus
        appropriate native domain grants. atlas_ingest_ and browser cookies are
        not accepted.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.