RobinTTY.NordigenApiClient 2.0.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package RobinTTY.NordigenApiClient --version 2.0.2
NuGet\Install-Package RobinTTY.NordigenApiClient -Version 2.0.2
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="RobinTTY.NordigenApiClient" Version="2.0.2" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add RobinTTY.NordigenApiClient --version 2.0.2
#r "nuget: RobinTTY.NordigenApiClient, 2.0.2"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install RobinTTY.NordigenApiClient as a Cake Addin
#addin nuget:?package=RobinTTY.NordigenApiClient&version=2.0.2

// Install RobinTTY.NordigenApiClient as a Cake Tool
#tool nuget:?package=RobinTTY.NordigenApiClient&version=2.0.2

NordigenApiClient

This project provides a C# client for the Nordigen API. The project targets .Net 6 and supports the following endpoints of the API:

  • Token
  • Institutions
  • Agreements
  • Requisitions
  • Accounts

Getting started

  1. To get started install the package via the package manager:

    Install-Package RobinTTY.NordigenApiClient
    
  2. Next you need to create a new instance of the client:

    using var httpClient = new HttpClient();
    var credentials = new NordigenClientCredentials("my-secret-id", "my-secret-key");
    var client = new NordigenClient(httpClient, credentials);
    

    Note: The client will obtain the required JWT access/refresh token itself and manage it accordingly, for access/refresh token reuse see the advanced section.

  3. You can now use the different endpoints through the client:

    var response = await client.InstitutionsEndpoint.GetInstitutions(country: "GB");
    

    The responses that are returned always have the same structure:

    // If the response is successful the Result will not be null (the Error will be null)
    if(response.IsSuccess){
       var institutions = response.Result!;
       institutions.ForEach(institution => Console.WriteLine(institution.Name));
    }
    // If the response is not successful the Error will not be null (the Result will be null)
    else
       Console.WriteLine(response.Error!.Summary);
    

Getting balances and transactions for a bank account

Here is how you would go about retrieving the balances and transactions for a bank account:

  1. Get a list of institutions in your country (e.g. Great Britain):

    var institutionsResponse = await client.InstitutionsEndpoint.GetInstitutions(country: "GB");
    if(institutionsResponse.IsSuccess)
       institutionsResponse.Result!.ForEach(institution =>
       {
           Console.WriteLine($"Institution: {institution.Name}, Id: {institution.Id}");
       });
    else
       Console.WriteLine($"Couldn't retrieve institutions, error: {institutionsResponse.Error!.Summary}");
    
  2. Choose the institution your bank account is registered with and create a requisition for it:

    var institution = "BANK_OF_SCOTLAND_BOFSGBS1";
    var userLanguage = "EN";
    var reference = "your-internal-reference";
    var redirect = new Uri("https://where-nordigen-will-redirect-after-authentication.com");
    var requisitionRequest = new CreateRequisitionRequest(redirect, institution, reference, userLanguage);
    var requisitionResponse = await client.RequisitionsEndpoint.CreateRequisition(requisitionRequest);
    
     if (requisitionResponse.IsSuccess)
     {
         Console.WriteLine($"Requisition id: {requisitionResponse.Result!.Id}");
         Console.WriteLine($"Start authentication: {requisitionResponse.Result!.AuthenticationLink}");
     }
    
     else
         Console.WriteLine($"Requisition couldn't be created: {requisitionResponse.Error!.Summary}");
    
  3. You will now need to accept the end user agreement by following the authentication link. After that you will be able to retrieve the accounts linked to your bank account:

    var requisitionId = "your-requisition-id";
    var accountsResponse = await client.RequisitionsEndpoint.GetRequisition(requisitionId);
    if(accountsResponse.IsSuccess)
        accountsResponse.Result!.Accounts.ForEach(accountId =>
        {
             Console.WriteLine($"Account id: {accountId}");
        });
    else
        Console.WriteLine($"Accounts couldn't be retrieved: {accountsResponse.Error!.Summary}");
    
  4. Now you can retrieve details about the bank account and the balances/transactions:

    var accountId = "your-account-id";
    var bankAccountDetailsResponse = await client.AccountsEndpoint.GetAccountDetails(accountId);
    if(bankAccountDetailsResponse.IsSuccess)
    {
         Console.WriteLine($"IBAN: {bankAccountDetailsResponse.Result!.Iban}");
         Console.WriteLine($"Account name: {bankAccountDetailsResponse.Result!.Name}");
    }
    
    var balancesResponse = await client.AccountsEndpoint.GetBalances(accountId);
    if(balancesResponse.IsSuccess)
        balancesResponse.Result!.ForEach(balance =>
        {
            var balanceAmount = balance.BalanceAmount;
            Console.WriteLine($"Type: {balance.BalanceType}");
            Console.WriteLine($"Balance: {balanceAmount.AmountParsed} {balanceAmount.Currency}");
        });
    
    var transactionsResponse = await client.AccountsEndpoint.GetTransactions(accountId);
    if (transactionsResponse.IsSuccess)
        transactionsResponse.Result!.BookedTransactions.ForEach(transaction =>
        {
            var transactionAmount = transaction.TransactionAmount;
            Console.WriteLine($"Remittance: {transaction.RemittanceInformationUnstructured}");
            Console.WriteLine($"Booking date:{transaction.ValueDate}");
            Console.WriteLine($"Amount: {transactionAmount.AmountParsed} {transactionAmount.Currency}");
        });
    

