MISO Offer API

The Offer API from MISO — 7 operation(s) for offer.

Operations 12

GET /markets/real-time/{day}/offer/ramp-curves/participants/{participantName} #
POST /markets/real-time/{day}/offer/ramp-curves/participants/{participantName} #
GET /markets/common/{day}/offer/cc-status/participants/{participantName} #
POST /markets/common/{day}/offer/cc-status/participants/{participantName} #
GET /markets/{market}/{day}/offer/auto-overrides/participants/{participantName} #
GET /markets/{market}/{day}/offer/qualification-status/participants/{participantName} #
GET /markets/{market}/{day}/offer/schedule/participants/{participantName} #
POST /markets/{market}/{day}/offer/schedule/participants/{participantName} #
GET /markets/{market}/{day}/offer/defaults/participants/{participantName} #
POST /markets/{market}/{day}/offer/defaults/participants/{participantName} #
GET /markets/real-time/{day}/offer/overrides/participants/{participantName} #
POST /markets/real-time/{day}/offer/overrides/participants/{participantName} #

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/miso-offer-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 form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

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

OpenAPI Specification

miso-offer-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: MISO Public Specification to support Market System Enhancement (MSE) new Market User Interface (MUI 2.0).
  title: MUI - Public Specification Offer API
  contact:
    name: MUI 2.0 Questions
    url: https://www.misoenergy.org/markets-and-operations/MSE/market-user-interface/
    email: MSEQuestions@misoenergy.org
  license:
    name: For use by MISO member companies and thier vendors
  version: 3.3.0
