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

# Unified Projects

> Access unified project data combining EIA 860M and interconnection queue sources

## Overview

The unified projects endpoint provides a simplified, consolidated view of energy projects by combining data from multiple sources including EIA 860M and major grid operator interconnection queues. This endpoint standardizes project information across different data sources to provide a unified perspective on the energy project landscape.

## Endpoint

<CodeGroup>
  ```bash cURL theme={null}
  curl -H "x-api-key: your_api_key_here" \
    "https://api.cleanview.co/api/v1/projects?limit=50&technology=Solar&state=CA"
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch('https://api.cleanview.co/api/v1/projects?limit=50&technology=Solar&state=CA', {
    headers: {
      'x-api-key': 'your_api_key_here'
    }
  });
  const data = await response.json();
  ```

  ```python Python theme={null}
  import requests

  headers = {'x-api-key': 'your_api_key_here'}
  response = requests.get(
      'https://api.cleanview.co/api/v1/projects?limit=50&technology=Solar&state=CA',
      headers=headers
  )
  data = response.json()
  ```
</CodeGroup>

## Query Parameters

| Parameter             | Type    | Default | Description                                                               |
| --------------------- | ------- | ------- | ------------------------------------------------------------------------- |
| `limit`               | integer | 1000    | Number of records to return (50-5000)                                     |
| `offset`              | integer | 0       | Number of records to skip                                                 |
| `state`               | string  | -       | Filter by state code (e.g., CA, TX, NY)                                   |
| `technology`          | string  | -       | Filter by standardized technology type                                    |
| `status`              | string  | -       | Filter by project status                                                  |
| `source_table`        | string  | -       | Filter by data source table                                               |
| `min_capacity`        | number  | -       | Minimum capacity (MW)                                                     |
| `max_capacity`        | number  | -       | Maximum capacity (MW)                                                     |
| `balancing_authority` | string  | -       | Filter by balancing authority code                                        |
| `developer`           | string  | -       | Filter by developer name (e.g., NextEra, Tesla). Supports partial matches |

### Technology Types

Common standardized technology types:

| Type            | Description            |
| --------------- | ---------------------- |
| `Solar`         | Solar photovoltaic     |
| `Wind`          | Wind turbine           |
| `Battery`       | Battery energy storage |
| `Natural Gas`   | Natural gas generation |
| `Biomass`       | Biomass generation     |
| `Hydroelectric` | Hydroelectric          |
| `Geothermal`    | Geothermal             |

<Note>
  **Hybrid Project Availability**: Hybrid technology classifications are available for interconnection queue data (PJM, MISO, SPP, NE-ISO, NYISO) but not for CAISO, ERCOT, or EIA 860M data sources.
</Note>

### Project Status

| Status      | Description           |
| ----------- | --------------------- |
| `Operating` | Currently operational |
| `Planned`   | Planned/permitted     |
| `Cancelled` | Cancelled/withdrawn   |
| `Retired`   | Retired from service  |

### Data Sources

Projects are sourced from:

| Source         | Description                  |
| -------------- | ---------------------------- |
| `eia_860m`     | EIA 860M Monthly data        |
| `caiso_queue`  | CAISO interconnection queue  |
| `ercot_queue`  | ERCOT interconnection queue  |
| `pjm_queue`    | PJM interconnection queue    |
| `miso_queue`   | MISO interconnection queue   |
| `nyiso_queue`  | NYISO interconnection queue  |
| `ne_iso_queue` | ISO-NE interconnection queue |
| `spp_queue`    | SPP interconnection queue    |

### Developer Information

Developer information is always included in the response when available. The `developer` parameter can be used to filter results:

**Filtering Options:**

* **Single developer**: `developer=NextEra` - Returns projects where developer name contains "NextEra"
* **Partial matching**: `developer=Solar` - Returns projects where developer name contains "Solar" (e.g., "First Solar", "Solar Power Corp")
* **Case insensitive**: All developer filtering is case-insensitive

## Example Requests

<AccordionGroup>
  <Accordion title="Get Solar Projects in California">
    ```bash theme={null}
    curl -H "x-api-key: your_api_key_here" \
      "https://api.cleanview.co/api/v1/projects?technology=Solar&state=CA&limit=50"
    ```
  </Accordion>

  <Accordion title="Get Operating Projects">
    ```bash theme={null}
    curl -H "x-api-key: your_api_key_here" \
      "https://api.cleanview.co/api/v1/projects?status=Operating&limit=50"
    ```
  </Accordion>

  <Accordion title="Get Large Projects (>100 MW)">
    ```bash theme={null}
    curl -H "x-api-key: your_api_key_here" \
      "https://api.cleanview.co/api/v1/projects?min_capacity=100&limit=50"
    ```
  </Accordion>

  <Accordion title="Get Projects from EIA Data Only">
    ```bash theme={null}
    curl -H "x-api-key: your_api_key_here" \
      "https://api.cleanview.co/api/v1/projects?source_table=eia_860m&limit=50"
    ```
  </Accordion>

  <Accordion title="Get Projects by Specific Developer">
    ```bash theme={null}
    curl -H "x-api-key: your_api_key_here" \
      "https://api.cleanview.co/api/v1/projects?developer=NextEra&limit=50"
    ```
  </Accordion>
