Create a payment using .NET

Once you have acquired a token to interact with the API, you can make a payment. A payment's journey starts with a single HTTP call to our APIs.

Check our API reference for more information on how to create a payment.

.NET is one of the languages/frameworks that can be used to create a payment on your backend application. It is highly recommended over a custom integration with C# as using our libraries will drastically reduce the time required to make your first payment.

Before you start


Check the latest version of our SDKs

To access and learn about the latest version of our .NET SDKs, visit our GitHub.

Configure settings

Add your client_id, client_secret and public key value to appsettings.json or any other supported configuration provider.

  "TrueLayer": {
    "ClientId": "your id",
    "ClientSecret": "your secret",
    "UseSandbox": true,
    "Payments": {
      "SigningKey": {
        "KeyId": "85eeb2da-702c-4f4b-bf9a-e98af5fd47c3"

Initialise TrueLayer.NET

Register the TrueLayer client in Startup.cs or Program.cs (.NET 6.0):

public IConfiguration Configuration { get; }

public void ConfigureServices(IServiceCollection services)
    services.AddTrueLayer(configuration, options =>
        if (options.Payments?.SigningKey != null)
            // For demo purposes only. Private key should be stored securely
            options.Payments.SigningKey.PrivateKey = File.ReadAllText("ec512-private-key.pem");

Alternatively, you can create a class that implements IConfigureOptions<TrueLayerOptions> if you have more complex configuration requirements.

Create a payment resource

Inject ITrueLayerClient into your classes:

public class MyService
    private readonly ITrueLayerClient _client;

    public MyService(ITrueLayerClient client)
        _client = client;

    public async Task<ActionResult> MakePayment()
        var paymentRequest = new CreatePaymentRequest(
            amountInMinor: amount.ToMinorCurrencyUnit(2),
            currency: Currencies.GBP,
            paymentMethod: new PaymentMethod.BankTransfer(
                new Provider.UserSelected
                    Filter = new ProviderFilter
                        ProviderIds = new[] { "mock-payments-gb-redirect" }
                new Beneficiary.ExternalAccount(
                    new AccountIdentifier.SortCodeAccountNumber("567890", "12345678")
            user: new PaymentUserRequest("Jane Doe", "[email protected]", "0123456789")

        var apiResponse = await _client.Payments.CreatePayment(
            idempotencyKey: Guid.NewGuid().ToString()

        if (!apiResponse.IsSuccessful)
            return HandleFailure(
                // Includes details of any errors

        // Pass the ResourceToken to the TrueLayer Web or Mobile SDK

        // or, redirect to the TrueLayer Hosted Payment Page
        string hostedPaymentPageUrl = _client.Payments.CreateHostedPaymentPageLink(
            new Uri(""));

        return Redirect(hostedPaymentPageUrl);