unsandboxunsandbox.com
Anonymous remote code, compile, & execution API for humans & machine learning agents.
Docs 📚 View Pricing →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 | |
input_files |
array | Files to upload (see Input Files) |
Example (AWK)
#!/bin/bash
# AWK example: Parse unsandbox API response
API_KEY="${UNSANDBOX_API_KEY:-unsb-sk-test0-vault-unlck-12345}"
curl -s -X POST https://api.unsandbox.com/execute \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $API_KEY" \
-d '{"language": "python", "code": "print(\"Hello from unsandbox!\")"}' | \
awk -F'"' '{
for (i=1; i<=NF; i++) {
if ($i == "success") success = $(i+2)
if ($i == "stdout") stdout = $(i+2)
if ($i == "error") error = $(i+2)
}
}
END {
if (success == "true") print "Output:", stdout
else print "Error:", error
}'
Response (Success)
{
"success": true,
"stdout": "Hello from unsandbox!\n",
"stderr": "",
"exit_code": 0,
"language": "python",
"job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"artifacts": [],
"execution_mode": "pooled",
"network_mode": "zerotrust",
"total_time_ms": 523
}
Response (Error)
{
"success": false,
"stdout": "",
"stderr": "SyntaxError: invalid syntax\n",
"exit_code": 1,
"language": "python",
"job_id": "b2c3d4e5-f6a7-8901-bcde-f23456789012",
"artifacts": [],
"execution_mode": "pooled",
"network_mode": "zerotrust",
"total_time_ms": 312
}
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 | |
input_files |
array | Files to upload (see Input Files) |
Example (AWK)
#!/bin/bash
# AWK example: Async execution with polling
API_KEY="${UNSANDBOX_API_KEY:-unsb-sk-test0-vault-unlck-12345}"
# Submit async job and extract job_id
JOB_ID=$(curl -s -X POST https://api.unsandbox.com/execute/async \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $API_KEY" \
-d '{"language": "python", "code": "import time; time.sleep(2); print(\"Done!\")"}' | \
awk -F'"' '{for(i=1;i<=NF;i++) if($i=="job_id") print $(i+2)}')
echo "Job submitted: $JOB_ID"
# Poll for results
while true; do
RESULT=$(curl -s "https://api.unsandbox.com/jobs/$JOB_ID" \
-H "Authorization: Bearer $API_KEY")
STATUS=$(echo "$RESULT" | awk -F'"' '{for(i=1;i<=NF;i++) if($i=="status") print $(i+2)}')
if [ "$STATUS" = "completed" ]; then
echo "$RESULT" | awk -F'"' '{
for(i=1;i<=NF;i++) {
if($i=="stdout") print "Output:", $(i+2)
}
}'
break
fi
sleep 1
done
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 (AWK)
#!/bin/bash
# AWK example: Get job status
API_KEY="${UNSANDBOX_API_KEY:-unsb-sk-test0-vault-unlck-12345}"
JOB_ID="job_1234567890_abc"
HTTP_CODE=$(curl -s -o /tmp/job_result.json -w "%{http_code}" \
"https://api.unsandbox.com/jobs/$JOB_ID" \
-H "Authorization: Bearer $API_KEY")
if [ "$HTTP_CODE" = "404" ]; then
echo "Job not found (already completed or never existed)"
else
cat /tmp/job_result.json | awk -F'"' '{
for(i=1; i<=NF; i++) {
if($i=="status") print "Status:", $(i+2)
if($i=="success") print "Success:", $(i+2)
if($i=="stdout") print "Output:", $(i+2)
}
}'
fi
Response (Completed)
{
"job_id": "c3d4e5f6-a7b8-9012-cdef-345678901234",
"status": "completed",
"created_at": 1699564800,
"started_at": 1699564801,
"completed_at": 1699564805,
"result": {
"success": true,
"stdout": "Hello from unsandbox!\n",
"stderr": "",
"exit_code": 0,
"language": "python",
"artifacts": [],
"execution_mode": "pooled",
"network_mode": "zerotrust",
"total_time_ms": 4021
}
}
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 (AWK)
#!/bin/bash
# AWK example: List pending jobs
API_KEY="${UNSANDBOX_API_KEY:-unsb-sk-test0-vault-unlck-12345}"
curl -s https://api.unsandbox.com/jobs \
-H "Authorization: Bearer $API_KEY" | \
awk -F'"' '{
for(i=1; i<=NF; i++) {
if($i=="job_id") { job_id = $(i+2) }
if($i=="status") { status = $(i+2) }
if($i=="language") {
lang = $(i+2)
print job_id ": " status " (" lang ")"
}
}
}'
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 (AWK)
#!/bin/bash
# AWK example: Cancel/delete a job
API_KEY="${UNSANDBOX_API_KEY:-unsb-sk-test0-vault-unlck-12345}"
JOB_ID="job_1234567890_abc"
HTTP_CODE=$(curl -s -o /tmp/delete_result.json -w "%{http_code}" \
-X DELETE "https://api.unsandbox.com/jobs/$JOB_ID" \
-H "Authorization: Bearer $API_KEY")
if [ "$HTTP_CODE" = "404" ]; then
echo "Job not found (already completed or never existed)"
else
cat /tmp/delete_result.json | awk -F'"' '{
for(i=1; i<=NF; i++) {
if($i=="message") print "Cancelled:", $(i+2)
if($i=="stdout") print "Partial output:", $(i+2)
}
}'
fi
Response
{
"message": "Job cancelled",
"job_id": "e5f6a7b8-c9d0-1234-efgh-567890123456",
"result": {
"success": false,
"stdout": "Partial output before cancel...",
"stderr": "",
"exit_code": -1,
"language": "python",
"artifacts": [],
"execution_mode": "pooled",
"network_mode": "zerotrust",
"total_time_ms": 1523
}
}
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 (AWK)
#!/bin/bash
# AWK example: Parse auto-detect response
API_KEY="${UNSANDBOX_API_KEY:-unsb-sk-test0-vault-unlck-12345}"
curl -s -X POST https://api.unsandbox.com/run \
-H "Content-Type: text/plain" \
-H "Authorization: Bearer $API_KEY" \
-d '#!/usr/bin/env python3
print("Language auto-detected!")' | \
awk -F'"' '{
for (i=1; i<=NF; i++) {
if ($i == "detected_language") lang = $(i+2)
if ($i == "stdout") stdout = $(i+2)
}
}
END {
print "Detected:", lang
print "Output:", stdout
}'
Response
{
"success": true,
"stdout": "Language auto-detected!\n",
"stderr": "",
"exit_code": 0,
"language": "python",
"detected_language": "python",
"job_id": "f6a7b8c9-d0e1-2345-fghi-678901234567",
"artifacts": [],
"execution_mode": "pooled",
"network_mode": "zerotrust",
"total_time_ms": 412
}
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 (AWK)
#!/bin/bash
# AWK example: Async run with auto-detect
API_KEY="${UNSANDBOX_API_KEY:-unsb-sk-test0-vault-unlck-12345}"
# Submit async job
JOB_ID=$(curl -s -X POST https://api.unsandbox.com/run/async \
-H "Content-Type: text/plain" \
-H "Authorization: Bearer $API_KEY" \
-d '#!/usr/bin/env ruby
puts "Running async with auto-detect!"' | \
awk -F'"' '{for(i=1;i<=NF;i++) if($i=="job_id") print $(i+2)}')
echo "Job submitted: $JOB_ID"
# Poll for results
while true; do
RESULT=$(curl -s "https://api.unsandbox.com/jobs/$JOB_ID" \
-H "Authorization: Bearer $API_KEY")
STATUS=$(echo "$RESULT" | awk -F'"' '{for(i=1;i<=NF;i++) if($i=="status") print $(i+2)}')
if [ "$STATUS" = "completed" ]; then
echo "$RESULT" | awk -F'"' '{
for(i=1;i<=NF;i++) {
if($i=="detected_language") print "Detected:", $(i+2)
if($i=="stdout") print "Output:", $(i+2)
}
}'
break
fi
sleep 1
done
Initial Response
{
"job_id": "job_1234567890_abc",
"status": "pending"
}
Job Result (via GET /jobs/{id})
{
"job_id": "a7b8c9d0-e1f2-3456-ghij-789012345678",
"status": "completed",
"created_at": 1699564800,
"started_at": 1699564801,
"completed_at": 1699564802,
"result": {
"success": true,
"stdout": "Running async with auto-detect!\n",
"stderr": "",
"exit_code": 0,
"language": "ruby",
"detected_language": "ruby",
"artifacts": [],
"execution_mode": "pooled",
"network_mode": "zerotrust",
"total_time_ms": 1234
}
}
Upload files to your sandbox execution. Files are written to the working directory and can be accessed directly by filename.
File Object Schema
| Field | Type | Required | Description |
|---|---|---|---|
filename |
string | Filename (e.g., "data.csv"). If omitted, file is named by index: "0", "1", etc. | |
content |
string | ✓ | Base64-encoded file content |
Example Request
{
"language": "python",
"code": "print(open('data.csv').read())",
"input_files": [
{
"filename": "data.csv",
"content": "bmFtZSxhZ2UKQWxpY2UsMzAKQm9iLDI1"
}
]
}
Limits
- Maximum files: 10 files per execution
- Maximum total size: 10MB (decoded)
- Maximum single file: 5MB (decoded)
- Filename length: 256 characters max
File Access
Files are placed in the working directory. Access them directly:
- Python:
open('data.csv') - Node.js:
fs.readFileSync('data.csv') - Ruby:
File.read('data.csv') - Go:
os.ReadFile("data.csv")
Security
- Files are isolated per execution
- Filenames cannot contain path separators (no
/or..) - Files are deleted after execution completes