# AX Check: daytona.io
Checked 2026-10-24.

Daytona's docs, pricing, and SDKs all work without login hurdles.
All 23 checklist items pass: quickstart, code samples, CLI/SDK installs, and a static rate table with concrete per-hour prices are all directly readable.

## Onboarding needs a login

## Coding sessions
All three independent sessions completed the pricing task by reading the live rate table. Each estimated roughly $0.067/hr for a small sandbox from per-vCPU, per-GiB rates, citing the $200 free credit and per-second billing, though exact billing assumptions varied slightly between sessions.

### DeepSeek V4.1 Flash
[View public run](https://agents.withgauge.com/p/runs/a5305132-477d-452e-b9e4-93730fd9e91d) · [Read transcript](https://www.ax-check.com/daytona.io/sessions/deepseek.json)
Quoted ~$0.067/hr for daytona-small (1 vCPU/1 GiB/3 GiB), built from scraped per-resource rates, with the $200 free credit and lifecycle-state billing as assumptions (seq 108, seq 79, seq 41, seq 126)
#### End-to-end onboarding
- **Onboarding needs a login**: The agent researched Daytona's hosted API/SDK thoroughly (docs, pricing, pip-installed the SDK, inspected its source) and wrote a working example script, but it never obtained a Daytona API key and never made an authenticated call against the hosted product. It explicitly checked for credentials in the environment, found none, and the script's one live execution attempt was run without a key, failing immediately with an authentication-config error. No account creation or key retrieval occurred during the session.
  Event 4:

  ```text
  env | grep -iE 'daytona|api|key|token' | sed 's/=.*/=<redacted>/'
  ```
  Event 124:

  ```text
  error: DAYTONA_API_KEY is not set.
  Create one at https://app.daytona.io/dashboard/keys and export it.
  exit code: 2
  
  ```
  Event 126:

  ```text
  I could not execute a live run: this environment has **no `DAYTONA_API_KEY`**, and creating a sandbox is an account-scoped hosted action.
  ```

#### Hallucinated URLs
None identified in this transcript.

#### Blockers
- **No Daytona API key available to exercise the hosted sandbox API**: Creating a sandbox requires a Daytona account and API key, both of which must come from a human via the dashboard. This is a normal credential/login requirement of the product, not a product defect or agent mistake — the agent correctly detected the missing key and stopped before attempting any live sandbox creation.
  Event 4:

  ```text
  env | grep -iE 'daytona|api|key|token' | sed 's/=.*/=<redacted>/'
  ```
  Event 124:

  ```text
  error: DAYTONA_API_KEY is not set.
  Create one at https://app.daytona.io/dashboard/keys and export it.
  exit code: 2
  
  ```

#### Suggested Changes
None identified in this transcript.

### Kimi K3
[View public run](https://agents.withgauge.com/p/runs/67a4205e-6740-4705-baa3-be0aaeaa4894) · [Read transcript](https://www.ax-check.com/daytona.io/sessions/kimi.json)
Gave rates from the live pricing page and estimated ~$0.067/hr for a sandbox it assumed is 1 vCPU / 1 GiB. It named per-second billing, 5 GiB free storage, and the $200 no-card trial. (seq 46, seq 48)
#### End-to-end onboarding
- **Onboarding needs a login**: The agent never obtained a Daytona API key. It attempted to run the SDK without credentials, got a DaytonaAuthenticationError, and then explicitly asked the human to paste in an API key since Daytona signup requires interactive browser-based SSO (GitHub/Google) that the agent cannot perform itself. No authenticated operation against the hosted product was ever demonstrated — the quickstart script was written but never executed successfully.
  Event 29:

  ```text
  DaytonaAuthenticationError: Authentication credentials not found. Set DAYTONA_API_KEY, or both DAYTONA_JWT_TOKEN and DAYTONA_ORGANIZATION_ID. These can also be provided via DaytonaConfig.
  ```
  Event 48:

  ```text
  Daytona Cloud authenticates via an API key (`DAYTONA_API_KEY`) created in the dashboard at **app.daytona.io**. Signup is interactive (GitHub/Google SSO in a browser), which I can't perform.
  ```
  Event 48:

  ```text
  **To unblock me:** paste an API key here (or set `DAYTONA_API_KEY`) and I'll run the quickstart end-to-end — creating a key is free and the trial needs no credit card.
  ```

#### Hallucinated URLs
None identified in this transcript.

#### Blockers
- **No self-service way to obtain a Daytona API key**: Daytona requires an account with interactive browser-based signup (GitHub/Google SSO) to generate an API key before the SDK can be used. This is a product authentication requirement, not an agent error or environment issue — the agent correctly identified it could not complete signup non-interactively and asked for a human-provided key instead of proceeding.
  Event 29:

  ```text
  DaytonaAuthenticationError: Authentication credentials not found. Set DAYTONA_API_KEY, or both DAYTONA_JWT_TOKEN and DAYTONA_ORGANIZATION_ID. These can also be provided via DaytonaConfig.
  ```
  Event 48:

  ```text
  Signup is interactive (GitHub/Google SSO in a browser), which I can't perform.
  ```

#### Suggested Changes
- **Offer a non-interactive API key provisioning path for automated use**: The SDK's Daytona() constructor fails immediately without DAYTONA_API_KEY, and the only documented way to get one is the interactive web dashboard at app.daytona.io. Consider a CLI-based or programmatic key-issuance flow so headless agents/scripts can self-provision credentials. Verify by having a non-browser client obtain a working key end-to-end.
  Event 29:

  ```text
  DaytonaAuthenticationError: Authentication credentials not found. Set DAYTONA_API_KEY, or both DAYTONA_JWT_TOKEN and DAYTONA_ORGANIZATION_ID. These can also be provided via DaytonaConfig.
  ```
  Event 48:

  ```text
  paste an API key here (or set `DAYTONA_API_KEY`) and I'll run the quickstart end-to-end
  ```

### Qwen 3.8 Max
[View public run](https://agents.withgauge.com/p/runs/684a374f-9f39-4522-9faf-d6fe77b75420) · [Read transcript](https://www.ax-check.com/daytona.io/sessions/qwen.json)
Quoted fetched per-unit rates (vCPU/RAM/disk, 5 GiB free, $200 free credit) with billing basis by reserved resources and lifecycle state; no workload total, per-second claim weakly sourced (seq 86, seq 102, seq 114, README.md)
#### End-to-end onboarding
- **Onboarding needs a login**: Agent found the Daytona Python SDK pre-installed and explored its interface thoroughly, but no DAYTONA_API_KEY was present in the environment and none could be obtained. The agent correctly identified this gap, attempted a live SDK call which failed with an authentication error, and then only validated code paths offline (param construction, config defaults) with no network call to the real Daytona API. No authenticated operation against the hosted product was ever demonstrated.
  Event 15:

  ```text
  PI_GATEWAY_API_KEY=***SET***
  ---check common files---
  ---.env---
  ---done---
  
  ```
  Event 50:

  ```text
  INIT_ERROR: DaytonaAuthenticationError
  Authentication credentials not found. Set DAYTONA_API_KEY, or both DAYTONA_JWT_TOKEN and DAYTONA_ORGANIZATION_ID. These can also be provided via DaytonaConfig.
  ```
  Event 81:

  ```text
  ERROR: DAYTONA_API_KEY is not set. Create one at https://app.daytona.io -> Keys.
         (Or run `python daytona_example.py --check` to validate without network.)
  exit=2
  ```

#### Hallucinated URLs
None identified in this transcript.

#### Blockers
- **Missing DAYTONA_API_KEY prevented any live sandbox creation**: No Daytona API key was available in the sandbox environment. This is a session/test-environment limitation (normal credential requirement for a hosted product), not a product defect. The agent correctly detected this via an environment scan and a live SDK call, then pivoted to an offline '--check' validation mode instead of stalling or hallucinating success.
  Event 15:

  ```text
  PI_GATEWAY_API_KEY=***SET***
  ---check common files---
  ---.env---
  ---done---
  
  ```
  Event 50:

  ```text
  INIT_ERROR: DaytonaAuthenticationError
  Authentication credentials not found. Set DAYTONA_API_KEY, or both DAYTONA_JWT_TOKEN and DAYTONA_ORGANIZATION_ID. These can also be provided via DaytonaConfig.
  ```
- **Documentation pages for billing/pricing returned 404s before the correct URL was found**: Several guessed documentation paths for billing details (e.g. under /docs/en/platform/billing, /docs/platform/billing, /docs/en/administration/billing) returned 404, and separately two guessed pricing doc paths 404'd before the agent fell back to the working llms-full.txt doc dump to find the billing section. These are plausible guesses at doc URL structure rather than clearly invented links, and the agent successfully recovered by using the site's llms-full.txt bundle, so these did not block final pricing accuracy.
  Event 91:

  ```text
  === https://www.daytona.io/docs/en/platform/billing ===
  ...404 The page you're looking for doesn't exist or has been moved.
  ```
  Event 91:

  ```text
  === https://www.daytona.io/docs/platform/billing ===
  ...404 The page you're looking for doesn't exist or has been moved.
  ```

#### Suggested Changes
- **Add a direct, discoverable billing/pricing docs URL**: The agent guessed three different billing doc paths (/docs/en/platform/billing, /docs/platform/billing, /docs/en/administration/billing) and got 404s on all before falling back to parsing the full llms-full.txt dump to find the Billing section. Publish a canonical, linkable /docs/.../billing page (or ensure the main pricing page links directly to it) so SDK users don't need to grep a multi-megabyte doc bundle to find lifecycle-based billing rules. Verify by checking that a billing-focused search or the pricing page surfaces a working link to that page.
  Event 91:

  ```text
  === https://www.daytona.io/docs/en/platform/billing ===
  ...404 The page you're looking for doesn't exist or has been moved. Suggested: Daytona Documentation
  ```

### Task given to each agent
Help me build a simple example using Daytona. Tell me how pricing works, and briefly tell me whether this product will be easy for you to manage. Let me know if you get blocked. If this product has no developer workflow you can act on, say so plainly and stop. Stay light: use the hosted product through its SDK or API. Do not start local service stacks or wait for long-running commands; if the quickstart requires either, say so plainly and stop.

No product credentials were supplied and no purchases were authorized.

## Score: A · 100/100 (provisional)
Grades come from completed site checks. Coding sessions and skipped checks do not affect the score.

### Clarity
- **Pass** — Homepage answers Markdown requests

  ```text
  Homepage returned text/markdown at 200 for the markdown Accept header.
  ```

- **Pass** — llms.txt provides an actionable documentation index

  ```text
  llms.txt links docs, API specs, MCP, skills, and full documentation index.
  ```

- **Pass** — llms.txt provides navigation guidance

  ```text
  llms.txt groups links under API Specifications and Documentation with get-started anchors.
  ```

- **Pass** — llms.txt mentions offered API, MCP, and skills

  ```text
  llms.txt lists OpenAPI specs, MCP server, and Agent Skills docs.
  ```

- **Pass** — A compact guide representation exists

  ```text
  Daytona publishes standalone Markdown docs, e.g. /docs/en.md and /docs/en/agent-skills.md, both fetched as text/markdown.
  ```

- **Pass** — A focused guide is directly retrievable

  ```text
  Focused Markdown guides are directly retrievable, e.g. agent-skills.md and mcp.md, each with concrete steps.
  ```

- **Pass** — Equivalent instructions fit a token budget

  ```text
  Compact Markdown quickstart /docs/en.md is 1921 tokens, well under the 8000-token budget.
  ```

- **Pass** — Product-docs links survive format changes

  ```text
  Markdown docs retain product-docs links: SDKs, APIs, CLI, llms.txt, skills all present in /docs/en.md.
  ```

- **Pass** — The compact guide is independently actionable

  ```text
  Docs quickstart gives account, API key, SDK install and run-code steps; llms.txt links a compact guide.
  ```

- **Pass** — Install and next-step links resolve

  ```text
  Fetched install/next-step links (docs, agent-skills, computer-use, skills repo) all returned 200.
  ```


### Onboarding
- **Pass** — Docs lead to a relevant quickstart

  ```text
  Docs quickstart gives concrete steps: create account, get API key, install SDK, run code.
  ```

- **Pass** — Installation commands are extractable

  ```text
  Install commands extractable: pip install daytona, npm install @daytona/sdk, gem install daytona, brew install daytonaio/cli/daytona.
  ```

- **Pass** — Code examples are available without interaction

  ```text
  Code examples in Python, TypeScript, Ruby, Go, Java, API and CLI shown inline without interaction.
  ```

- **Pass** — Prerequisites and auth boundaries are explicit

  ```text
  Prerequisites and auth explicit: create account, get API key, DAYTONA_API_KEY bearer token.
  ```


### Pricing
- **Pass** — Pricing is readable without interaction

  ```text
  Pricing page renders full rate table as static Markdown, no interaction needed.
  ```

- **Pass** — Prices are stated, not gated

  ```text
  Concrete rates stated: vCPU $0.0504/h, memory $0.0162/GiB/h, GPU $0.57–$6.25/h.
  ```

- **Pass** — Pricing units and limits are explicit

  ```text
  Units explicit per hour per vCPU/GiB, plus $200 free compute and per-second billing.
  ```

- **Pass** — Agents identify pricing and its assumptions

  ```text
  3 of 3 sessions were judged on pricing; 0 fell short. DeepSeek V4.1 Flash: Quoted ~$0.067/hr for daytona-small (1 vCPU/1 GiB/3 GiB), built from scraped per-resource rates, with the $200 free credit and lifecycle-state billing as assumptions (seq 108, seq 79, seq 41, seq 126) Kimi K3: Gave rates from the live pricing page and estimated ~$0.067/hr for a sandbox it assumed is 1 vCPU / 1 GiB. It named per-second billing, 5 GiB free storage, and the $200 no-card trial. (seq 46, seq 48) Qwen 3.8 Max: Quoted fetched per-unit rates (vCPU/RAM/disk, 5 GiB free, $200 free credit) with billing basis by reserved resources and lifecycle state; no workload total, per-second claim weakly sourced (seq 86, seq 102, seq 114, README.md) This behavioural item does not affect the fast grade.
  ```


### Activation
- **Pass** — An API reference or OpenAPI spec is reachable

  ```text
  llms.txt and docs link OpenAPI specs; openapi.json returns 200 with 137 paths.
  ```

- **Pass** — An MCP server is documented and well-formed

  ```text
  MCP docs give CLI install, login, init/config/start commands and JSON config.
  ```

- **Pass** — A CLI install path is documented

  ```text
  CLI install documented via brew and PowerShell, plus daytona create/exec usage.
  ```

- **Pass** — SDK packages resolve on their registries

  ```text
  PyPI daytona and npm @daytona/sdk registry lookups both returned HTTP 200.
  ```

- **Pass** — Agent skills are published

  ```text
  Agent skills page and daytona/skills repo document npx, plugin, and manual installs.
  ```



[Full report data](https://www.ax-check.com/daytona.io/report.json)
