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

# Register a Renewable Energy Producer with Lumenaza

> Step-by-step guide to registering a renewable energy producer, uploading plant documents, and monitoring delivery status via the Lumenaza v3 API.

This guide covers the full onboarding flow for a renewable energy producer — including plant data preparation, registration, document uploads, data verification, and delivery status monitoring.

**Base URL:** `https://api.lumenaza.de/` (use `https://api.test.lumenaza.de/` for sandbox testing)

All requests require an `Authorization` header:

```http theme={null}
Authorization: Bearer <token>
```

***

<Steps>
  <Step title="Prepare Plant Information">
    Before registering, gather the following plant details. Having them ready will make registration straightforward and reduce the chance of rejected submissions.

    ### Production Type

    Set `production_type` to one of the following values:

    | Value | Description |
    | - | - |
    | `solar` | Photovoltaic solar installation |
    | `wind` | Wind turbine |
    | `gas` | Biogas plant |
    | `water` | Hydroelectric plant |
    | `battery` | Battery storage system |

    ### Plant Specifics Object

    The `plant_specifics` object contains technical details about the installation. Required fields vary by production type, but typically include:

    | Field | Type | Description |
    | - | - | - |
    | `capacity` | integer | Installed capacity in watts-peak (Wp) |
    | `longitude` | float | Geographic longitude of the plant location |
    | `latitude` | float | Geographic latitude of the plant location |

    Example `plant_specifics` for a solar installation:

    ```json theme={null}
    {
      "capacity": 10000,
      "longitude": 13.4050,
      "latitude": 52.5200
    }
    ```

    ### Market Location or Tranche

    You must provide **exactly one** of:

    * `market_location_identifier` — an 11-digit market location ID (Marktlokations-ID / MaLo-ID)
    * `tranche` — a tranche reference for plants without a dedicated market location

    ### VAT and Business Settings

    Set `is_reverse_charge` to `true` if the producer is a business customer subject to reverse charge VAT (§13b UStG). This affects invoice generation for the feed-in tariff.

    ### Redispatch Resources (Optional)

    If the plant participates in grid redispatch, you may supply:

    * `control_resource` — object describing the controllability setup (e.g. remote shutdown capability)
    * `technical_resources` — array of technical resource objects representing individual generation units

    These fields are required only when the plant is registered for redispatch management. Consult your grid operator or Lumenaza account manager for the exact schema.

    <Note>
      The `preferred_delivery_start` date for producers must be the **first day of the month, at least the month after next** — that is, the current month and the immediately following month are both excluded. For example, if today is 15 January, the earliest valid `preferred_delivery_start` is 1 March. Plan registrations accordingly to avoid rejections.
    </Note>
  </Step>

  <Step title="Register the Producer">
    Submit the producer's personal details and plant data to create a new producer contract.

    ```http theme={null}
    POST /v3/producers/
    Content-Type: application/json
    Authorization: Bearer <token>
    ```

    ### Key Parameters

    <ParamField body="first_name" type="string" required>
      Producer's first name.
    </ParamField>

    <ParamField body="last_name" type="string" required>
      Producer's last name.
    </ParamField>

    <ParamField body="email" type="string" required>
      Producer's email address. Used for contract and remittance communications.
    </ParamField>

    <ParamField body="salutation" type="string" required>
      Producer's salutation. One of: `Frau`, `Herr`, `Eheleute`, `Divers`.
    </ParamField>

    <ParamField body="is_business" type="boolean" required>
      `true` for business/commercial producers, `false` for private individuals.
    </ParamField>

    <ParamField body="is_reverse_charge" type="boolean" required>
      `true` if the producer is subject to reverse charge VAT (§13b UStG). Typically `true` for business customers with a valid VAT ID.
    </ParamField>

    <ParamField body="deliv_address_street" type="string" required>
      Street name of the producer's registered address.
    </ParamField>

    <ParamField body="deliv_address_house_number" type="string" required>
      House number of the producer's registered address.
    </ParamField>

    <ParamField body="deliv_address_zipcode" type="string" required>
      Five-digit postal code of the producer's registered address.
    </ParamField>

    <ParamField body="deliv_address_city" type="string" required>
      City of the producer's registered address.
    </ParamField>

    <ParamField body="subscription_reason" type="string" required>
      Reason code for the registration. One of: `E01` (new), `E02` (new connection), `E03` (provider switch).
    </ParamField>

    <ParamField body="production_type" type="string" required>
      Type of energy production. One of: `solar`, `wind`, `gas`, `water`, `battery`.
    </ParamField>

    <ParamField body="plant_specifics" type="object" required>
      Technical details of the plant. Must include `capacity` (Wp for solar, W for other plant types) and, where applicable, `longitude` and `latitude`.
    </ParamField>

    <ParamField body="saas_customer_id" type="string">
      Your internal customer identifier. Maximum 32 characters. Must be unique within your Lumenaza account.
    </ParamField>

    <ParamField body="saas_contract_id" type="string">
      Your internal contract identifier. Maximum 64 characters.
    </ParamField>

    <ParamField body="product_name" type="string">
      The product or tariff name to associate with this producer contract.
    </ParamField>

    <ParamField body="consumer_saas_contract_id" type="string">
      The `saas_contract_id` of an existing consumer contract. Use this to link a producer to a consumer on the same account (prosumer setup). See the tip below.
    </ParamField>

    <ParamField body="market_location_identifier" type="string">
      11-digit market location identifier (MaLo-ID). Required unless `tranche` is provided.
    </ParamField>

    <ParamField body="tranche" type="string">
      Tranche reference. Required unless `market_location_identifier` is provided.
    </ParamField>

    <ParamField body="control_resource" type="object">
      Describes the plant's remote controllability configuration for redispatch.
    </ParamField>

    <ParamField body="technical_resources" type="array">
      Array of technical resource objects representing individual generation units within the plant.
    </ParamField>

    <Tip>
      To register a **prosumer** — a customer who both consumes and produces electricity — pass the `saas_contract_id` of their existing consumer contract as `consumer_saas_contract_id`. Lumenaza will link the two contracts, enabling combined billing and reporting. The consumer contract must already exist before the producer registration is submitted.
    </Tip>

    ### Example Request Body

    ```json theme={null}
    {
      "first_name": "Thomas",
      "last_name": "Fischer",
      "email": "thomas.fischer@example.com",
      "salutation": "Herr",
      "is_business": false,
      "is_reverse_charge": false,
      "deliv_address_street": "Sonnenallee",
      "deliv_address_house_number": "42",
      "deliv_address_zipcode": "12045",
      "deliv_address_city": "Berlin",
      "subscription_reason": "E01",
      "production_type": "solar",
      "plant_specifics": {
        "capacity": 10000,
        "longitude": 13.4312,
        "latitude": 52.4871
      },
      "market_location_identifier": "52173487564",
      "preferred_delivery_start": "2024-03-01",
      "saas_customer_id": "crm-producer-00789",
      "saas_contract_id": "crm-prod-contract-00101",
      "product_name": "solar_feed_in_2024"
    }
    ```

    ### Success Response

    **HTTP 201 Created**

    ```json theme={null}
    {
      "saas_customer_id": "crm-producer-00789",
      "saas_contract_id": "crm-prod-contract-00101"
    }
    ```

    The response echoes back your `saas_customer_id` and `saas_contract_id`. Use these identifiers — along with the Lumenaza-assigned `userID` and `contractID` returned in the `Location` response header — for all subsequent operations.
  </Step>

  <Step title="Upload Plant Documents">
    After registration, upload the required regulatory and technical documents for the plant. Documents must first be uploaded as raw files, then referenced by their file IDs in the plant documents endpoint.

    ### Step 3a — Upload the File

    ```http theme={null}
    POST /v3/files/
    Content-Type: multipart/form-data
    Authorization: Bearer <token>
    ```

    **Form fields:**

    | Field | Description |
    | - | - |
    | `file` | The document file (PDF recommended) |
    | `name` | A descriptive filename |

    **Example response:**

    ```json theme={null}
    {
      "file_id": "file_3c8d21fa90"
    }
    ```

    Repeat this step for each document you need to attach.

    ### Step 3b — Attach Documents to the Contract

    ```http theme={null}
    POST /v3/producers/{userID}/contracts/{contractID}/plant_documents/
    Content-Type: application/json
    Authorization: Bearer <token>
    ```

    **Supported document types:**

    | Document Type | Description |
    | - | - |
    | `remote_controllability_declaration` | Declaration confirming the plant can be remotely controlled |
    | `remote_controllability_protocol` | Technical protocol of the remote controllability test |
    | `remote_controllability_agreement` | Signed agreement for remote controllability participation |
    | `initial_assignment_agreement` | Agreement for the initial assignment of feed-in remuneration |
    | `installation_receipt` | Proof of installation by a certified electrician |

    **Example request body:**

    ```json theme={null}
    {
      "documents": [
        {
          "document_type": "installation_receipt",
          "file_id": "file_3c8d21fa90"
        },
        {
          "document_type": "remote_controllability_declaration",
          "file_id": "file_7a12bc3d44"
        }
      ]
    }
    ```

    **Example response:**

    ```json theme={null}
    {
      "uploaded": [
        "installation_receipt",
        "remote_controllability_declaration"
      ],
      "pending": [
        "remote_controllability_protocol",
        "remote_controllability_agreement",
        "initial_assignment_agreement"
      ]
    }
    ```

    Documents can be uploaded incrementally — you do not need to submit all documents in a single request.
  </Step>

  <Step title="Verify Plant Data">
    Once the registration is submitted and documents are uploaded, verify that Lumenaza has recorded the plant data correctly.

    ```http theme={null}
    GET /v3/producers/{userID}/contracts/{contractID}/plant_data/
    Authorization: Bearer <token>
    ```

    **Example response:**

    ```json theme={null}
    {
      "capacity": 10000,
      "production_type": "solar",
      "status": "pending_verification",
      "longitude": 13.4312,
      "latitude": 52.4871,
      "meter_id": "DE0001234567890123456789",
      "market_location_identifier": "52173487564",
      "technical_resources": [],
      "control_resource": null,
      "verified_at": null
    }
    ```

    | Field | Description |
    | - | - |
    | `capacity` | Registered installed capacity in Wp |
    | `production_type` | Energy source type |
    | `status` | Verification status of the plant data |
    | `longitude` / `latitude` | Geographic coordinates of the installation |
    | `meter_id` | Meter identifier assigned by the grid operator |
    | `market_location_identifier` | 11-digit MaLo-ID |
    | `technical_resources` | List of registered technical resource objects (for redispatch) |
    | `control_resource` | Remote controllability configuration, if registered |
    | `verified_at` | Timestamp of successful verification, or `null` if still pending |

    If any field looks incorrect, update the plant data using `PATCH /v3/producers/{userID}/contracts/{contractID}/plant_data/` before the contract moves to `closed_join`.
  </Step>

  <Step title="Monitor Delivery Status">
    Track the registration lifecycle by polling the producer contract endpoint.

    ```http theme={null}
    GET /v3/producers/{userID}/contracts/{contractID}/
    Authorization: Bearer <token>
    ```

    **Example response:**

    ```json theme={null}
    {
      "contract_id": "ctr_9e23f05b17",
      "producer_id": "usr_2b47d81c09",
      "reg_status": "open_join",
      "production_type": "solar",
      "preferred_delivery_start": "2024-03-01",
      "delivery_start": null,
      "product_name": "solar_feed_in_2024",
      "saas_customer_id": "crm-producer-00789",
      "saas_contract_id": "crm-prod-contract-00101",
      "created_at": "2024-01-15T11:00:00Z"
    }
    ```

    Watch the `reg_status` field progress through the following stages:

    | `reg_status` Value | Meaning |
    | - | - |
    | `open_join` | Registration submitted; awaiting grid operator confirmation |
    | `closed_join` | Grid operator confirmed; feed-in delivery is active |
    | `rejected` | Registration rejected — check documents and plant data |
    | `revoked` | Contract was revoked before confirmation |

    The transition from `open_join` to `closed_join` typically takes several business days. Once `closed_join` is reached, the `delivery_start` field will be populated with the actual feed-in start date.
  </Step>
</Steps>

***

## Next Steps

* **Retrieve feed-in statements:** Use `GET /v3/producers/{userID}/statements/` to access monthly remittance reports.
* **Update plant data:** Use `PATCH /v3/producers/{userID}/contracts/{contractID}/plant_data/` to correct or update technical details while the contract is in `open_join`.
* **Register a consumer:** If you also need to onboard an electricity consumer, see [Register an Electricity Consumer](/guides/register-consumer).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.