unsandbox.com
Anonymous remote code, compile, & execution API for humans & machine learning agents.
Docs 📚 View Pricing →The C# examples below require the following 3rd party libraries:
Newtonsoft.Json (Mono) or System.Text.Json (.NET Core)
Make sure these packages are installed in your environment before running the examples.
Execute code immediately and wait for results. Best for quick scripts and interactive use.
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
language |
string | ✓ | Programming language |
code |
string | ✓ | Source code to execute |
env |
object | Environment variables (key-value pairs) | |
network_mode |
string | "zerotrust" or "semitrusted" | |
ttl |
integer | Timeout 1-900s (default: 60) | |
return_artifact |
boolean | Return compiled binary | |
return_wasm_artifact |
boolean | Return WebAssembly binary |
Example (C#)
// For Mono, install: mono-devel libmono-system-net-http4.0-cil
// For .NET Core/Windows, you can use System.Text.Json instead of Newtonsoft.Json
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
class Program
{
static async Task Main()
{
var client = new HttpClient();
var url = "https://api.unsandbox.com/execute";
var payload = new JObject
{
["language"] = "python",
["code"] = "print('Hello from unsandbox!')"
};
var apiKey = Environment.GetEnvironmentVariable("UNSANDBOX_API_KEY") ?? "unsb-sk-test0-vault-unlck-12345";
var request = new HttpRequestMessage(HttpMethod.Post, url);
request.Headers.Add("Authorization", "Bearer " + apiKey);
request.Content = new StringContent(
payload.ToString(),
Encoding.UTF8,
"application/json"
);
var response = await client.SendAsync(request);
var responseBody = await response.Content.ReadAsStringAsync();
var result = JObject.Parse(responseBody);
if ((bool)result["success"])
{
Console.WriteLine("Output: " + result["stdout"]);
}
else
{
Console.WriteLine("Error: " + result["error"]);
}
}
}
Response (Success)
{
"success": true,
"stdout": "Hello from unsandbox!\n",
"stderr": "",
"error": null,
"language": "python",
"exit_code": 0
}
Response (Error)
{
"success": false,
"error": "Syntax error in code",
"stderr": "SyntaxError: invalid syntax\n"
}
Submit code for execution and receive a job ID to poll for results. Best for long-running scripts or when you need to decouple submission from execution.
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
language |
string | ✓ | Programming language |
code |
string | ✓ | Source code to execute |
env |
object | Environment variables (key-value pairs) | |
network_mode |
string | "zerotrust" or "semitrusted" | |
ttl |
integer | Timeout 1-900s (default: 60) | |
return_artifact |
boolean | Return compiled binary | |
return_wasm_artifact |
boolean | Return WebAssembly binary |
Example (C#)
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
class Program
{
static async Task Main()
{
var client = new HttpClient();
// Submit job
var url = "https://api.unsandbox.com/execute/async";
var payload = new JObject
{
["language"] = "rust",
["code"] = "fn main() { println!(\"Computing...\"); }",
["ttl"] = 300
};
var apiKey = Environment.GetEnvironmentVariable("UNSANDBOX_API_KEY") ?? "unsb-sk-test0-vault-unlck-12345";
var request = new HttpRequestMessage(HttpMethod.Post, url);
request.Headers.Add("Authorization", "Bearer " + apiKey);
request.Content = new StringContent(
payload.ToString(),
Encoding.UTF8,
"application/json"
);
var response = await client.SendAsync(request);
var responseBody = await response.Content.ReadAsStringAsync();
var job = JObject.Parse(responseBody);
var jobId = (string)job["job_id"];
Console.WriteLine("Job submitted: " + jobId);
// Poll for results
var statusUrl = string.Format("https://api.unsandbox.com/jobs/{0}", jobId);
while (true)
{
var statusRequest = new HttpRequestMessage(HttpMethod.Get, statusUrl);
statusRequest.Headers.Add("Authorization", "Bearer " + apiKey);
var statusResponse = await client.SendAsync(statusRequest);
var statusBody = await statusResponse.Content.ReadAsStringAsync();
var status = JObject.Parse(statusBody);
var jobStatus = (string)status["status"];
if (jobStatus == "completed")
{
var result = status["result"];
if ((bool)result["success"])
{
Console.WriteLine("Output: " + result["stdout"]);
}
else
{
Console.WriteLine("Error: " + result["stderr"]);
}
break;
}
else if (jobStatus == "timeout" || jobStatus == "cancelled")
{
Console.WriteLine("Job " + jobStatus);
break;
}
await Task.Delay(1000); // Wait 1 second before polling again
}
}
}
Initial Response
{
"job_id": "job_1234567890_abc",
"status": "pending"
}
Check the status and results of an asynchronous job. Poll this endpoint after submitting a job via /execute/async or /run/async.
URL Parameters
| Parameter | Type | Description |
|---|---|---|
id |
string | Job ID returned from async endpoint |
Example (C#)
using System;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
class Program
{
static async Task Main()
{
var client = new HttpClient();
var jobId = "job_1234567890_abc";
var url = string.Format("https://api.unsandbox.com/jobs/{0}", jobId);
var apiKey = Environment.GetEnvironmentVariable("UNSANDBOX_API_KEY") ?? "unsb-sk-test0-vault-unlck-12345";
var request = new HttpRequestMessage(HttpMethod.Get, url);
request.Headers.Add("Authorization", "Bearer " + apiKey);
var response = await client.SendAsync(request);
var responseBody = await response.Content.ReadAsStringAsync();
var job = JObject.Parse(responseBody);
Console.WriteLine("Status: " + job["status"]);
if ((string)job["status"] == "completed")
{
var result = job["result"];
Console.WriteLine("Success: " + result["success"]);
Console.WriteLine("Output: " + result["stdout"]);
}
}
}
Response (Completed)
{
"job_id": "job_1234567890_abc",
"status": "completed",
"result": {
"success": true,
"stdout": "Hello from unsandbox!\n",
"stderr": "",
"error": null,
"language": "python",
"exit_code": 0
}
}
Possible Status Values
pending- Job queued, waiting to executerunning- Job currently executingcompleted- Job finished (check result field)timeout- Job exceeded TTL limitcancelled- Job was cancelled via DELETE
List all active (pending or running) jobs for your API key. Useful for monitoring multiple async executions.
Example (C#)
using System;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
class Program
{
static async Task Main()
{
var client = new HttpClient();
var url = "https://api.unsandbox.com/jobs";
var apiKey = Environment.GetEnvironmentVariable("UNSANDBOX_API_KEY") ?? "unsb-sk-test0-vault-unlck-12345";
var request = new HttpRequestMessage(HttpMethod.Get, url);
request.Headers.Add("Authorization", "Bearer " + apiKey);
var response = await client.SendAsync(request);
var responseBody = await response.Content.ReadAsStringAsync();
var jobs = JArray.Parse(responseBody);
foreach (var job in jobs)
{
Console.WriteLine(job["job_id"] + ": " +
job["status"] + " " +
"(" + job["language"] + ")");
}
}
}
Response
{
"jobs": [
{
"job_id": "job_1234567890_abc",
"status": "running",
"language": "python",
"submitted_at": "2024-01-15T10:30:00Z"
},
{
"job_id": "job_0987654321_xyz",
"status": "pending",
"language": "go",
"submitted_at": "2024-01-15T10:29:45Z"
}
]
}
Cancel a pending or running job. If the job is already executing, it will be terminated and partial output returned.
URL Parameters
| Parameter | Type | Description |
|---|---|---|
id |
string | Job ID to cancel |
Example (C#)
using System;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
class Program
{
static async Task Main()
{
var client = new HttpClient();
var jobId = "job_1234567890_abc";
var url = string.Format("https://api.unsandbox.com/jobs/{0}", jobId);
var apiKey = Environment.GetEnvironmentVariable("UNSANDBOX_API_KEY") ?? "unsb-sk-test0-vault-unlck-12345";
var request = new HttpRequestMessage(HttpMethod.Delete, url);
request.Headers.Add("Authorization", "Bearer " + apiKey);
var response = await client.SendAsync(request);
var responseBody = await response.Content.ReadAsStringAsync();
var result = JObject.Parse(responseBody);
Console.WriteLine("Cancelled: " + result["message"]);
if (result["result"] != null)
{
Console.WriteLine("Partial output: " + result["stdout"]);
}
}
}
Response
{
"message": "Job cancelled",
"job_id": "job_1234567890_abc",
"result": {
"success": false,
"stdout": "Partial output before cancel...",
"stderr": "",
"error": "Job cancelled by user",
"exit_code": -1
}
}
Execute code with automatic language detection via shebang. Send raw code as the request body with Content-Type: text/plain.
Request
- Content-Type:
text/plain - Body: Raw code with shebang (e.g.,
#!/usr/bin/env python3)
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
env |
string | URL-encoded JSON object with environment variables | |
network_mode |
string | "zerotrust" or "semitrusted" | |
ttl |
integer | Timeout 1-900s (default: 60) | |
return_artifact |
boolean | Return compiled binary | |
return_wasm_artifact |
boolean | Return WebAssembly binary |
Example (C#)
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
class Program
{
static async Task Main()
{
var client = new HttpClient();
var url = "https://api.unsandbox.com/run";
var code = "#!/usr/bin/env python3\nprint(\"Language auto-detected!\")";
var apiKey = Environment.GetEnvironmentVariable("UNSANDBOX_API_KEY") ?? "unsb-sk-test0-vault-unlck-12345";
var request = new HttpRequestMessage(HttpMethod.Post, url);
request.Headers.Add("Authorization", "Bearer " + apiKey);
request.Content = new StringContent(code, Encoding.UTF8, "text/plain");
var response = await client.SendAsync(request);
var responseBody = await response.Content.ReadAsStringAsync();
var result = JObject.Parse(responseBody);
Console.WriteLine("Detected: " + result["detected_language"]);
Console.WriteLine("Output: " + result["stdout"]);
}
}
Response
{
"success": true,
"stdout": "Language auto-detected!\n",
"stderr": "",
"error": null,
"detected_language": "python",
"exit_code": 0
}
Submit code with automatic language detection and receive a job ID. Combines the convenience of /run with the flexibility of async execution.
Request
- Content-Type:
text/plain - Body: Raw code with shebang (e.g.,
#!/usr/bin/env ruby)
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
env |
string | URL-encoded JSON object with environment variables | |
network_mode |
string | "zerotrust" or "semitrusted" | |
ttl |
integer | Timeout 1-900s (default: 60) | |
return_artifact |
boolean | Return compiled binary | |
return_wasm_artifact |
boolean | Return WebAssembly binary |
Example (C#)
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
class Program
{
static async Task Main()
{
var client = new HttpClient();
var url = "https://api.unsandbox.com/run/async";
var code = "#!/usr/bin/env ruby\nputs \"Running async with auto-detect!\"";
// Submit job
var apiKey = Environment.GetEnvironmentVariable("UNSANDBOX_API_KEY") ?? "unsb-sk-test0-vault-unlck-12345";
var request = new HttpRequestMessage(HttpMethod.Post, url);
request.Headers.Add("Authorization", "Bearer " + apiKey);
request.Content = new StringContent(code, Encoding.UTF8, "text/plain");
var response = await client.SendAsync(request);
var responseBody = await response.Content.ReadAsStringAsync();
var job = JObject.Parse(responseBody);
var jobId = (string)job["job_id"];
Console.WriteLine("Job submitted: " + jobId);
// Poll for results
var statusUrl = string.Format("https://api.unsandbox.com/jobs/{0}", jobId);
while (true)
{
var statusRequest = new HttpRequestMessage(HttpMethod.Get, statusUrl);
statusRequest.Headers.Add("Authorization", "Bearer " + apiKey);
var statusResponse = await client.SendAsync(statusRequest);
var statusBody = await statusResponse.Content.ReadAsStringAsync();
var status = JObject.Parse(statusBody);
var jobStatus = (string)status["status"];
if (jobStatus == "completed")
{
var result = status["result"];
Console.WriteLine("Detected: " + result["detected_language"]);
if ((bool)result["success"])
{
Console.WriteLine("Output: " + result["stdout"]);
}
break;
}
else if (jobStatus == "timeout" || jobStatus == "cancelled")
{
Console.WriteLine("Job " + jobStatus);
break;
}
await Task.Delay(1000); // Wait 1 second before polling again
}
}
}
Initial Response
{
"job_id": "job_1234567890_abc",
"status": "pending"
}
Job Result (via GET /jobs/{id})
{
"job_id": "job_1234567890_abc",
"status": "completed",
"result": {
"success": true,
"stdout": "Running async with auto-detect!\n",
"stderr": "",
"error": null,
"detected_language": "ruby",
"exit_code": 0
}
}