• Check that E2B_API_KEY (or ANONA_API_KEY) holds an Anona Compute key from the dashboard. E2B keys and Anona Memory keys do not work here.
  • The key may be revoked or expired; see API keys in the dashboard.
  • Keys are e2b_ followed by lowercase hex. The SDK refuses other formats before sending anything.
Set E2B_DOMAIN=compute.anonalabs.com. Recent SDKs ignore E2B_API_URL. Or use anona.Sandbox / @anona/sdk, which default to the Anona domain.
  • The sandbox may have reached its timeout and been killed (the default is 300 s from the SDK). Use a longer timeout, set_timeout, or lifecycle={"on_timeout": "pause"}.
  • The key may belong to another organization, or be limited to a list of sandbox IDs. Both look exactly like “not found”.
Your key lacks sandboxes:use (needed for commands, live view and SSH), or your dashboard role is viewer. Create a key with Create and use, or ask an admin for the member role.
anona-compute usage, the MCP get_usage tool and GET /v1/usage need a key with usage:read (the Read only and Full access presets have it); billing needs billing:read (Full access). Create a new key; existing keys keep their scopes.
Team egress settings and the credential vault are changed by dashboard owners and admins. Any role and any key can read them.
Store the secret on the dashboard’s Credential vault page under exactly the name the rule uses (${vault.<name>}), then create the sandbox again.
Kill sandboxes you no longer need (anona-compute list, then anona-compute kill), or pause them: paused sandboxes do not count as running. See limits.
Your plan has a maximum lifetime (the free plan’s is one hour). Use a timeout up to that maximum.
These E2B features are not available on Anona Compute; remove them from the create call. See Migrate from E2B.
Host names in allow_out need public egress off: add deny_out: ["0.0.0.0/0"]. Destinations in private or metadata ranges, and names that resolve into them, are always refused. See Networking.
A sandbox server is starting after an idle period. The SDK retries; if you call the API yourself, wait Retry-After seconds and retry.
The sandbox is paused, for example by its idle timer. Resume it with Sandbox.connect(id) or anona-compute resume <id>.
The certificate is older than 10 minutes, or was minted for another sandbox. Run anona-compute ssh <id> again, or refresh the block with anona-compute ssh <id> --print-config.
Tokens last at most 10 minutes. Answer the embed’s token-request message with a fresh token (Live view). After revoke_all, mint new tokens. The dom and thumb channels are not available yet.
Port 49983 belongs to the Anona runtime (envd), so a template cannot expose it. Every FROM is pinned by digest at build time; a tag that cannot be resolved fails the build. See Templates.
These commands exist in the CLI ahead of their server side. See the CLI overview for what is coming.

Get more detail

  • anona-compute -v … prints verbose detail on stderr.
  • Every API error body has code and message, and often error_code.