TABLE DES MATIÈRES

Présentation

AgoraGroup met à disposition des partenaires d’Ecologic et d'Ecosystem un ensemble d'interfaces digitales qui permettront aux éditeurs de logiciel et autres services IT d'implémenter le processus de demande d'éligibilité et de remboursement du montant de la subvention du fonds de réparation.


Diagramme de séquence


Le diagramme ci-dessus, est une proposition de diagramme de séquence des appels vers les méthodes de l’API.


La phase initiale consiste à récupérer les informations de référence devant être utilisée par l’application cliente.

Il est recommandé de consolider les référentiels au moins 1 fois par jour.


Une fois les informations sur le produit et l’estimation/devis pour la panne réalisée, la première étape est de s’assurer que la réparation va bien être prise en charge par Ecologic avec “CalculateEcoSupport”.


Si la réponse est positive, vous avez le montant du soutien allouable à l’acte de réparation.


La demande de remboursement se crée avec “CreateClaim” et la réponse vous indique s’il vous manque des informations pour pouvoir la soumettre à la vérification (et alors si tout est OK, au paiement).


Généralement, il manque initialement les documents de type, facture, plaque de numéro de série…

Ces documents peuvent être intégrés à la demande de remboursement avec “AttachFile”.

Il est aussi possible de compléter la demande avec “UpdateClaim”.


Si la vérification est OK avec “GetClaimStatus”, vous pouvez faire un “SubmitClaim” en demandant la soumission du dossier.


Le dossier de remboursement passe ensuite dans les étapes de contrôle chez Ecologic.


Spécifications techniques

1.0 Authentification

L'exploitation des APIs nécessite de disposer d'une clé d'API que vous pouvez obtenir dès lors que vous disposez d'un compte AgoraPlus. Dans le cadre du fonds de réparation, si vous n'êtes pas client d'AgoraPlus, vous pouvez créer votre compte directement à partir du site QualiRepar ou bien, à partir de https://myspace.agoraplus.com 


Aide en ligne: 

Comment ouvrir un compte AGORA (clients français)? : Support Agoraplus 

Comment créer un compte Qualirepar ?


Une fois votre compte créé, il vous suffit de créer votre clé API en suivant la procédure suivante : 


La clé d'API devra être transmise dans l'entête HTTP de chaque appel. 

Exemple avec Postman:



1.1 Référentiels de données 


1.1.1 Récupération des sites

Récupération des informations du site associé à la clé API - /GetRepairSitesByATS

URL Preprod : 

Sites de réparation : https://preprod-api.agoraplus.com/api/v2/ecosupport/getrepairsitesbyats

Sites de dépôts : https://preprod-api.agoraplus.com/api/v2/ecosupport/getdepositsitesbyats 


API CALL

 Path: /GetRepairSitesByATS
 Method: GET


API RESPONSE

Un seul site :

{
    "ResponseData": [
        {
            "SiteId": "02c867c0-0000-0000-000-3cf8de2dc1c8",
            "Name": "Test Reparateur",
            "CommercialName": "ECO REPARE",
            "Zip": "78280",
            "City": "GUYANCOURT"
        }
    ],
    "ResponseStatus": "S",
    "IsValid": true,
    "ResponseMessage": "",
    "ResponseErrorMessage": ""
}


Réponse avec plusieurs sites :

{
    "ResponseData": [
        {
            "SiteId": "9cc23555-0000-0000-0000-3279c2f57261",
            "Name": "Test Reparateur 1",
            "CommercialName": "ECO REPARE",
            "Zip": "12100",
            "City": "MILLAU"
        },
        {
            "SiteId": "0590e586-0000-0000-0000-f94f4e1cb199",
            "Name": "Test Reparateur 1",
            "CommercialName": "ECO REPARE",
            "Zip": "12850",
            "City": "ONET-LE-CHATEAU"
        },
        {
            "SiteId": "b14ca037-0000-0000-0000-54a3391ee624",
            "Name": "Test Reparateur 1",
            "CommercialName": "ECO REPARE",
            "Zip": "12200",
            "City": "VILLEFRANCHE-DE-ROUERGUE"
        }
    ],
    "ResponseStatus": "S",
    "IsValid": true,
    "ResponseMessage": "string",
    "ResponseErrorMessage": "string"
}


