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

# Obter um token de acesso

> Troca credenciais de cliente por um token Bearer de curta duração (3600s).

Aceita credenciais via:
- `Authorization: Basic base64(client_id:client_secret)` com
  `grant_type=client_credentials` no corpo da requisição (RFC 6749)
- Corpo JSON com `client_id`, `client_secret` e `grant_type`




## OpenAPI

````yaml api-reference/energy-management/openapi.pt.yaml POST /oauth/token
openapi: 3.1.0
info:
  title: RiDERgy Energy Management API
  version: '1.0'
  license:
    name: Proprietary
    identifier: LicenseRef-Proprietary
  description: >
    Controle programático dos limites de potência de carregamento em locais,

    carregadores individuais, organizações e clusters entre locais.


    ## Autenticação

    Todos os endpoints, exceto `GET /health` e `POST /oauth/token`, exigem um

    token Bearer obtido por meio do fluxo OAuth 2.0 client_credentials:


    1. Crie credenciais de cliente OAuth no painel da RiDERgy.

    2. Troque-as por um token de acesso de curta duração via `POST
    /oauth/token`.

    3. Passe o token como `Authorization: Bearer <token>` em cada requisição.


    Os tokens expiram após 3600 segundos. Seu tenant está incorporado no token

    e não pode ser falsificado. Credenciais de um tenant não podem acessar

    outro.


    O seu tenant precisa ter o recurso Energy Management API habilitado, caso

    contrário as requisições falharão com `403 FEATURE_NOT_ENABLED`. Entre em

    contato com a RiDERgy para habilitá-lo.


    ## Scopes

    Os tokens carregam escopos que controlam quais endpoints são acessíveis:

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

    `chargers:write`, `org:write`. Requisições a endpoints que exijam um escopo

    que o token não possui falharão com `403 INSUFFICIENT_SCOPE`.


    ## Modelo de prioridade

    Os limites de locais e carregadores são controlados por meio de **perfis com

    janelas de prioridade**:


    - As prioridades variam de **0 (mais baixa) a 10 (mais alta)**, no estilo da
      pilha OCPP.
    - Um alvo (local ou conector de carregador) pode ter até 11 perfis, um por
      nível de prioridade, cada um com sua própria janela `[startTime, endTime)`.
    - A qualquer momento, o **limite efetivo** é o `limitKw` do perfil de maior
      prioridade cuja janela esteja atualmente ativa.
    - Se nenhum perfil estiver ativo, um local volta a usar o seu
      `permanentLimitKw`.
    - O envio de um perfil em uma prioridade que já possui um perfil para esse
      alvo **substitui** o existente.
    - Os perfis são aplicados e revertidos automaticamente em seus horários
      `startTime`/`endTime`. Não são necessárias chamadas adicionais à API após
      a criação de um perfil. Os registros de perfis nunca são excluídos, então
      o histórico permanece consultável.

    ## Erros

    Todos os erros compartilham este formato:


    ```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: Endpoint de token OAuth 2.0 para o grant client_credentials.
  - name: Health
    description: Verificação de integridade do serviço sem autenticação.
  - name: Locations
    description: >-
      Leia e defina limites de potência em nível de local e perfis de
      prioridade.
  - name: Chargers
    description: >-
      Trave conectores de carregadores individuais em um limite de potência fixo
      durante uma janela de tempo.
  - name: Organizations
    description: >-
      Perfis de limite máximo em toda a organização (apenas registrados, a
      aplicação ainda não está ativa).
  - name: Clusters
    description: >-
      Agrupe locais sob um limite de kW compartilhado e aplique cronogramas
      entre eles.
paths:
  /oauth/token:
    post:
      tags:
        - Auth
      summary: Obtain an access token
      description: >
        Troca credenciais de cliente por um token Bearer de curta duração
        (3600s).


        Aceita credenciais via:

        - `Authorization: Basic base64(client_id:client_secret)` com
          `grant_type=client_credentials` no corpo da requisição (RFC 6749)
        - Corpo JSON com `client_id`, `client_secret` e `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: Obrigatório se o cabeçalho Basic auth não for utilizado.
                  example: emcl_a1b2c3d4e5f67890a1b2c3d4e5f67890
                client_secret:
                  type: string
                  description: Obrigatório se o cabeçalho Basic auth não for utilizado.
                  example: emcs_...
            examples:
              jsonBody:
                value:
                  grant_type: client_credentials
                  client_id: emcl_a1b2c3d4e5f67890a1b2c3d4e5f67890
                  client_secret: emcs_a1b2c3d4...
      responses:
        '200':
          description: Token de acesso emitido
          content:
            application/json:
              schema:
                type: object
                properties:
                  access_token:
                    type: string
                    description: Token Bearer JWT
                    example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
                  token_type:
                    type: string
                    example: Bearer
                  expires_in:
                    type: integer
                    description: Tempo de vida do token em segundos
                    example: 3600
                  scope:
                    type: string
                    description: Lista de escopos concedidos separados por espaços
                    example: >-
                      locations:read locations:write clusters:read
                      clusters:write chargers:write org:write
        '400':
          description: Requisição inválida (grant_type ausente ou grant não suportado)
          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: Credenciais de cliente inválidas
          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: >
        Token de acesso OAuth 2.0 obtido via `POST /oauth/token` com grant
        client_credentials.

        O tenant e os escopos estão incorporados no JWT. Nenhum cabeçalho
        adicional é necessário.

````

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