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

# Modeling Object Inputs

> Create-input guidance for location, weather, module, inverter, and shading scene objects

# Modeling Object Inputs

Before running energy model simulations, integrations usually create and reuse modeling objects.

## Location (`POST /locations`)

Body model: `LocationCreateRequest`

| Field                    | Type         | Required | Notes                                            |
| ------------------------ | ------------ | -------- | ------------------------------------------------ |
| `name`                   | string       | yes      | Display name                                     |
| `latitude` / `longitude` | number       | yes      | `lat` / `lng` are accepted as deprecated aliases |
| `elevation`              | number       | no       | Auto-enriched if omitted                         |
| `ashrae`                 | number       | no       | Climate zone metadata                            |
| `streetAddress`          | string       | no       | Address metadata                                 |
| `farShading`             | object       | no       | Horizon profile wrapper                          |
| `soiling`                | monthly dict | no       | Monthly 0-1 factors                              |
| `weatherData`            | object       | no       | Optional nested weather create payload           |

## Weather Data (`POST /weatherdata`)

Body model: `WeatherDataCreateRequest`

| Field                                    | Type           | Required    | Notes                                           |
| ---------------------------------------- | -------------- | ----------- | ----------------------------------------------- |
| `weatherDataSource`                      | string         | conditional | Use non-`provided` for provider-backed sourcing |
| `locationId` or `globalLocationId`       | integer/string | no          | Optional association to an existing location    |
| `ghi`, `dhi`, `windSpeed`, `temperature` | number arrays  | conditional | Required when providing inline arrays           |
| `date`                                   | integer array  | conditional | Required unless exactly 8760 rows               |
| `dni`, `relativeHumidity`, `poa`         | number arrays  | no          | Optional enrichments                            |
| `soiling`                                | monthly dict   | no          | Monthly 0-1 factors                             |

<Info>
  Weather arrays must have equal lengths. Validation errors return `400` for invalid payload semantics.
</Info>

## Module

### File Upload (`POST /modules`)

* Content type: multipart form-data
* Required part: `file` (`.pan`)
* API parses and stores `properties` and optional AOI curve automatically.

### JSON (`POST /modules/json`)

Body model: `ModuleCreateRequest`

| Field        | Type   | Required | Notes                                         |
| ------------ | ------ | -------- | --------------------------------------------- |
| `name`       | string | yes      | Display name                                  |
| `properties` | object | yes      | Parsed or manually authored module properties |
| `aoi`        | object | no       | AOI curve data                                |

## Inverter

### File Upload (`POST /inverters`)

* Content type: multipart form-data
* Required part: `file` (`.ond`)
* API parses and stores `properties` and optional efficiency points.

### JSON (`POST /inverters/json`)

Body model: `InverterCreateRequest`

| Field        | Type   | Required | Notes                                           |
| ------------ | ------ | -------- | ----------------------------------------------- |
| `name`       | string | yes      | Display name                                    |
| `properties` | object | yes      | Parsed or manually authored inverter properties |
| `efficiency` | object | no       | Efficiency curve data                           |

## Shading Scene

### Canonical JSON Create (`POST /shadingscenes`)

Body model: `ShadingSceneCreateRequest`

| Field                           | Type   | Required | Notes                                                                 |
| ------------------------------- | ------ | -------- | --------------------------------------------------------------------- |
| `name`                          | string | yes      | Scene display name                                                    |
| `sceneSource`                   | string | yes      | Source label such as `api-json`, `pvc`, `pvcomplete`, or `helioscope` |
| `sceneJson.tableList`           | array  | yes      | At least one table                                                    |
| `sceneJson.obstructions`        | array  | no       | Defaults to `[]`                                                      |
| `sceneJson.modelInputs`         | object | no       | Defaults `diodesReadIn=true`, `diffuseTableIndex=0`                   |
| `sceneJson.properties`          | object | no       | Defaults to meter-based import metadata                               |
| `sceneJson.shadingSceneSummary` | object | no       | Auto-derived when omitted                                             |
| `trackingParameters`            | object | no       | Required fields become mandatory when object is present               |

Validation notes:

* Each table must provide either `outline` or all of `xpoints`/`ypoints`/`zpoints`.
* Table geometry is rectangular: exactly 4 corner points.
* `torqueTubePoint_1`, `torqueTubePoint_2`, and `torqueTubeVector` are optional and auto-derived when omitted.
* `transverseDiodes` and `stringsPerLength` must be positive integers and default to `10` and `1`.
* Obstruction outlines need at least 3 points.
* Top-level extra fields are rejected; nested `sceneJson` objects allow pass-through metadata.

### File Import (`POST /shadingscenes/import`)

Content type: multipart form-data

| Field                                                                    | Type    | Required | Notes                             |
| ------------------------------------------------------------------------ | ------- | -------- | --------------------------------- |
| `file`                                                                   | upload  | yes      | Scene file (`pvc`/`shd` workflow) |
| `name`                                                                   | string  | yes      | Scene name                        |
| `file_type`                                                              | string  | no       | Defaults to `pvc`                 |
| `read_diodes`                                                            | boolean | no       | Defaults to `true`                |
| `gcr`, `azimuth`, `axis_tilt`, `back_tracking`, `max_angle`              | mixed   | no       | Optional tracking config          |
| `terrain_aware`, `terrain_aware_diode_threshold`, `terrain_aware_method` | mixed   | no       | Optional terrain-aware controls   |

### Tracking Inputs (`POST /shadingscenes/{scene_id}/trackinginputs`)

* Required form field: `gcr`
* Optional fields: `azimuth`, `axis_tilt`, `back_tracking`, `max_angle`, `terrain_aware`, `terrain_aware_diode_threshold`, `terrain_aware_method`

## Reuse Pattern

1. Create modeling objects once per workspace.
2. Store returned IDs.
3. Reference those IDs in `EnergyModelInput` block/root payloads.