Permet de récupérer les ID des sites associés à la clé API utilisée.

Ce sera l’information qu’il faudra ensuite utiliser dans certaines méthodes dans le paramètre “RepairSiteId”.


1.1.2 Récupération de la liste des marques


Une API nommée "PrintBrandList" permet de récupérer la liste des marques supportées par Ecologic et Ecosystem. Appeler cette API vous permettra de disposer d'un code de marque unique et de l'associer à votre référentiel.


API CALL

 Path: /PrintBrandList
 Method: GET



API RESPONSE

{
    "ResponseData": [
        {
            "BrandName": "Acer",
            "BrandId": "1689"
        },
        {
            "BrandName": "ADVANCE",
            "BrandId": "1922"
        },
        {
            "BrandName": "AEG",
            "BrandId": "1690"
        },
        ...
  ],
    "ResponseStatus": "S",
    "IsValid": true,
    "ResponseMessage": "string",
    "ResponseErrorMessage": "string"
}


1.1.3 Récupérer la liste des types de produit


Une API nommée "PrintProductTypeList" permet de récupérer la liste des types de produit supportés par Ecologic et Ecosystem et unifiés par AgoraPlus. Appeler cette API vous permettra de disposer d'un code unique pour chaque type de produit afin de l'associer à votre référentiel. Cette API restitue également pour chaque type de produit les symptômes et les codes réparation éligibles au soutien.


API CALL

 Path: /PrintProductTypeList
 Method: GET


API RESPONSE

{
  "ResponseData": [
    {
      "ProductId": "string",
      "ProductName": "string",
      "EligibilityStartDate": "2022-06-27",
      "EligibilityEndDate": "2022-06-27",
      "RepairCodes": [
        {
          "RepairCode": "string"
        }
      ],
      "IRISSymtoms": [
        {
          "IRISSymtom": "string"
        }
      ]
    }
  ],
  "ResponseStatus": "string",
  "IsValid": true,
  "ResponseMessage": "string",
  "ResponseErrorMessage": "string"
}


ProductId = Identifiant unifié Ecologic et Ecosystem du type de produit (ex: 3015)

ProductName  =Désignation du type de produit (ex: Four (hors micro-ondes et mini-four))

EligibilityStartDate = Date de début d'éligibilité

EligibilityEndDate = Date de fin d'éligibilité

RepairCodes[] = Liste des codes réparation éligibles pour le type de produits et pour Ecosystem

IRISSymptoms[] = Liste des codes symptome IRIS éligibles pour le type de produits et pour Ecologic


Une marque est dites inconnue à partir du moment où elle n’est pas listée dans la réponse à la méthode printbrandlist.

Exemple :

produit smartphone avec le code EEE.M2.044

marque “SUPERPhone”

Ce couple n’est pas listé et doit être traité comme une marque inconnue.


1.2 Demande de remboursement


1.2.1 Créer la demande de remboursement


Une API nommée "CreateClaim" permet d'effectuer la demande de remboursement. Les champs obligatoires sont indiqués dans le YAML. 

En retour de cet appel, vous obtiendrez l'ID de votre demande de remboursement (ClaimId), qu'il vous faudra utiliser pour corriger les erreurs de validation, pour ajouter les pièces jointes requises et finalement soumettre votre demande. 


API CALL

