Assembled Forecasts API

Retrieve Assembled's ML-generated forecasts, forecast totals, manual adjustments, and detected outliers. The forecasted-vs-actuals endpoint compares predicted to realised volume so support leaders can tune models, identify drift, and validate >90% forecast accuracy claims. Forecasts drive AI-powered schedule generation and staffing recommendations across human and AI agents.

OpenAPI Specification

assembled-forecasts-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Assembled Forecasts API
  description: |
    Retrieve Assembled's ML-generated forecasts, forecast totals, manual
    adjustments, and detected outliers, and compare predicted to realised
    volume.

    Forecasts drive AI-powered schedule generation and staffing
    recommendations across human and AI agents. The
    forecasted_vs_actuals endpoint is the canonical place to measure
    accuracy and detect drift.
  version: '2026-05-24'
  contact:
    name: Assembled Support
    url: https://support.assembled.com
servers:
  - url: https://api.assembledhq.com
    description: Production Server
security:
  - BasicAuth: []
tags:
  - name: Forecasts
  - name: Forecast Totals
  - name: Forecast Adjustments
  - name: Forecast Outliers
  - name: Forecasts Vs Actuals
paths:
  /v0/forecasts:
    get:
      summary: Assembled List Forecasts
      operationId: listForecasts
      tags: [Forecasts]
      parameters:
        - in: query
          name: start_time
          required: true
          schema: { type: string, format: date-time }
        - in: query
          name: end_time
          required: true
          schema: { type: string, format: date-time }
        - in: query
          name: queue_ids
          schema: { type: string }
        - in: query
          name: channel
          schema: { type: string }
      responses:
        '200':
          description: Forecasts
          content:
            application/json:
              schema:
                type: object
                properties:
                  forecasts:
                    type: array
                    items: { $ref: '#/components/schemas/Forecast' }
  /v0/forecasts/totals:
    get:
      summary: Assembled List Forecast Totals
      operationId: listForecastTotals
      tags: [Forecast Totals]
      parameters:
        - in: query
          name: start_time
          required: true
          schema: { type: string, format: date-time }
        - in: query
          name: end_time
          required: true
          schema: { type: string, format: date-time }
      responses:
        '200':
          description: Forecast totals
          content:
            application/json:
              schema:
                type: object
                properties:
                  totals:
                    type: array
                    items: { $ref: '#/components/schemas/ForecastTotal' }
    post:
      summary: Assembled Create Forecast Totals
      operationId: createForecastTotals
      tags: [Forecast Totals]
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                totals:
                  type: array
                  items: { $ref: '#/components/schemas/ForecastTotalInput' }
      responses:
        '201':
          description: Created
  /v0/forecasts/totals/{id}:
    get:
      summary: Assembled Get Forecast Total
      operationId: getForecastTotal
      tags: [Forecast Totals]
      parameters:
        - in: path
          name: id
          required: true
          schema: { type: string }
      responses:
        '200':
          description: Forecast total
          content:
            application/json:
              schema: { $ref: '#/components/schemas/ForecastTotal' }
    delete:
      summary: Assembled Delete Forecast Total
      operationId: deleteForecastTotal
      tags: [Forecast Totals]
      parameters:
        - in: path
          name: id
          required: true
          schema: { type: string }
      responses:
        '204':
          description: Deleted
  /v0/forecasts/adjustments:
    get:
      summary: Assembled List Forecast Adjustments
      operationId: listForecastAdjustments
      tags: [Forecast Adjustments]
      responses:
        '200':
          description: Adjustments
          content:
            application/json:
              schema:
                type: object
                properties:
                  adjustments:
                    type: array
                    items: { $ref: '#/components/schemas/ForecastAdjustment' }
  /v0/forecasts/adjustments/bulk:
    post:
      summary: Assembled Bulk Create Forecast Adjustments
      operationId: bulkCreateForecastAdjustments
      tags: [Forecast Adjustments]
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                adjustments:
                  type: array
                  items: { $ref: '#/components/schemas/ForecastAdjustment' }
      responses:
        '201':
          description: Created
  /v0/forecasts/adjustments/{id}:
    delete:
      summary: Assembled Delete Forecast Adjustment
      operationId: deleteForecastAdjustment
      tags: [Forecast Adjustments]
      parameters:
        - in: path
          name: id
          required: true
          schema: { type: string }
      responses:
        '204':
          description: Deleted
  /v0/forecasts/outliers:
    get:
      summary: Assembled List Forecast Outliers
      operationId: listForecastOutliers
      tags: [Forecast Outliers]
      responses:
        '200':
          description: Outliers
          content:
            application/json:
              schema:
                type: object
                properties:
                  outliers:
                    type: array
                    items: { $ref: '#/components/schemas/ForecastOutlier' }
  /v0/forecasts/outliers/bulk:
    post:
      summary: Assembled Bulk Create Forecast Outliers
      operationId: bulkCreateForecastOutliers
      tags: [Forecast Outliers]
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                outliers:
                  type: array
                  items: { $ref: '#/components/schemas/ForecastOutlier' }
      responses:
        '201':
          description: Created
  /v0/forecasts/outliers/{id}:
    delete:
      summary: Assembled Delete Forecast Outlier
      operationId: deleteForecastOutlier
      tags: [Forecast Outliers]
      parameters:
        - in: path
          name: id
          required: true
          schema: { type: string }
      responses:
        '204':
          description: Deleted
  /v0/forecasted_vs_actuals:
    get:
      summary: Assembled Get Forecasted Vs Actuals
      operationId: getForecastedVsActuals
      tags: [Forecasts Vs Actuals]
      parameters:
        - in: query
          name: start_time
          required: true
          schema: { type: string, format: date-time }
        - in: query
          name: end_time
          required: true
          schema: { type: string, format: date-time }
        - in: query
          name: queue_ids
          schema: { type: string }
      responses:
        '200':
          description: Forecast accuracy series
          content:
            application/json:
              schema:
                type: object
                properties:
                  intervals:
                    type: array
                    items:
                      type: object
                      properties:
                        start_time: { type: string, format: date-time }
                        forecasted: { type: number }
                        actual: { type: number }
                        delta: { type: number }
components:
  securitySchemes:
    BasicAuth: { type: http, scheme: basic }
  schemas:
    Forecast:
      type: object
      properties:
        id: { type: string }
        queue_id: { type: string }
        channel: { type: string }
        start_time: { type: string, format: date-time }
        end_time: { type: string, format: date-time }
        interval_minutes: { type: integer, example: 30 }
        volume: { type: number }
        aht_seconds: { type: number }
        required_agents: { type: number }
    ForecastTotal:
      type: object
      properties:
        id: { type: string }
        queue_id: { type: string }
        start_time: { type: string, format: date-time }
        end_time: { type: string, format: date-time }
        total_volume: { type: number }
    ForecastTotalInput:
      type: object
      properties:
        queue_id: { type: string }
        start_time: { type: string, format: date-time }
        end_time: { type: string, format: date-time }
        total_volume: { type: number }
    ForecastAdjustment:
      type: object
      properties:
        id: { type: string }
        queue_id: { type: string }
        start_time: { type: string, format: date-time }
        end_time: { type: string, format: date-time }
        adjustment_factor: { type: number, description: Multiplier applied to baseline forecast }
        reason: { type: string }
    ForecastOutlier:
      type: object
      properties:
        id: { type: string }
        queue_id: { type: string }
        start_time: { type: string, format: date-time }
        end_time: { type: string, format: date-time }
        reason: { type: string }