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

# Create power plant

> Creates a power plant for a prediction. May attach X-Message header with configuration warnings.

**Parameters:**

- `projectId` (path, required): The project ID.
    
- `predictionId` (path, required): The prediction ID.
    
- `powerPlant` (body, required): The PVPlant entity to create.




## OpenAPI

````yaml /api-docs/api-reference/plantpredict-api.yaml post /Project/{projectId}/Prediction/{predictionId}/PowerPlant
openapi: 3.1.0
info:
  title: PlantPredict API
  version: 12.13.0
  description: >
    ## What is PlantPredict?


    PlantPredict is an industry-leading performance modeling platform for
    utility-scale

    solar power plants. It predicts energy yield across the full project
    lifecycle —

    from early-stage site prospecting through detailed engineering and
    operational

    monitoring. The same engine that powers the PlantPredict web UI is fully
    exposed

    via this REST API, enabling automation of complex, high-time-resolution
    energy

    predictions without any UI interaction.


    ## Domain Model — read this first


    Understanding the object hierarchy is essential before calling the API:


    - **Weather** — A weather file (hourly irradiance, temperature, wind, etc.)
    for a
      geographic location. Imported from a provider (e.g. SolarAnywhere, Meteonorm) or
      uploaded manually. Weather files live in a company-wide library and are referenced
      by Predictions.

    - **Module** — A PV module definition parameterized with electrical
    characteristics
      (STC power, temperature coefficients, single-diode model parameters, IAM curves,
      etc.). Modules live in a company-wide library.

    - **Inverter** — An inverter definition with efficiency curves,
    voltage/power ratings,
      and optional kVA derating curves. Inverters live in a company-wide library.

    - **Project** — A named location (lat/lon) that acts as a container for one
    or more
      Predictions. Holds geographic metadata (country, elevation, UTC offset) and a status.

    - **Prediction** — The core simulation configuration nested under a Project.
    Defines
      the simulation period, model selections (transposition, air mass, degradation,
      soiling, shading, spectral shift models), uncertainty error terms, and references
      to a Weather file. A Prediction must be linked to a PowerPlant before it can be run.
      Status values: 0 = Draft, 1 = Active, 2 = Issued, 3 = Archived.

    - **PowerPlant** — The physical plant design attached to a Prediction.
    Describes the
      electrical topology: Blocks → Arrays → Inverters → DC Fields (strings of modules).
      Also includes transformers, transmission lines, energy storage (ESS), availability
      losses, and LGIA export limits.

    - **Shade Scene** — An optional 3D shading model (PVJ format) attached to a
      Prediction's DC Fields. Supports import from PVC or SHD files. Shade and TABT
      (Tracker Angle Back-Tracking) calculations are queued and run asynchronously.

    ## Typical workflow to run a prediction


    1. Ensure a **Weather** file exists (search, download, or import one).

    2. Ensure a **Module** and **Inverter** exist in the library.

    3. **POST /Project** — create a project at the site location.

    4. **POST /Project/{projectId}/Prediction** — create a prediction with model
    settings.

    5. **POST /Project/{projectId}/Prediction/{predictionId}/PowerPlant** —
    attach a plant
       design referencing your module and inverter.
    6. **POST /Project/{projectId}/Prediction/{predictionId}/Run** — queue the
    simulation.

    7. Poll **GET /Project/{projectId}/Prediction/{predictionId}/Overview**
    until
       `status` reaches 2 (complete), then retrieve results via `/ResultSummary`,
       `/ResultDetails`, or `/NodalJson`.

    ## Authentication


    OAuth 2.0 **Client Credentials** flow via AWS Cognito. The spec advertises

    a single `bearerAuth` scheme — fetch a token yourself with the snippet

    below, then either paste it into the in-browser playground or pass it on

    every request as `Authorization: Bearer <token>`.


    > **Why not advertise OAuth2 directly?** Most users have access to the

    > production tenant only, and we don't want to invite anyone to enter

    > long-lived `client_id` / `client_secret` credentials into a third-party

    > documentation site. Keep credentials in your own environment; ship

    > short-lived bearer tokens to wherever they are needed.


    - Token URL:
    `https://terabase-prd.auth.us-west-2.amazoncognito.com/oauth2/token`

    - Scopes: `transactions/get` (read), `transactions/post` (write) — request
      both to access the entire surface.
    - Send credentials as **Basic Auth** in the token request header.


    Example:


    ```bash

    curl -X POST
    'https://terabase-prd.auth.us-west-2.amazoncognito.com/oauth2/token' \
      -u "$PP_CLIENT_ID:$PP_CLIENT_SECRET" \
      -d 'grant_type=client_credentials&scope=transactions/get transactions/post'
    ```


    API credentials (Client ID + Secret) are generated per user by a company
    admin

    inside the PlantPredict UI (gear icon → user profile → Generate API
    Credentials).

    Store them securely — they are shown only once.


    ## Notes


    - All request/response bodies are JSON (`Content-Type: application/json`).

    - The API is stateless — every request must supply complete inputs; there is
    no session.

    - POST operations that create entities return `{"id": <integer>}`.

    - Many integer fields (model types, status codes) map to named enums — use
      `GET /Definitions` to retrieve the full enum catalog at runtime.
    - Long-running operations (Run, Shade calculations, TABT) are asynchronous;
    poll
      the corresponding `ProcessingStatus` endpoint to track progress.
    - Responses may include an `X-Message` header with non-blocking warnings
    (e.g.
      duplicate project name).
