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

# Ladepunkt-Limit-Sperre erstellen oder ersetzen

> Erstellt eine zeitfensterbasierte Leistungslimit-Sperre für einen
einzelnen Connector.

Solange das Zeitfenster **ACTIVE** ist, gilt dieser Connector als
prioritätsgesperrt: Er wird vom normalen Lastmanagement ausgenommen und
läuft ungedrosselt bis zu `limitKw`. Er wird nur als letztes Mittel (nie
unter sein 6A-Minimum) gedrosselt, falls der Standort sein Netzlimit
ansonsten überschreitet.




## OpenAPI

````yaml /api-reference/energy-management/openapi.de.yaml POST /chargers/{controllerUuid}/connectors/{connectorId}/schedules
openapi: 3.1.0
info:
  title: RiDERgy Energy Management API
  version: '1.0'
  license:
    name: Proprietary
    identifier: LicenseRef-Proprietary
  description: |
    Programmatische Steuerung von Ladeleistungslimits über Standorte, einzelne
    Ladepunkte, Organisationen und standortübergreifende Cluster hinweg.

    ## Authentifizierung
    Jeder Endpunkt außer `GET /health` benötigt einen `x-api-key`-Header. Der
    Schlüssel bestimmt Ihren Mandanten — er wird nie aus dem Request-Body oder
    einem anderen Header gelesen, sodass ein Schlüssel eines Mandanten nicht
    auf die Daten eines anderen Mandanten zugreifen kann.

    Ihr Mandant muss das Feature der Energy Management API aktiviert haben,
    andernfalls schlagen Anfragen mit `403 FEATURE_NOT_ENABLED` fehl.
    Kontaktieren Sie RiDERgy, um es zu aktivieren.

    ## Prioritätsmodell
    Standort- und Ladepunkt-Limits werden über **prioritätsbasierte
    Zeitfenster-Profile** gesteuert:

    - Prioritäten reichen von **0 (niedrigste) bis 10 (höchste)**, im
      OCPP-Stack-Stil.
    - Ein Ziel (Standort oder Ladepunkt-Connector) kann bis zu 11 Profile
      haben, eines pro Prioritätsstufe, jeweils mit eigenem
      `[startTime, endTime)`-Zeitfenster.
    - Zu jedem Zeitpunkt ist das **effektive Limit** der `limitKw`-Wert des
      Profils mit der höchsten Priorität, dessen Zeitfenster gerade aktiv ist.
    - Ist kein Profil aktiv, fällt ein Standort auf sein `permanentLimitKw`
      zurück.
    - Wird ein Profil mit einer Priorität übermittelt, für die für dieses Ziel
      bereits eines existiert, wird dieses **ersetzt**.
    - Profile werden automatisch zu ihrer `startTime`/`endTime` angewendet und
      wieder rückgängig gemacht — nach dem Erstellen eines Profils sind keine
      weiteren API-Aufrufe erforderlich. Profil-Datensätze werden nie gelöscht,
      sodass die Historie weiterhin abfragbar bleibt.

    ## Fehler
    Alle Fehler haben diese Form:

    ```json
    {
      "error": {
        "code": "LOCATION_NOT_FOUND",
        "message": "Location 123 was not found for the provided tenant",
        "requestId": "b1f6e6b0-..."
      }
    }
    ```
servers:
  - url: https://api.ridergy.com/v1
    description: Production
security:
  - ApiKeyAuth: []
tags:
  - name: Health
    description: Nicht authentifizierter Service-Health-Check.
  - name: Locations
    description: >-
      Lesen und Setzen von Leistungslimits und Prioritätsprofilen auf
      Standortebene.
  - name: Chargers
    description: >-
      Sperren einzelner Ladepunkt-Connectoren auf ein festes Leistungslimit für
      ein Zeitfenster.
  - name: Organizations
    description: >-
      Mandantenweite Cap-Profile (werden nur erfasst — Durchsetzung noch nicht
      aktiv).
  - name: Clusters
    description: >-
      Gruppierung von Standorten unter einem gemeinsamen kW-Limit und Anwendung
      von Zeitplänen über diese hinweg.
