openapi: 3.2.0
info:
title: PlantPredict Inverters API
version: 12.13.0
description: "## What is PlantPredict?\n\nPlantPredict is an industry-leading performance modeling platform for utility-scale\nsolar power plants. It predicts energy yield across the full project lifecycle —\nfrom early-stage site prospecting through detailed engineering and operational\nmonitoring. The same engine that powers the PlantPredict web UI is fully exposed\nvia this REST API, enabling automation of complex, high-time-resolution energy\npredictions without any UI interaction.\n\n## Domain Model — read this first\n\nUnderstanding the object hierarchy is essential before calling the API:\n\n- **Weather** — A weather file (hourly irradiance, temperature, wind, etc.) for a\n geographic location. Imported from a provider (e.g. SolarAnywhere, Meteonorm) or\n uploaded manually. Weather files live in a company-wide library and are referenced\n by Predictions.\n\n- **Module** — A PV module definition parameterized with electrical characteristics\n (STC power, temperature coefficients, single-diode model parameters, IAM curves,\n etc.). Modules live in a company-wide library.\n\n- **Inverter** — An inverter definition with efficiency curves, voltage/power ratings,\n and optional kVA derating curves. Inverters live in a company-wide library.\n\n- **Project** — A named location (lat/lon) that acts as a container for one or more\n Predictions. Holds geographic metadata (country, elevation, UTC offset) and a status.\n\n- **Prediction** — The core simulation configuration nested under a Project. Defines\n the simulation period, model selections (transposition, air mass, degradation,\n soiling, shading, spectral shift models), uncertainty error terms, and references\n to a Weather file. A Prediction must be linked to a PowerPlant before it can be run.\n Status values: 0 = Draft, 1 = Active, 2 = Issued, 3 = Archived.\n\n- **PowerPlant** — The physical plant design attached to a Prediction. Describes the\n electrical topology: Blocks → Arrays → Inverters → DC Fields (strings of modules).\n Also includes transformers, transmission lines, energy storage (ESS), availability\n losses, and LGIA export limits.\n\n- **Shade Scene** — An optional 3D shading model (PVJ format) attached to a\n Prediction's DC Fields. Supports import from PVC or SHD files. Shade and TABT\n (Tracker Angle Back-Tracking) calculations are queued and run asynchronously.\n\n## Typical workflow to run a prediction\n\n1. Ensure a **Weather** file exists (search, download, or import one).\n2. Ensure a **Module** and **Inverter** exist in the library.\n3. **POST /Project** — create a project at the site location.\n4. **POST /Project/{projectId}/Prediction** — create a prediction with model settings.\n5. **POST /Project/{projectId}/Prediction/{predictionId}/PowerPlant** — attach a plant\n design referencing your module and inverter.\n6. **POST /Project/{projectId}/Prediction/{predictionId}/Run** — queue the simulation.\n7. Poll **GET /Project/{projectId}/Prediction/{predictionId}/Overview** until\n `status` reaches 2 (complete), then retrieve results via `/ResultSummary`,\n `/ResultDetails`, or `/NodalJson`.\n\n## Authentication\n\nOAuth 2.0 **Client Credentials** flow via AWS Cognito. The spec advertises\na single `bearerAuth` scheme — fetch a token yourself with the snippet\nbelow, then either paste it into the in-browser playground or pass it on\nevery request as `Authorization: Bearer <token>`.\n\n> **Why not advertise OAuth2 directly?** Most users have access to the\n> production tenant only, and we don't want to invite anyone to enter\n> long-lived `client_id` / `client_secret` credentials into a third-party\n> documentation site. Keep credentials in your own environment; ship\n> short-lived bearer tokens to wherever they are needed.\n\n- Token URL: `https://terabase-prd.auth.us-west-2.amazoncognito.com/oauth2/token`\n- Scopes: `transactions/get` (read), `transactions/post` (write) — request\n both to access the entire surface.\n- Send credentials as **Basic Auth** in the token request header.\n\nExample:\n\n```bash\ncurl -X POST 'https://terabase-prd.auth.us-west-2.amazoncognito.com/oauth2/token' \\\n -u \"$PP_CLIENT_ID:$PP_CLIENT_SECRET\" \\\n -d 'grant_type=client_credentials&scope=transactions/get transactions/post'\n```\n\nAPI credentials (Client ID + Secret) are generated per user by a company admin\ninside the PlantPredict UI (gear icon → user profile → Generate API Credentials).\nStore them securely — they are shown only once.\n\n## Notes\n\n- All request/response bodies are JSON (`Content-Type: application/json`).\n- The API is stateless — every request must supply complete inputs; there is no session.\n- POST operations that create entities return `{\"id\": <integer>}`.\n- Many integer fields (model types, status codes) map to named enums — use\n `GET /Definitions` to retrieve the full enum catalog at runtime.\n- Long-running operations (Run, Shade calculations, TABT) are asynchronous; poll\n the corresponding `ProcessingStatus` endpoint to track progress.\n- Responses may include an `X-Message` header with non-blocking warnings (e.g.\n duplicate project name).\n"
servers:
- url: https://api.plantpredict.terabase.energy
description: Production
security:
- bearerAuth: []
tags:
- name: Inverters
description: Inverter library management
paths:
/Inverter:
get:
tags:
- Inverters
summary: List all accessible inverters
description: "# Get All Inverters\n\nReturns a list of all available Inverters in the system.\n\n## Overview\n\nThis endpoint retrieves a comprehensive list of all inverter configurations stored in the database. Each inverter entry contains detailed technical specifications, power ratings, voltage limits, efficiency curves, and metadata about ownership and modification history.\n\n## Response Fields\n\n### Status & Identification\n\n- **id** - Unique identifier for the inverter record\n \n- **name** - Display name of the inverter (typically includes manufacturer, model, and specifications)\n \n- **status** - Current status of the inverter record:\n - `2` - Active/Published\n \n - `5` - Archived\n \n - `6` - Legacy/Deprecated\n \n- **description** - Optional notes or additional information about the inverter configuration\n \n\n### Manufacturer & Model Information\n\n- **manufacturer** - Inverter manufacturer name (e.g., \"ABB\")\n \n- **model** - Specific model identifier (e.g., \"PVS800-57-1000kW-C\")\n \n- **inverterType** - Classification of inverter type:\n - `2` - Central inverter\n \n - Other values may represent string or micro inverters\n \n\n### Power Specifications\n\n- **powerRated** - Rated AC power output in kilowatts (kW)\n \n- **apparentPower** - Apparent power capacity in kilovolt-amperes (kVA)\n \n- **minDCPowerThreshold** - Minimum DC power threshold in watts (W) for operation\n \n- **outputVoltage** - AC output voltage in volts (V)\n \n\n### Voltage & Current Limits\n\n- **minVoltage** - Minimum DC input voltage in volts (V)\n \n- **maxMPPVoltage** - Maximum power point tracking voltage in volts (V)\n \n- **maxAbsoluteVoltage** - Maximum absolute DC voltage limit in volts (V)\n \n- **maxCurrent** - Maximum DC input current in amperes (A)\n \n\n### Environmental & Physical Constraints\n\n- **maxElevation** - Maximum operating elevation in meters above sea level\n \n\n### Curve Settings & Data Configuration\n\n- **usekVACurves** - Boolean flag indicating whether kVA derating curves are enabled\n \n- **usePQCurves** - Boolean flag indicating whether power quality curves are enabled\n \n- **dataSource** - Source identifier for the inverter data:\n - `2` - Standard/manufacturer data\n \n - Other values may indicate custom or imported data\n \n- **efficiencyCurves** - Array of efficiency curve data points (null if not configured)\n \n- **kVACurves** - Array of kVA derating curve data (null if not configured)\n \n- **pqCurves** - Array of power quality curve data (null if not configured)\n \n\n### Ownership & Company Information\n\n- **companyId** - ID of the company that owns this inverter configuration\n \n- **company** - Company object (typically null in list responses)\n \n- **ownerId** - User ID of the inverter configuration owner\n \n- **owner** - Owner user object (typically null in list responses)\n \n\n### Audit & Modification Tracking\n\n- **createdDate** - ISO 8601 timestamp when the inverter was created\n \n- **lastModified** - ISO 8601 timestamp of the most recent modification\n \n- **lastModifiedById** - User ID of the person who last modified the record\n \n- **lastModifiedBy** - Detailed user object containing:\n - **id** - User ID\n \n - **email** - User email address\n \n - **firstName** / **lastName** - User's name\n \n - **jobTitle** - User's job title\n \n - **companyId** - User's company affiliation\n \n - **status** - User account status (0 = system account, 1 = active)\n \n - **createdDateUtc** - When the user account was created\n \n - **lastLoginDateUTC** - Most recent login timestamp\n \n - **uuid** - Unique user identifier\n \n - **migrationAgreementAcceptance** - Agreement acceptance flag\n \n - **clientCredentialsCreatedOnUTC** - API credentials creation timestamp\n \n - **roles** / **logins** - Arrays of user roles and login records\n \n\n## Usage Notes\n\n- The response returns an array of inverter objects\n \n- Inverters with `status: 3` are currently active and available for use\n \n- Archived or deprecated inverters (`status: 5` or `6`) may still appear in results for historical reference\n \n- Curve data (`efficiencyCurves`, `kVACurves`, `pqCurves`) is typically null in list responses and must be retrieved individually if needed\n \n- User and company objects in the response are often null in list views to reduce payload size\n \n- Multiple inverters may share the same model name but have different IDs and configurations\n \n- The `lastModifiedBy` object provides full audit trail information for tracking changes\n"
operationId: listInverters
x-doc-source: postman
responses:
'200':
description: Array of inverters
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Inverter'
examples:
postman-all:
value:
- status: 6
model: PVS800-57-1000kW-C
manufacturer: ABB
powerRated: 1000
apparentPower: 1000
minDCPowerThreshold: 5000
minVoltage: 600
maxMPPVoltage: 850
maxAbsoluteVoltage: 1100
maxCurrent: 1710
maxElevation: 2000
outputVoltage: 400
usekVACurves: false
usePQCurves: false
dataSource: 2
efficiencyCurves: null
kVACurves: null
pqCurves: null
inverterType: 2
id: 132
name: ABB PVS800 57 1000kW C
description: null
companyId: 1
company: null
ownerId: 742
owner: null
createdDate: '2016-08-12T21:39:16.06'
lastModified: '2017-02-23T00:45:37.47'
lastModifiedById: 742
lastModifiedBy:
company: null
companyId: 1
firstName: System
lastName: Account
jobTitle: System
createdByUserId: null
createdByUser: null
status: 0
createdDateUtc: '2016-09-01T00:00:00'
settings: null
costCenter: null
migrationAgreementAcceptance: true
clientCredentialsCreatedOnUTC: null
uuid: null
userWeatherDownloads: null
lastLoginDateUTC: null
roles: []
logins: []
id: 742
normalizedUserName: null
email: FS108328@FIRSTSOLAR.COM
normalizedEmail: null
concurrencyStamp: 976622b5-3695-43b1-84db-823499eebbf0
- status: 5
model: PVS800-57-1000kW-C
manufacturer: ABB
powerRated: 1000
apparentPower: 1000
minDCPowerThreshold: 5000
minVoltage: 600
maxMPPVoltage: 850
maxAbsoluteVoltage: 1100
maxCurrent: 1710
maxElevation: 2000
outputVoltage: 400
usekVACurves: false
usePQCurves: false
dataSource: 2
efficiencyCurves: null
kVACurves: null
pqCurves: null
inverterType: 2
id: 711
name: ABB PVS800 57 1000kW C
description: null
companyId: 1
company: null
ownerId: 742
owner: null
createdDate: '2017-02-23T00:45:37.45'
lastModified: '2017-02-23T00:45:37.45'
lastModifiedById: 742
lastModifiedBy:
company: null
companyId: 1
firstName: System
lastName: Account
jobTitle: System
createdByUserId: null
createdByUser: null
status: 0
createdDateUtc: '2016-09-01T00:00:00'
settings: null
costCenter: null
migrationAgreementAcceptance: true
clientCredentialsCreatedOnUTC: null
uuid: null
userWeatherDownloads: null
lastLoginDateUTC: null
roles: []
logins: []
id: 742
normalizedUserName: null
email: FS108328@FIRSTSOLAR.COM
normalizedEmail: null
concurrencyStamp: c3c3e3e9-add2-4f51-b23d-fc9ad96a584a
- status: 2
model: PVS800-57-1000kW-C
manufacturer: ABB
powerRated: 1000
apparentPower: 1000
minDCPowerThreshold: 5000
minVoltage: 600
maxMPPVoltage: 850
maxAbsoluteVoltage: 1100
maxCurrent: 1710
maxElevation: 2000
outputVoltage: 400
usekVACurves: true
usePQCurves: true
dataSource: 2
efficiencyCurves: null
kVACurves: null
pqCurves: null
inverterType: 2
id: 10332
name: ABB PVS800 57 1000kW C
description: This are some inverter test notes
companyId: 1042
company: null
ownerId: 5093
owner: null
createdDate: '2025-11-21T15:24:54.293'
lastModified: '2025-11-21T15:24:54.293'
lastModifiedById: 5093
lastModifiedBy:
company: null
companyId: 1042
firstName: Jesse
lastName: Milam
jobTitle: Software Developer
createdByUserId: 5091
createdByUser: null
status: 1
createdDateUtc: '2021-09-23T19:48:03.647'
settings: null
costCenter: null
migrationAgreementAcceptance: true
clientCredentialsCreatedOnUTC: '2025-09-24T18:21:27.657'
uuid: 626e7c4e-0a96-4af0-996c-c5e979c25df1
userWeatherDownloads: null
lastLoginDateUTC: '2026-02-02T00:00:00'
roles: []
logins: []
id: 5093
normalizedUserName: null
email: jmilam@terabase.energy
normalizedEmail: null
concurrencyStamp: 9744b672-ed90-44f0-8b4e-ac9c2926240f
- status: 2
model: PVS800-57-1000kW-C
manufacturer: ABB
powerRated: 1000
apparentPower: 1000
minDCPowerThreshold: 5000
minVoltage: 600
maxMPPVoltage: 850
maxAbsoluteVoltage: 1100
maxCurrent: 1710
maxElevation: 2000
outputVoltage: 400
usekVACurves: true
usePQCurves: true
dataSource: 2
efficiencyCurves: null
kVACurves: null
pqCurves: null
inverterType: 2
id: 10333
name: ABB PVS800 57 1000kW C
description: This are some inverter test notes
companyId: 1042
company: null
ownerId: 5093
owner: null
createdDate: '2025-11-21T10:31:46.4'
lastModified: '2025-11-21T10:31:46.4'
lastModifiedById: 5093
lastModifiedBy:
company: null
companyId: 1042
firstName: Jesse
lastName: Milam
jobTitle: Software Developer
createdByUserId: 5091
createdByUser: null
status: 1
createdDateUtc: '2021-09-23T19:48:03.647'
settings: null
costCenter: null
migrationAgreementAcceptance: true
clientCredentialsCreatedOnUTC: '2025-09-24T18:21:27.657'
uuid: 626e7c4e-0a96-4af0-996c-c5e979c25df1
userWeatherDownloads: null
lastLoginDateUTC: '2026-02-02T00:00:00'
roles: []
logins: []
id: 5093
normalizedUserName: null
email: jmilam@terabase.energy
normalizedEmail: null
concurrencyStamp: 1eb43180-5df0-471a-9367-94bae3bfeefa
- status: 2
model: PVS800-57-1000kW-C
manufacturer: ABB
powerRated: 1000
apparentPower: 1000
minDCPowerThreshold: 5000
minVoltage: 600
maxMPPVoltage: 850
maxAbsoluteVoltage: 1100
maxCurrent: 1710
maxElevation: 2000
outputVoltage: 400
usekVACurves: true
usePQCurves: true
dataSource: 2
efficiencyCurves: null
kVACurves: null
pqCurves: null
inverterType: 2
id: 10334
name: ABB PVS800 57 1000kW C
description: This are some inverter test notes
companyId: 1042
company: null
ownerId: 5093
owner: null
createdDate: '2025-11-21T10:32:48.2'
lastModified: '2025-11-21T10:32:48.2'
lastModifiedById: 5093
lastModifiedBy:
company: null
companyId: 1042
firstName: Jesse
lastName: Milam
jobTitle: Software Developer
createdByUserId: 5091
createdByUser: null
status: 1
createdDateUtc: '2021-09-23T19:48:03.647'
settings: null
costCenter: null
migrationAgreementAcceptance: true
clientCredentialsCreatedOnUTC: '2025-09-24T18:21:27.657'
uuid: 626e7c4e-0a96-4af0-996c-c5e979c25df1
userWeatherDownloads: null
lastLoginDateUTC: '2026-02-02T00:00:00'
roles: []
logins: []
id: 5093
normalizedUserName: null
email: jmilam@terabase.energy
normalizedEmail: null
concurrencyStamp: 3c17d76b-87d8-4690-8d4c-23d1c7ecd4a6
- status: 2
model: PVS800-57-1000kW-C
manufacturer: ABB
powerRated: 1000
apparentPower: 1000
minDCPowerThreshold: 5000
minVoltage: 600
maxMPPVoltage: 850
maxAbsoluteVoltage: 1100
maxCurrent: 1710
maxElevation: 2000
outputVoltage: 400
usekVACurves: true
usePQCurves: true
dataSource: 2
efficiencyCurves: null
kVACurves: null
pqCurves: null
inverterType: 2
id: 10335
name: ABB PVS800 57 1000kW C
description: This are some inverter test notes
companyId: 1042
company: null
ownerId: 5093
owner: null
createdDate: '2025-11-21T10:40:03.99'
lastModified: '2025-11-21T10:40:03.99'
lastModifiedById: 5093
lastModifiedBy:
company: null
companyId: 1042
firstName: Jesse
lastName: Milam
jobTitle: Software Developer
createdByUserId: 5091
createdByUser: null
status: 1
createdDateUtc: '2021-09-23T19:48:03.647'
settings: null
costCenter: null
migrationAgreementAcceptance: true
clientCredentialsCreatedOnUTC: '2025-09-24T18:21:27.657'
uuid: 626e7c4e-0a96-4af0-996c-c5e979c25df1
userWeatherDownloads: null
lastLoginDateUTC: '2026-02-02T00:00:00'
roles: []
logins: []
id: 5093
normalizedUserName: null
email: jmilam@terabase.energy
normalizedEmail: null
concurrencyStamp: 9a499c2e-0a9a-45a4-b096-118f1f039c8f
- status: 2
model: PVS800-57-1000kW-C
manufacturer: ABB
powerRated: 1000
apparentPower: 1000
minDCPowerThreshold: 5000
minVoltage: 600
maxMPPVoltage: 850
maxAbsoluteVoltage: 1100
maxCurrent: 1710
maxElevation: 2000
outputVoltage: 400
usekVACurves: true
usePQCurves: true
dataSource: 2
efficiencyCurves: null
kVACurves: null
pqCurves: null
inverterType: 2
id: 10336
name: ABB PVS800 57 1000kW C
description: This are some inverter test notes
companyId: 1042
company: null
ownerId: 5093
owner: null
createdDate: '2025-11-21T10:46:00.417'
lastModified: '2025-11-21T10:46:00.417'
lastModifiedById: 5093
lastModifiedBy:
company: null
companyId: 1042
firstName: Jesse
lastName: Milam
jobTitle: Software Developer
createdByUserId: 5091
createdByUser: null
status: 1
createdDateUtc: '2021-09-23T19:48:03.647'
settings: null
costCenter: null
migrationAgreementAcceptance: true
clientCredentialsCreatedOnUTC: '2025-09-24T18:21:27.657'
uuid: 626e7c4e-0a96-4af0-996c-c5e979c25df1
userWeatherDownloads: null
lastLoginDateUTC: '2026-02-02T00:00:00'
roles: []
logins: []
id: 5093
normalizedUserName: null
email: jmilam@terabase.energy
normalizedEmail: null
concurrencyStamp: d73e037f-4444-47b5-a299-8c257ff9767a
- status: 2
model: PVS800-57-1000kW-C
manufacturer: ABB
powerRated: 1000
apparentPower: 1000
minDCPowerThreshold: 5000
minVoltage: 600
maxMPPVoltage: 850
maxAbsoluteVoltage: 1100
maxCurrent: 1710
maxElevation: 2000
outputVoltage: 400
usekVACurves: false
usePQCurves: false
dataSource: 2
efficiencyCurves: null
kVACurves: null
pqCurves: null
inverterType: 2
id: 10370
name: ABB PVS800 57 1000kW C
description: null
companyId: 1042
company: null
ownerId: 5094
owner: null
createdDate: '2026-01-28T13:22:53.497'
lastModified: '2026-01-28T13:22:53.497'
lastModifiedById: 5094
lastModifiedBy:
company: null
companyId: 1042
firstName: Jason
lastName: Jacobs
jobTitle: Software Developer
createdByUserId: 5091
createdByUser: null
status: 1
createdDateUtc: '2021-09-23T19:49:23.147'
settings: null
costCenter: null
migrationAgreementAcceptance: true
clientCredentialsCreatedOnUTC: '2023-09-15T15:48:57.297'
uuid: 83ff4266-9d81-4eff-82fd-75031b5f1dc8
userWeatherDownloads: null
lastLoginDateUTC: '2026-01-30T00:00:00'
roles: []
logins: []
id: 5094
normalizedUserName: null
email: jjacobs@terabase.energy
normalizedEmail: null
concurrencyStamp: 495ee35f-64ec-40e2-933d-efd9ac84707c
- status: 2
model: PVS800-57-1000kW-C
manufacturer: ABB
powerRated: 1000
apparentPower: 1000
minDCPowerThreshold: 5000
minVoltage: 600
maxMPPVoltage: 850
maxAbsoluteVoltage: 1100
maxCurrent: 1710
maxElevation: 2000
outputVoltage: 400
usekVACurves: true
usePQCurves: true
dataSource: 2
efficiencyCurves: null
kVACurves: null
pqCurves: null
inverterType: 2
id: 9111
name: ABB PVS800 57 1000kW C
description: This are some inverter test notes
companyId: 1042
company: null
ownerId: 5094
owner: null
createdDate: '2023-01-12T14:14:44.26'
lastModified: '2025-11-20T16:16:33.297'
lastModifiedById: 5094
lastModifiedBy:
company: null
companyId: 1042
firstName: Jason
lastName: Jacobs
jobTitle: Software Developer
createdByUserId: 5091
createdByUser: null
status: 1
createdDateUtc: '2021-09-23T19:49:23.147'
settings: null
costCenter: null
migrationAgreementAcceptance: true
clientCredentialsCreatedOnUTC: '2023-09-15T15:48:57.297'
uuid: 83ff4266-9d81-4eff-82fd-75031b5f1dc8
userWeatherDownloads: null
lastLoginDateUTC: '2026-01-30T00:00:00'
roles: []
logins: []
id: 5094
normalizedUserName: null
email: jjacobs@terabase.energy
normalizedEmail: null
concurrencyStamp: 07239ceb-f38b-4117-92af-a989ed2f224f
- status: 5
model: PVS980-58-1840kW-6 RevE
manufacturer: ABB
powerRated: 1840
apparentPower: 2024
minDCPowerThreshold: 10000
minVoltage: 862
maxMPPVoltage: 1500
maxAbsoluteVoltage: 1500
maxCurrent: 1925
maxElevation: 4000
outputVoltage: 608
usekVACurves: true
usePQCurves: false
dataSource: 6
efficiencyCurves: null
kVACurves: null
pqCurves: null
inverterType: 2
id: 918
name: ABB PVS980-58-1840kW-6
description: null
companyId: 1
company: null
ownerId: 742
owner: null
createdDate: '2017-03-28T16:08:33.96'
lastModified: '2021-05-19T19:14:38.2'
lastModifiedById: 742
lastModifiedBy:
company: null
companyId: 1
firstName: System
lastName: Account
jobTitle: System
createdByUserId: null
createdByUser: null
status: 0
createdDateUtc: '2016-09-01T00:0
# --- truncated at 32 KB (81 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/terabase-energy/refs/heads/main/openapi/terabase-energy-inverters-api-openapi.yml