SWITCHGRID
DOCS

Collecter le consentement utilisateur#

Un Ask est le mandat que votre utilisateur signe. Il porte un ou plusieurs points de livraison — électricité, gaz, ou les deux — et c'est lui qui nous autorise à demander leurs données aux gestionnaires de réseau.

Le parcours, de bout en bout#

1

(Optionnel, électricité) Retrouver le point de livraison

POST/integration/enedis/search_contract

confirme l'existence d'un PRM chez Enedis et vérifie le titulaire.

2

Créer l'Ask

POST/ask avec la liste des contrats et la durée du consentement. Nous vérifions chaque point de livraison auprès du gestionnaire de réseau concerné, puis l'Ask revient en PENDING_USER_ACTION avec le lien de signature dans consentCollectionDetails.userUrl.

3

Faire signer l'utilisateur

Redirigez-le vers userUrl, ou intégrez cette page dans une iframe. Il y relit le mandat, complète son identité et signe. Il a 2 mois pour le faire, à compter de la création de l'Ask (voir « Délai de signature » plus bas).

4

Suivre le résultat

À la signature, l'Ask passe en ACCEPTED et le webhook ask.accepted est émis. Chaque contrat passe alors en GRANTED — sauf chez GRDF, où il reste en PENDING_DSO_ACTION le temps que le titulaire confirme (voir la section GRDF).

Créer un Ask avec POST/ask#

Voici un exemple du corps de la requête POST/ask pour un Ask avec un contrat gas et un contrat electricity provenant de GET/integration/enedis/search_contract.

POST/ask
Authorization
Bearer
x-api-version
v0
switchgrid-test-env
true

Vous pouvez voir les détails de cet endpoint dans la documentation de l'endpoint POST/ask.

contracts#

Vous indiquez ici les contrats pour lesquels vous souhaitez obtenir le consentement de l'utilisateur. Il y a 3 formes possibles

  • un UUID obtenu via POST/integration/enedis/search_contract. Cet endpoint permet de confirmer l'existence d'un contrat dans la base Enedis. Vous obtenez alors un UUID, que vous pouvez directement réutiliser ici

  • une description du contrat d'électricite (_energyType: electricity) avec le numéro de PDL et les informations du titulaire :

    {
      "_energyType": "electricity",
      "deliveryPointId": "00059461297239",
      "holder": {
        "_tag": "NaturalPerson",
        "fullName": "Jean Dupont"
      },
      "address": {
        "rueEtNumero": "17 avenue Charles de Gaulle",
        "codePostal": "75007",
        "commune": "Paris"
      }
    }
    

    Le deliveryPointId est ici le numéro de PDL (PRM), 14 chiffres.

  • une description du contrat de gaz (_energyType: gas) avec le numéro de PCE et les informations du titulaire :

    {
      "_energyType": "gas",
      "deliveryPointId": "01059461297239",
      "holder": {
        "_tag": "NaturalPerson",
        "fullName": "Jean Dupont"
      },
      "address": {
        "rueEtNumero": "17 avenue Charles de Gaulle",
        "codePostal": "75007",
        "commune": "Paris"
      }
    }
    

    Le deliveryPointId est ici le numéro de PCE (14 chiffres, ou GI suivi de 6 chiffres).

    Les réseaux de distribution de gaz qui ne sont pas exploités par GRDF — les entreprises locales de distribution (ELD) comme Régaz-Bordeaux ou R-GDS — numérotent leurs points de livraison à leur façon. Lorsque l'adresse indique que le réseau n'est pas celui de GRDF, nous acceptons donc le deliveryPointId tel qu'il figure sur la facture (32 caractères maximum). Nous ne sommes pas intégrés à ces distributeurs : le contrat prend alors le statut NOT_VERIFIABLE (il figure sur le mandat, qui reste signable, mais aucune donnée ne pourra être récupérée pour ce point de livraison). Sur une adresse desservie par GRDF, un deliveryPointId qui n'est pas un PCE valide reste refusé avec une erreur 400.

Une entrée par point de livraison

Chaque élément de contracts décrit un point de livraison, donc une énergie. Un même Ask peut mélanger électricité et gaz : il faut alors deux entrées, une par point, et une seule signature couvre les deux. Il n'existe pas de forme qui demanderait « l'électricité et le gaz » en un seul élément, et un UUID de recherche Enedis désigne lui aussi un seul point.

ℹ️

Seul Enedis conserve un contrat identifié par un UUID. Pour un PCE GRDF, décrivez le contrat vous-même comme ci-dessus : PCE, titulaire et adresse.

Limites en nombre de contrats dans un Ask

Aujourd'hui, on limite selon le type de contrat :

Type de l'argument dans contractsLimite par Ask
UUID résultant de search_contract100
_energyType: electricity30
_energyType: gas10

Délai de signature#