servers:
- url: https://cce.midwestiso.org/dart2/
- url: https://markets.midwestiso.org/dart2/
tags:
- name: Offer
paths:
  /markets/real-time/{day}/offer/ramp-curves/participants/{participantName}:
    description: Submit and return the ramp rate curves portion of the Real-Time schedules offer. Data can be submitted at any time per the market rules. The Ramp Rate Curves are used in market clearing only if they are effective for the operating date and hour of the market, and if the 'Enable Ramp Rate Curves' flag is set to true for that hour in the Schedule Offer ramp rate values.  To be effective for a given market date and hour, submittal must have completed by market closing. Submission for one or more pnode locations is supported.
    parameters:
    - $ref: '#/components/parameters/x-acting-participant'
    get:
      tags:
      - Offer
      description: Returns the collection of Real-Time ramp rate curves by pnode location for the day. Pnode or portfolio query parameter may be provided, otherwise all valid resources supporting ramp rate curves for participant are returned. Message format differs by offerType property which can be one of the following values; -  rampCurve -  esrRampCurve
      operationId: getOfferRampRateCurves
      parameters:
      - $ref: '#/components/parameters/MarketOperatingDay'
      - $ref: '#/components/parameters/Participant'
      - $ref: '#/components/parameters/Pnode'
      - $ref: '#/components/parameters/Portfolio'
      - $ref: '#/components/parameters/Hour'
      responses:
        '200':
          description: Successful operation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MultiVariantRampRateCurves'
          headers:
            http-x-request-id:
              $ref: '#/components/headers/http-x-request-id'
        '400':
          $ref: '#/components/responses/BadRequestApiResponse'
        '403':
          $ref: '#/components/responses/UnauthorizedApiResponse'
        '404':
          $ref: '#/components/responses/NotFoundApiResponse'
        '500':
          $ref: '#/components/responses/InternalErrorApiResponse'
    post:
      tags:
      - Offer
      description: Post the collection hourly ramp rate curves for one or more pnode locations. Message format differs by offerType property which can be one of the following values; -  rampCurve -  esrRampCurve
      operationId: postOfferRampRateCurves
      parameters:
      - $ref: '#/components/parameters/MarketOperatingDay'
      - $ref: '#/components/parameters/Participant'
      responses:
        '200':
          $ref: '#/components/responses/OkApiResponse'
        '400':
          $ref: '#/components/responses/BadRequestApiResponse'
        '403':
          $ref: '#/components/responses/UnauthorizedApiResponse'
        '404':
          $ref: '#/components/responses/NotFoundApiResponse'
        '500':
          $ref: '#/components/responses/InternalErrorApiResponse'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MultiVariantRampRateCurves'
  /markets/common/{day}/offer/cc-status/participants/{participantName}:
    description: Manage Combined Cycle Status. Submission for one or more pnode locations is supported.
    parameters:
    - $ref: '#/components/parameters/x-acting-participant'
    get:
      tags:
      - Offer
      description: Returns the collection of Combined Cycle status by pnode location for the day. Pnode or portfolio query parameters may be provided, otherwise all Combined Cycle aggregate resources for participant are returned.
      operationId: getCombinedCycleResourceDay
      parameters:
      - $ref: '#/components/parameters/MarketOperatingDay'
      - $ref: '#/components/parameters/Participant'
      - $ref: '#/components/parameters/Pnode'
      - $ref: '#/components/parameters/Portfolio'
      responses:
        '200':
          description: Successful operation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CombinedCycleStatus'
          headers:
            http-x-request-id:
              $ref: '#/components/headers/http-x-request-id'
        '400':
          $ref: '#/components/responses/BadRequestApiResponse'
        '403':
          $ref: '#/components/responses/UnauthorizedApiResponse'
        '404':
          $ref: '#/components/responses/NotFoundApiResponse'
        '500':
          $ref: '#/components/responses/InternalErrorApiResponse'
    post:
      tags:
      - Offer
      description: Submit Combined Cycle status for one or more pnode locations.
      operationId: postCombinedCycleResourceDay
      parameters:
      - $ref: '#/components/parameters/MarketOperatingDay'
      - $ref: '#/components/parameters/Participant'
      responses:
        '200':
          $ref: '#/components/responses/OkApiResponse'
        '400':
          $ref: '#/components/responses/BadRequestApiResponse'
        '403':
          $ref: '#/components/responses/UnauthorizedApiResponse'
        '404':
          $ref: '#/components/responses/NotFoundApiResponse'
        '500':
          $ref: '#/components/responses/InternalErrorApiResponse'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CombinedCycleStatus'
  /markets/{market}/{day}/offer/auto-overrides/participants/{participantName}:
    description: Returns regulation offer overrides.
    parameters:
    - $ref: '#/components/parameters/x-acting-participant'
    get:
      tags:
      - Offer
      description: 'Returns the collection of regulation offer overrides by pnode location for the day. Pnode or portfolio query parameters may be provided, otherwise all applicable resources for participant which have been overriden are returned. Regulation Offers are overridden under the following circumstances.

        1. The Participant’s combined Regulation Capacity and Mileage Offers exceed the allowable Total Regulation Offer range (this can occur if a Deployment Rate change occurs).

        2. The Participant’s Resource is awarded regulation capacity in the Day Ahead Market, and Participant’s Real-Time regulation offer differs from its Day Ahead regulation offer for the operating day.

        '
      operationId: getScheduleOfferOverrides
      parameters:
      - $ref: '#/components/parameters/MarketType'
      - $ref: '#/components/parameters/MarketOperatingDay'
      - $ref: '#/components/parameters/Participant'
      - $ref: '#/components/parameters/Pnode'
      - $ref: '#/components/parameters/Portfolio'
      responses:
        '200':
          description: Successful operation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegulationOfferOverrides'
          headers:
            http-x-request-id:
              $ref: '#/components/headers/http-x-request-id'
        '400':
          $ref: '#/components/responses/BadRequestApiResponse'
        '403':
          $ref: '#/components/responses/UnauthorizedApiResponse'
        '404':
          $ref: '#/components/responses/NotFoundApiResponse'
        '500':
          $ref: '#/components/responses/InternalErrorApiResponse'
  /markets/{market}/{day}/offer/qualification-status/participants/{participantName}:
    description: Returns Qualification Status flags for a resource or Portfolio of resources.
    parameters:
    - $ref: '#/components/parameters/x-acting-participant'
    get:
      tags:
      - Offer
      description: Returns the collection of qualification status flags by pnode location for the day. Pnode or portfolio query parameters may be provided, otherwise all applicable resources for participant are returned. parameter must be supplied.
      operationId: getQualificationStatus
      parameters:
      - $ref: '#/components/parameters/MarketType'
      - $ref: '#/components/parameters/MarketOperatingDay'
      - $ref: '#/components/parameters/Participant'
      - $ref: '#/components/parameters/Pnode'
      - $ref: '#/components/parameters/Portfolio'
      responses:
        '200':
          description: Successful operation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QualificationStatus'
          headers:
            http-x-request-id:
              $ref: '#/components/headers/http-x-request-id'
        '400':
          $ref: '#/components/responses/BadRequestApiResponse'
        '403':
          $ref: '#/components/responses/UnauthorizedApiResponse'
        '404':
          $ref: '#/components/responses/NotFoundApiResponse'
        '500':
          $ref: '#/components/responses/InternalErrorApiResponse'
  /markets/{market}/{day}/offer/schedule/participants/{participantName}:
    description: Manage Schedule Offer. Submission for one or more pnode locations is supported.
    parameters:
    - $ref: '#/components/parameters/x-acting-participant'
    get:
      tags:
      - Offer
      description: Returns the collection of daily/hourly schedule offers by pnode location for the day. Pnode or portfolio query parameters may be provided, otherwise all applicable resources for participant are returned. Message format differs by offerType property which can be one of the following values; - genOffer - dirOffer - drr1Offer - drr2Offer - earOffer - serOffer - esrOffer
      operationId: getScheduleOffer
      parameters:
      - $ref: '#/components/parameters/MarketTypeIncBoth'
      - $ref: '#/components/parameters/MarketOperatingDay'
      - $ref: '#/components/parameters/Participant'
      - $ref: '#/components/parameters/Pnode'
      - $ref: '#/components/parameters/Portfolio'
      - $ref: '#/components/parameters/LocationType'
      responses:
        '200':
          description: Successful operation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MultiVariantScheduleOffer'
          headers:
            http-x-request-id:
              $ref: '#/components/headers/http-x-request-id'
        '400':
          $ref: '#/components/responses/BadRequestApiResponse'
        '403':
          $ref: '#/components/responses/UnauthorizedApiResponse'
        '404':
          $ref: '#/components/responses/NotFoundApiResponse'
        '500':
          $ref: '#/components/responses/InternalErrorApiResponse'
    post:
      tags:
      - Offer
      description: Submit the daily/hourly schedule offers for one or more pnode locations for the day. Message format differs by offerType property which can be one of the following values; - genOffer - dirOffer - drr1Offer - drr2Offer - earOffer - serOffer - esrOffer
      operationId: postScheduleOffer
      parameters:
      - $ref: '#/components/parameters/MarketTypeIncBoth'
      - $ref: '#/components/parameters/MarketOperatingDay'
      - $ref: '#/components/parameters/Participant'
      responses:
        '200':
          $ref: '#/components/responses/OkApiResponse'
        '400':
          $ref: '#/components/responses/BadRequestApiResponse'
        '403':
          $ref: '#/components/responses/UnauthorizedApiResponse'
        '404':
          $ref: '#/components/responses/NotFoundApiResponse'
        '500':
          $ref: '#/components/responses/InternalErrorApiResponse'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MultiVariantScheduleOffer'
  /markets/{market}/{day}/offer/defaults/participants/{participantName}:
    description: Manage Schedule Defaults. Submission for one or more pnode locations is supported.
    parameters:
    - $ref: '#/components/parameters/x-acting-participant'
    get:
      tags:
      - Offer
      description: Returns the collection of schedule offer defaults by pnode location for the day.  Pnode or portfolio query parameters may be provided, otherwise all applicable resources for participant are returned. Message format differs by offerType property which can be one of the following values; - genDefaultOffer - dirDefaultOffer - drr1DefaultOffer - drr2DefaultOffer - earDefaultOffer - serDefaultOffer - esrDefaultOffer
      operationId: getDefaultDay
      parameters:
      - $ref: '#/components/parameters/MarketTypeIncBoth'
      - $ref: '#/components/parameters/MarketOperatingDay'
      - $ref: '#/components/parameters/Participant'
      - $ref: '#/components/parameters/Pnode'
      - $ref: '#/components/parameters/Portfolio'
      - $ref: '#/components/parameters/LocationType'
      responses:
        '200':
          description: Successful operation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MultiVariantScheduleDefault'
          headers:
            http-x-request-id:
              $ref: '#/components/headers/http-x-request-id'
        '400':
          $ref: '#/components/responses/BadRequestApiResponse'
        '403':
          $ref: '#/components/responses/UnauthorizedApiResponse'
        '404':
          $ref: '#/components/responses/NotFoundApiResponse'
        '500':
          $ref: '#/components/responses/InternalErrorApiResponse'
    post:
      tags:
      - Offer
      description: Submit schedule offer defaults for one or more pnode locations for the day. Message format differs by offerType property which can be one of the following values; - genDefaultOffer - dirDefaultOffer - drr1DefaultOffer - drr2DefaultOffer - earDefaultOffer - serDefaultOffer - esrDefaultOffer
      operationId: postDefaultDay
      parameters:
      - $ref: '#/components/parameters/MarketTypeIncBoth'
      - $ref: '#/components/parameters/MarketOperatingDay'
      - $ref: '#/components/parameters/Participant'
      responses:
        '200':
          $ref: '#/components/responses/OkApiResponse'
        '400':
          $ref: '#/components/responses/BadRequestApiResponse'
        '403':
          $ref: '#/components/responses/UnauthorizedApiResponse'
        '404':
          $ref: '#/components/responses/NotFoundApiResponse'
        '500':
          $ref: '#/components/responses/InternalErrorApiResponse'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MultiVariantScheduleDefault'
  /markets/real-time/{day}/offer/overrides/participants/{participantName}:
    description: Manage Real Time Offer Overrides API. Submission for one or more pnode locations is supported.
    parameters:
    - $ref: '#/components/parameters/x-acting-participant'
    get:
      tags:
      - Offer
      description: Returns the collection of Real-Time offer overrides by pnode location for the day. Pnode or portfolio query parameters may be provided, otherwise all applicable resources for participant are returned. Message format differs by offerType property which can be one of the following values; - genScheduleOfferOverrides - dirScheduleOfferOverrides - drr1ScheduleOfferOverrides - drr2ScheduleOfferOverrides - earScheduleOfferOverrides - serScheduleOfferOverrides - esrScheduleOfferOverrides
      operationId: getRealTimeOfferOverrides
      parameters:
      - $ref: '#/components/parameters/MarketOperatingDay'
      - $ref: '#/components/parameters/Participant'
      - $ref: '#/components/parameters/Pnode'
      - $ref: '#/components/parameters/Portfolio'
      - $ref: '#/components/parameters/LocationType'
      - name: interval5Since
        description: Date-time as defined in RFC 3339 having format YYYY-MM-DDTHH:MM:SS-05:00. Optional element to specify the interval since which the overrides are requested. If {day} is today and interval5Since is not provided then currectly active overrides will be returned. If {day} is not today and interval5Since is not provided then data for the day since interval 23:59:59 will be returned.
        in: query
        required: false
        schema:
          $ref: '#/components/schemas/MarketIntervalLabel'
      responses:
        '200':
          description: Successful operation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RetrievedMultiVariantRTOfferOverrides'
          headers:
            http-x-request-id:
              $ref: '#/components/headers/http-x-request-id'
        '400':
          $ref: '#/components/responses/BadRequestApiResponse'
        '403':
          $ref: '#/components/responses/UnauthorizedApiResponse'
        '404':
          $ref: '#/components/responses/NotFoundApiResponse'
        '500':
          $ref: '#/components/responses/InternalErrorApiResponse'
    post:
      tags:
      - Offer
      description: Submit the Real-Time offer overrides by one or more pnode locations for the day. Message format differs by offerType property which can be one of the following values; - genScheduleOfferOverrides - dirScheduleOfferOverrides - drr1ScheduleOfferOverrides - drr2ScheduleOfferOverrides - earScheduleOfferOverrides - serScheduleOfferOverrides - esrScheduleOfferOverrides
      operationId: postRealTimeOfferOverrides
      parameters:
      - $ref: '#/components/parameters/MarketOperatingDay'
      - $ref: '#/components/parameters/Participant'
      responses:
        '200':
          $ref: '#/components/responses/OkApiResponse'
        '400':
          $ref: '#/components/responses/BadRequestApiResponse'
        '403':
          $ref: '#/components/responses/UnauthorizedApiResponse'
        '404':
          $ref: '#/components/responses/NotFoundApiResponse'
        '500':
          $ref: '#/components/responses/InternalErrorApiResponse'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MultiVariantRTOfferOverrides'