</AccordionGroup>

### Data Availability Summary

| Source                        | Hybrid Projects | Status                          |
| ----------------------------- | --------------- | ------------------------------- |
| PJM, MISO, SPP, NE-ISO, NYISO | 1,343 total     | ✅ **Full support**              |
| CAISO, ERCOT, EIA 860M        | 0               | ❌ **No hybrid classifications** |

<Warning>
  **System Limitations**: Our current query system is not optimized for detecting hybrid projects in CAISO, ERCOT, or EIA data sources.
</Warning>

### Complete Documentation

For comprehensive hybrid project guidance including:

* ✅ **All 4 query methods** with code examples
* ✅ **Detailed workarounds** for sources without hybrid data
* ✅ **Root cause analysis** and technical limitations
* ✅ **Future enhancement roadmap**

[**👉 See our complete Hybrid Project System Limitations documentation.**](/known-issues#hybrid-project-system-limitations)

## Response Schema

<ResponseExample>
  ```json Example Response theme={null}
  {
    "summary": {
      "limit": 50,
      "offset": 0,
      "total_results": 62222,
      "has_more": true,
      "current_page": 1,
      "total_pages": 1245
    },
    "filters": {
      "state": null,
      "technology": null,
      "status": "all",
      "source_table": null,
      "min_capacity": null,
      "max_capacity": null,
      "balancing_authority": null,
      "developer": null
    },
    "customer": {
      "id": "test_user_001",
      "name": "Test Developer"
    },
    "data": [
      {
        "source_table": "eia_860m",
        "source_id": "57472_CTG",
        "project_name": "TBE-Montgomery LLC",
        "capacity_mw": 12,
        "operating_date": "2039-12-01",
        "technology": "Biomass",
        "county": "Orange",
        "state": "NY",
        "balancing_authority": "NYIS",
        "status": "Planned",
        "latitude": 41.4885,
        "longitude": -74.2262,
        "has_ia_signed": null,
        "under_construction": true,
        "ir_request_date": null,
        "developer": null
      },
      {
        "source_table": "miso_queue",
        "source_id": "J4004",
        "project_name": "Other_",
        "capacity_mw": 392,
        "operating_date": "2032-10-31",
        "technology": "Solar",
        "county": "Peoria",
        "state": "IL",
        "balancing_authority": "MISO",
        "status": "Planned",
        "latitude": null,
        "longitude": null,
        "has_ia_signed": false,
        "under_construction": false,
        "ir_request_date": "2025-05-03",
        "raw_fields": {
          "project_id": "J4004",
          "request_status": "Active",
          "queue_date": "2025-05-03T04:00:00.000Z",
          "withdrawn_date": null,
          "done_date": null,
          "in_service_date": "2032-10-31T04:00:00.000Z",
          "transmission_owner": "AMEREN TRANSMISSION COMPANY OF ILLINOIS",
          "county": "Peoria",
          "state": "IL",
          "study_cycle": "DPP Cycle Pending",
          "study_group": "Central",
          "study_phase": null,
          "service_type": null,
          "poi_name": "Other_",
          "summer_mw": 392,
          "winter_mw": 392,
          "fuel_type": "Solar",
          "facility_type": "Photovoltaic",
          "post_gia_status": null,
          "negotiated_in_service_date": null,
          "dp1_eris_mw": 0,
          "dp1_nris_mw": 0,
          "dp2_eris_mw": 0,
          "dp2_nris_mw": 0
        },
        "developer": null
      }
    ]
  }
  ```
</ResponseExample>

<Note>
  **Raw Fields for ISO Queue Data**: Projects from interconnection queue sources (CAISO, ERCOT, PJM, MISO, NYISO, ISO-NE, SPP) include a nested `raw_fields` object containing all ISO-specific upstream data. EIA 860M projects return only standardized fields without the `raw_fields` object.
</Note>

## Response Fields

### Standardized Fields (All Sources)

| Field                 | Type    | Description                                                                |
| --------------------- | ------- | -------------------------------------------------------------------------- |
| `source_table`        | string  | Source data table (eia\_860m, caiso\_queue, etc.)                          |
| `source_id`           | string  | Unique identifier within source table                                      |
| `project_name`        | string  | Project or facility name                                                   |
| `capacity_mw`         | number  | Capacity in megawatts                                                      |
| `operating_date`      | string  | Operating or proposed online date (YYYY-MM-DD)                             |
| `technology`          | string  | Standardized technology type                                               |
| `county`              | string  | County name                                                                |
| `state`               | string  | State code (CA, TX, NY, etc.)                                              |
| `balancing_authority` | string  | Balancing authority code                                                   |
| `status`              | string  | Project status (Operating, Planned, Cancelled, Retired)                    |
| `latitude`            | number  | Project latitude in decimal degrees (nullable)                             |
| `longitude`           | number  | Project longitude in decimal degrees (nullable)                            |
| `developer`           | string  | Developer/owner name                                                       |
| `has_ia_signed`       | boolean | Whether an Interconnection Agreement has been executed (null for EIA data) |
| `under_construction`  | boolean | Whether the project is or was under construction                           |
| `ir_request_date`     | string  | Interconnection Request date in YYYY-MM-DD format (null for EIA data)      |

### Interconnection Milestone Fields

The fields `has_ia_signed`, `under_construction`, and `ir_request_date` represent **milestone progression** through the interconnection process, not just current operational state. This distinction is important for understanding cancelled projects.

<Info>
  **Milestone vs. Current State**: A project with `status=Cancelled` may still show `has_ia_signed=true` or `under_construction=true`. This indicates how far the project progressed before being cancelled—valuable for analyzing interconnection queue attrition patterns.
</Info>

#### Data Availability by Source

| Source   | `has_ia_signed` | `under_construction` | `ir_request_date` |
| -------- | --------------- | -------------------- | ----------------- |
| EIA 860M | `null`          | Available            | `null`            |
| CAISO    | Available       | `null`               | Available         |
| ERCOT    | Available       | Available            | Available         |
| PJM      | Available       | Available            | Available         |
| MISO     | Available       | Available            | Available         |
| NYISO    | Available       | `null`               | Available         |
| ISO-NE   | Available       | Available            | Available         |
| SPP      | Available       | `null`               | Available         |

#### Example: Cancelled Project Analysis

```json theme={null}
{
  "source_table": "miso_queue",
  "source_id": "J720",
  "project_name": "Lakefield - Raun 345 kV line",
  "status": "Cancelled",
  "has_ia_signed": true,
  "under_construction": true,
  "ir_request_date": "2018-03-12"
}
```

This cancelled MISO project shows:

* `has_ia_signed: true` — The project secured an Interconnection Agreement
* `under_construction: true` — Construction had begun before withdrawal
* The `status: Cancelled` indicates the project is no longer active

<Tip>
  **Attrition Analysis**: Query `status=Cancelled` with `has_ia_signed=true` to find projects that failed after securing an IA—these represent late-stage failures with different characteristics than early-stage withdrawals.
</Tip>

### ISO-Specific Raw Fields

| Field        | Type   | Description                                                                                  |
| ------------ | ------ | -------------------------------------------------------------------------------------------- |
| `raw_fields` | object | Nested object containing all ISO-specific upstream data (interconnection queue sources only) |

The `raw_fields` object structure varies by `source_table`:

* **CAISO Queue**: See [CAISO endpoint documentation](/api-reference/endpoint/caiso) for 47 CAISO-specific fields
* **ERCOT Queue**: See [ERCOT endpoint documentation](/api-reference/endpoint/ercot) for 45 ERCOT-specific fields
* **PJM Queue**: See [PJM endpoint documentation](/api-reference/endpoint/pjm) for 38 PJM-specific fields
* **MISO Queue**: See [MISO endpoint documentation](/api-reference/endpoint/miso) for 41 MISO-specific fields (includes DPP process fields)
* **NYISO Queue**: See [NYISO endpoint documentation](/api-reference/endpoint/nyiso) for 38 NYISO-specific fields (includes storage fields)
* **ISO-NE Queue**: See [ISO-NE endpoint documentation](/api-reference/endpoint/iso-ne) for 41 ISO-NE-specific fields (includes five-phase study process)
* **SPP Queue**: See [SPP endpoint documentation](/api-reference/endpoint/spp) for 43 SPP-specific fields (includes DISIS cluster data)
* **EIA 860M**: No raw\_fields object - only standardized fields listed above

<Note>
  **Data Consolidation**: This endpoint provides a simplified view of complex energy project data. For detailed information, use the specific EIA 860M or interconnection queue endpoints.
</Note>

<Info>
  **Cross-Reference**: Projects may appear in multiple sources. The `source_table` and `source_id` fields help identify the original data source for each record.
</Info>


## OpenAPI

````yaml GET /projects
openapi: 3.0.0
info:
  title: Cleanview Public API
  version: 0.1.0
  description: >-
    RESTful API for accessing clean energy data including EIA capacity and ISO
    queue information
  contact:
    name: Cleanview Energy
    url: https://cleanview.co/demo
servers:
  - url: https://api.cleanview.co/api/v1
    description: Production server
security:
  - ApiKeyAuth: []
paths:
  /projects:
    get:
      tags:
        - Projects
      summary: Get merged energy projects data
      description: >-
        Retrieve a merged view of operating, planned, cancelled or retired
        projects from EIA 860M and ISO/RTO interconnection queues
      parameters:
        - in: query
          name: limit
          schema:
            type: integer
            minimum: 50
            maximum: 5000
            default: 1000
          description: Number of records to return
        - in: query
          name: offset
          schema:
            type: integer
            default: 0
          description: Number of records to skip
        - in: query
          name: state
          schema:
            type: string
          description: Filter by state code (e.g., CA, TX, NY)
        - in: query
          name: technology
          schema:
            type: string
          description: Filter by technology type (Solar, Wind, Battery, etc.)
        - in: query
          name: status
          schema:
            type: string
          description: Filter by project status (Operating, Planned, Cancelled, Retired)
        - in: query
          name: source
          schema:
            type: string
          description: Filter by data source (eia_860m, caiso_queue, ercot_queue, etc.)
        - in: query
          name: min_capacity
          schema:
            type: number
          description: Minimum capacity in MW
        - in: query
          name: max_capacity
          schema:
            type: number
          description: Maximum capacity in MW
        - in: query
          name: balancing_authority
          schema:
            type: string
          description: Filter by balancing authority
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                required:
                  - success
                  - summary
                  - filters
                  - customer
                  - data
                properties:
                  success:
                    type: boolean
                    description: Always true for successful responses
                    example: true
                  summary:
                    $ref: '#/components/schemas/Summary'
                  filters:
                    type: object
                    description: Applied filters for the request
                  customer:
                    type: object
                    description: Customer information for the API key
                    properties:
                      id:
                        type: string
                      name:
                        type: string
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/UnifiedProject'
                    description: Array of merged project records
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    Summary:
      type: object
      description: Summary metadata for pagination
      properties:
        limit:
          type: integer
          description: Number of records per page
        offset:
          type: integer
          description: Number of records to skip
        total_results:
          type: integer
          description: Total number of records matching the query
        has_more:
          type: boolean
          description: Whether additional records exist beyond this page
        current_page:
          type: integer
          description: Current page number (1-indexed)
        total_pages:
          type: integer
          description: Total number of pages available
    UnifiedProject:
      type: object
      properties:
        source_table:
          type: string
          description: Source data table (eia_860m, caiso_queue, ercot_queue, etc.)
        source_id:
          type: string
          description: Unique identifier within source table
        project_name:
          type: string
          description: Project or facility name
        capacity_mw:
          type: number
          nullable: true
          description: Capacity in megawatts
        operating_date:
          type: string
          format: date
          nullable: true
          description: Operating or proposed online date
        technology:
          type: string
          nullable: true
          description: Technology type (Solar, Wind, Battery, Natural Gas, etc.)
        county:
          type: string
          nullable: true
          description: County name
        state:
          type: string
          nullable: true
          description: State code (CA, TX, NY, etc.)
        balancing_authority:
          type: string
          nullable: true
          description: Balancing authority code (CISO, ERCO, PJM, etc.)
        status:
          type: string
          nullable: true
          description: Project status (Operating, Planned, Cancelled, Retired)
        latitude:
          type: number
          nullable: true
          description: Project latitude coordinate in decimal degrees
        longitude:
          type: number
          nullable: true
          description: Project longitude coordinate in decimal degrees
    Error:
      type: object
      description: Standardized error response structure
      required:
        - error
        - message
      properties:
        error:
          type: string
          description: Error code identifier for programmatic handling
          enum:
            - INVALID_API_KEY
            - API_KEY_NOT_FOUND
            - INVALID_LIMIT
            - INVALID_OFFSET
            - INVALID_STATUS
            - INVALID_CAPACITY
            - INVALID_TECHNOLOGY
            - INVALID_STATES
            - INVALID_DATE
            - INVALID_DATE_RANGE
            - INVALID_BOOLEAN
            - DATABASE_ERROR
            - INTERNAL_ERROR
          example: INVALID_LIMIT
        message:
          type: string
          description: Human-readable error description
          example: Limit must be at least 50 records per request
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: API key authentication using x-api-key header

````