Sandlådor
Isolerade Linux-mikroVM:ar för kod som dina skript och AI-agenter kör. En sandlåda startar på ungefär en sekund, kör Python, Node.js eller bash och debiteras per sekund från samma saldo som dina servrar.
Vad en sandlåda är
En liten Linux-maskin som du skapar via API:t eller MCP, använder i några sekunder eller några dagar och tar bort. Utgående internet fungerar (pip install, npm install, git clone). Det finns inga inkommande portar och ingen SSH: kommandon och filer går via API:t. Inuti: Python 3.12 med pip, Node.js 22 med npm, bash, git och curl.
Två lägen
Tariffer
| Tariff | vCPU | RAM | Disk | Nätverk | Per timme | Beständig, max per månad |
|---|---|---|---|---|---|---|
| micro | 0.25 | 512 MB | 3 GB | 50 Mbit/s | $0.0165 | $9.03 |
| small | 0.5 | 1 GB | 5 GB | 100 Mbit/s | $0.033 | $18.07 |
| standard | 1 | 2 GB | 10 GB | 200 Mbit/s | $0.066 | $36.14 |
| plus | 2 | 4 GB | 15 GB | 300 Mbit/s | $0.132 | $72.27 |
| pro | 4 | 8 GB | 20 GB | 400 Mbit/s | $0.264 | $144.54 |
| max | 8 | 16 GB | 40 GB | 500 Mbit/s | $0.528 | $289.08 |
Du betalar för vCPU och RAM i den tariff du väljer: $0.040 per vCPU-timme och $0.013 per GiB-timme. Aktuella priser utan token: GET /sandboxes/tariffs.
Gränser som är bra att känna till
Ett kommando kör i upp till 55 sekunder; längre jobb körs som bakgrundsuppgifter som du frågar efter resultatet av. Filer upp till 5 MB per anrop, större (upp till 2 GB) via engångslänkar för nedladdning och uppladdning. Ett konto kan köra upp till 20 sandlådor och 2 kommandon samtidigt.
Miljövariabler
Skicka hemligheter och inställningar som env. Anges de vid skapandet gäller de för alla kommandon i sandlådan; anges de vid exec eller run gäller de bara för det anropet och ersätter sandlådans värden. Upp till 64 variabler, 32 KB per värde och 64 KB totalt. Värden lagras krypterade, returneras aldrig av API:et och skrivs inte till loggar: svaren visar bara namnen (env_keys).
API=https://api.eqvps.com/api/v1/eqvps
AUTH="Authorization: Bearer $EQVPS_API_KEY"
# env for the whole sandbox (only the names come back, as env_keys)
SB=$(curl -s -X POST $API/sandboxes -H "$AUTH" -H "Content-Type: application/json" \
-d '{"tariff":"small","env":{"DB_URL":"postgres://user:pass@db/app","MODE":"test"}}' | jq -r .id)
# env for one call, merged over the sandbox env
curl -s -X POST $API/sandboxes/$SB/exec -H "$AUTH" -H "Content-Type: application/json" \
-d '{"command":"echo $MODE $RUN_ID","env":{"RUN_ID":"42"}}'Utgiftsgräns
Som standard har sandlådor ingen utgiftsgräns. Du kan ange ett dags- och ett månadstak i kontrollpanelen eller med PUT /sandboxes/budget. När ett tak nås får nya sandlådor 429 budget_exceeded, körande tillfälliga tas bort och beständiga pausas med disken kvar. De fortsätter när du höjer taket eller en ny dag eller månad börjar (UTC).
# daily cap $5, monthly cap $50 (null = no cap)
curl -s -X PUT $API/sandboxes/budget -H "$AUTH" -H "Content-Type: application/json" \
-d '{"daily_usd":5,"monthly_usd":50}'
# spent today / this month and when the caps reset (UTC)
curl -s $API/sandboxes/budget -H "$AUTH"Snabbstart: MCP (Claude Code, Cursor och andra klienter)
Anslut MCP-servern en gång och be sedan agenten med egna ord om det du vill. Sandlådeverktyg: create_sandbox, run_code, exec_command, get_task, kill_task, get_upload_url, get_download_url, list_sandboxes, get_sandbox, kill_sandbox, sandbox_pricing.
claude mcp add --transport http eqvps https://mcp.eqvps.com/mcp \
--header "Authorization: Bearer $EQVPS_API_KEY"Skapa en liten sandlåda, kör print(2 + 2) i Python, visa mig utdata och ta bort sandlådan.Snabbstart: REST från Python och Node.js
Inga extra paket behövs. Lägg din token i miljövariabeln EQVPS_API_KEY (hur du får en: ”Ansluta ditt konto”).
# first_sandbox.py — Python 3.8+, standard library only
import json, os, urllib.request
API = "https://api.eqvps.com/api/v1/eqvps"
KEY = os.environ["EQVPS_API_KEY"]
def call(method, path, body=None):
req = urllib.request.Request(API + path, method=method,
data=json.dumps(body).encode() if body is not None else None,
headers={"Authorization": "Bearer " + KEY,
"Content-Type": "application/json", "Accept": "application/json"})
with urllib.request.urlopen(req, timeout=90) as r: # HTTPError on 401/402/…
return json.loads(r.read() or b"{}")
sb = call("POST", "/sandboxes", {"tariff": "small"})
try:
r = call("POST", f"/sandboxes/{sb['id']}/run",
{"language": "python", "code": "print(2 + 2)"})
print(r["exit_code"], r["stdout"]) # 0 4
finally:
call("DELETE", f"/sandboxes/{sb['id']}")// first_sandbox.mjs — Node.js 18+ (built-in fetch), run: node first_sandbox.mjs
const API = "https://api.eqvps.com/api/v1/eqvps";
const KEY = process.env.EQVPS_API_KEY;
async function call(method, path, body) {
const r = await fetch(API + path, {
method,
headers: { Authorization: `Bearer ${KEY}`, "Content-Type": "application/json", Accept: "application/json" },
body: body ? JSON.stringify(body) : undefined,
});
const data = await r.json();
if (!r.ok) throw new Error(`${r.status} ${data.error ?? ""} ${data.message ?? ""}`);
return data;
}
const sb = await call("POST", "/sandboxes", { tariff: "small" });
try {
const r = await call("POST", `/sandboxes/${sb.id}/run`, { language: "node", code: "console.log(2 + 2)" });
console.log(r.exit_code, r.stdout); // 0 4
} finally {
await call("DELETE", `/sandboxes/${sb.id}`);
}SDK för Python och TypeScript
Hellre ett bibliotek? Paketen för Python och TypeScript gör samma REST-anrop, försöker själva igen vid 429 och 503 och tar alltid bort sandlådan när blocket är slut. Installation och exempel:
# pip install -U eqvps https://pypi.org/project/eqvps/ (0.2.0+ for env)
# "eqvps sandbox create" = Sandbox.create() here · create_sandbox in MCP · POST /sandboxes in REST (no CLI)
from eqvps import Sandbox
# EQVPS_API_KEY from the environment; env = secrets for your code, stored encrypted
with Sandbox.create(tariff="small", env={"DB_URL": "postgres://user:pass@db/app"}) as sb:
r = sb.run("print(2 + 2)")
print(r.stdout, r.exit_code) # "4\n" 0
sb.upload("/root/data.csv", "a,b\n1,2\n")
print(sb.exec("wc -l /root/data.csv").stdout)
print(sb.exec("echo $RUN_ID", env={"RUN_ID": "42"}).stdout) # env for one call
# the sandbox is deleted when the block exits, also on errors// npm i @eqvps/sdk@latest https://www.npmjs.com/package/@eqvps/sdk (0.2.0+ for env)
import { Sandbox } from "@eqvps/sdk";
// EQVPS_API_KEY from the environment; env = secrets for your code, stored encrypted
await Sandbox.with({ tariff: "small", env: { DB_URL: "postgres://user:pass@db/app" } }, async (sb) => {
const r = await sb.run("print(2 + 2)");
console.log(r.stdout, r.exit_code); // "4\n" 0
console.log((await sb.exec("echo $RUN_ID", { env: { RUN_ID: "42" } })).stdout); // env for one call
}); // deleted afterwards, also on errorsAnsluta ditt konto: token, konfiguration, första sandlådan, saldo →
Kommentarer
Inga kommentarer än. Bli först.