diff --git a/sandbox/.gitignore b/sandbox/.gitignore
index bf03f040f..36ef23211 100644
--- a/sandbox/.gitignore
+++ b/sandbox/.gitignore
@@ -3,7 +3,7 @@ dotnet/*
!dotnet/hellosign_sandbox.csproj
!dotnet/NuGet.Config
!dotnet/Program.cs
-!dotnet/src/Dropbox.SignSandbox.Test
+!dotnet/src
!dotnet/test_fixtures
java-v1/*
diff --git a/sandbox/dotnet/Program.cs b/sandbox/dotnet/Program.cs
deleted file mode 100644
index 8e4258739..000000000
--- a/sandbox/dotnet/Program.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System;
-
-using Dropbox.Sign.Api;
-using Dropbox.Sign.Client;
-using Dropbox.Sign.Model;
-
-public class Example
-{
- public static void Main()
- {
- var config = new Configuration();
- // Configure HTTP basic authorization: api_key
- config.Username = "YOUR_API_KEY";
-
- // or, configure Bearer (JWT) authorization: oauth2
- // config.AccessToken = "YOUR_BEARER_TOKEN";
-
- var apiInstance = new AccountApi(config);
-
- var data = new AccountCreateRequest(
- emailAddress: "newuser@dropboxsign.com"
- );
-
- try
- {
- var result = apiInstance.AccountCreate(data);
- Console.WriteLine(result);
- }
- catch (ApiException e)
- {
- Console.WriteLine("Exception when calling Dropbox Sign API: " + e.Message);
- Console.WriteLine("Status Code: " + e.ErrorCode);
- Console.WriteLine(e.StackTrace);
- }
- }
-}
diff --git a/sandbox/dotnet/dropbox_sign_sandbox.csproj b/sandbox/dotnet/dropbox_sign_sandbox.csproj
deleted file mode 100644
index c8c816809..000000000
--- a/sandbox/dotnet/dropbox_sign_sandbox.csproj
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
- Exe
- net6.0
- enable
- enable
-
-
-
-
-
-
-
diff --git a/sandbox/dotnet/src/Dropbox.SignSandbox.Test/.config.dist.json b/sandbox/dotnet/src/Dropbox.SignSandbox.Test/.config.dist.json
new file mode 100644
index 000000000..601c6a5f9
--- /dev/null
+++ b/sandbox/dotnet/src/Dropbox.SignSandbox.Test/.config.dist.json
@@ -0,0 +1,6 @@
+{
+ "BASE_URL": "https://api.hellosign.com/v3",
+ "API_KEY": "",
+ "CLIENT_ID": "",
+ "USE_XDEBUG": 0
+}
diff --git a/sandbox/dotnet/src/Dropbox.SignSandbox.Test/.gitignore b/sandbox/dotnet/src/Dropbox.SignSandbox.Test/.gitignore
new file mode 100644
index 000000000..a9b8cc8b8
--- /dev/null
+++ b/sandbox/dotnet/src/Dropbox.SignSandbox.Test/.gitignore
@@ -0,0 +1 @@
+.config.json
diff --git a/sandbox/dotnet/src/Dropbox.SignSandbox.Test/Dropbox.SignSandbox.Test.csproj b/sandbox/dotnet/src/Dropbox.SignSandbox.Test/Dropbox.SignSandbox.Test.csproj
new file mode 100644
index 000000000..4f8b41f9d
--- /dev/null
+++ b/sandbox/dotnet/src/Dropbox.SignSandbox.Test/Dropbox.SignSandbox.Test.csproj
@@ -0,0 +1,24 @@
+
+
+
+ Dropbox.SignSandbox.Test
+ Dropbox.SignSandbox.Test
+ net6.0
+ false
+ Dropbox.SignSandbox.Test
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sandbox/dotnet/src/Dropbox.SignSandbox.Test/SignatureRequestTests.cs b/sandbox/dotnet/src/Dropbox.SignSandbox.Test/SignatureRequestTests.cs
new file mode 100644
index 000000000..2350a526b
--- /dev/null
+++ b/sandbox/dotnet/src/Dropbox.SignSandbox.Test/SignatureRequestTests.cs
@@ -0,0 +1,168 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Reflection;
+using Xunit;
+using Dropbox.Sign;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Dropbox.SignSandbox.Test
+{
+ public class TestHelper
+ {
+ public static JObject GetJsonContents(string fileName)
+ {
+ using (var r = new StreamReader( $"./../../../../../{fileName}"))
+ {
+ dynamic json = JsonConvert.DeserializeObject