public async Task<SignatureRequest> SendAsync(SignatureRequestSendRequest request)
        {
            SignatureRequestWrapper signatureRequestWrapper = await helloSignService.MakeRequestWithFilesAsync<SignatureRequestWrapper>(
                settings.HelloSignSettings.Endpoints.SignatureRequest.Send,
                request);

            return signatureRequestWrapper.SignatureRequest;
        }
        public async Task SendAndGetSignatureRequestTest()
        {
            var testEmail1 = Config.TestEmail1 ?? "*****@*****.**";

            var sendRequest = new SignatureRequestSendRequest
            {
                TestMode = 1,
                Signers = new List<SignerRequest>()
                {
                    new SignerRequest
                    {
                        EmailAddress = testEmail1,
                        Name = "Test Test"
                    },
                }
            };

            sendRequest.Files.AddFile("test.pdf");

            SignatureRequest signatureRequest = await client.SignatureRequest.SendAsync(sendRequest);

            // Examine returned request
            Assert.IsNotNull(signatureRequest);

            try
            {

                Assert.AreEqual(Config.Username, signatureRequest.RequesterEmailAddress);
                Assert.IsNotNull(signatureRequest.SignatureRequestId);
                Assert.AreNotEqual(string.Empty, signatureRequest.SignatureRequestId);
                Assert.AreEqual(true, signatureRequest.TestMode);
                Assert.IsNotNull(signatureRequest.DetailsUrl);
                Assert.AreNotEqual(string.Empty, signatureRequest.DetailsUrl);
                Assert.IsNotNull(signatureRequest.FilesUrl);
                Assert.AreNotEqual(string.Empty, signatureRequest.FilesUrl);
                Assert.AreEqual(false, signatureRequest.HasError);
                Assert.AreEqual(false, signatureRequest.IsComplete);
                Assert.IsNotNull(signatureRequest.SigningUrl);
                Assert.AreNotEqual(string.Empty, signatureRequest.SigningUrl);

                Assert.IsNotNull(signatureRequest.CcEmailAddresses);
                Assert.AreEqual(0, signatureRequest.CcEmailAddresses.Count);

                Assert.IsNotNull(signatureRequest.CustomFields);
                Assert.AreEqual(0, signatureRequest.CustomFields.Count);

                Assert.IsNotNull(signatureRequest.Signatures);
                Assert.AreEqual(1, signatureRequest.Signatures.Count);

                Assert.AreEqual(testEmail1, signatureRequest.Signatures[0].SignerEmailAddress);
                Assert.AreEqual("Test Test", signatureRequest.Signatures[0].SignerName);
                Assert.AreEqual(false, signatureRequest.Signatures[0].HasPin);
                Assert.IsNull(signatureRequest.Signatures[0].Order);
                Assert.AreEqual(SignatureStatusCodes.AwaitingSignature, signatureRequest.Signatures[0].StatusCode);

                Assert.IsNotNull(signatureRequest.ResponseData);
                Assert.AreEqual(0, signatureRequest.ResponseData.Count);

                Assert.IsNotNull(signatureRequest.Metadata);
                Assert.AreEqual(0, signatureRequest.Metadata.Count);

                var sigId = signatureRequest.SignatureRequestId;

                // Use Get ans examine request again
                signatureRequest = await client.SignatureRequest.GetAsync(sigId);
                Assert.IsNotNull(signatureRequest);
                Assert.AreEqual(Config.Username, signatureRequest.RequesterEmailAddress);
                Assert.AreEqual(sigId, signatureRequest.SignatureRequestId);
                Assert.AreEqual(true, signatureRequest.TestMode);
                Assert.IsNotNull(signatureRequest.DetailsUrl);
                Assert.AreNotEqual(string.Empty, signatureRequest.DetailsUrl);
                Assert.IsNotNull(signatureRequest.FilesUrl);
                Assert.AreNotEqual(string.Empty, signatureRequest.FilesUrl);
                Assert.AreEqual(false, signatureRequest.HasError);
                Assert.AreEqual(false, signatureRequest.IsComplete);
                Assert.IsNotNull(signatureRequest.SigningUrl);
                Assert.AreNotEqual(string.Empty, signatureRequest.SigningUrl);

                Assert.IsNotNull(signatureRequest.CcEmailAddresses);
                Assert.AreEqual(0, signatureRequest.CcEmailAddresses.Count);

                Assert.IsNotNull(signatureRequest.CustomFields);
                Assert.AreEqual(0, signatureRequest.CustomFields.Count);

                Assert.IsNotNull(signatureRequest.Signatures);
                Assert.AreEqual(1, signatureRequest.Signatures.Count);

                Assert.AreEqual(testEmail1, signatureRequest.Signatures[0].SignerEmailAddress);
                Assert.AreEqual("Test Test", signatureRequest.Signatures[0].SignerName);
                Assert.AreEqual(false, signatureRequest.Signatures[0].HasPin);
                Assert.IsNull(signatureRequest.Signatures[0].Order);
                Assert.AreEqual(SignatureStatusCodes.AwaitingSignature, signatureRequest.Signatures[0].StatusCode);

                Assert.IsNotNull(signatureRequest.ResponseData);
                Assert.AreEqual(0, signatureRequest.ResponseData.Count);

                Assert.IsNotNull(signatureRequest.Metadata);
                Assert.AreEqual(0, signatureRequest.Metadata.Count);
            }
            finally
            {
                var result = await client.SignatureRequest.CancelAsync(signatureRequest.SignatureRequestId);
                Assert.IsTrue(result);
            }
        }
        public async Task SendFullSignatureRequestTest()
        {
            var testEmail1 = Config.TestEmail1 ?? "*****@*****.**";
            var testEmail2 = Config.TestEmail2 ?? "*****@*****.**";

            var sendRequest = new SignatureRequestSendRequest
            {
                TestMode = 1,
                Title = "Test Signature Request",
                Subject = "test subject",
                Message = "test message",
                Signers = new List<SignerRequest>()
                {
                    new SignerRequest
                    {
                        EmailAddress = testEmail1,
                        Name = "Test Test",
                        Order = 0,
                        Pin = "testtesttest"
                    },
                    new SignerRequest
                    {
                        EmailAddress = testEmail2,
                        Name = "Test Test 2",
                        Order = 1,
                        Pin = "testtesttes2"
                    }
                },
                CcEmailAddresses = new List<string>()
                {
                    "*****@*****.**",
                    "*****@*****.**"
                },
                SigningRedirectUrl = "http://test.com/redirect",
                UseTextTags = 1,
                HideTextTags = 1,
                Metadata = new Dictionary<string, string>
                {
                    { "isHelloSignApiTest", "true" },
                    { "testkey1", "testdata1" },
                    { "testkey2", "testdata2" }
                },
                //ClientId = Config.ClientId,
                FormFieldsPerDocument = new List<IList<FormFieldsRequest>>
                {
                    new List<FormFieldsRequest>
                    {
                        new FormFieldsRequest
                        {
                            ApiId = "testapiid1",
                            Height = 100,
                            Width = 101,
                            Name = "Test Field 1",
                            Required = true,
                            SignerIndex = 0,
                            ValidationType = DataValidationTypes.NumbersOnly,
                            Type = FieldTypes.Text,
                            X = 102,
                            Y = 103
                        },
                        new FormFieldsRequest
                        {
                            ApiId = "testapiid2",
                            Height = 110,
                            Width = 111,
                            Name = "Test Field 2",
                            Required = true,
                            SignerIndex = 1,
                            Type = FieldTypes.Checkbox,
                            X = 112,
                            Y = 113
                        }
                    },
                    new List<FormFieldsRequest>
                    {
                        new FormFieldsRequest
                        {
                            ApiId = "testapiid3",
                            Height = 120,
                            Width = 121,
                            Name = "Test Field 3",
                            Required = false,
                            SignerIndex = 0,
                            Type = FieldTypes.DateSigned,
                            X = 122,
                            Y = 123
                        },
                        new FormFieldsRequest
                        {
                            ApiId = "testapiid4",
                            Height = 130,
                            Width = 131,
                            Name = "Test Field 4",
                            Required = true,
                            SignerIndex = 1,
                            Type = FieldTypes.Signature,
                            X = 132,
                            Y = 133
                        }
                    }
                }
            };

            sendRequest.Files.AddFiles("test.pdf", "test2.pdf");

            SignatureRequest signatureRequest = await client.SignatureRequest.SendAsync(sendRequest);

            Assert.IsNotNull(signatureRequest);

            try
            {
                Assert.AreEqual("Test Signature Request", signatureRequest.Title);
                Assert.AreEqual("test message", signatureRequest.Message);
                Assert.AreEqual(Config.Username, signatureRequest.RequesterEmailAddress);
                Assert.IsNotNull(signatureRequest.SignatureRequestId);
                Assert.AreNotEqual(string.Empty, signatureRequest.SignatureRequestId);
                Assert.AreEqual("http://test.com/redirect", signatureRequest.SigningRedirectUrl);
                Assert.AreEqual("test subject", signatureRequest.Subject);
                Assert.AreEqual(true, signatureRequest.TestMode);
                Assert.IsNotNull(signatureRequest.DetailsUrl);
                Assert.AreNotEqual(string.Empty, signatureRequest.DetailsUrl);
                Assert.IsNotNull(signatureRequest.FilesUrl);
                Assert.AreNotEqual(string.Empty, signatureRequest.FilesUrl);
                Assert.AreEqual(false, signatureRequest.HasError);
                Assert.AreEqual(false, signatureRequest.IsComplete);
                Assert.IsNotNull(signatureRequest.SigningUrl);
                Assert.AreNotEqual(string.Empty, signatureRequest.SigningUrl);

                Assert.IsNotNull(signatureRequest.CcEmailAddresses);
                Assert.AreEqual(2, signatureRequest.CcEmailAddresses.Count);
                Assert.AreEqual("*****@*****.**", signatureRequest.CcEmailAddresses[0]);
                Assert.AreEqual("*****@*****.**", signatureRequest.CcEmailAddresses[1]);

                Assert.IsNotNull(signatureRequest.CustomFields);
                Assert.AreEqual(0, signatureRequest.CustomFields.Count);

                Assert.IsNotNull(signatureRequest.Signatures);
                Assert.AreEqual(2, signatureRequest.Signatures.Count);

                Assert.AreEqual(testEmail1, signatureRequest.Signatures[0].SignerEmailAddress);
                Assert.AreEqual("Test Test", signatureRequest.Signatures[0].SignerName);
                Assert.AreEqual(true, signatureRequest.Signatures[0].HasPin);
                Assert.AreEqual(0, signatureRequest.Signatures[0].Order);
                Assert.AreEqual(SignatureStatusCodes.AwaitingSignature, signatureRequest.Signatures[0].StatusCode);

                Assert.AreEqual(testEmail2, signatureRequest.Signatures[1].SignerEmailAddress);
                Assert.AreEqual("Test Test 2", signatureRequest.Signatures[1].SignerName);
                Assert.AreEqual(true, signatureRequest.Signatures[1].HasPin);
                Assert.AreEqual(1, signatureRequest.Signatures[1].Order);
                Assert.AreEqual(SignatureStatusCodes.AwaitingSignature, signatureRequest.Signatures[1].StatusCode);

                Assert.IsNotNull(signatureRequest.ResponseData);
                Assert.AreEqual(0, signatureRequest.ResponseData.Count);

                Assert.IsNotNull(signatureRequest.Metadata);
                Assert.AreEqual(3, signatureRequest.Metadata.Count);
                Assert.AreEqual("true", signatureRequest.Metadata?["isHelloSignApiTest"]);
                Assert.AreEqual("testdata1", signatureRequest.Metadata?["testkey1"]);
                Assert.AreEqual("testdata2", signatureRequest.Metadata?["testkey2"]);
            }
            finally
            {
                var result = await client.SignatureRequest.CancelAsync(signatureRequest.SignatureRequestId);
                Assert.IsTrue(result);
            }
        }
 public async Task<List<SignatureRequest>> SendEmbeddedAsync(SignatureRequestSendRequest request)
 {
     return await helloSignService.MakeRequestAsync<List<SignatureRequest>>(
         settings.HelloSignSettings.Endpoints.SignatureRequest.SendEmbedded,
         request);
 }