Skip links

Récupérer ses données Qonto depuis Power BI (1/3)

Pour les entrepreneurs et les indépendants, Qonto est devenue en quelques années un des leaders des néo-banques professionnelles (c’est la banque que j’utilisais lorsque j’étais indépendant). Je vous propose ici de créer un rapport Power BI très simple permettant d’accéder à vos données de transactions en passant par l’API mise à dispotion par Qonto (documentation api Qonto).

Création d’une Requête Power Query appelant l’API Qonto

Dans un premier temps, nous allons créer une simple requête récupérant les données depuis l’API Qonto.

Etapes

  • Créez un nouveau rapport Power BI
création d'un nouveau rapport Power BI
  • Ouvrez l’éditeur Power Query
    bouton d'ouverture de l'éditeur Power Query
  • La fenêtre Power Query s’ouvre
éditeur Power Query
  • Créez une requête vide
menu de création d'un rapport

Normalement il devrait être possible de créer une requête Web mais la création ne semble pas fonctionner avec l’api Qonto. Il y a une erreur d’authentification même en fonctionnement Anonyme.

On trouve un peu plus d’informations sur ce post : https://community.powerbi.com/t5/Service/Cannot-sign-in-with-Anonymous-Authentication-for-a-Web-API/td-p/168154

Ainsi que la réponse de l’équipe responsable coté MS :

Currently, “test connection” for web sources does not use any of the information in the options record, which in this case includes the authorization header that’s required for this source to respond. The service also doesn’t give the user a way to opt out of “test connection” or ignore its failures.

As a result, any query with a call to Web.Contents whose success is dependent on information in the options record cannot currently be scheduled for refresh in the service.

erreur de connextion

  • Résultat
résultat création requête vide
  • Renommez la requête “transactions-api”
  • Ouvrez la requête en mode “Editeur avancé”
menu de requête
  • La fenêtre d’édition s’ouvre
éditeur avancé
  • Remplacez le code existant par le suivant
let
    slug = "ajouter le slug de votre compte Qonto",
    secret = "ajouter le secret de votre compte Qonto",
    iban = "ajouter l'iban de votre compte Qonto",
    page = 1,
    authorization = slug & ":" & secret,
   Source = Json.Document(Web.Contents("https://thirdparty.qonto.com/v2/transactions", [ Query=[ #"slug"=slug, #"iban"=iban, #"current_page"=page],Headers=[Authorization=authorization]]))
in
    Source

Explications du code :

  • les lignes 2 à 6 servent à instancier les variables qui seront utilisées lors de notre appel à l’api

Remplacez les valeurs des variables par vos informations de comptes disponibles sur le site de Qonto

plus d’informations sur l’api transactions : https://api-doc.qonto.com/2.0/transactions/list-transactions

  • On passe plusieurs éléments à notre requête http :
    • Headers (en-tête du call http) :
      • Authorization : ici on passe la clé d’authentication de l’api Qonto ( format : {slug}:{secret})
    • Query (paramètres qui seront ajouter dans l’url) :
      • slug : correspond au login du compte (paramètre obligatoire)
      • iban : identifiant du compte dont on veut récupérer les transactions(paramètre obligatoire)
      • current_page : l’api retourne les transactions par page (ici on indique ce que l’on souhaite récupérer).

current_page n’est pas un paramètre obligatoire mais je le positionne dès maintenant, car il nous sera utile plus tard dans le tutoriel

  • Une fois les modifications de code effectuées, cliquez “OK”. Vous devriez obtenir le résultat suivant :
resultat appel api

L’objet source nous retourne deux éléments :

  • transactions : la liste des transactions pour les informations passées en paramètre
  • meta : les métadonnées pour les transactions (ex : nb total de transactions / nombre de page…)

C’est la liste des transactions qui nous intérresse

  • Cliquez sur la liste pour l’ouvrir vous devriez obtenir le résultat suivant
liste des transactions ouverte
  • Transformez la liste de record (enregistrement) en Table
bouton de transformation en table
  • Cliquez sur le bouton permettant de développer le contenu des records (enregistrements)
colonne à developper
  • Une fenêtre s’ouvre afin de nous permettre de sélectionner les données qui vous interresse.
fenêtre de selection des colonnes

2 remarques :

  • pour mon exemple je sélectionne toutes les colonnes mais vous avez la possibilité de ne prendre que ce qui vous intéresse
  • je décoche la case “Utiliser le nom de la colonne …” pour éviter d’avoir a changer les noms ensuite
  • Vous devriez obtenir le résultat suivant :
colonnes developpées

il est possible de développer les sous éléments des transactions. Pour notre exemple je me limite aux données de premier niveau

  • Réouvrez l’éditeur avancé de la requête, vous devriez avoir un code similaire à celui ci:
let
    slug = "ajouter le slug de votre compte Qonto",
    secret = "ajouter le secret de votre compte Qonto",
    iban = "ajouter l'iban de votre compte Qonto",
    page = 1,
    authorization = slug & ":" & secret,
    Source = Json.Document(Web.Contents("https://thirdparty.qonto.com/v2/transactions", [ Query=[ #"slug"=slug, #"iban"=iban, #"current_page"=page],Headers=[Authorization=authorization]])),
    transactions = Source[transactions],
    #"Converti en table" = Table.FromList(transactions, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Column1 développé" = Table.ExpandRecordColumn(#"Converti en table", "Column1", {"transaction_id", "amount", "amount_cents", "attachment_ids", "local_amount", "local_amount_cents", "side", "operation_type", "currency", "local_currency", "label", "settled_at", "emitted_at", "updated_at", "status", "note", "reference", "vat_amount", "vat_amount_cents", "vat_rate", "initiator_id", "label_ids", "attachment_lost", "attachment_required"}, {"transaction_id", "amount", "amount_cents", "attachment_ids", "local_amount", "local_amount_cents", "side", "operation_type", "currency", "local_currency", "label", "settled_at", "emitted_at", "updated_at", "status", "note", "reference", "vat_amount", "vat_amount_cents", "vat_rate", "initiator_id", "label_ids", "attachment_lost", "attachment_required"})

in
    #"Column1 développé"

Parfait, nous venons de récupérer nos premières données depuis l’API Qonto

Malheureusement l’API ne retourne que 100 transactions (ceci correspond à la taille maximale d’une page pour l’API). Nous devons maintenant boucler afin de récupérer autant de pages que nécessaire.