components:
  schemas:
    MarketType:
      description: Energy Market types.
      type: string
      enum:
      - day-ahead
      - real-time
    RetrievedDRR1RTOfferOverridesItem:
      type: object
      properties:
        offerType:
          type: string
          enum:
          - drr1ScheduleOfferOverrides
          example: drr1ScheduleOfferOverrides
        effectiveOfferOverrides:
          type: array
          minItems: 0
          items:
            type: object
            properties:
              effectiveTime:
                $ref: '#/components/schemas/MarketIntervalLabel'
              runtimeOverrides:
                type: object
                properties:
                  start:
                    $ref: '#/components/schemas/MarketIntervalLabel'
                  end:
                    $ref: '#/components/schemas/MarketIntervalLabel'
                  notificationTime:
                    $ref: '#/components/schemas/NotificationTime'
                  runtimeOverrideReason:
                    $ref: '#/components/schemas/RTOverrideReason'
                  runtimeOverrideText:
                    $ref: '#/components/schemas/RTOverrideText'
                required:
                - start
                - end
                - notificationTime
                - runtimeOverrideReason
                - runtimeOverrideText
              drr1OfferOverrides:
                type: object
                properties:
                  start:
                    $ref: '#/components/schemas/MarketIntervalLabel'
                  end:
                    $ref: '#/components/schemas/MarketIntervalLabel'
                  targetDemandReductionMW:
                    $ref: '#/components/schemas/RealEnergy'
                  drr1OfferOverrideReason:
                    $ref: '#/components/schemas/RTOverrideReason'
                  drr1OfferOverrideReasonText:
                    $ref: '#/components/schemas/RTOverrideText'
                required:
                - start
                - end
                - targetDemandReductionMW
                - drr1OfferOverrideReason
                - drr1OfferOverrideReasonText
              selfScheduleOverrides:
                type: object
                properties:
                  start:
                    $ref: '#/components/schemas/MarketIntervalLabel'
                  end:
                    $ref: '#/components/schemas/MarketIntervalLabel'
                  spinningSelfScheduleMW:
                    $ref: '#/components/schemas/RealEnergy'
                  supplementalSelfScheduleMW:
                    $ref: '#/components/schemas/RealEnergy'
                  selfScheduleOverrideReason:
                    $ref: '#/components/schemas/RTOverrideReason'
                  selfScheduleOverrideText:
                    $ref: '#/components/schemas/RTOverrideText'
                required:
                - start
                - end
                - spinningSelfScheduleMW
                - supplementalSelfScheduleMW
                - selfScheduleOverrideReason
                - selfScheduleOverrideText
              dispatchStatusOverrides:
                type: object
                properties:
                  start:
                    $ref: '#/components/schemas/MarketIntervalLabel'
                  end:
                    $ref: '#/components/schemas/MarketIntervalLabel'
                  spinningReserveDispatchStatus:
                    $ref: '#/components/schemas/DRR1SpinDispatchStatus'
                  supplementalReserveDispatchStatus:
                    $ref: '#/components/schemas/DRR1OnSuppDispatchStatus'
                  shortTermReserveDispatchStatus:
                    $ref: '#/components/schemas/OfflineSTRDispatchStatus'
                  dispatchStatusOverrideReason:
                    $ref: '#/components/schemas/RTOverrideReason'
                  dispatchStatusOverrideText:
                    $ref: '#/components/schemas/RTOverrideText'
                required:
                - start
                - end
                - spinningReserveDispatchStatus
                - supplementalReserveDispatchStatus
                - dispatchStatusOverrideReason
                - dispatchStatusOverrideText
              commitStatusOverrides:
                type: object
                properties:
                  start:
                    $ref: '#/components/schemas/MarketIntervalLabel'
                  end:
                    $ref: '#/components/schemas/MarketIntervalLabel'
                  commitStatus:
                    $ref: '#/components/schemas/DRR1CommitStatus'
                  commitStatusOverrideReason:
                    $ref: '#/components/schemas/RTOverrideReason'
                  commitStatusOverrideText:
                    $ref: '#/components/schemas/RTOverrideText'
                required:
                - start
                - end
                - commitStatus
                - commitStatusOverrideReason
                - commitStatusOverrideText
              offControlOverrides:
                type: object
                properties:
                  start:
                    $ref: '#/components/schemas/MarketIntervalLabel'
                  end:
                    $ref: '#/components/schemas/MarketIntervalLabel'
                  offControlFlag:
                    type: boolean
                    example: true
                  eeeFlag:
                    description: Specifies the Energy Deployment Charge Exemption (EEE) override.  May be set true only when OffControlFlag = true. When reason is RGDOverride then may not be present in output.
                    type: boolean
                    example: true
                  offControlOverrideReason:
                    $ref: '#/components/schemas/RTOverrideReason'
                  offControlOverrideText:
                    $ref: '#/components/schemas/RTOverrideText'
                required:
                - start
                - end
                - offControlFlag
                - offControlOverrideReason
                - offControlOverrideText
      required:
      - offerType
      - effectiveOfferOverrides
    RegulationOverrideReasons:
      description: Regulation Override Reasons.
      type: array
      items:
        type: string
        enum:
        - PriceCap
        - DAtoRTOfferConflict
    RealEnergySignedNullable:
      description: Used to represent real energy values submitted to the market. Nullable added to allow for data driven delete behaviour.
      type:
      - number
      - 'null'
      format: realenergy
      multipleOf: 0.1
      minimum: 0
      maximum: 9.99999999E7
      example: 1200.7
    DRR1CommitStatus:
      type: string
      enum:
      - NotParticipating
      - Economic
      - Emergency
    GenScheduleOfferItem:
      type: object
      properties:
        offerType:
          type: string
          enum:
          - genOffer
          example: genOffer
        scheduleType:
          $ref: '#/components/schemas/ScheduleType'
        market:
          $ref: '#/components/schemas/MarketType'
        startupCostsDaily:
          type: object
          properties:
            coldStartupCost:
              $ref: '#/components/schemas/OpCostNullable'
            intermediateStartupCost:
              $ref: '#/components/schemas/OpCostNullable'
            hotStartupCost:
              $ref: '#/components/schemas/OpCostNullable'
        noLoadCostsHourly:
          type: array
          items:
            type: object
            properties:
              hour:
                $ref: '#/components/schemas/HourLabel'
              cost:
                $ref: '#/components/schemas/OpCostNullable'
            required:
            - hour
        commitStatusHourly:
          type: array
          items:
            type: object
            properties:
              hour:
                $ref: '#/components/schemas/HourLabel'
              status:
                $ref: '#/components/schemas/GenCommitStatusNullable'
            required:
            - hour
        runtimesDaily:
          type: object
          properties:
            minimumRuntime:
              $ref: '#/components/schemas/RunTimeNullable'
            maximumRuntime:
              $ref: '#/components/schemas/MaxRunTimeNullable'
            minimumDowntime:
              $ref: '#/components/schemas/DownTimeNullable'
            hotToColdTime:
              $ref: '#/components/schemas/TransitionTimeNullable'
            hotToIntermediateTime:
              $ref: '#/components/schemas/TransitionTimeNullable'
            maximumDailyStarts:
              type:
              - integer
              - 'null'
            maximumDailyEnergy:
              $ref: '#/components/schemas/RealEnergyResultsSignedNullable'
            maximumWeeklyStarts:
              type:
              - integer
              - 'null'
            maximumWeeklyEnergy:
              $ref: '#/components/schemas/RealEnergyResultsSignedNullable'
        runtimesHourly:
          type: array
          items:
            type: object
            properties:
              hour:
                $ref: '#/components/schemas/HourLabel'
              runtimesHourlyDetail:
                type:
                - object
                - 'null'
                properties:
                  coldStartupTime:
                    $ref: '#/components/schemas/StartupTimeNullable'
                  intermediateStartupTime:
                    $ref: '#/components/schemas/StartupTimeNullable'
                  hotStartupTime:
                    $ref: '#/components/schemas/StartupTimeNullable'
                  coldNotificationTime:
                    $ref: '#/components/schemas/NotificationTimeNullable'
                  intermediateNotificationTime:
                    $ref: '#/components/schemas/NotificationTimeNullable'
                  hotNotificationTime:
                    $ref: '#/components/schemas/NotificationTimeNullable'
            required:
            - hour
        unitLimitsHourly:
          type: array
          items:
            type: object
            properties:
              hour:
                $ref: '#/components/schemas/HourLabel'
              unitLimitsHourlyDetail:
                type:
                - object
                - 'null'
                properties:
                  emergencyLimits:
                    type: object
                    description: Either one or both the MW limit properties can be submitted to update the unit limit pair with a MW value or with a null. Submitting mixed null and MW values when both are submitted is not allowed.
                    properties:
                      minMW:
                        $ref: '#/components/schemas/RealEnergyNullable'
                      maxMW:
                        $ref: '#/components/schemas/RealEnergyNullable'
                  economicLimits:
                    type: object
                    description: Either one or both the MW limit properties can be submitted to update the unit limit pair with a MW value or with a null. Submitting mixed null and MW values when both are submitted is not allowed.
                    properties:
                      minMW:
                        $ref: '#/components/schemas/RealEnergyNullable'
                      maxMW:
                        $ref: '#/components/schemas/RealEnergyNullable'
                  regulationLimits:
                    type: object
                    description: Either one or both the MW limit properties can be submitted to update the unit limit pair with a MW value or with a null. Submitting mixed null and MW values when both are submitted is not allowed.
                    properties:
                      minMW:
                        $ref: '#/components/schemas/RealEnergyNullable'
                      maxMW:
                        $ref: '#/components/schemas/RealEnergyNullable'
                  offlineResourceLimit:
                    $ref: '#/components/schemas/RealEnergyNullable'
                  offlineShortTermReserveLimit:
                    $ref: '#/components/schemas/RealEnergyNullable'
            required:
            - hour
        rampRatesHourly:
          type: array
          items:
            type: object
            properties:
              hour:
                $ref: '#/components/schemas/HourLabel'
              rampRatesHourlyDetail:
                type:
                - object
                - 'null'
                properties:
                  enableRampRateCurvesHourly:
                    type: boolean
                    example: true
                  rampRate:
                    $ref: '#/components/schemas/MWRampRateNullable'
                  rampRateBidirectional:
                    $ref: '#/components/schemas/MWRampRateNullable'
                  rampRateUp:
                    $ref: '#/components/schemas/MWRampRateNullable'
                  rampRateDown:
                    $ref: '#/components/schemas/MWRampRateNullable'
            required:
            - hour
        energyOfferHourly:
          type: array
          items:
            type: object
            properties:
              hour:
                $ref: '#/components/schemas/HourLabel'
              energyOfferHourlyDetail:
                type:
                - object
                - 'null'
                properties:
                  offerPriceCurve:
                    type:
                    - object
                    - 'null'
                    description: The scheduled price curve for a given hour ending.
                    properties:
                      slope:
                        type: boolean
                        description: If slope is true then curve is interpreted as a piece-wise linear curve otherwise it is treated as a block curve. A curve with no segments is given the default slope value of false.
                      priceCurveSegments:
                        type: array
                        items:
                          type: object
                          properties:
                            mw:
            

# --- truncated at 32 KB (278 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/miso/refs/heads/main/openapi/miso-offer-api-openapi.yml