Sandbox routing — bring your own keys
Any sandbox.
One API.
Your keys.
You send one request. We route it to your own provider account, with your own key — and never touch the compute bill.
Pick a provider — watch what changes
POST api.managedsandbox.com/v1/exec
{"provider": "e2b", "command": "uname -m"}
→ {"exitCode": 0, "stdout": "x86_64\n"}0%
Markup on
your compute.
We don’t resell compute. You store your own provider credentials; your provider bills you directly, at the rate you already negotiated.
Which means the sandboxes are yours. Stop using us tomorrow and they keep running under your key.
Credentials encrypted AES-256-GCM — never returned by any endpoint
The problem
Picking a provider is a bet you can’t unwind.
Every provider has its own SDK, its own session model, its own idea of what a sandbox is. That code spreads through your agent loop, your error handling, your tests.
Then the reasons to move show up anyway:
- 01Pricing changes.
- 02A region you need isn't supported.
- 03An outage lands during your launch.
- 04An enterprise customer requires their code stay in their own account.
You shouldn’t have to rewrite your agent to answer any of those.
One hop. Your account.
Routing — live aboveYour agent posts to one endpoint. ManagedSandbox authenticates, routes and reaps, then forwards the request to e2b running in your own provider account.
What you get
Nothing bills forever.
Every sandbox has a deadline. Idle ones are reaped automatically; a provider destroy that fails is retried with backoff, then dead-lettered for inspection — never silently dropped. A sandbox marked stopped is one the provider confirmed was destroyed.
Retries don’t re-run.
Send an idempotency key and a completed command replays its stored result instead of executing twice. Reuse a key with different parameters and you get a 409, not a surprise.
One request shape
/v1/exec for one-shot commands, /v1/sandboxes for sessions. Files and ports follow the same shape.
Stateless by design
No sticky sessions. Every operation re-attaches by id, so any node serves any request.
Generate a client
OpenAPI at /openapi.json, docs at /docs. Generate in your language instead of learning ours.
Pricing
You pay for routing. Not for cycles.
Compute is billed to you by your provider, at your rate.
Amber = unset. The billing metric is still undecided.
Questions
- Doesn't this add latency?
- One hop, in the same region as your provider. Sandbox cold start is measured in seconds and dominates everything else, including us.
- What if you go down?
- Your sandboxes live in your provider account. Point your client back at the provider SDK — what we started is still running under your key.
- Why not one provider's SDK?
- If you're certain you'll never switch, do that. This is for teams who aren't certain, or who already need more than one.
- Can I self-host?
- Yes. One service plus a SQLite/libSQL database.