Advanced Usage

Acess/Refresh Token reuse

If you wan't to persist the access/refresh token used by the client you can do so by accessing the JwtTokenPair property of the client. After the first request that requires authentication this property will be populated with the access/refresh token that was automatically aquired.

Console.WriteLine(client.JwtTokenPair.AccessToken.EncodedToken);
Console.WriteLine(client.JwtTokenPair.RefreshToken.EncodedToken);

The next time you instantiate the client you can pass the access/refresh token to the client constructor:

using var httpClient = new HttpClient();
var credentials = new NordigenClientCredentials("my-secret-id", "my-secret-key");
var tokenPair = new JsonWebTokenPair("encoded-access-token", "encoded-refresh-token");
var client = new NordigenClient(httpClient, credentials, tokenPair);

The client will now use the given token pair and refresh it automatically if it is expired.

Alternatively you can also use the tokens endpoint directly:

var response = await client.TokenEndpoint.GetTokenPair();
if (response.IsSuccess)
{
    Console.WriteLine($"Access token: {response.Result!.AccessToken.EncodedToken}");
    Console.WriteLine($"Refresh token: {response.Result!.RefreshToken.EncodedToken}");
}

// Set the token pair on the client
client.JwtTokenPair = response.Result;
Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
8.0.1 77 5/4/2024
8.0.0 91 4/27/2024
7.1.0 127 3/25/2024
7.0.0 254 2/22/2024
6.2.0 99 2/21/2024
6.1.3 84 2/21/2024
6.1.2 240 12/30/2023
6.1.1 244 11/9/2023
6.1.0 81 11/8/2023
6.0.6 373 9/27/2023
6.0.5 222 9/8/2023
6.0.4 216 7/31/2023
6.0.3 125 7/15/2023
6.0.2 214 5/27/2023
6.0.1 158 5/24/2023
6.0.0 122 5/22/2023
5.2.1 128 5/21/2023
5.2.0 101 5/13/2023
5.1.0 192 4/25/2023
5.0.1 128 4/24/2023
5.0.0 427 1/18/2023
4.0.2 273 12/23/2022
3.0.0 300 12/16/2022
2.0.3 294 12/9/2022
2.0.2 266 12/9/2022
2.0.1 264 12/9/2022
2.0.0 268 12/8/2022
1.0.0 328 8/10/2022

Fixed BankAccountDetails ignoring BIC in json responses.