Un Ask doit être signé dans les 2 mois qui suivent sa création. Passé ce délai, consentCollectionDetails.userUrl n'accepte plus de signature : la page affiche à l'utilisateur un message l'invitant à se rapprocher de vous pour obtenir un nouveau mandat. Il vous faut alors créer un nouvel Ask.

⚠️

Ce délai n'a rien à voir avec le statut EXPIRED, qui ne concerne que les Asks déjà signés arrivés au terme de leur consentDuration. Un Ask jamais signé reste en PENDING_USER_ACTION au-delà des 2 mois : son statut ne change pas, seule la signature devient impossible.

Suivre l'état des contrats#

GET/ask/{askId} renvoie un statut par contrat, en plus du statut de l'Ask lui-même. C'est là que se lit ce qui bloque, point de livraison par point de livraison.

Statut du contratSignification
PENDING_VALIDITY_CHECKVérification en cours auprès du gestionnaire de réseau.
VALIDPoint de livraison vérifié, le mandat peut être signé.
NOT_VALIDLe gestionnaire de réseau n'a pas confirmé le point. statusText dit pourquoi.
NOT_VERIFIABLERéseau que nous n'intégrons pas (ELD) : signable, mais aucune donnée récupérable.
PENDING_PROOF_VERIFICATIONUn justificatif a été déposé et est en cours de vérification.
PENDING_DSO_ACTIONMandat signé, le gestionnaire de réseau n'a pas encore ouvert l'accès.
GRANTEDAccès ouvert : vous pouvez commander les données.
DENIEDLe gestionnaire de réseau a refusé l'accès.
REVOKED / EXPIREDConsentement révoqué, ou arrivé au terme de consentDuration.

GRDF : la confirmation du signataire#

Chez GRDF, la signature du mandat ne suffit pas : le signataire doit encore confirmer la demande par e-mail ou SMS avant que le contrat gaz ne s'ouvre. C'est le seul gestionnaire de réseau que nous intégrons dans ce cas — le détail est sur sa propre page, GRDF : la confirmation du signataire par e-mail ou SMS.

Dépôt de justificatif de contrat#

Lorsque POST/integration/enedis/search_contract ne trouve pas de contrat (par ex. en raison d'une différence de nom dans la base du fournisseur, noms en 2 lettres, etc.), vous pouvez toujours créer un Ask avec une ou plusieurs entrées dans contracts de type electricity ou gas (le statut de l'Ask sera NOT_VALID) puis téléverser un justificatif — typiquement une facture d'électricité - pour prouver le lien entre la personne titulaire et le point de livraison concerné. Lorsque le justificatif est validé, le contrat est validé et l'Ask passe en statut PENDING_USER_ACTION, prêt à être signé par l'utilisateur.

Processus#

1

Créer un Ask

Créez un Ask via POST/ask comme d'habitude. Si le contrat ne peut pas être trouvé, le statut de l'Ask et celui du contrat seront NOT_VALID, et le champ statusText du contrat dira pourquoi.

{
  "contracts": [
    {
      "_energyType": "electricity",
      "deliveryPointId": "09284757283947",
      "holder": {
        "_tag": "NaturalPerson",
        "fullName": "Jean Dupont"
      },
      "address": {
        "rueEtNumero": "17 avenue Charles de Gaulle",
        "codePostal": "75007",
        "commune": "Paris"
      }
    }
  ],
  "consentDuration": "1 year"
}
ℹ️

Cela ne peut pas être utilisé avec les anciens Asks créés via POST/askenedis-v2.

2

Téléverser un justificatif

Téléversez une facture d'électricité (ou justificatif) pour le(s) contrat(s) en échec via POST/ask/{askId}/ownership_proof.

Envoyez une requête multipart/form-data avec le fichier justificatif (PDF ou image) dans le champ file.

⚠️

La facture doit être récente (moins de 3 mois) et contenir un numéro de PDL. S'il diffère de celui de l'Ask, nous corrigeons l'Ask plutôt que de le rejeter.

3

Vérification

Switchgrid effectue une vérification manuelle ou automatique : nous vérifions que le PDL fourni par l'utilisateur apparaît dans le document, et que le titulaire du contrat et l'adresse correspondent au justificatif.

Pendant ces vérifications, le statut du ou des contrats de l'Ask est PENDING_PROOF_VERIFICATION.

4

Résultat

Une fois approuvé ou rejeté, un webhook est envoyé avec l'événement :

  • _tag: "proof.accepted" ou _tag: "proof.rejected"
  • Accompagné de askId et projectId.

Si tout est correct, le contrat est validé et l'Ask poursuit son processus. Sinon, l'utilisateur est invité à vérifier ou à contacter le support.

ℹ️

Le deliveryPointId d'un contrat peut changer à l'acceptation du justificatif. Après proof.accepted, relisez l'Ask via GET/ask/{askId} plutôt que de vous fier à la valeur envoyée.

Tester la création d'un Ask#