paths:
  /chargers/{controllerUuid}/connectors/{connectorId}/schedules:
    post:
      tags:
        - Chargers
      summary: Create or replace a charger-level limit lock
      description: |
        Erstellt eine zeitfensterbasierte Leistungslimit-Sperre für einen
        einzelnen Connector.

        Solange das Zeitfenster **ACTIVE** ist, gilt dieser Connector als
        prioritätsgesperrt: Er wird vom normalen Lastmanagement ausgenommen und
        läuft ungedrosselt bis zu `limitKw`. Er wird nur als letztes Mittel (nie
        unter sein 6A-Minimum) gedrosselt, falls der Standort sein Netzlimit
        ansonsten überschreitet.
      operationId: createChargerSchedule
      parameters:
        - $ref: '#/components/parameters/ControllerUuid'
        - $ref: '#/components/parameters/ConnectorId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LimitProfileRequest'
            examples:
              example:
                value:
                  startTime: '2026-06-12T08:00:00Z'
                  endTime: '2026-06-12T18:00:00Z'
                  limitKw: 11
                  priority: 5
      responses:
        '200':
          description: Ladepunkt-Zeitplan erstellt/ersetzt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConnectorScheduleResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/FeatureNotEnabled'
        '404':
          description: Ladepunkt/Connector nicht gefunden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                chargerNotFound:
                  value:
                    error:
                      code: CHARGER_NOT_FOUND
                      message: >-
                        Connector <controllerUuid>/<connectorId> was not found
                        for the provided tenant
                      requestId: b1f6e6b0-1234-4abc-9def-000000000000
components:
  parameters:
    ControllerUuid:
      name: controllerUuid
      in: path
      required: true
      schema:
        type: string
      example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
    ConnectorId:
      name: connectorId
      in: path
      required: true
      schema:
        type: string
      example: '1'
  schemas:
    LimitProfileRequest:
      type: object
      required:
        - startTime
        - endTime
        - limitKw
      properties:
        startTime:
          type: string
          format: date-time
          description: ISO-8601-UTC-Zeitstempel. Erforderlich.
          example: '2026-06-12T08:00:00Z'
        endTime:
          type: string
          format: date-time
          description: >-
            ISO-8601-UTC-Zeitstempel. Muss nach `startTime` liegen und in der
            Zukunft sein. Erforderlich.
          example: '2026-06-12T18:00:00Z'
        limitKw:
          type: number
          format: float
          exclusiveMinimum: 0
          description: Leistungslimit in kW. Muss größer als 0 sein. Erforderlich.
          example: 50
        priority:
          type: integer
          minimum: 0
          maximum: 10
          default: 0
          description: |
            Prioritätsstufe im OCPP-Stack-Stil, 0 (niedrigste) bis 10
            (höchste). Wird ein Profil mit einer Priorität übermittelt, die
            für dieses Ziel bereits existiert, wird dieses ersetzt.
          example: 5
    ConnectorScheduleResponse:
      type: object
      properties:
        controllerUuid:
          type: string
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        connectorId:
          type: string
          example: '1'
        limitKw:
          type: number
          example: 11
        startTime:
          type: string
          format: date-time
        endTime:
          type: string
          format: date-time
        status:
          $ref: '#/components/schemas/ProfileStatus'
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: LOCATION_NOT_FOUND
            message:
              type: string
              example: Location 123 was not found for the provided tenant
            requestId:
              type: string
              format: uuid
    ProfileStatus:
      type: string
      enum:
        - SCHEDULED
        - ACTIVE
        - EXPIRED
  responses:
    BadRequest:
      description: Ungültiger Request-Body oder Ziel ist inaktiv
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            invalidBody:
              summary: INVALID_REQUEST_BODY
              value:
                error:
                  code: INVALID_REQUEST_BODY
                  message: limitKw must be a positive number
                  requestId: b1f6e6b0-1234-4abc-9def-000000000000
            targetInactive:
              summary: TARGET_INACTIVE
              value:
                error:
                  code: TARGET_INACTIVE
                  message: Location 123 is not active
                  requestId: b1f6e6b0-1234-4abc-9def-000000000000
    Unauthorized:
      description: Fehlender, ungültiger oder abgelaufener API-Schlüssel
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            unauthorized:
              value:
                error:
                  code: UNAUTHORIZED
                  message: Invalid or inactive API key
                  requestId: b1f6e6b0-1234-4abc-9def-000000000000
    FeatureNotEnabled:
      description: Mandant hat die Energy Management API nicht aktiviert
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            featureNotEnabled:
              value:
                error:
                  code: FEATURE_NOT_ENABLED
                  message: >-
                    The Energy Management API is not enabled for your account.
                    Contact RiDERgy to enable this feature.
                  requestId: b1f6e6b0-1234-4abc-9def-000000000000
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Mandanten-spezifischer API-Schlüssel. Der Mandant wird aus dem Schlüssel
        abgeleitet — nie aus dem Request.

````