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

# Prioriteitslimietprofiel voor locatie aanmaken of vervangen

> Maakt een tijdvenster-vermogenslimietprofiel aan voor een locatie op
de gegeven prioriteit. Als er al een profiel bestaat op die prioriteit
voor deze locatie, wordt het vervangen. Het effectieve limiet wordt
onmiddellijk herberekend en doorgeschreven naar de locatie.




## OpenAPI

````yaml api-reference/energy-management/openapi.nl.yaml POST /locations/{locationId}/schedules
openapi: 3.1.0
info:
  title: RiDERgy Energy Management API
  version: '1.0'
  license:
    name: Proprietary
    identifier: LicenseRef-Proprietary
  description: >
    Programmatische aansturing van laadvermogenslimieten voor locaties,

    individuele laadpunten, organisaties en locatie-overschrijdende clusters.


    ## Authenticatie

    Elk endpoint, behalve `GET /health` en `POST /oauth/token`, vereist een

    Bearer-token verkregen via de OAuth 2.0 client_credentials-flow:


    1. Maak OAuth-clientgegevens aan in het RiDERgy dashboard.

    2. Wissel deze in voor een kortlevend toegangstoken via `POST /oauth/token`.

    3. Geef het token door als `Authorization: Bearer <token>` bij elk verzoek.


    Tokens verlopen na 3600 seconden. Je tenant is ingebed in het token en

    kan niet vervalst worden: inloggegevens van de ene tenant hebben geen

    toegang tot een andere.


    Je tenant moet de Energy Management API-functie geactiveerd hebben,

    anders mislukken verzoeken met `403 FEATURE_NOT_ENABLED`. Neem contact op

    met RiDERgy om deze te activeren.


    ## Scopes

    Tokens dragen scopes die bepalen welke endpoints toegankelijk zijn:

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

    `chargers:write`, `org:write`. Verzoeken aan endpoints die een scope

    vereisen die het token niet heeft, mislukken met `403 INSUFFICIENT_SCOPE`.


    ## Prioriteitsmodel

    Locatie- en laadpuntlimieten worden aangestuurd via
    **prioriteits-tijdvensterprofielen**:


    - Prioriteiten lopen van **0 (laagste) tot 10 (hoogste)**, in
    OCPP-stackstijl.

    - Een doel (locatie of laadpuntconnector) kan tot 11 profielen hebben,
      één per prioriteitsniveau, elk met een eigen `[startTime, endTime)`-venster.
    - Op elk moment is het **effectieve limiet** de `limitKw` van het
      profiel met de hoogste prioriteit waarvan het venster momenteel actief is.
    - Als er geen profiel actief is, valt een locatie terug op zijn
    `permanentLimitKw`.

    - Het indienen van een profiel op een prioriteit die al bestaat voor dat
      doel **vervangt** het bestaande profiel.
    - Profielen worden automatisch toegepast en teruggedraaid op hun
      `startTime`/`endTime`. Zodra een profiel is aangemaakt zijn er geen
      verdere API-aanroepen nodig. Profielrecords worden nooit verwijderd, dus
      de geschiedenis blijft opvraagbaar.

    ## Fouten

    Alle fouten delen deze structuur:


    ```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-tokenendpoint voor de client_credentials-grant.
  - name: Health
    description: Ongeauthenticeerde servicecontrole.
  - name: Locations
    description: >-
      Locatieniveau vermogenslimieten en prioriteitsprofielen lezen en
      instellen.
  - name: Chargers
    description: >-
      Individuele laadpuntconnectoren vergrendelen op een vast vermogenslimiet
      voor een tijdvenster.
  - name: Organizations
    description: >-
      Tenant-brede plafondprofielen (alleen geregistreerd, handhaving nog niet
      actief).
  - name: Clusters
    description: >-
      Locaties groeperen onder een gedeeld kW-plafond en schema's op de hele
      groep toepassen.
paths:
  /locations/{locationId}/schedules:
    post:
      tags:
        - Locations
      summary: Create or replace a location priority limit profile
      description: |
        Maakt een tijdvenster-vermogenslimietprofiel aan voor een locatie op
        de gegeven prioriteit. Als er al een profiel bestaat op die prioriteit
        voor deze locatie, wordt het vervangen. Het effectieve limiet wordt
        onmiddellijk herberekend en doorgeschreven naar de locatie.
      operationId: createLocationSchedule
      parameters:
        - $ref: '#/components/parameters/LocationId'
      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: 50
                  priority: 5
      responses:
        '200':
          description: Profiel aangemaakt/vervangen
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LocationScheduleResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/FeatureNotEnabled'
        '404':
          description: Locatie niet gevonden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                locationNotFound:
                  value:
                    error:
                      code: LOCATION_NOT_FOUND
                      message: Location 123 was not found for the provided tenant
                      requestId: b1f6e6b0-1234-4abc-9def-000000000000
components:
  parameters:
    LocationId:
      name: locationId
      description: De unieke ID van de locatie.
      in: path
      required: true
      schema:
        type: string
      example: '3632155'
  schemas:
    LimitProfileRequest:
      type: object
      required:
        - startTime
        - endTime
        - limitKw
      properties:
        startTime:
          type: string
          format: date-time
          description: ISO-8601 UTC-tijdstempel. Verplicht.
          example: '2026-06-12T08:00:00Z'
        endTime:
          type: string
          format: date-time
          description: >-
            ISO-8601 UTC-tijdstempel. Moet na `startTime` liggen en in de
            toekomst zijn. Verplicht.
          example: '2026-06-12T18:00:00Z'
        limitKw:
          type: number
          format: float
          exclusiveMinimum: 0
          description: Vermogenslimiet in kW. Moet groter zijn dan 0. Verplicht.
          example: 50
        priority:
          type: integer
          minimum: 0
          maximum: 10
          default: 0
          description: |
            Prioriteitsniveau in OCPP-stackstijl, 0 (laagste) tot 10 (hoogste).
            Het indienen van een profiel op een prioriteit die al bestaat voor
            dit doel vervangt het.
          example: 5
    LocationScheduleResponse:
      type: object
      properties:
        locationId:
          type: string
          example: '3632155'
        priority:
          type: integer
          example: 5
        limitKw:
          type: number
          example: 50
        startTime:
          type: string
          format: date-time
        endTime:
          type: string
          format: date-time
        status:
          $ref: '#/components/schemas/ProfileStatus'
        permanentLimitKw:
          type:
            - number
            - 'null'
          example: 100
        effectiveLimitKw:
          type:
            - number
            - 'null'
          example: 50
    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: Ongeldige request body of doel is inactief
      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: Bearer-token ontbreekt, is ongeldig of verlopen
      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: Tenant heeft de Energy Management API niet geactiveerd
      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-toegangstoken verkregen via `POST /oauth/token` met
        client_credentials-grant.

        Tenant en scopes zijn ingebed in de JWT, er zijn geen extra headers
        nodig.

````

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