Path: /CreateClaim?RequestId=1564&RepairEndDate=2022-06-27T11:50:37.913Z&RepairSiteId=54654&ConsumerInvoiceNumber=132564
 Method: POST
 Payload: 
 {
  "Consumer": {
    "Title": 1,
    "LastName": "Doe",
    "FirstName": "John",
    "StreetNumber": "121",
    "Address1": "Allée des roses",
    "Address2": "",
    "Address3": "",
    "Zip": "75010",
    "City": "Paris",
    "Country": "250",
    "Phone": "",
    "Email": "john.doe@agoraplus.com"
  },
  "Product": {
    "ProductId": "3065",
    "BrandId": "5098",
    "CommercialRef": "AR8395C",
    "SerialNumber": "4546545445646",
    "PurchaseDate": "2016-04-13",
    "IRISCondition": "6",
    "IRISConditionEX": "X47",
    "IRISSymptom": "A53",
    "IRISSection": "W10",
    "IRISDefault": "Q",
    "IRISRepair": "A",
    "FailureDescription": "formation de mousse",
    "DefectCode": ""
  },
  "Quote": {
    "LaborCost": {
      "Amount": 70.00,
      "Currency": "EUR"
    },
    "SparePartsCost": {
      "Amount": 180.00,
      "Currency": "EUR"
    },
    "TravelCost": {
      "Amount": 0,
      "Currency": "EUR"
    },
    "TotalAmountExclVAT": {
      "Amount": 208.34,
      "Currency": "EUR"
    },
    "TotalAmountInclVAT": {
      "Amount": 250,
      "Currency": "EUR"
    },
    "SupportAmount": {
      "Amount": 50.00,
      "Currency": "EUR"
    }
  },
  "SpareParts": [
    {
      "Partref": "407142415/6",
      "Quantity": 1,
      "Status": "New"
    }
  ]
}



API RESPONSE

{
  "ResponseData": {
    "ClaimId": 16466,
    "IsValid": false,
    "ValidationErrors": [
      {
        "Field": "Consumer.LastName",
        "ErrorMessage": "Mandatory",
        "MessageType": "E"
      },
	  {
        "Field": "Consumer.Email",
        "ErrorMessage": "Bad email format",
        "MessageType": "E"
      }
    ],
    "ErrorMessage": "Validation Errors"
  },
  "ResponseStatus": "S",
  "IsValid": true,
  "ResponseMessage": "",
  "ResponseErrorMessage": ""
}


1.2.2 Créer la demande de remboursement avec des pièces détachées

Il est possible dans le Claim d’indiquer l’usage de pièces détachées lors de la réparation.

L’information des pièces détachées est portée dans la variable SpareParts qui contient un tableau de pièces.


Seules 3 valeurs sont utilisables.

Une seule pièce peut être intégrée pour chaque entrée du tableau

Si vous utilisez plusieurs pièces différentes ou plusieurs fois une même pièce, il vous faut intégrer plusieurs entrées dans le tableau (1 pour chaque pièce)

  • PartRef : référence de la pièce détachée
  • Status = 1 seule valeur possible parmi (type chaine de caractère)

“NEW” = pièce neuve

“USED” = pièce d’occasion

“PIEC” = pièce issue de l'économie circulaire

  • Amount (optionnel si SparePartsCost utilisé) = montant en € de la pièce utilisée.


Attention : 

la valeur “Amount” pour l’entrée du tableau SpareParts peut être utilisée, mais si une valeur est présente dans SparePartsCost c’est cette valeur qui sera utilisée

Donc 2 approches possibles : 

- mettre le montant total des pièces dans SparePartsCost et n’utiliser que Status dans SpareParts 

- mettre le montant de chaque pièce dans Amount dans SpareParts et ne pas utiliser SparePartsCost


Exemple de structure simple :

avec une pièce neuve et un montant de pièce = 180.00 €


Path: /CreateClaim?RequestId=1564&RepairEndDate=2026-06-27T11:50:37.913Z&RepairSiteId=54654&ConsumerInvoiceNumber=132564
 Method: POST
 Payload: 
 {
  [...]
  },
  "Quote": {
    "LaborCost": {
      "Amount": 70.00,
      "Currency": "EUR"
    },
    "SparePartsCost": {
      "Amount": 180.00,
      "Currency": "EUR"
    },
    "TravelCost": {
      "Amount": 0,
      "Currency": "EUR"
    },
    "TotalAmountExclVAT": {
      "Amount": 208.34,
      "Currency": "EUR"
    },
    "TotalAmountInclVAT": {
      "Amount": 250,
      "Currency": "EUR"
    },
    "SupportAmount": {
      "Amount": 50.00,
      "Currency": "EUR"
    }
  },
  "SpareParts": [
    {
      "Partref": "407142415/6",
      "Quantity": 1,
      "Status": "New"
    }
  ]
}


1.2.3 Ajouter une pièce jointe à la demande de remboursement

