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

# Standort aus einem Cluster entfernen

> Entfernt einen Standort aus den `locationIds` eines Clusters. Dies ist
eine atomare Alternative zu `PATCH /clusters/{clusterId}` mit einer
verkürzten `locationIds`-Liste, sodass gleichzeitige Entfernungen sich
nicht gegenseitig überholen können.

Ein Cluster muss immer mindestens einen Mitglieds-Standort haben. Das
Entfernen des letzten schlägt mit `400 CLUSTER_EMPTY` fehl. Lösche in
diesem Fall den Cluster stattdessen mit `DELETE /clusters/{clusterId}`.




## OpenAPI

````yaml api-reference/energy-management/openapi.de.yaml DELETE /clusters/{clusterId}/locations/{locationId}
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` und `POST /oauth/token` erfordert ein

    Bearer-Token, das über den OAuth 2.0 client_credentials-Flow bezogen wird:


    1. Erstellen Sie OAuth-Client-Zugangsdaten im RiDERgy-Dashboard.

    2. Tauschen Sie diese über `POST /oauth/token` gegen ein kurzlebiges
    Access-Token ein.

    3. Übergeben Sie das Token als `Authorization: Bearer <token>` bei jeder
    Anfrage.


    Token laufen nach 3600 Sekunden ab. Ihr Mandant ist im Token eingebettet

    und kann nicht gefälscht werden. Zugangsdaten eines Mandanten können nicht

    auf einen anderen Mandanten zugreifen.


    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.


    ## Scopes

    Token enthalten Scopes, die steuern, welche Endpunkte zugänglich sind:

    `locations:read`, `locations:write`, `clusters:read`, `clusters:write`,

    `chargers:write`, `org:write`. Anfragen an Endpunkte, die einen Scope

    erfordern, den das Token nicht besitzt, schlagen mit

    `403 INSUFFICIENT_SCOPE` fehl.


    ## 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:
  - BearerAuth: []
tags:
  - name: Auth
    description: OAuth 2.0 Token-Endpunkt für den client_credentials-Grant.
  - 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:
  /clusters/{clusterId}/locations/{locationId}:
    delete:
      tags:
        - Clusters
      summary: Remove a location from a cluster
      description: |
        Entfernt einen Standort aus den `locationIds` eines Clusters. Dies ist
        eine atomare Alternative zu `PATCH /clusters/{clusterId}` mit einer
        verkürzten `locationIds`-Liste, sodass gleichzeitige Entfernungen sich
        nicht gegenseitig überholen können.

        Ein Cluster muss immer mindestens einen Mitglieds-Standort haben. Das
        Entfernen des letzten schlägt mit `400 CLUSTER_EMPTY` fehl. Lösche in
        diesem Fall den Cluster stattdessen mit `DELETE /clusters/{clusterId}`.
      operationId: removeClusterLocation
      parameters:
        - $ref: '#/components/parameters/ClusterId'
        - $ref: '#/components/parameters/LocationId'
      responses:
        '200':
          description: Standort entfernt, aktualisierter Cluster zurückgegeben
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Cluster'
        '400':
          description: Der Cluster hat nur noch einen Standort
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                clusterEmpty:
                  summary: CLUSTER_EMPTY
                  value:
                    error:
                      code: CLUSTER_EMPTY
                      message: >-
                        Cannot remove the last location from a cluster; delete
                        the cluster instead
                      requestId: b1f6e6b0-1234-4abc-9def-000000000000
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/FeatureNotEnabled'
        '404':
          description: Cluster nicht gefunden, oder der Standort ist kein Mitglied davon
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                clusterNotFound:
                  summary: CLUSTER_NOT_FOUND
                  value:
                    error:
                      code: CLUSTER_NOT_FOUND
                      message: Cluster clst_20260612_a1b2c3d4 not found
                      requestId: b1f6e6b0-1234-4abc-9def-000000000000
                clusterLocationNotFound:
                  summary: CLUSTER_LOCATION_NOT_FOUND
                  value:
                    error:
                      code: CLUSTER_LOCATION_NOT_FOUND
                      message: >-
                        Location 3632155 is not a member of cluster
                        clst_20260612_a1b2c3d4
                      requestId: b1f6e6b0-1234-4abc-9def-000000000000
components:
  parameters:
    ClusterId:
      name: clusterId
      description: >-
        Die eindeutige ID des Clusters, die bei dessen Erstellung zurückgegeben
        wurde.
      in: path
      required: true
      schema:
        type: string
      example: clst_20260612_a1b2c3d4
    LocationId:
      name: locationId
      description: Die eindeutige ID des Standorts.
      in: path
      required: true
      schema:
        type: string
      example: '3632155'
  schemas:
    Cluster:
      type: object
      properties:
        clusterId:
          type: string
          example: clst_20260612_a1b2c3d4
        tenantUuid:
          type: string
        name:
          type: string
          example: North Campus
        locationIds:
          type: array
          items:
            type: string
          example:
            - '3632155'
            - '3632156'
        limitKw:
          type:
            - number
            - 'null'
          example: 200
        status:
          type: string
          enum:
            - ACTIVE
            - INACTIVE
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    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
  responses:
    Unauthorized:
      description: Fehlendes, ungültiges oder abgelaufenes Bearer-Token
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            unauthorized:
              value:
                error:
                  code: UNAUTHORIZED
                  message: Invalid or expired token
                  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:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >
        OAuth 2.0 Access-Token, bezogen über `POST /oauth/token` mit
        client_credentials-Grant.

        Mandant und Scopes sind im JWT eingebettet. Keine zusätzlichen Header
        erforderlich.

````

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