Anticipez la transition vers Data Connect 2026 en testant les nouvelles API en bac à sable. En savoir plus

Exemples de code

Exemple de code PHP

Il faut tout d’abord initialiser les variables d’environnement (1) (comme vos clés publique et secrète, ainsi que votre numéro d’opération ACC).
Dans un deuxième temps, il faut récupérer un token d’authentification (2).
Puis, nous pouvons préparer nos requêtes à envoyer à l’API (3).
Ici, nous avons uniquement utilisé la méthode GET, afin d’ajouter des méthodes et compléter votre application, il vous suffit de dupliquer et adapter cette fonction pour chaque méthode, vous pourrez ensuite, comme pour GET, utiliser cette méthode pour toutes les sous-ressources nécessaires. Dans l’exemple, nous avons récupéré le périmètre, le périmètre spécifique aux périodes blanches, et une requête de courbes de charge.

<?php

/*
****************************************************************
* Exemple de code pour l'API ACC (AutoConsommation Collective) *
****************************************************************
*/

// Début du point (1)

// Paramètres généraux
define("ENV_PROD", false); // true pour PROD ou false pour Homologation (bac à sable)
define("AGREEMENT_ID", "ACCXXXXXXXX"); // à remplacer par votre numéro d'opération ACC

// Clés publiques / privées
define("PUBLIC_KEY", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); // à remplacer par votre clé publique
define("SECRET_KEY", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); // à remplacer par votre clé secrète
define("CREDENTIAL", PUBLIC_KEY .":". SECRET_KEY);

// API URLs
define("API_TEST_URL", "https://gw.ext.prod-sandbox.api.enedis.fr");
define("API_PROD_URL", "https://gw.ext.prod.api.enedis.fr");
define("AUTHORIZE_ENDPOINT", "/oauth2/v3/token");
define("API_ENDPOINT", "/collective_self_consumption/v4/agreements/");

if (ENV_PROD) {
define("AUTHORIZE_URL", API_PROD_URL.AUTHORIZE_ENDPOINT);
define("API_URL", API_PROD_URL.API_ENDPOINT);
}
else {
define("AUTHORIZE_URL", API_TEST_URL.AUTHORIZE_ENDPOINT);
define("API_URL", API_TEST_URL.API_ENDPOINT);
}

// Fin du point (1)

/*
********************************************************
* Programme principal *
********************************************************
*/

$token = get_token(); //(2)
$perimeter = get_acc($token, "/perimeter"); //(3)
$curves = get_acc($token, "/definitive_load_curves", ["start" => "20230501T120000Z", "end" => "20230531T120000Z", "type" => "cons,autocons"]);

/*
********************************************************
* FONCTIONS *
********************************************************
*/

function get_token() : string {
/*
********************************************************
* REQUETE D'AUTHENTIFICATION - RECUPERATION D'UN TOKEN *
********************************************************
*/

//Début du point(2)

// Préparation des headers obligatoires
$headers = [
"Content-Type: application/x-www-form-urlencoded; charset=UTF-8",
];

// Préparation des params obligatoires
$data = [
"grant_type" => "client_credentials"
];

// Création d'une ressource cURL
$ch = curl_init(AUTHORIZE_URL);

// Définition des options cURL
curl_setopt($ch, CURLOPT_POST, true); // méthode POST
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // injection des headers
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); // injection des datas
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // retourne le résultat de la requête au lieu du statut cURL
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); // Basic Auth
curl_setopt($ch, CURLOPT_USERPWD, CREDENTIAL); // encodage en base64 du credential == base64_encode("username:password")
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // pas de vérification du certificat ssl

// Exécution de la requête POST avec cURL
$response = curl_exec($ch);
$curl_errno = curl_errno($ch);
$curl_error = curl_error($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); // status code de la réponse

// Fermeture de la ressource cURL et libération des ressources systèmes
curl_close($ch);

// Gestion des éventuelles erreurs
if ($curl_errno > 0 ) {
display_curl_error($curl_errno, $curl_error);
}
if ($http_code != 200 || !$response) {
display_http_error($http_code, $response);
}

// Récupération du token dans le body de la réponse
$json = json_decode($response);
$access_token = $json->access_token;
echo "[POST] -> " . AUTHORIZE_URL ."<br>";
echo "Status code : $http_code<br>";
echo "Token : $access_token<br><br>";

return $access_token;

//Fin du point(2)
}