Une API nommée "AttachedFile" permet d'ajouter un document à une demande de remboursement. 


API CALL

Path: /AttachFile?ClaimId=16466&FileName=Facture797&FileExtension=pdf&DocumentType=Invoice
 Method: POST
 Payload: 
 {
  "FileContent": "KJQFKJSQKJDKJQSJDKLFDSGDGDG5F4D65HG46G4D5FSG456FD4G4SG64FSDG5FD5G46DS5G456FD4G56FDSG654FDS56G4F6DG54FDS6G5FD6SG45FS4D6G4F56D4SG654S6G4F5D4G6S45FD4G45SFD4G65FD4SG65DF46S4"
 }


Claimid: Identifiant AgoraPlus de la demande de remboursement à laquelle doit être rattachée la pièce jointe

FileName: Nom du fichier (sans l'extension)

FileExtension: extension du fichier. Formats acceptés *.jpg, *.jpeg, *.pdf, *.png 

DocumentType: Type de document joint

 Il existe 4 types de fichiers qui peuvent être joints à une demande : 

  • facture = INVOICE
  • plaque signalétique ou numéro d’identification = NAMEPLATE
  • photo de l’appareil = PRODUCTPICTURE
  • l'élément de preuve = CONSUMERVALIDATION

Règles de gestion:

Les pièces jointes obligatoires sont : la facture, l'élément de preuve, pour les produits liés à la Fiche Métier 7 EI&T uniquement :  photo de la plaque signalétique. Toute demande de remboursement qui ne dispose pas de ces documents sera "non valide" et ne pourra être soumise.



API RESPONSE

Code 200 -> OK

Code 400 -> Bad request

Code 500 -> Internal Error


1.2.4 Mettre à jour, corriger et soumettre la demande de remboursement


Une API nommée "UpdateClaim" permet de mettre à jour et de corriger la demande de remboursement. La mise à jour n'est plus possible après la soumission de la demande.


API CALL

Path: /UpdateClaim?ClaimId=1564&RepairEndDate=2022-06-27T11:50:37.913Z&RepairSiteId=54654&Submit=false&ConsumerInvoiceNumber=132564
 Method: POST
 Payload: 
 {
  "Consumer": {
    "Title": 1,
    "LastName": "Doe",
    "FirstName": "John",
    "StreetNumber": "121",
    "Address1": "Allée des roses",
    "Address2": "",
    "Address3": "",
    "Zip": "75010",
    "City": "Paris",
    "Country": "250",
    "Phone": "",
    "Email": "john.doe@agoraplus.com"
  },
  "Product": {
    "ProductId": "3065",
    "BrandId": "5098",
    "CommercialRef": "AR8395C",
    "SerialNumber": "4546545445646",
    "PurchaseDate": "2016-04-13",
    "IRISCondition": "6",
    "IRISConditionEX": "X47",
    "IRISSymptom": "A53",
    "IRISSection": "W10",
    "IRISDefault": "Q",
    "IRISRepair": "A",
    "FailureDescription": "formation de mousse",
    "DefectCode": ""
  },
  "Quote": {
    "LaborCost": {
      "Amount": 70.00,
      "Currency": "EUR"
    },
    "SparePartsCost": {
      "Amount": 180.00,
      "Currency": "EUR"
    },
    "TravelCost": {
      "Amount": 0.00,
      "Currency": "EUR"
    },
    "TotalAmountExclVAT": {
      "Amount": 208.34,
      "Currency": "EUR"
    },
    "TotalAmountInclVAT": {
      "Amount": 250,
      "Currency": "EUR"
    },
    "SupportAmount": {
      "Amount": 50.00,
      "Currency": "EUR"
    }
  },
  "SpareParts": [
    {
      "Partref": "407142415/6",
      "Quantity": 1,
      "Status": "New"
    }
  ]
}


API RESPONSE

{
  "ResponseData": {
    "ClaimId": 16466,
    "IsValid": false,
    "ValidationErrors": [
      {
        "Field": "Consumer.LastName",
        "ErrorMessage": "Mandatory",
        "MessageType": "E"
      },
	  {
        "Field": "Consumer.Email",
        "ErrorMessage": "Bad email format",
        "MessageType": "E"
      }
    ],
    "ErrorMessage": "Validation Errors"
  },
  "ResponseStatus": "S",
  "IsValid": true,
  "ResponseMessage": "",
  "ResponseErrorMessage": ""
}


Une API nommée "SubmitClaim" permet de soumettre la demande de remboursement. 


API CALL

Path:  /submitclaim?claimId=16466
 Method: POST


API RESPONSE

{
  "ResponseData": [
    {
      "ClaimId": 16466,
      "LastStatus": "Waiting",
      "Comment": "",
      "CreateDate": "2022-06-24T15:16:22.110Z"
    }
  ],
  "ResponseStatus": "string",
  "IsValid": true,
  "ResponseMessage": "string",
  "ResponseErrorMessage": "string"
}



1.2.5 Suivre le statut de la demande de remboursement


Une API nommée "GetClaimStatus" permet de connaitre le statut d'une demande de remboursement qui a été soumise.


API CALL

 Path: /GetClaimStatus?ClaimId=16466
 Method: GET


API RESPONSE
Si la demande comporte des erreurs :

{
    "ResponseData": {
        "ClaimId": 16466,
        "LastStatus": "Dossier incomplet",
        "Comment": "Code IRIS Symptome 013",
        "CreateDate": "2023-05-05T15:15:50.953"
    },
    "ResponseStatus": "S",
    "IsValid": true,
    "ResponseMessage": "string",
    "ResponseErrorMessage": "string"
}

Si la demande est OK :

{     "ResponseData": {         
        "ClaimId": 16466,         
        "LastStatus": "Dossier incomplet",         
        "Comment": "Code IRIS Symptome 013",         
        "CreateDate": "2023-05-05T15:15:50.953"     
        },     
        "ResponseStatus": "S",     
        "IsValid": true,     
        "ResponseMessage": "string",     
        "ResponseErrorMessage": "string" 
}


LastStatus: Dernier statut de la demande de soutien (Waiting: en attente, Accepted: Acceptée, Refused: Refusée, NotConform: Non conforme)
NB: Le statut "NotConform" indique qu'une action de correction est requise par Ecologic ou Ecosytem. Ce statut permet de visualiser la demande dans le champ "Comment" et de mettre à jour la demande de remboursement puis finalement de la soumettre à nouveau.


L'ensemble de ces APIs est disponible sur notre portail Swagger de Test Portail Swagger de test AgoraPlus: https://preprod-api.agoraplus.com 


Accéder à l’environnement de développement

2.1 Demande de remboursement

Le développement n’a de sens que s’il s’adresse à un réparateur qui dispose d’un compte sur le service QualiRepar.


Le développeur doit contacter le support afin de se faire identifier en précisant qu'il souhaite un accès en test aux API pour effectuer des demandes Qualipar: support@agoraplus.com


2.2 Procédure

  1. contacter le support support@e-reparateur.eco en demandant à avoir accès à un environnement de pré-production
  2. si votre demande est acceptée vous recevrez par email en réponse :
    1. une clé API de Pré-Production pour réaliser votre développement
    2. un compte d’accès au service web QualiRepar de Pre-Production sur lequel vous pourrez gérer, vérifier, mettre à jour les différents objets du service


Pour toute question complémentaire, vous pouvez contacter le support par email sur support@agoraplus.com 


2.3 Outils de test

Une fois que vous avez vos accès, vous pouvez tester les premiers éléments (notamment votre clé API) avec les outils suivants :

  1. SwaggerUI : SwaggerUI  de l’API de Pre Production = https://preprod-api.agoraplus.com/swagger/index.html 
    Requis = disposer de votre clé d’autorisation d’usage de l’API (voir ci-dessus)
    Une fois votre clé entrée vous pourrez tester les méthodes de l’API 
  2. PostMan : 
    Attention : Les informations contenus dans les structures JSON et les paramètres POSTMAN peuvent contenir des paramètres liés aux produits, aux code symptomes, aux code pannes qui ne sont plus valides au moment où vous réaliserez vos tests.

    Donc veiller à vérifier ces paramètres, notamment à partir des informations récupérées avec les méthodes d’interrogations du référentiel.