public async Task ManageChargesSettings()
        {
            player.Play("ManageChargesSettings");

            var settings = Accounts.PaymentCharges;

            PaymentChargesSettings charges = await client.ManageAccountPaymentChargesSettingsAsync(settings);

            Assert.AreEqual(settings, charges);
        }
示例#2
0
        static async Task MainAsync(string loginId, string apiKey)
        {
            var client          = new Client();
            var isAuthenticated = false;

            try
            {
                Console.WriteLine("Login ID: {0} | API Key {1}", loginId, apiKey);
                var token = await client.InitializeAsync(ApiServer.Demo, loginId, apiKey);

                Console.WriteLine("Token: {0}", token);
                isAuthenticated = true;

                Account     mainAccount       = null;
                Account     subAccount        = null;
                Beneficiary beneficiary       = null;
                Conversion  conversion        = null;
                Payment     paymentPayer      = null;
                Payment     paymentConversion = null;
                Settlement  settlement        = null;
                Transaction transaction       = null;

                #region Accounts API

                try
                {
                    Console.WriteLine(Environment.NewLine + "Current Account:");
                    var currentAccount = await client.GetCurrentAccountAsync();

                    Console.WriteLine(currentAccount.ToJSON());

                    mainAccount = currentAccount;

                    Console.WriteLine(Environment.NewLine + "Find Accounts:");
                    var findAccounts = await client.FindAccountsAsync();

                    Console.WriteLine(findAccounts.ToJSON());
                    Console.WriteLine(Environment.NewLine + "Find Accounts Loop:");
                    foreach (var element in findAccounts.Accounts)
                    {
                        Console.WriteLine(element.ToJSON());
                    }

                    Console.WriteLine(Environment.NewLine + "Retrieve Account:");
                    var retrieveAccount = await client.GetAccountAsync(mainAccount.Id);

                    Console.WriteLine(retrieveAccount.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Create Account:");
                    var createAccount = await client.CreateAccountAsync(new Account
                    {
                        AccountName     = "Currencycloud Development",
                        LegalEntityType = "individual",
                        Street          = "12 Steward St",
                        City            = "London",
                        PostalCode      = "E1 6FQ",
                        Country         = "GB",
                        ApiTrading      = true,
                        OnlineTrading   = true,
                        PhoneTrading    = true
                    });

                    Console.WriteLine(createAccount.ToJSON());

                    subAccount = createAccount;

                    Console.WriteLine(Environment.NewLine + "Update Account:");
                    var updateAccount = await client.UpdateAccountAsync(new Account
                    {
                        Id                  = subAccount.Id,
                        YourReference       = "CCY-" + new Random().Next(1000, 10000) + "-" + RandomChars(4),
                        IdentificationType  = "passport",
                        IdentificationValue = RandomChars(10)
                    });

                    Console.WriteLine(updateAccount.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Get Payment Charges Settings:");
                    var chargeSettings = await client.GetPaymentChargesSettingsAsync(updateAccount.Id);

                    Console.WriteLine(chargeSettings.ToJSON());

                    var manageChargeSettings = new PaymentChargesSettings(
                        chargeSettings.PaymentChargesSettings[0].AccountId,
                        chargeSettings.PaymentChargesSettings[0].ChargeSettingsId)
                    {
                        Default = false, Enabled = false
                    };


                    Console.WriteLine(Environment.NewLine + "Manage Account Payment Charges Settings:");
                    manageChargeSettings = await client.ManageAccountPaymentChargesSettingsAsync(manageChargeSettings);

                    Console.WriteLine(manageChargeSettings.ToJSON());
                }
                catch (ApiException e)
                {
                    Console.WriteLine("ApiException -> " + e.Message);
                }

                #endregion

                #region Balances API

                try
                {
                    Console.WriteLine(Environment.NewLine + "Find Balances:");
                    var findBalances = await client.FindBalancesAsync();

                    Console.WriteLine(findBalances.ToJSON());

                    if (findBalances.Balances[0] != null)
                    {
                        Console.WriteLine(Environment.NewLine + "Retrieve Balance:");
                        var retrieveBalance = await client.GetBalanceAsync(findBalances.Balances[0].Currency);

                        Console.WriteLine(retrieveBalance.ToJSON());

                        Console.WriteLine(Environment.NewLine + "Top Up Margin Balance:");
                        foreach (var element in findBalances.Balances)
                        {
                            var marginBalanceTopUp =
                                await client.TopUpMarginBalanceAsync(element.Currency, (element.Amount ?? 0) + 10000);

                            Console.WriteLine(marginBalanceTopUp.ToJSON());
                        }
                    }
                }
                catch (ApiException e)
                {
                    Console.WriteLine("ApiException -> " + e.Message);
                }

                #endregion

                #region Beneficiary API

                try
                {
                    Console.WriteLine(Environment.NewLine + "Find Beneficiaries:");
                    var findBeneficiaries = await client.FindBeneficiariesAsync();

                    Console.WriteLine(findBeneficiaries.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Retrieve Beneficiary:");
                    var retrieveBeneficiary = await client.GetBeneficiaryAsync(findBeneficiaries.Beneficiaries[0].Id);

                    Console.WriteLine(retrieveBeneficiary.ToJSON());

                    beneficiary = new Beneficiary
                    {
                        BankCountry           = "IT",
                        Currency              = "EUR",
                        AccountNumber         = "1234567890",
                        Iban                  = "IT1200012030200359100100",
                        BicSwift              = "IBSPITNA020",
                        PaymentTypes          = new [] { "regular", "priority" },
                        BeneficiaryEntityType = "individual",
                        BeneficiaryAddress    = new List <string> {
                            "Via dei Tribunali, 38, 80138"
                        },
                        BeneficiaryCity      = "Napoli",
                        BeneficiaryCountry   = "IT",
                        BeneficiaryFirstName = "Dame Tamara",
                        BeneficiaryLastName  = "Carlton"
                    };

                    Console.WriteLine(Environment.NewLine + "Validate Beneficiary:");
                    var validateBeneficiary = await client.ValidateBeneficiaryAsync(beneficiary);

                    Console.WriteLine(validateBeneficiary.ToJSON());

                    beneficiary.BankAccountHolderName = "Dame Tamara Carlton";
                    beneficiary.Name = "Fulcrum Fund";

                    Console.WriteLine(Environment.NewLine + "Create Beneficiary:");
                    var createBeneficiary = await client.CreateBeneficiaryAsync(beneficiary);

                    Console.WriteLine(createBeneficiary.ToJSON());

                    beneficiary = createBeneficiary;

                    beneficiary = new Beneficiary
                    {
                        Id = createBeneficiary.Id,
                        BeneficiaryFirstName = "Tamara",
                        BeneficiaryLastName  = "Carlton",
                        Email = "*****@*****.**",
                    };

                    Console.WriteLine(Environment.NewLine + "Update Beneficiary:");
                    var updateBeneficiary = await client.UpdateBeneficiaryAsync(beneficiary);

                    Console.WriteLine(updateBeneficiary.ToJSON());
                }
                catch (ApiException e)
                {
                    Console.WriteLine("ApiException -> " + e.Message);
                }

                #endregion

                #region Contacts API

                try
                {
                    Console.WriteLine(Environment.NewLine + "Find Contacts:");
                    var findContacts = await client.FindContactsAsync();

                    Console.WriteLine(findContacts.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Current Contact:");
                    var currentContact = await client.GetCurrentContactAsync();

                    Console.WriteLine(currentContact.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Get Contact:");
                    var getContact = await client.GetContactAsync(currentContact.Id);

                    Console.WriteLine(getContact.ToJSON());

                    if (subAccount != null)
                    {
                        Console.WriteLine(Environment.NewLine + "Create Contact:");
                        var createContact = await client.CreateContactAsync(new Contact
                        {
                            AccountId    = subAccount.Id,
                            FirstName    = "Currencycloud",
                            LastName     = "Development",
                            EmailAddress = "development." + RandomChars(6) + "@currencycloud.com",
                            PhoneNumber  = "+44 20 3326 8173",
                            DateOfBirth  = new DateTime(1968, 03, 23)
                        });

                        Console.WriteLine(createContact.ToJSON());

                        Console.WriteLine(Environment.NewLine + "Update Contact:");
                        var updateContact = await client.UpdateContactAsync(new Contact
                        {
                            Id            = createContact.Id,
                            YourReference = "CCY-CTC-" + new Random().Next(100, 1000),
                            Status        = "enabled",
                            Locale        = "en-GB",
                            Timezone      = "Europe/London",
                            DateOfBirth   = new DateTime(1968, 03, 23)
                        });

                        Console.WriteLine(updateContact.ToJSON());
                    }
                }
                catch (ApiException e)
                {
                    Console.WriteLine("ApiException -> " + e.Message);
                }

                #endregion

                #region Conversions API

                try
                {
                    var findConversions = await client.FindConversionsAsync();

                    Console.WriteLine(Environment.NewLine + "Find Conversions: {0}", findConversions.ToJSON());

                    var retrieveConversion = await client.GetConversionAsync(findConversions.Conversions[0].Id);

                    Console.WriteLine(Environment.NewLine + "Retrieve Conversion: {0}", retrieveConversion.ToJSON());

                    var createConversion = await client.CreateConversionAsync(new Conversion
                                                                              (
                                                                                  "EUR",
                                                                                  "GBP",
                                                                                  "buy",
                                                                                  (decimal) new Random().Next(1000000, 1500000) / 100,
                                                                                  true
                                                                              ));

                    Console.WriteLine(Environment.NewLine + "Create Conversion: {0}", createConversion.ToJSON());

                    var daysToMonday = (int)DayOfWeek.Monday <= (int)DateTime.Now.DayOfWeek
                        ? (int)DayOfWeek.Monday - (int)DateTime.Now.DayOfWeek + 7
                        : (int)DayOfWeek.Monday - (int)DateTime.Now.DayOfWeek;

                    var quoteDateChange = await client.QuoteDateChangeConversionAsync(new ConversionDateChange
                    {
                        ConversionId      = createConversion.Id,
                        NewSettlementDate = DateTime.Now.AddDays(daysToMonday + 2)
                    });

                    Console.WriteLine(Environment.NewLine + "Quote Conversion Date Change: {0}", quoteDateChange.ToJSON());

                    var dateChange = await client.DateChangeConversionAsync(new ConversionDateChange
                    {
                        ConversionId      = createConversion.Id,
                        NewSettlementDate = DateTime.Now.AddDays(daysToMonday + 2)
                    });

                    Console.WriteLine(Environment.NewLine + "First Conversion Date Change: {0}", dateChange.ToJSON());

                    dateChange = await client.DateChangeConversionAsync(new ConversionDateChange
                    {
                        ConversionId      = createConversion.Id,
                        NewSettlementDate = DateTime.Now.AddDays(daysToMonday + 3)
                    });

                    Console.WriteLine(Environment.NewLine + "Second Conversion Date Change: {0}", dateChange.ToJSON());

                    dateChange = await client.DateChangeConversionAsync(new ConversionDateChange
                    {
                        ConversionId      = createConversion.Id,
                        NewSettlementDate = DateTime.Now.AddDays(daysToMonday + 4)
                    });

                    Console.WriteLine(Environment.NewLine + "Third Conversion Date Change: {0}", dateChange.ToJSON());

                    /* ToDo: Deprecate? */
//                    var dateChangeDetail = await client.DateChangeDetailsConversionAsync(createConversion);
//                    Console.WriteLine(Environment.NewLine + "Date Change Details: {0}", dateChangeDetail.ToJSON());

                    var splitPreview = await client.PreviewSplitConversionAsync(new Conversion
                    {
                        Id     = createConversion.Id,
                        Amount = new Random().Next(500000, 999999) / 100
                    });

                    Console.WriteLine(Environment.NewLine + "Preview Conversion Split: {0}", splitPreview.ToJSON());

                    var splitConversion = await client.SplitConversionAsync(new Conversion
                    {
                        Id     = createConversion.Id,
                        Amount = new Random().Next(750000, 999999) / 100
                    });

                    Console.WriteLine(Environment.NewLine + "Conversion Split: {0}", splitConversion.ToJSON());

                    var parentConversion = splitConversion.ParentConversion;
                    var childConversion  = splitConversion.ChildConversion;

                    var splitChildConversion = await client.SplitConversionAsync(new Conversion
                    {
                        Id     = childConversion.Id,
                        Amount = new Random().Next(500000, 749999) / 100
                    });

                    Console.WriteLine(Environment.NewLine + "Child Conversion Split: {0}", splitChildConversion.ToJSON());

                    var splitHistory = await client.SplitHistoryConversionAsync(new Conversion
                    {
                        Id = parentConversion.Id
                    });

                    Console.WriteLine(Environment.NewLine + "Original Conversion Split History: {0}", splitHistory.ToJSON());

                    splitHistory = await client.SplitHistoryConversionAsync(new Conversion
                    {
                        Id = childConversion.Id
                    });

                    Console.WriteLine(Environment.NewLine + "Parent Conversion Split History: {0}", splitHistory.ToJSON());

                    splitHistory = await client.SplitHistoryConversionAsync(new Conversion
                    {
                        Id = splitChildConversion.ChildConversion.Id
                    });

                    Console.WriteLine(Environment.NewLine + "Child/Child Conversion Split History: {0}", splitHistory.ToJSON());

                    var profitAndLoss = await client.FindConversionProfitAndLossesAsync();

                    Console.WriteLine(Environment.NewLine + "Total Profit and Losses: {0}", profitAndLoss.ToJSON());

                    profitAndLoss = await client.FindConversionProfitAndLossesAsync(new ConversionProfitAndLossFindParameters
                    {
                        ConversionId = parentConversion.Id
                    });

                    Console.WriteLine(Environment.NewLine + "Conversion Profit and Losses: {0}", profitAndLoss.ToJSON());

                    var quoteCancel = await client.QuoteCancelConversionAsync(new ConversionCancellation
                    {
                        ConversionId = createConversion.Id
                    });

                    Console.WriteLine(Environment.NewLine + "Quote Conversion Cancellation: {0}", quoteCancel.ToJSON());

                    var cancelConversion = await client.CancelConversionsAsync(new ConversionCancellation
                    {
                        ConversionId = splitChildConversion.ChildConversion.Id
                    });

                    Console.WriteLine(Environment.NewLine + "Cancel Split Child Conversion: {0}", cancelConversion.ToJSON());

                    cancelConversion = await client.CancelConversionsAsync(new ConversionCancellation
                    {
                        ConversionId = splitChildConversion.ParentConversion.Id
                    });

                    Console.WriteLine(Environment.NewLine + "Cancel Split Parent Conversion: {0}", cancelConversion.ToJSON());

                    cancelConversion = await client.CancelConversionsAsync(new ConversionCancellation
                    {
                        ConversionId = parentConversion.Id
                    });

                    Console.WriteLine(Environment.NewLine + "Cancel Parent Conversion: {0}", cancelConversion.ToJSON());
                }
                catch (ApiException e)
                {
                    Console.WriteLine("ApiException -> " + e.Message);
                }

                #endregion

                #region Funding Accounts API

                try
                {
                    Console.WriteLine(Environment.NewLine + "Funding Accounts:");
                    var getFundingAccounts = await client.FindFundingAccountsAsync(new FundingAccountFindParameters
                    {
                        Currency = "GBP"
                    });

                    Console.WriteLine(getFundingAccounts.ToJSON());
                }
                catch (ApiException e)
                {
                    Console.WriteLine("ApiException -> " + e.Message);
                }

                #endregion

                #region Ibans API

                try
                {
                    Console.WriteLine(Environment.NewLine + "Find Ibans:");
                    var findIbans = await client.FindIbansAsync();

                    Console.WriteLine(findIbans.ToJSON());
                }
                catch (ApiException e)
                {
                    Console.WriteLine("ApiException -> " + e.Message);
                }

                #endregion

                #region Payments API

                try
                {
                    Console.WriteLine(Environment.NewLine + "Find Payments:");
                    var findPayments = await client.FindPaymentsAsync();

                    Console.WriteLine(findPayments.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Retrieve Payment:");
                    var retrievePayment = await client.GetPaymentAsync(findPayments.Payments[0].Id);

                    Console.WriteLine(retrievePayment.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Retrieve Payment Submission:");
                    var retrievePaymentSubmission = await client.GetPaymentSubmissionAsync(retrievePayment.Id);

                    Console.WriteLine(retrievePaymentSubmission.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Create Payments with Payer:");
                    paymentPayer = await client.CreatePaymentAsync(new Payment
                    {
                        BeneficiaryId   = beneficiary.Id,
                        Currency        = "EUR",
                        Amount          = new decimal(123.45),
                        Reason          = "Invoice",
                        Reference       = "CCY-PMT-" + new Random().Next(100, 1000),
                        UniqueRequestId = Guid.NewGuid().ToString()
                    }, new Payer
                    {
                        Address             = "Piazza Museo, n° 19",
                        LegalEntityType     = "individual",
                        City                = "Napoli",
                        Country             = "IT",
                        IdentificationType  = "passport",
                        IdentificationValue = "23031968",
                        FirstName           = "Francesco",
                        LastName            = "Bianco",
                        DateOfBirth         = new DateTime(1968, 03, 23)
                    });

                    Console.WriteLine(paymentPayer.ToJSON());

                    if (beneficiary != null && conversion != null)
                    {
                        Console.WriteLine(Environment.NewLine + "Create Payments with Conversion:");
                        paymentConversion = await client.CreatePaymentAsync(new Payment
                        {
                            BeneficiaryId           = beneficiary.Id,
                            Currency                = conversion.BuyCurrency,
                            ConversionId            = conversion.Id,
                            Amount                  = conversion.ClientBuyAmount,
                            Reason                  = "Investment",
                            Reference               = "CCY-PMT-" + new Random().Next(100, 1000),
                            PaymentType             = "regular",
                            UltimateBeneficiaryName = beneficiary.BankAccountHolderName,
                            UniqueRequestId         = Guid.NewGuid().ToString()
                        });

                        Console.WriteLine(paymentConversion.ToJSON());

                        Console.WriteLine(Environment.NewLine + "Update Payment:");
                        var updatePayment = await client.UpdatePaymentAsync(new Payment
                        {
                            Id        = paymentConversion.Id,
                            Reference = "CCY-PMT-" + new Random().Next(100, 1000)
                        });

                        Console.WriteLine(updatePayment.ToJSON());
                    }

                    Console.WriteLine(Environment.NewLine + "Get a Payment Confirmation:");
                    var retrievePaymentConfirmation = await client.GetPaymentConfirmationAsync(retrievePayment.Id);

                    Console.WriteLine(retrievePaymentConfirmation.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Authorise Payment:");
                    var authorisePayment = await client.PaymentAuthorisationAsync(new []
                    {
                        findPayments.Payments[0].Id,
                        findPayments.Payments[1].Id,
                        findPayments.Payments[2].Id
                    });

                    Console.WriteLine(authorisePayment.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Get Payment Delivery Date:");
                    var deliveryDate = await client.GetPaymentDeliveryDatesAsync(new PaymentDeliveryDates
                    {
                        PaymentDate         = DateTime.Today,
                        PaymentType         = "regular",
                        Currency            = "GBP",
                        BankCountry         = "GB",
                        PaymentCutoffTime   = null,
                        PaymentDeliveryDate = null
                    });

                    Console.WriteLine(deliveryDate.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Get Payment Fee Quote:");
                    var paymentFeeQuote = await client.GetQuotePaymentFee(new QuotePaymentFee
                    {
                        PaymentCurrency           = "EUR",
                        PaymentDestinationCountry = "IT",
                        PaymentType = "priority"
                    });

                    Console.WriteLine(paymentFeeQuote.ToJSON());
                }
                catch (ApiException e)
                {
                    Console.WriteLine("ApiException -> " + e);
                }

                #endregion

                #region Payers API

                try
                {
                    Console.WriteLine(Environment.NewLine + "Retrieve Payers:");
                    var retrievePayers = await client.GetPayerAsync(paymentPayer.PayerId);

                    Console.WriteLine(retrievePayers.ToJSON());
                }
                catch (ApiException e)
                {
                    Console.WriteLine("ApiException -> " + e.Message);
                }

                #endregion

                #region Rates API

                try
                {
                    Console.WriteLine(Environment.NewLine + "Find Rates:");
                    var findRates = await client.FindRatesAsync("GBPUSD,GBPCAD,GBPEUR,GBPJPY,FOOBAR", true);

                    Console.WriteLine(findRates.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Detailed Rates:");
                    var detailedRates = await client.GetRateAsync(new DetailedRates
                    {
                        BuyCurrency  = "USD",
                        SellCurrency = "GBP",
                        FixedSide    = "buy",
                        Amount       = (decimal) new Random().Next(100000, 1000000) / 100
                    });

                    Console.WriteLine(detailedRates.ToJSON());
                }
                catch (ApiException e)
                {
                    Console.WriteLine("ApiException -> " + e.Message);
                }

                #endregion

                #region Reference API

                try
                {
                    Console.WriteLine(Environment.NewLine + "Beneficiary Required Details:");
                    var beneficiaryDetails = await client.GetBeneficiaryRequiredDetailsAsync();

                    Console.WriteLine(beneficiaryDetails.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Conversion Dates:");
                    var conversionDates = await client.GetConversionDatesAsync("GBPJPY");

                    Console.WriteLine(conversionDates.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Available Currencies:");
                    var availableCurrencies = await client.GetAvailableCurrenciesAsync();

                    Console.WriteLine(availableCurrencies.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Payment Dates:");
                    var paymentDates = await client.GetPaymentDatesAsync("JPY");

                    Console.WriteLine(paymentDates.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Settlement Accounts:");
                    var settlementAccounts = await client.GetSettlementAccountsAsync();

                    Console.WriteLine(settlementAccounts.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Purpose Codes:");
                    var purposeCodes = await client.GetPaymentPurposeCodes("INR", "IN");

                    Console.WriteLine(purposeCodes.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Payer Required Details:");
                    var payerDetails = await client.GetPayerRequiredDetailsAsync("GB");

                    Console.WriteLine(payerDetails.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Get Bank Details:");
                    var bankDetails = await client.GetBankDetailsAsync("iban", "GB19TCCL00997901654515");

                    Console.WriteLine(bankDetails.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Payment Fee Rules:");
                    var paymentFeeRules = await client.GetPaymentFeeRulesAsync();

                    Console.WriteLine(paymentFeeRules.ToJSON());
                }
                catch (ApiException e)
                {
                    Console.WriteLine("ApiException -> " + e.Message);
                }

                #endregion

                #region Reports API

                try
                {
                    Console.WriteLine(Environment.NewLine + "Create Conversion Report:");
                    var createConversionReport = await client.CreateConversionReportAsync(new ReportParameters
                    {
                        UniqueRequestId = Guid.NewGuid().ToString(),
                        Description     = "Conversion Report " + RandomChars(5)
                    });

                    Console.WriteLine(createConversionReport.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Get Conversion Report:");
                    var getConversionReport = await client.GetReportRequestAsync(createConversionReport.Id);

                    Console.WriteLine(getConversionReport.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Create Payment Report:");
                    var createPaymentReport = await client.CreatePaymentReportAsync(new ReportParameters
                    {
                        UniqueRequestId = Guid.NewGuid().ToString(),
                        Description     = "Payment Report " + RandomChars(5)
                    });

                    Console.WriteLine(createPaymentReport.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Get Payment Report:");
                    var getPaymentReport = await client.GetReportRequestAsync(createPaymentReport.Id);

                    Console.WriteLine(getPaymentReport.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Find Reports:");
                    var findReports = await client.FindReportRequestsAsync();

                    Console.WriteLine(findReports.ToJSON());
                }
                catch (ApiException e)
                {
                    Console.WriteLine("ApiException -> " + e.Message);
                }

                #endregion

                #region Settlements API

                try
                {
                    Console.WriteLine(Environment.NewLine + "Find Settlements:");
                    var findSettlements = await client.FindSettlementsAsync();

                    Console.WriteLine(findSettlements.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Create Settlement:");
                    settlement = await client.CreateSettlementAsync();

                    Console.WriteLine(settlement.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Retrive Settlement:");
                    var retrieveSettlement = await client.GetSettlementAsync(settlement.Id);

                    Console.WriteLine(retrieveSettlement.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Add Conversion to Settlement:");
                    var addConversionSettlement = await client.AddConversionToSettlementAsync(settlement.Id, conversion.Id);

                    Console.WriteLine(addConversionSettlement.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Release Settlement:");
                    var releaseSettlement = await client.ReleaseSettlementAsync(settlement.Id);

                    Console.WriteLine(releaseSettlement.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Unrelease Settlement:");
                    var unreleaseSettlement = await client.UnreleaseSettlementAsync(settlement.Id);

                    Console.WriteLine(unreleaseSettlement.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Remove Conversion from Settlement:");
                    var removeConversionSettlement = await client.RemoveConversionFromSettlementAsync(settlement.Id, conversion.Id);

                    Console.WriteLine(removeConversionSettlement.ToJSON());
                }
                catch (ApiException e)
                {
                    Console.WriteLine("ApiException -> " + e.Message);
                }

                #endregion

                #region Transactions API

                try
                {
                    Console.WriteLine(Environment.NewLine + "Find Transactions:");
                    var findTransactions = await client.FindTransactionsAsync();

                    Console.WriteLine(findTransactions.ToJSON());

                    Console.WriteLine(Environment.NewLine + "Retrieve Transaction:");
                    transaction = await client.GetTransactionAsync(findTransactions.Transactions[0].Id);

                    Console.WriteLine(transaction.ToJSON());
                }
                catch (ApiException e)
                {
                    Console.WriteLine(e.Message);
                }

                #endregion

                #region Sender API

                try
                {
                    Console.WriteLine(Environment.NewLine + "Get Sender Details:");
                    var retrieveSenderDetails = await client.GetSenderDetailsAsync(transaction.Id);

                    Console.WriteLine(retrieveSenderDetails.ToJSON());
                }
                catch (ApiException e)
                {
                    Console.WriteLine("ApiException -> " + e.Message);
                }

                #endregion

                #region Transfers API

                try
                {
                    Console.WriteLine(Environment.NewLine + "Find Transfers:");
                    var findTransfers = await client.FindTransfersAsync();

                    Console.WriteLine(findTransfers.ToJSON());

                    if (findTransfers != null)
                    {
                        Console.WriteLine(Environment.NewLine + "Retrieve Transfer:");
                        var retrieveTransfer = await client.GetTransferAsync(findTransfers.Transfers[0].Id);

                        Console.WriteLine(retrieveTransfer.ToJSON());
                    }

                    if (mainAccount != null && subAccount != null)
                    {
                        Console.WriteLine(Environment.NewLine + "Create Transfer:");
                        var createTransfer = await client.CreateTransferAsync(new Transfer
                        {
                            SourceAccountId      = subAccount.Id,
                            DestinationAccountId = mainAccount.Id,
                            Currency             = "GBP",
                            Amount = (decimal) new Random().Next(10000, 100000) / 100,
                            Reason = "Funding"
                        });

                        Console.WriteLine(createTransfer.ToJSON());
                    }
                }
                catch (ApiException e)
                {
                    Console.WriteLine(e.Message);
                }

                #endregion

                #region Virtual Accounts API

                try
                {
                    Console.WriteLine(Environment.NewLine + "Find Virtual Accounts:");
                    var findVANs = await client.FindVirtualAccountsAsync();

                    Console.WriteLine(findVANs.ToJSON());
                }
                catch (ApiException e)
                {
                    Console.WriteLine("ApiException -> " + e.Message);
                }

                #endregion

                #region Delete Objects

                if (settlement != null)
                {
                    Console.WriteLine(Environment.NewLine + "Delete Settlement:");
                    var deleteSettlement = await client.DeleteSettlementAsync(settlement.Id);

                    Console.WriteLine(deleteSettlement.ToJSON());
                }

                if (paymentPayer != null)
                {
                    Console.WriteLine(Environment.NewLine + "Delete Payment with Payer:");
                    var deletePayment = await client.DeletePaymentAsync(paymentPayer.Id);

                    Console.WriteLine(deletePayment.ToJSON());
                }

                if (paymentConversion != null)
                {
                    Console.WriteLine(Environment.NewLine + "Delete Payment with Conversion:");
                    var deletePayment = await client.DeletePaymentAsync(paymentConversion.Id);

                    Console.WriteLine(deletePayment.ToJSON());
                }

                if (beneficiary != null)
                {
                    Console.WriteLine(Environment.NewLine + "Delete Beneficiary:");
                    var deleteBeneficiary = await client.DeleteBeneficiaryAsync(beneficiary.Id);

                    Console.WriteLine(deleteBeneficiary.ToJSON());
                }

                #endregion
            }
            catch (ApiException e)
            {
                if (e is AuthenticationException)
                {
                    isAuthenticated = false;
                }

                Console.WriteLine("ApiException -> " + e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("System Exception");
                Console.WriteLine("Message: {0}", e.Message);
                Console.WriteLine("Source: {0}", e.Source);
                Console.WriteLine("Method: {0}", e.TargetSite);
                Console.WriteLine("Stack Trace: {0}", e.StackTrace);
            }
            finally
            {
                if (isAuthenticated)
                {
                    Console.WriteLine(Environment.NewLine + "Close Session");
                    await client.CloseAsync();
                }
            }
        }