> ## 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.

# Resource Coverage

> SDK namespaces, methods, and mapped API routes

# Resource Coverage

This page maps each SDK namespace to core methods and API routes.

## locations

| Method                | Route                             |
| --------------------- | --------------------------------- |
| `list()`              | `GET /locations`                  |
| `get(location_id)`    | `GET /locations/{location_id}`    |
| `create(data)`        | `POST /locations`                 |
| `delete(location_id)` | `DELETE /locations/{location_id}` |

## weather\_data

| Method                    | Route                                   |
| ------------------------- | --------------------------------------- |
| `list()`                  | `GET /weatherdata`                      |
| `get(weather_data_id)`    | `GET /weatherdata/{weather_data_id}`    |
| `create(data)`            | `POST /weatherdata`                     |
| `delete(weather_data_id)` | `DELETE /weatherdata/{weather_data_id}` |

## modules

| Method                  | Route                         |
| ----------------------- | ----------------------------- |
| `list()`                | `GET /modules`                |
| `get(module_id)`        | `GET /modules/{module_id}`    |
| `create_from_file(...)` | `POST /modules`               |
| `create_json(data)`     | `POST /modules/json`          |
| `delete(module_id)`     | `DELETE /modules/{module_id}` |

## inverters

| Method                  | Route                             |
| ----------------------- | --------------------------------- |
| `list()`                | `GET /inverters`                  |
| `get(inverter_id)`      | `GET /inverters/{inverter_id}`    |
| `create_from_file(...)` | `POST /inverters`                 |
| `create_json(data)`     | `POST /inverters/json`            |
| `delete(inverter_id)`   | `DELETE /inverters/{inverter_id}` |

## projects

| Method                     | Route                           |
| -------------------------- | ------------------------------- |
| `list()`                   | `GET /projects`                 |
| `get(project_id)`          | `GET /projects/{project_id}`    |
| `create(data)`             | `POST /projects`                |
| `import_from_files(...)`   | `POST /projects/import`         |
| `update(project_id, data)` | `PUT /projects/{project_id}`    |
| `delete(project_id)`       | `DELETE /projects/{project_id}` |

## energy\_models

| Method                                                       | Route                                                |
| ------------------------------------------------------------ | ---------------------------------------------------- |
| `list(include=None)`                                         | `GET /energymodels`                                  |
| `get(energy_model_id)`                                       | `GET /energymodels/{energy_model_id}`                |
| `get_with_inputs(energy_model_id)`                           | `GET /energymodels/{energy_model_id}?include=inputs` |
| `create(data, async_mode=True, timeout=None)`                | `POST /energymodels?async=...`                       |
| `update(energy_model_id, data)`                              | `PUT /energymodels/{energy_model_id}`                |
| `run_saved(energy_model_id, async_mode=False, timeout=None)` | `POST /energymodels/{energy_model_id}/run?async=...` |
| `delete(energy_model_id)`                                    | `DELETE /energymodels/{energy_model_id}`             |

`create()` keeps an SDK-level async-default convenience. The API itself is
sync-first unless `?async=true` is supplied.

For sync energy-model create/rerun calls, the SDK uses a `90s` request timeout
by default unless you pass an explicit `timeout=...`. This gives multi-block
sync fan-out runs room to complete inline; if you want immediate queued/task
responses, prefer `async_mode=True`.

For current `/energymodels` result shaping, send canonical `output` fields in
the request body:

* `output.timeSeries` for plant-level `timeSeries`
* `output.fullTimeSeries` for extended plant-level series
* `output.blockResults` for `blockTimeSeries`
* `output.blockIndex` to filter the returned `blockTimeSeries` map to one
  zero-based block
* `output.lossBreakdownTimestamps` for timestamped loss detail under
  `blockTimeSeries[<blockIndex>].lossBreakdown`
* `output.irradianceLossDetail` for additive annual detail under
  `losses.irradianceLossDetail`

SDK compatibility note:

* `create()` forwards the canonical body as-is; selected-block behavior is a
  response filter, not single-block execution.
* Legacy adapters such as `create_legacy_query(...)` still map
  `block_results` / `block_results_index` into deprecated API compatibility
  fields.
* Returned `blockTimeSeries` keys preserve the API's original zero-based block
  numbering.
* Returned additive block outputs already represent the full configured
  `numberOfInverters` count for that block type.

## shading\_scenes

| Method                               | Route                                           |
| ------------------------------------ | ----------------------------------------------- |
| `list()`                             | `GET /shadingscenes`                            |
| `get(scene_id)`                      | `GET /shadingscenes/{scene_id}`                 |
| `create_from_json(...)`              | `POST /shadingscenes`                           |
| `import_file(...)`                   | `POST /shadingscenes/import`                    |
| `create(...)`                        | Alias for `import_file(...)`                    |
| `refresh(scene_id)`                  | `POST /shadingscenes/{scene_id}/refresh`        |
| `set_tracking_inputs(scene_id, ...)` | `POST /shadingscenes/{scene_id}/trackinginputs` |
| `delete(scene_id)`                   | `DELETE /shadingscenes/{scene_id}`              |

Legacy API compatibility note:

* Older clients may still call `GET /shadingscenes/{scene_id}` with `returnshading=true`, `returnmodel=true`, or `returntableshading=true`.
* Those query params are still supported on the API as additive compatibility shims for historical workflows.
* New SDK usage should prefer `get(scene_id)` for scene data, `get_results(scene_id, include_status=...)` for shading outputs, and the dedicated viewer route when viewer-oriented geometry or aggregate shading data is needed.

## tasks

| Method                                                    | Route                  |
| --------------------------------------------------------- | ---------------------- |
| `list(status=None, task_type=None, page=1, page_size=50)` | `GET /tasks`           |
| `get(task_id)`                                            | `GET /tasks/{task_id}` |

## workflows

| Method             | Route                          |
| ------------------ | ------------------------------ |
| `get(workflow_id)` | `GET /workflows/{workflow_id}` |

## workspaces

| Method                       | Route                                     |
| ---------------------------- | ----------------------------------------- |
| `list()`                     | `GET /workspaces`                         |
| `get(workspace_id)`          | `GET /workspaces/{workspace_id}`          |
| `create(data)`               | `POST /workspaces`                        |
| `update(workspace_id, data)` | `PUT /workspaces/{workspace_id}`          |
| `delete(workspace_id)`       | `DELETE /workspaces/{workspace_id}`       |
| `list_users(workspace_id)`   | `GET /workspaces/{workspace_id}/users`    |
| `get_settings(workspace_id)` | `GET /workspaces/{workspace_id}/settings` |

## File Upload Support

`projects`, `modules`, `inverters`, and `shading_scenes` support disk-path and/or open-file-object upload patterns.
