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

# Toegangstoken verkrijgen

> Wisselt clientgegevens in voor een kortlevend Bearer-token (3600s).

Accepteert inloggegevens via:
- `Authorization: Basic base64(client_id:client_secret)` met
  `grant_type=client_credentials` in de request body (RFC 6749)
- JSON body met `client_id`, `client_secret` en `grant_type`




## OpenAPI

````yaml api-reference/energy-management/openapi.nl.yaml POST /oauth/token
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:
  /oauth/token:
    post:
      tags:
        - Auth
      summary: Obtain an access token
      description: |
        Wisselt clientgegevens in voor een kortlevend Bearer-token (3600s).

        Accepteert inloggegevens via:
        - `Authorization: Basic base64(client_id:client_secret)` met
          `grant_type=client_credentials` in de request body (RFC 6749)
        - JSON body met `client_id`, `client_secret` en `grant_type`
      operationId: createToken
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - grant_type
              properties:
                grant_type:
                  type: string
                  enum:
                    - client_credentials
                client_id:
                  type: string
                  description: Vereist als je geen Basic auth-header gebruikt.
                  example: emcl_a1b2c3d4e5f67890a1b2c3d4e5f67890
                client_secret:
                  type: string
                  description: Vereist als je geen Basic auth-header gebruikt.
                  example: emcs_...
            examples:
              jsonBody:
                value:
                  grant_type: client_credentials
                  client_id: emcl_a1b2c3d4e5f67890a1b2c3d4e5f67890
                  client_secret: emcs_a1b2c3d4...
      responses:
        '200':
          description: Toegangstoken uitgegeven
          content:
            application/json:
              schema:
                type: object
                properties:
                  access_token:
                    type: string
                    description: JWT Bearer-token
                    example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
                  token_type:
                    type: string
                    example: Bearer
                  expires_in:
                    type: integer
                    description: Levensduur van het token in seconden
                    example: 3600
                  scope:
                    type: string
                    description: Door spaties gescheiden lijst van toegekende scopes
                    example: >-
                      locations:read locations:write clusters:read
                      clusters:write chargers:write org:write
        '400':
          description: Ongeldig verzoek (grant_type ontbreekt of niet-ondersteunde grant)
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: unsupported_grant_type
                  error_description:
                    type: string
                    example: Only client_credentials grant type is supported
        '401':
          description: Ongeldige clientgegevens
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: invalid_client
                  error_description:
                    type: string
                    example: Invalid client credentials
      security: []
components:
  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.