Avec le header HTTP switchgrid-test-env: true sur POST/ask, l'Ask est créé en environnement de test : nous n'appelons aucun gestionnaire de réseau, et le résultat de la vérification ne dépend que du numéro de point de livraison et du code postal que vous envoyez. C'est le moyen de rejouer chaque statut de contrat — VALID, NOT_VALID, puis la signature — sans PRM, PCE ni RTPL réel.

En test, tout identifiant bien formé est accepté : le contrat passe en VALID et l'Ask en PENDING_USER_ACTION, même si le point n'existe chez aucun gestionnaire de réseau. Seuls les identifiants ci-dessous ont un comportement particulier, et ce sont eux qui permettent de provoquer un NOT_VALID.

ℹ️

Un Ask de test se signe comme un vrai, sur userUrl, et émet les mêmes webhooks. Les identifiants de test sont les mêmes quel que soit votre projet.

Enedis : PRM de test#

PRMCode postalComportement à la création
0005609204220978290PRM résidentiel C5. Avec le code postal 78290, le contrat est VALID. Avec tout autre code postal (par ex. 75001), il est NOT_VALID.

Le statusText du contrat NOT_VALID indique que le code postal ne correspond pas à celui du contrat. Tout autre PRM à 14 chiffres est VALID, y compris s'il n'existe pas chez Enedis : le cas « PRM introuvable » ne se rejoue pas en test, mais le cas « code postal différent » suffit à parcourir tout le circuit NOT_VALID, jusqu'au dépôt de justificatif.

GRDF : PCE de test#

PCEComportement à la créationAprès signature
00000000000001VALIDConfirmation du signataire attendue : le contrat reste en PENDING_DSO_ACTION.
00000000000002VALIDDroit d'accès actif d'emblée : le contrat passe en GRANTED à la signature.
12345678901234NOT_VALID — PCE inconnu de GRDF

Le statusText du contrat NOT_VALID indique que le point de livraison n'est pas valide selon le gestionnaire de réseau. Pour le PCE 00000000000001, nous envoyons au signataire un e-mail qui joue le rôle de celui de GRDF : le détail est sur la page GRDF.

ESR : RTPL de test#

Un contrat électricité est rattaché à Strasbourg Électricité Réseaux (ESR) d'après son adresse : utilisez une adresse à Strasbourg. Les trois RTPL de test sont domiciliés au code postal 67000.

RTPLSegmentCode postalComportement à la création
ESR00000C50001C567000Courbe de charge déjà activée. VALID avec le code postal 67000, NOT_VALID sinon.
ESR00000C50002C567000Courbe de charge en attente d'activation. VALID avec le code postal 67000, NOT_VALID sinon.
ESR00000C40001C467000Contrat standard. VALID avec le code postal 67000, NOT_VALID sinon.

Par exemple, ESR00000C50001 avec le code postal 67200 donne un contrat NOT_VALID, avec le même statusText que le cas Enedis. Ce que chaque RTPL renvoie ensuite, endpoint par endpoint, est décrit sur la page ESR.

Rejouer le dépôt de justificatif#

Le dépôt de justificatif se teste de bout en bout à partir d'un contrat NOT_VALID :

1

Créer un Ask NOT_VALID

Créez un Ask avec le header switchgrid-test-env: true, le PRM 00056092042209 et un code postal différent du sien, comme 75001. L'Ask et son contrat reviennent en NOT_VALID.

2

Téléverser un justificatif

Téléversez une facture d'électricité (PDF ou image) via POST/ask/{askId}/ownership_proof. Le contrat passe en PENDING_PROOF_VERIFICATION.

3

Accepter ou rejeter la preuve vous-même

En test, c'est vous qui jouez le rôle de Switchgrid : appelez POST/ask/ownership_proof/{proofId} avec le corps {"acceptOrReject": "accept"} pour accepter la preuve, ou {"acceptOrReject": "reject"} pour la rejeter. Vous recevez le webhook proof.accepted ou proof.rejected, et l'Ask passe en PENDING_USER_ACTION si la preuve est acceptée.

⚠️

Cet endpoint n'est utilisable qu'avec les Asks créés avec le header switchgrid-test-env: true. Il ne peut pas servir à accepter la preuve d'un Ask réel : dans le parcours réel, les justificatifs sont vérifiés par Switchgrid.

Révoquer un Ask#

Si vous souhaitez révoquer un Ask, vous pouvez utiliser l'endpoint POST/ask/{askId}/revoke. Pour l'instant, il n'est pas possible de révoquer partiellement un Ask (seulement certains contrats).

ℹ️

Chez GRDF, le titulaire peut lui aussi révoquer son droit d'accès à tout moment, depuis son espace GRDF, sans passer par vous. L'accès aux données du PCE est alors refusé, et nous fermons le contrat correspondant de notre côté.

SWITCHGRID
© 2024 - 2026 Switchgrid