function get_acc(string $token, string $endpoint, array $params=[]) {

/*
********************************************************
GET /v1/collective_self_consumption/agreements/{AGREEMENT_ID}/definitive_load_curves{endpoint}
********************************************************
*/

//Début du point (3)

// Préparation du header
$headers = [
"Content-Type : application/json; charset=UTF-8",
"Accept : application/json",
"Authorization : Bearer $token" // Identification par le token
];

// Préparation des params optionnels
$query_params = http_build_query($params);

// Création d'une ressource cURL
$url = API_URL . AGREEMENT_ID . $endpoint . "?" . $query_params;
echo "[GET] -> $url<br>";
$ch = curl_init($url);

// Définition des options cURL
curl_setopt($ch, CURLOPT_HTTPGET, true); // méthode GET
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // injection des headers
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // retourne le résultat de la requête au lieu du statut cURL
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // pas de vérification du certificat ssl

// Exécution de la requête GET avec curl
$response = curl_exec($ch);
$curl_errno = curl_errno($ch);
$curl_error = curl_error($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

// Fermeture de la ressource cURL et libération des ressources systèmes
curl_close($ch);

// Gestion des éventuelles erreurs
if ($curl_errno > 0 ) {
display_curl_error($curl_errno, $curl_error);
}
if ($http_code != 200 || !$response) {
display_http_error($http_code, $response);
}

// Extraction des données:
$json = json_decode($response);

// Debug
echo "Status code : $http_code<br>";
var_dump($json);

return $json;

//Fin du point (3)
}

function display_curl_error(int $code, string $msg) {
echo "L'exécution de cURL a échoué avec le code erreur $code ($msg).";
exit();
}

function display_http_error(int $code, string $msg) {
echo "La requête cURL a retourné une erreur status code $code ($msg).";
exit();
}

?>

 

Exemple de code Python

Il faut tout d’abord initialiser les variables d’environnement (1) (comme vos clés publique et secrète, ainsi que votre numéro d’opération ACC).
Dans un deuxième temps, il faut récupérer un token d’authentification (2).
Puis, nous pouvons préparer nos requêtes à envoyer à l’API (3).
Ici, nous avons uniquement utilisé la méthode GET, afin d’ajouter des méthodes et compléter votre application, il vous suffit de dupliquer et adapter cette fonction pour chaque méthode, vous pourrez ensuite, comme pour GET, utiliser cette méthode pour toutes les sous-ressources nécessaires. Dans l’exemple, nous avons récupéré le périmètre, le périmètre spécifique aux périodes blanches, et une requête de courbes de charge.

################################################################
# Exemple de code pour l'API ACC (AutoConsommation Collective) #
################################################################

import requests

# Début du point (1)

# Paramètres généraux
env = "hml" # environnement de travail (prod ou hml)
agreement_id = "ACCXXXXXXXX" # agreement_id, remplacer par votre numéro d'opération ACC

# Clés publiques / privées
PUBLIC_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" # à remplacer
SECRET_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" # à remplacer

# API URLs
API = {
'hml' : 'https://gw.ext.prod-sandbox.api.enedis.fr',
'prod' : 'https://gw.ext.prod.api.enedis.fr'
}
AUTHORIZE_ENDPOINT = '/oauth2/v3/token'
API_ENDPOINT = '/collective_self_consumption/v4/agreements/'

# Construction des URLs
authorize_url = API[env] + AUTHORIZE_ENDPOINT
api_url = API[env] + API_ENDPOINT

# Fin du point (1)

def get_token() -> str:

########################################################
# REQUETE D'AUTHENTIFICATION - RECUPERATION D'UN TOKEN #
########################################################

#Début du point (2)

# Préparation des headers obligatoires
headers = {"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"}

# Préparation des params obligatoires
payload = {"grant_type": "client_credentials"}

# Exécution de la requête POST
response = requests.post(authorize_url, headers=headers, data=payload, auth=(PUBLIC_KEY, SECRET_KEY))

# Gestion des éventuelles erreurs
if response.status_code != 200:
print("La requête a échoué (status code %s - %s), erreur : %s" % (response.status_code, response.reason, response.text))
exit()

# Récupération du token dans le body de la réponse
token = response.json()['access_token']
print("*** AUTHORIZE ***", authorize_url)
print("Status code =", response.status_code)
print("Token =", token)
print()

# On retourne le token
return token

#Fin du point (2)

def get_acc(token: str, endpoint: str, **payload) -> dict:

######################################
# REQUETE DE CONSULTATION DE DONNEES #
######################################

#Début du point (3)

# Préparation des headers obligatoires
headers = {
"Content-Type": "application/json; charset=UTF-8",
"Accept": "application/json",
"Authorization": "Bearer " + token, # Identification par le token
}

# Exécution de la requête GET avec paramètres
url = api_url + agreement_id + endpoint
response = requests.get(url, headers=headers, params=payload)
print("GET ->", response.url)

# Gestion des résultats
if response.status_code != 200: # Cas d'erreurs
print("La requête a échoué (status code %s - %s), erreur : %s" % (response.status_code, response.reason, response.text))
return None
else:
# Extraction des données
print("Status code =", response.status_code)
print("json =", response.json())
print()
# on retourne le json du résultat
return response.json()

#Fin du point (3)

###################################################################################################
# Programme principal #
###################################################################################################

# token
token = get_token()

# requêtes avec ou sans paramètres
perimeter = get_acc(token, "/perimeter")
curves = get_acc(token, "/definitive_load_curves", start="20230501T120000Z", end="20230531T120000Z", type="cons,autocons")
energy = get_acc(token, "/definitive_active_energy", start="20230501T120000Z", end="20230531T120000Z", type="cons,prod,autocons,surplus,complement")