# hacf-fr/renault-api architecture

> Architecture diagram of the GitHub repository hacf-fr/renault-api, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/hacf-fr/renault-api
- Repository: https://github.com/hacf-fr/renault-api

## Overview

Renault API is an asynchronous Python client and CLI for authenticating to Renault’s private services and retrieving or controlling account vehicles. The main workflow is login, discover accounts and vehicles, then read vehicle status or invoke supported actions; the CLI also exposes charge history and schedule management, HVAC controls, contracts, and raw HTTP requests. The graph separates Gigya authentication from Kamereon vehicle operations. It reflects the README and sampled source; account, vehicle, and most CLI internals were not sampled, so uncertain call wiring is omitted.

Main entry points: [`src/renault_api/renault_session.py`](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/renault_session.py) (Session provider), [`src/renault_api/renault_vehicle.py`](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/renault_vehicle.py) (Vehicle proxy), [`src/renault_api/gigya/__init__.py`](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/gigya/__init__.py) (Gigya API), [`src/renault_api/renault_client.py`](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/renault_client.py) (Renault client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_auth["Authentication"]
  node_session["Session provider<br/>[renault_session.py]"]
  node_credentials["Credential store"]
  node_credential["Credential<br/>[credential.py]"]
  node_gigya["Gigya API<br/>[__init__.py]"]
  node_gigya_models["Gigya models<br/>[models.py]"]
  node_gigya_schemas["Gigya schemas<br/>[schemas.py]"]
end

subgraph group_client["Client domain"]
  node_client["Renault client<br/>[renault_client.py]"]
  node_account["Account proxy<br/>[renault_account.py]"]
  node_vehicle["Vehicle proxy<br/>[renault_vehicle.py]"]
  node_domain_models["Domain models<br/>[models.py]"]
end

subgraph group_protocol["Renault protocols"]
  node_kamereon["Kamereon API<br/>[__init__.py]"]
  node_kamereon_models["Kamereon models<br/>[models.py]"]
  node_kamereon_schemas["Kamereon schemas<br/>[schemas.py]"]
end

subgraph group_cli["Command line"]
  node_cli_main["CLI entry<br/>[__main__.py]"]
  node_cli_client["CLI session setup<br/>[renault_client.py]"]
  node_cli_account["Account selection<br/>[renault_account.py]"]
  node_cli_vehicle["Vehicle status<br/>[renault_vehicle.py]"]
  node_charge_commands["Charge commands<br/>[commands.py]"]
  node_charge_history["Charge history<br/>[history.py]"]
  node_charge_schedule["Charge schedules<br/>[schedule.py]"]
  node_hvac_commands["HVAC commands<br/>[commands.py]"]
  node_hvac_control["HVAC control<br/>[control.py]"]
  node_hvac_history["HVAC history<br/>[history.py]"]
end

node_user(("User"))
node_gigya_service{{"Gigya service"}}
node_kamereon_service{{"Kamereon service"}}

node_user -->|"uses library"| node_client
node_user -->|"runs commands"| node_cli_main
node_client -->|"creates or uses"| node_session
node_client -->|"creates proxies"| node_account
node_client -->|"gets person"| node_session
node_session -->|"reads and updates"| node_credentials
node_session -->|"authenticates"| node_gigya
node_gigya -->|"sends requests"| node_gigya_service
node_gigya -->|"validates responses"| node_gigya_schemas
node_gigya -->|"returns models"| node_gigya_models
node_session -->|"requests data"| node_kamereon
node_kamereon -->|"sends requests"| node_kamereon_service
node_kamereon -->|"validates responses"| node_kamereon_schemas
node_kamereon -->|"returns models"| node_kamereon_models
node_account -->|"uses session"| node_session
node_account -->|"creates vehicle proxy"| node_vehicle
node_vehicle -->|"uses session"| node_session
node_vehicle -->|"uses types"| node_domain_models
node_cli_main -->|"dispatches setup"| node_cli_client
node_cli_client -->|"creates session"| node_session
node_cli_client -->|"loads credentials"| node_credentials
node_cli_client -->|"checks locale keys"| node_gigya
node_cli_account -->|"selects account"| node_account
node_cli_vehicle -->|"reads vehicle data"| node_vehicle
node_charge_commands -->|"dispatches history"| node_charge_history
node_charge_commands -->|"dispatches schedules"| node_charge_schedule
node_charge_history -->|"reads charge records"| node_vehicle
node_charge_schedule -->|"reads and updates"| node_vehicle
node_hvac_commands -->|"dispatches control"| node_hvac_control
node_hvac_commands -->|"dispatches history"| node_hvac_history
node_hvac_control -->|"starts or stops HVAC"| node_vehicle
node_hvac_history -->|"reads HVAC records"| node_vehicle

click node_client "https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/renault_client.py"
click node_session "https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/renault_session.py"
click node_credentials "https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/credential_store.py"
click node_credential "https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/credential.py"
click node_gigya "https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/gigya/__init__.py"
click node_gigya_models "https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/gigya/models.py"
click node_gigya_schemas "https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/gigya/schemas.py"
click node_account "https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/renault_account.py"
click node_vehicle "https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/renault_vehicle.py"
click node_domain_models "https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/models.py"
click node_kamereon "https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/kamereon/__init__.py"
click node_kamereon_models "https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/kamereon/models.py"
click node_kamereon_schemas "https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/kamereon/schemas.py"
click node_cli_main "https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/cli/__main__.py"
click node_cli_client "https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/cli/renault_client.py"
click node_cli_account "https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/cli/renault_account.py"
click node_cli_vehicle "https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/cli/renault_vehicle.py"
click node_charge_commands "https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/cli/charge/commands.py"
click node_charge_history "https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/cli/charge/history.py"
click node_charge_schedule "https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/cli/charge/schedule.py"
click node_hvac_commands "https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/cli/hvac/commands.py"
click node_hvac_control "https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/cli/hvac/control.py"
click node_hvac_history "https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/cli/hvac/history.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_session,node_credentials,node_credential,node_gigya,node_gigya_models,node_gigya_schemas,node_user toneBlue
class node_client,node_account,node_vehicle,node_domain_models toneAmber
class node_kamereon,node_kamereon_models,node_kamereon_schemas toneMint
class node_cli_main,node_cli_client,node_cli_account,node_cli_vehicle,node_charge_commands,node_charge_history,node_charge_schedule,node_hvac_commands,node_hvac_control,node_hvac_history toneRose
class node_gigya_service,node_kamereon_service toneIndigo
```

## Components

### Authentication

- [Session provider](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/renault_session.py): `src/renault_api/renault_session.py`
- [Credential store](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/credential_store.py): `src/renault_api/credential_store.py`
- [Credential](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/credential.py): `src/renault_api/credential.py`
- [Gigya API](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/gigya/__init__.py): `src/renault_api/gigya/__init__.py`
- [Gigya models](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/gigya/models.py): `src/renault_api/gigya/models.py`
- [Gigya schemas](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/gigya/schemas.py): `src/renault_api/gigya/schemas.py`

### Client domain

- [Renault client](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/renault_client.py): `src/renault_api/renault_client.py`
- [Account proxy](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/renault_account.py): `src/renault_api/renault_account.py`
- [Vehicle proxy](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/renault_vehicle.py): `src/renault_api/renault_vehicle.py`
- [Domain models](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/models.py): `src/renault_api/models.py`

### Renault protocols

- [Kamereon API](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/kamereon/__init__.py): `src/renault_api/kamereon/__init__.py`
- [Kamereon models](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/kamereon/models.py): `src/renault_api/kamereon/models.py`
- [Kamereon schemas](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/kamereon/schemas.py): `src/renault_api/kamereon/schemas.py`

### Command line

- [CLI entry](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/cli/__main__.py): `src/renault_api/cli/__main__.py`
- [CLI session setup](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/cli/renault_client.py): `src/renault_api/cli/renault_client.py`
- [Account selection](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/cli/renault_account.py): `src/renault_api/cli/renault_account.py`
- [Vehicle status](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/cli/renault_vehicle.py): `src/renault_api/cli/renault_vehicle.py`
- [Charge commands](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/cli/charge/commands.py): `src/renault_api/cli/charge/commands.py`
- [Charge history](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/cli/charge/history.py): `src/renault_api/cli/charge/history.py`
- [Charge schedules](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/cli/charge/schedule.py): `src/renault_api/cli/charge/schedule.py`
- [HVAC commands](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/cli/hvac/commands.py): `src/renault_api/cli/hvac/commands.py`
- [HVAC control](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/cli/hvac/control.py): `src/renault_api/cli/hvac/control.py`
- [HVAC history](https://github.com/hacf-fr/renault-api/blob/main/src/renault_api/cli/hvac/history.py): `src/renault_api/cli/hvac/history.py`

### Other components

- **User**
- **Gigya service**
- **Kamereon service**

## Connections

- User → Renault client: uses library
- User → CLI entry: runs commands
- Renault client → Session provider: creates or uses
- Renault client → Account proxy: creates proxies
- Renault client → Session provider: gets person
- Session provider → Credential store: reads and updates
- Session provider → Gigya API: authenticates
- Gigya API → Gigya service: sends requests
- Gigya API → Gigya schemas: validates responses
- Gigya API → Gigya models: returns models
- Session provider → Kamereon API: requests data
- Kamereon API → Kamereon service: sends requests
- Kamereon API → Kamereon schemas: validates responses
- Kamereon API → Kamereon models: returns models
- Account proxy → Session provider: uses session
- Account proxy → Vehicle proxy: creates vehicle proxy
- Vehicle proxy → Session provider: uses session
- Vehicle proxy → Domain models: uses types
- CLI entry → CLI session setup: dispatches setup
- CLI session setup → Session provider: creates session
- CLI session setup → Credential store: loads credentials
- CLI session setup → Gigya API: checks locale keys
- Account selection → Account proxy: selects account
- Vehicle status → Vehicle proxy: reads vehicle data
- Charge commands → Charge history: dispatches history
- Charge commands → Charge schedules: dispatches schedules
- Charge history → Vehicle proxy: reads charge records
- Charge schedules → Vehicle proxy: reads and updates
- HVAC commands → HVAC control: dispatches control
- HVAC commands → HVAC history: dispatches history
- HVAC control → Vehicle proxy: starts or stops HVAC
- HVAC history → Vehicle proxy: reads HVAC records
