All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
- Added support for .NET 10.0
- Added support for Verified Payouts (UK-only feature)
- New
Verificationmodel withVerifyNameand optionalTransactionSearchCriteriafor name and transaction verification - New
PayoutUserRequestandPayoutUserResponsemodels for user details in verified payouts - Updated
CreatePayoutBeneficiary.UserDeterminedbeneficiary type with verification support - New
PayoutHppLinkBuilderhelper for generating Hosted Payment Page verification links - New
CreatePayoutResponse.AuthorizationRequiredresponse type for verified payouts requiring authorization - Separate
GetPayoutBeneficiarynamespace for GET response types (distinct from CREATE request types) - Enhanced
OneOfJsonConverterwith[DefaultJsonDiscriminator]support for fallback deserialization
- New
- Added support for Hosted Page in Create Payment (alternative to
CreateHostedPaymentPageLink)- New
HostedPageRequestmodel for configuring hosted payment page parameters (ReturnUri,CountryCode,LanguageCode,MaxWaitForResult) - New
HostedPageResponsemodel containing the auto-constructed hosted page URI - Updated
CreatePaymentRequestto accept optionalHostedPageparameter to receive the hosted page URI directly in the response - Updated
CreatePaymentResponse.AuthorizationRequiredto includeHostedPageproperty with the hosted page URI when requested
- New
- BREAKING: Removed
CreateHostedPaymentPageLinkmethod fromIPaymentsApi- This method is no longer supported for payments
- Use the new
HostedPageparameter inCreatePaymentRequestinstead to receive the hosted page URI directly in the response - For mandates,
CreateHostedPaymentPageLinkremains available inIMandatesApi
- Removed support for .NET 6.0
- Removed support for .NET Standard 2.1
- Removed IsExternalInit shim (no longer needed for .NET 8.0+)
- BREAKING:
CreatePayoutnow returnsOneOf<AuthorizationRequired, Created>instead ofCreatePayoutResponse- Consumers must use
.Match()to handle both response types - Standard payouts return
Createdwith just the payout ID - Verified payouts return
AuthorizationRequiredwith ID, status, resource token, and user details
- Consumers must use
- BREAKING:
GetPayoutnow returnsOneOf<AuthorizationRequired, Pending, Authorized, Executed, Failed>instead ofOneOf<Pending, Authorized, Executed, Failed>- Added
AuthorizationRequiredstatus for verified payouts awaiting user authorization - Consumers must update
.Match()calls to handle the newAuthorizationRequiredtype
- Added
- BREAKING: Renamed
BeneficiarytoCreatePayoutBeneficiaryfor clarity - BREAKING: Simplified
CreatePayoutBeneficiary.BusinessAccountto only requireReference(removed account holder name and identifier) - BREAKING: Split Provider types into
CreateProviderSelection(for requests) andGetProviderSelection(for responses)CreateProviderSelection.UserSelected- Use for creating payments/payouts/mandates with user-selected providerCreateProviderSelection.Preselected- Use for creating payments/payouts/mandates with preselected providerGetProviderSelection.UserSelected- Returned in GET responses (payments/mandates), includesProviderIdandSchemeIdfieldsGetProviderSelection.Preselected- Returned in GET responses (payments/mandates), includesSchemeIdfield- Migration: Replace
Provider.UserSelectedwithCreateProviderSelection.UserSelectedorGetProviderSelection.UserSelectedas appropriate - Migration: Replace
Provider.Preselected(providerId, schemeId)withCreateProviderSelection.Preselected(providerId, new SchemeSelection.Preselected { SchemeId = schemeId })
- BREAKING: Updated Mandate models to use new provider selection types
Mandate.VRPCommercialMandateandMandate.VRPSweepingMandatenow useCreateProviderSelectiontypesMandateDetailresponse types (AuthorizationRequiredMandateDetail, AuthorizingMandateDetail, AuthorizedMandateDetail, FailedMandateDetail, RevokedMandateDetail) now useGetProviderSelectiontypes- Migration: Update mandate creation code to use
CreateProviderSelection.UserSelectedorCreateProviderSelection.Preselected
- BREAKING: Split PaymentMethod types into
CreatePaymentMethod(for requests) andGetPaymentMethod(for responses)CreatePaymentMethod.BankTransfer- Use for creating paymentsCreatePaymentMethod.Mandate- Use for creating payments with mandatesGetPaymentMethod.BankTransfer- Returned in GET payment responses, includesSchemeIdfieldGetPaymentMethod.Mandate- Returned in GET payment responses- Migration: Replace
PaymentMethod.BankTransferwithCreatePaymentMethod.BankTransferorGetPaymentMethod.BankTransferas appropriate
- BREAKING:
CreateProviderSelection.Preselectedconstructor now requiresSchemeSelectionparameter (no longer accepts optionalschemeIdstring)- Old:
new Provider.Preselected("provider-id", "scheme-id")ornew Provider.Preselected("provider-id") - New:
new CreateProviderSelection.Preselected("provider-id", new SchemeSelection.Preselected { SchemeId = "scheme-id" })
- Old:
- Updated
CreatePayoutBeneficiary.PaymentSourceGET response to includeAccountHolderNameandAccountIdentifiers - Updated
GetPayoutto returnGetPayoutBeneficiarytypes with populated account details - Updated to C# 12.0 language version
- Modernized code to use C# 11/12 features (ArgumentNullException.ThrowIfNull)
- Removed all conditional compilation directives (no longer needed for .NET 8.0+)
- Added
SchemeIdfield toExecutedPayoutandRefundtransaction types in Merchant Account transactions endpoint response - Add support for polish payouts and
SubMerchantsfield
- Enhanced RefundUnion to include all refund statuses:
RefundExecutedandRefundFailedin addition to existingRefundPendingandRefundAuthorized - Updated
ListPaymentRefundsandGetPaymentRefundmethods to support returning refunds in all possible states
- Added support for additional payment features
- Added support for enhanced payment processing
- Added support for improved API responses
- Added support for
CreditableAtinGetPaymentResult
- Added support for
StatementReferenceinMerchantAccount
- Added support Add support for mandates in
HppLinkBuilder
- Added support for net9/net8
- Added support to the
Metadatafield in theGetPayoutResponse
- Added support to the
SchemeIdfield in theGetPayoutResponse
- Added support to
POST /v3/payments/{id}/actions/cancelendpoint for thePaymentsAPI
- Added support to the
Beneficiaryfield in theGetPayoutResponse - Added support to
GET v3/merchant-accounts/{id}/transactionsendpoint for theMerchantAccountAPI
- Added support to
risk_assessmentparameter inCreatePaymentRequest - Added support to
metadatafield toCreatePaymentRequestandGetPaymentResponsemodels - Added support to
verificationfield onMerchantAccountbeneficiary type forCreatePaymentRequest
- Added support to
retryparameter inCreatePaymentRequestmodel - Added support to
AttemptFailedstatus inCreatePaymentResponsemodel
Truelayer.Payments.SigningKey.PrivateKeycan now be set via configuration binding
- Replaced
ReleaseChannelsparameter fromSearchPaymentsProvideerRequestwithResleaseChannel(singlestringvalue)
- Added support to
GET /v3/payments/{id}/refundsendpoint. - Added support to
GET /v3/payments/{payment_id}/refunds/{refund_id}endpoint. - Added support to
POST /v3/payments/{payment_id}/refundsendpoint.
- Removed unnecessary
[Obsolete]attributes
- Added support to
POST /v3/payments/{id}/authorization-flowendpoint. - Added support to
authorizathion_flowparameter inCreatePaymentRequestmodel.
- Added
POST /v3/payments-providers/searchendpoint. - Fixed deserialization issue with some responses from the Mandates APIs
- Changed
GET payments-providers/{id}to set theAuthorizationheader on the request instead of theclient_idon the query parameter.
- Fixed SSRF vulnerability with a CVSS score of 8.6 (High)
- Added scheme selection options for the provider selection objects to be submitted when creating a payment.
- Added mandates APIs. Thanks to @mohammedmiah99, @Ryan-Palmer and @ubunoir for their contributions.
- Added
RelatedProductstoCreatePaymentRequest
- Set
TL-Agentheader instead ofuser-agent.
MetadatatoCreatePayoutRequest.AddressandDateOfBirthtoCreatePayoutRequest.Beneficiary.ExternalAccount.
- Updated payouts to use the
paymentstoken instead of the legacypaydirecttoken.
AddressandDateofBirthtoPaymentUserRequest.
AddressandDateofBirthtoPaymentUserRequest.- This version got unlisted because wrong. Please refer to version
1.2.0.
ProviderFilters.CustomerSegmentsis now an array.
- Some user information from payment response (see TrueLayer Changelog).
nameemailphonedate_of_birthaddress
- Upgrade to
.NET6.
StatustoCreatePaymentResponsemodel.
- Use TrueLayer.Signing nuget in favor of the custom-made
RequestSignatureclass.
CHANGELOGfile.GET /payments-providersendpoint.
payment_sourcepayout beneficiary.business_accountpayout beneficiary.executedpayment status.
successfulpayment status.