servers:
  - url: https://api.plantpredict.terabase.energy
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Definitions
    description: Enum and model type definitions
  - name: Projects
    description: Solar project management
  - name: Predictions
    description: Energy prediction configuration and execution
  - name: PowerPlant
    description: Power plant design (blocks, arrays, inverters, transformers)
  - name: TimeSeries
    description: Custom time series data inputs
  - name: Results
    description: Prediction results — summary, details, nodal, average energy
  - name: FinancialModel
    description: Financial model parameters and cashflow results
  - name: Reports
    description: Report generation and export
  - name: ShadeScene
    description: 3D shade scene management and calculations
  - name: Weather
    description: Weather file import, download, and management
  - name: Inverters
    description: Inverter library management
  - name: Modules
    description: PV module library and single-diode parameter generation
  - name: ASHRAE
    description: ASHRAE climate station lookup
  - name: System
    description: System version and maintenance status
  - name: Company
    description: Company settings and user management
  - name: Country
    description: Reference country data
paths:
  /Project/{projectId}/Prediction/{predictionId}/PowerPlant:
    post:
      tags:
        - PowerPlant
      summary: Create power plant
      description: >
        Creates a power plant for a prediction. May attach X-Message header with
        configuration warnings.


        **Parameters:**


        - `projectId` (path, required): The project ID.
            
        - `predictionId` (path, required): The prediction ID.
            
        - `powerPlant` (body, required): The PVPlant entity to create.
      operationId: createPowerPlant
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: integer
        - name: predictionId
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PowerPlant'
            examples:
              postman-projects-powerplant-powerplant:
                value:
                  blocks:
                    - name: 1
                      nodalExportOptions:
                        id: 103584
                        exportBlock: false
                        exportArrays: false
                        exportInverters: false
                        exportDCFields: true
                      resultList: null
                      arrays:
                        - name: 1
                          resultList: null
                          inverters:
                            - name: A
                              resultList: null
                              dcFields:
                                - name: 1
                                  moduleId: 40014
                                  module:
                                    status: 5
                                    model: FS-7505A-TR1 September2022
                                    manufacturer: First Solar
                                    length: 2300
                                    width: 1215
                                    weight: 39.7
                                    defaultOrientation: 1
                                    numberOfCellsInSeries: 268
                                    numberOfCellsInParallel: 1
                                    stcShortCircuitCurrent: 3.013
                                    stcOpenCircuitVoltage: 223.931
                                    stcmppCurrent: 2.767
                                    stcmppVoltage: 182.47
                                    stcMaxPower: 505
                                    stcPowerTempCoef: -0.32
                                    stcShortCircuitCurrentTempCoef: 0.04
                                    stcOpenCircuitVoltageTempCoef: -0.28
                                    stcEfficiency: 18.071211307926283
                                    minTolerance: 0
                                    maxTolerance: 5
                                    cellTechnologyType: 6
                                    constructionType: 1
                                    faciality: 0
                                    bifacialityFactor: null
                                    transmissionFactor: null
                                    backSideMismatch: null
                                    dataSource: 1
                                    lightInducedDegradation: 0
                                    moduleQuality: 0
                                    moduleMismatchCoefficient: 0.5
                                    heatBalanceConvectiveCoef: 0
                                    heatBalanceConductiveCoef: 29
                                    sandiaConductiveCoef: -3.47
                                    sandiaConvectiveCoef: -0.0594
                                    cellToModuleTempDiff: 3
                                    saturationCurrentAtSTC: 4.91147e-10
                                    seriesResistanceAtSTC: 3.885
                                    shuntResistanceAtSTC: 11500
                                    diodeIdealityFactorAtSTC: 1.452
                                    exponentialDependencyOnShuntResistance: 5.5
                                    darkShuntResistance: 12000
                                    linearTempDependenceOnGamma: 0.01584022038567493
                                    shortCircuitCurrentAtSTC: 3.013
                                    recombinationParameter: 2.15
                                    builtInVoltage: 0.9
                                    bandgapVoltage: 1.5
                                    linearTempDependenceOnIsc: 0.04
                                    heatAbsorptionCoefAlphaT: 0.9
                                    referenceIrradiance: 1000
                                    referenceTemperature: 25
                                    aGamma: null
                                    bGamma: null
                                    cGamma: null
                                    dGamma: null
                                    spectralResponse: 2
                                    pvModel: 0
                                    useDefaultSandiaIAM: false
                                    useDefaultTabularIAM: false
                                    sandiaSpectralA0: null
                                    sandiaSpectralA1: null
                                    sandiaSpectralA2: null
                                    sandiaSpectralA3: null
                                    sandiaSpectralA4: null
                                    sandiaIAMB0: 6.038242275137197
                                    sandiaIAMB1: -0.5248112239136882
                                    sandiaIAMB2: 0.02130703918426116
                                    sandiaIAMB3: -0.00042240723312322523
                                    sandiaIAMB4: 0.000004091960268471147
                                    sandiaIAMB5: -1.5564126828688897e-8
                                    ashraeiamB0: 0.05
                                    spectral2B0: 0.86273
                                    spectral2B1: -0.038948
                                    spectral2B2: -0.012506
                                    spectral2B3: 0.098871
                                    spectral2B4: 0.084658
                                    spectral2B5: -0.0042948
                                    iamFactors: null
                                    degradationModel: 1
                                    linearDegradationRate: 0.3
                                    nonLinearDegradationRates: null
                                    cellDesignType: null
                                    powerAtSTC: 0
                                    powerAtSTCExcludingWiringLosses: 0
                                    effectiveIrradianceResponse: null
                                    electricalShadingFractionalEffect: 0
                                    moduleShadingResponse: 1
                                    id: 40014
                                    name: FS-7505A-TR1 CdTe September2022
                                    description: S7_505_540
                                  trackingType: 1
                                  moduleOrientation: 1
                                  irradianceOptimization: true
                                  rotationSpeed: 1
                                  nonIdealityFactor: 0.2
                                  tablesRemovedForPCS: 0
                                  transverseSlope: null
                                  baselineSlope: null
                                  northSouthRoadWidth: 6.096011996927617
                                  eastWestRoadWidth: 6.096011996927617
                                  modulesHigh: 1
                                  modulesWide: 6
                                  lateralIntermoduleGap: 0.02
                                  verticalIntermoduleGap: 0.02
                                  fieldLength: 54.876237623762385
                                  fieldWidth: 42.54999999999999
                                  collectorBandwidth: 2.3
                                  tableLength: 7290.1
                                  tablesPerRow: 8
                                  postToPostSpacing: 5.749999999999999
                                  numberOfRows: 8
                                  tableToTableSpacing: 0
                                  moduleAzimuth: 180
                                  moduleTilt: 45
                                  trackingBacktrackingType: 0
                                  trackerPitchAngleD: 0
                                  minimumTrackingLimitAngleD: -60
                                  maximumTrackingLimitAngleD: 60
                                  trackerStowAngle: 0
                                  postHeight: 1.5
                                  structureShading: 5
                                  backSideMismatch: null
                                  fieldDcPower: 180
                                  modulesWiredInSeries: 6
                                  numberOfSeriesStringsWiredInParallel: 59.40594059405941
                                  plannedModuleRating: 505
                                  modTempModel: 0
                                  sandiaConductiveCoef: -3.47
                                  sandiaConvectiveCoef: -0.0594
                                  cellToModuleTempDiff: 3
                                  heatBalanceConductiveCoef: 29
                                  heatBalanceConvectiveCoef: 0
                                  nominalOperatingCellTemperature: 45
                                  transmittanceAbsorptance: 0.9
                                  moduleMismatchCoefficient: 0.5
                                  moduleQuality: 0
                                  lightInducedDegradation: 0
                                  trackerLoadLoss: 2.028
                                  dcWiringLossAtSTC: 1.5
                                  dcHealth: 1
                                  monthlySeasonalTiltFactors: []
                                  resultList: null
                                  effectiveResistanceAtSTC: 0
                                  totalModuleArea: 0
                                  uiamd: null
                                  uiamg: null
                                  ushD: null
                                  ushG: null
                                  moduleSurfaceTemperatureTimeSeriesId: null
                                  moduleSurfaceTemperatureTimeSeries: null
                                  useModuleSurfaceTempTimeSeries: false
                                  trackingAngleTimeSeriesId: null
                                  trackingAngleTimeSeries: null
                                  shadeObjects: []
                                  tableType: 1
                                  shadingAlgorithm: 0
                                  ground:
                                    edgeOffset: 50
                                    calculate: true
                                    color: '#afaea4'
                                    slope: 2
                                    slopeAzimuth: 180
                                  repeater: 1
                                  description: null
                              inverterId: 8238
                              inverter:
                                status: 5
                                model: Sunny Highpower SHP150-US-20-PEAK3
                                manufacturer: SMA
                                powerRated: 150
                                apparentPower: 150
                                minDCPowerThreshold: 100
                                minVoltage: 855
                                maxMPPVoltage: 1450
                                maxAbsoluteVoltage: 1500
                                maxCurrent: 180
                                maxElevation: 100
                                outputVoltage: 600
                                usekVACurves: true
                                usePQCurves: false
                                dataSource: 2
                                efficiencyCurves: null
                                kVACurves: null
                                pqCurves: null
                                inverterType: 1
                                id: 8238
                                name: SMA Sunny Highpower SHP150-US-20-PEAK3
                                description: null
                              setpointkW: 150
                              powerFactor: 1
                              designDerate: 1
                              kVARating: 150
                              totalModuleArea: 0
                              derateTimeSeriesId: null
                              derateTimeSeries: null
                              useDerateTimeSeries: false
                              setPointTimeSeriesId: null
                              setPointTimeSeries: null
                              useSetPointTimeSeries: false
                              vmppAdjustmentTimeSeriesId: null
                              vmppAdjustmentTimeSeries: null
                              useVMPPTimeSeriesAdjustment: false
                              imppAdjustmentTimeSeriesId: null
                              imppAdjustmentTimeSeries: null
                              useIMPPTimeSeriesAdjustment: false
                              repeater: 1
                              description: null
                          acCollectionLoss: 1
                          dasLoad: 800
                          coolingLoad: 0
                          additionalLosses: 0
                          matchTotalInverterkVA: true
                          transformerEnabled: true
                          transformerkVARating: 150
                          transformerHighSideVoltage: 34.5
                          transformerNoLoadLoss: 0.2
                          transformerFullLoadLoss: 0.7
                          totalModules: 0
                          totalModuleArea: 0
                          trackerMotorLosses: 0
                          repeater: 1
                          description: null
                      energizationDate: null
                      useEnergizationDate: false
                      numberOfModules: 0
                      totalModuleArea: 0
                      repeater: 1
                      description: null
                  transformers: []
                  transmissionLines: []
                  ess: null
                  exportSystem: false
                  exportESS: false
                  lgiaLimitTimeSeriesId: null
                  lgiaLimitTimeSeries: null
                  useLGIALimitTimeSeries: false
                  powerFactor: 1
                  lgiaLimitation: null
                  availabilityLoss: null
                  useCoolingTemp: true
                  desiredDCACRatio: null
                  powerPlantDesignType: 0
                  customArrayConfig: null
                  useCustomArrayConfig: false
                  totalModuleArea: 0
                  maxMVTransformerVoltage: 0
                  maximumPlantOutput: 0
      responses:
        '200':
          description: Success
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
components:
  schemas:
    PowerPlant:
      type: object
      properties:
        id:
          type: integer
        blocks:
          type: array
          items:
            $ref: '#/components/schemas/Block'
        transformers:
          type: array
          items:
            type: object
        transmissionLines:
          type: array
          items:
            type: object
        ess:
          type:
            - object
            - 'null'
          description: >-
            The Energy Storage System page allows you to configure an optional
            AC-coupled battery energy storage system (BESS) for your prediction.
            To enable energy storage, enter a Nameplate capacity value (input
            #1) and an Inverter Real Power rating (input #9). The Dispatch
            Algorithm should also be configured to ensure the...
          x-doc-source: docs-only:user-guide/ui/energy-storage-system.mdx
        esS_Id:
          type:
            - integer
            - 'null'
        exportSystem:
          type:
            - object
            - 'null'
          description: >-
            The 3D View provides tools for analyzing terrain and racking
            placement within your map-based power plant design. This interface
            enables terrain slope analysis, table slope constraint
            identification, and post height calculations.
          x-doc-source: docs-only:user-guide/ui/power-plant-builder-3d-view.mdx
        exportESS:
          type: boolean
        lgiaLimitTimeSeriesId:
          type:
            - integer
            - 'null'
        lgiaLimitTimeSeries:
          type:
            - object
            - 'null'
          description: >-
            The Simulation Settings page allows you to configure the prediction
            timeframe and select the sub-models used for irradiance calculation,
            module performance, shading analysis, and degradation. These
            settings control the algorithms applied during the energy prediction
            simulation.
          x-doc-source: docs-only:user-guide/ui/simulation-settings.mdx
        useLGIALimitTimeSeries:
          type: boolean
        powerFactor:
          type: number
        lgiaLimitation:
          type:
            - number
            - 'null'
        nighttimeDisconnect:
          type: boolean
        availabilityLoss:
          type: number
        useCoolingTemp:
          type: boolean
        desiredDCACRatio:
          type:
            - number
            - 'null'
        powerPlantDesignType:
          type: integer
          enum:
            - 0
            - 1
          x-enum-varnames:
            - Simple
            - Advanced
          description: PowerPlantDesignType
        customArrayConfig:
          type:
            - object
            - 'null'
          description: >-
            The Array page allows you to configure the medium-voltage (MV)
            transformer, AC collection circuit losses, and define the number of
            equivalent arrays within a Block. An Array aggregates multiple
            inverters and their associated DC Fields. Similar to the Inverter
            page, the Array supports a multiplier to model multiple...
          x-doc-source: docs-only:user-guide/ui/power-plant-builder-array.mdx
        useCustomArrayConfig:
          type: boolean
        totalModuleArea:
          type: number
        maxMVTransformerVoltage:
          type: number
        maximumPlantOutput:
          type: number
        resultList:
          type:
            - array
            - 'null'
          items:
            type: object
          readOnly: true
    Block:
      type: object
      properties:
        name:
          type: integer
        nodalExportOptions: {}
        resultList:
          readOnly: true
        arrays:
          type: array
          items:
            $ref: '#/components/schemas/PowerPlantArray'
        energizationDate: {}
        useEnergizationDate:
          type: boolean
        numberOfModules:
          type: number
          format: double
          readOnly: true
        totalModuleArea:
          type: number
          format: double
          readOnly: true
        repeater:
          type: integer
        id:
          type: integer
          readOnly: true
        description: {}
    ModelStateError:
      type: object
      description: |
        ASP.NET Web API validation error. `modelState` maps the offending
        field name (or `request`) to a list of human-readable messages.
      properties:
        message:
          type: string
        modelState:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
      required:
        - message
    PowerPlantArray:
      type: object
      properties:
        name:
          type: integer
        resultList:
          readOnly: true
        inverters:
          type: array
          items:
            $ref: '#/components/schemas/PowerPlantInverter'
        acCollectionLoss:
          type: number
          format: double
        dasLoad:
          type: number
          format: double
        coolingLoad:
          type: number
          format: double
        additionalLosses:
          type: number
          format: double
        matchTotalInverterkVA:
          type: boolean
        transformerEnabled:
          type: boolean
        transformerkVARating:
          type: number
          format: double
        transformerHighSideVoltage:
          type: number
          format: double
        transformerNoLoadLoss:
          type: number
          format: double
        transformerFullLoadLoss:
          type: number
          format: double
        totalModules:
          type: integer
          readOnly: true
        totalModuleArea:
          type: number
          format: double
          readOnly: true
        trackerMotorLosses:
          type: number
          format: double
        repeater:
          type: integer
        id:
          type: integer
          readOnly: true
        description: {}
    PowerPlantInverter:
      type: object
      properties:
        name:
          type: string
        resultList:
          readOnly: true
        dcFields:
          type: array
          items:
            $ref: '#/components/schemas/DCField'
        inverterId:
          type: integer
        inverter:
          type: object
        setpointkW:
          type: number
          format: double
        powerFactor:
          type: number
          format: double
        designDerate:
          type: number
          format: double
        kVARating:
          type: number
          format: double
        totalModuleArea:
          type: number
          format: double
          readOnly: true
        derateTimeSeriesId: {}
        derateTimeSeries: {}
        useDerateTimeSeries:
          type: boolean
        setPointTimeSeriesId: {}
        setPointTimeSeries: {}
        useSetPointTimeSeries:
          type: boolean
        vmppAdjustmentTimeSeriesId: {}
        vmppAdjustmentTimeSeries: {}
        useVMPPTimeSeriesAdjustment:
          type: boolean
        imppAdjustmentTimeSeriesId: {}
        imppAdjustmentTimeSeries: {}
        useIMPPTimeSeriesAdjustment:
          type: boolean
        repeater:
          type: integer
        id:
          type: integer
          readOnly: true
        description: {}
    DCField:
      type: object
      properties:
        name:
          type: integer
        moduleId:
          type: integer
        module:
          type: object
        trackingType:
          type: integer
          enum:
            - 0
            - 1
            - 2
          x-enum-varnames:
            - FixedTilt
            - HorizontalTracker
            - SeasonalTilt
          description: DCFieldTrackingTypeEnum
        moduleOrientation:
          type: integer
          enum:
            - 0
            - 1
          x-enum-varnames:
            - Landscape
            - Portrait
          description: ModuleOrientation
        irradianceOptimization:
          type: boolean
        irradianceOptimizationType:
          type: integer
          enum:
            - 0
            - 1
            - 2
          x-enum-varnames:
            - None
            - PlantPredict
            - ArrayTechnologies
          description: IrradianceOptimizationType
        rotationSpeed:
          type: number
          format: double
        nonIdealityFactor:
          type: number
          format: double
        tablesRemovedForPCS:
          type: number
          format: double
        transverseSlope: {}
        baselineSlope: {}
        northSouthRoadWidth:
          type: number
          format: double
        eastWestRoadWidth:
          type: number
          format: double
        modulesHigh:
          type: integer
        modulesWide:
          type: integer
        lateralIntermoduleGap:
          type: number
          format: double
        verticalIntermoduleGap:
          type: number
          format: double
        fieldLength:
          type: number
          format: double
          readOnly: true
        fieldWidth:
          type: number
          format: double
          readOnly: true
        collectorBandwidth:
          type: number
          format: double
        tableLength:
          type: number
          format: double
        tablesPerRow:
          type: number
          format: double
        postToPostSpacing:
          type: number
          format: double
        numberOfRows:
          type: number
          format: double
        tableToTableSpacing:
          type: number
          format: double
        moduleAzimuth:
          type: number
          format: double
        moduleTilt:
          type: number
          format: double
        trackingBacktrackingType:
          type: integer
          enum:
            - 0
            - 1
            - 2
          x-enum-varnames:
            - TrueTracking
            - Backtracking
            - TimeSeries
          description: DCFieldBacktrackingType
        trackerPitchAngleD:
          type: number
          format: double
        minimumTrackingLimitAngleD:
          type: number
          format: double
        maximumTrackingLimitAngleD:
          type: number
          format: double
        nightTimeStowAngleD:
          type:
            - number
            - 'null'
          format: double
        trackerStowAngle:
          type: number
          format: double
        windStowType:
          type: integer
          enum:
            - 0
            - 1
            - 2
          x-enum-varnames:
            - Disabled
            - PlantPredict
            - ArrayTechnologies
          description: WindStowType
        arrayTechnologiesWindStowType:
          type: integer
          enum:
            - 0
            - 1
          x-enum-varnames:
            - InteriorRow
            - ExteriorRow
          description: ArrayTechnologiesWindStowType
        windStowThreshold: {}
        windStowAngle: {}
        postHeight:
          type: number
          format: double
        structureShading:
          type: number
          format: double
        backSideMismatch:
          type: number
          format: double
        fieldDcPower:
          type: number
          format: double
          readOnly: true
        modulesWiredInSeries:
          type: integer
        numberOfSeriesStringsWiredInParallel:
          type: number
          format: double
        plannedModuleRating:
          type: number
          format: double
        modTempModel:
          type:
            - integer
            - 'null'
          enum:
            - 0
            - 1
            - 2
          x-enum-varnames:
            - HeatBalance
            - Sandia
            - NOCT
          description: DCFieldModuleTemperatureModelType
        sandiaConductiveCoef:
          type: number
          format: double
        sandiaConvectiveCoef:
          type: number
          format: double
        cellToModuleTempDiff:
          type: number
          format: double
        heatBalanceConductiveCoef:
          type: number
          format: double
        heatBalanceConvectiveCoef:
          type: number
          format: double
        nominalOperatingCellTemperature:
          type: number
          format: double
        transmittanceAbsorptance:
          type: number
          format: double
        moduleMismatchCoefficient:
          type: number
          format: double
        moduleQuality:
          type: number
          format: double
        lightInducedDegradation:
          type: number
          format: double
        trackerLoadLoss:
          type: number
          format: double
        dcWiringLossAtSTC:
          type: number
          format: double
        dcHealth:
          type: number
          format: double
        inverterIdShadeSource: {}
        monthlySeasonalTiltFactors:
          type: array
          items:
            type: object
        resultList:
          readOnly: true
        effectiveResistanceAtSTC:
          type: number
          format: double
          readOnly: true
        totalModuleArea:
          type: number
          format: double
          readOnly: true
        uiamd:
          readOnly: true
        uiamg:
          readOnly: true
        ushD:
          readOnly: true
        ushG:
          readOnly: true
        moduleSurfaceTemperatureTimeSeriesId: {}
        moduleSurfaceTemperatureTimeSeries: {}
        useModuleSurfaceTempTimeSeries:
          type: boolean
        trackingAngleTimeSeriesId: {}
        trackingAngleTimeSeries: {}
        groundCoverageRatio:
          type: number
          format: double
        calculateDCFields:
          type: boolean
        shadeObjects:
          type: array
          items:
            type: object
        tableType:
          type: integer
          enum:
            - 0
            - 1
          x-enum-varnames:
            - Flat
            - Sloped
          description: TableType
        shadingAlgorithm:
          type: integer
          enum:
            - 0
            - 1
            - 2
          x-enum-varnames:
            - V2DDefault
            - InfiniteLengthRows
            - V3DDeprecated
          description: ShadeAlgorithm
        ground:
          type: object
        lockModuleAzimuth:
          type: boolean
        lockModulesHigh:
          type: boolean
        lockPostHeight:
          type: boolean
        lockModulesWide:
          type: boolean
        lockNumberOfSeriesStringsWiredInParallel:
          type: boolean
        lockModulesWiredInSeries:
          type: boolean
        lockPostToPostSpacing:
          type: boolean
        lockMwAc:
          type: boolean
        lockNumberOfRows:
          type: boolean
        lockBacksideMismatch:
          type: boolean
        repeater:
          type: integer
        id:
          type: integer
          readOnly: true
        description: {}
  responses:
    BadRequest:
      description: |
        The request was rejected. PlantPredict returns one of two shapes:

        * `application/json` with `{message, modelState}` for input
          validation errors (ASP.NET Web API model-state). The `modelState`
          map keys field names to lists of human-readable error messages.
        * `text/plain` with a free-form message for runtime / database
          errors that bubble up before validation completes.

        Clients should branch on the `Content-Type` header.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ModelStateError'
          example:
            message: The request is invalid.
            modelState:
              latitude:
                - The field Latitude must be between -90 and 90.
        text/plain:
          schema:
            type: string
          example: A successfully completed prediction cannot be cancelled.
    Unauthorized:
      description: >-
        Missing or invalid bearer token. The response body is empty and no
        `Content-Type` header is set; the 401 status code is the only signal.
        Fetch a fresh token (see the **Authentication** section of the API
        description) and retry.
    NotFound:
      description: >-
        The referenced resource does not exist or is not accessible to the
        caller.
      content:
        text/plain:
          schema:
            type: string
          example: Project not found.
    TooManyRequests:
      description: |
        The caller has exceeded the per-account rate limit for this operation.
        Wait and retry. The PlantPredict API does not currently emit
        `Retry-After`; back off with an exponential schedule (start at 30s).
        Response body is typically empty.
    ServerError:
      description: |
        Unexpected server-side error. The body is usually a plain-text message
        but its structure is not guaranteed — treat it as opaque diagnostic
        text. Common causes: database constraint violation, downstream
        service timeout, internal exception. Retry-safe for idempotent
        requests; for non-idempotent ones, verify state before retrying.
      content:
        text/plain:
          schema:
            type: string
          example: An error has occurred.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Pass `Authorization: Bearer <token>` on every request. See the
        **Authentication** section of the API description for how to fetch a
        token.

````