---
title: "Fetch an agent run's dev-surface status (temporary Dev tab)"
description: "A member-gated debugging window over the run's sandbox lifecycle: lease facts (status, sandbox id, activity and deadline stamps), snapshot identity +..."
api_method: GET
api_path: "/v1/agent-runs/{runId}/dev-status"
canonical_url: https://wiblo.app/docs/developers/api/agent-runs/get-agent-run-dev-status
last_updated: 2026-07-28T17:31:44+02:00
md_url: https://wiblo.app/docs/developers/api/agent-runs/get-agent-run-dev-status.md
---

# Fetch an agent run's dev-surface status (temporary Dev tab)

`GET /v1/agent-runs/{runId}/dev-status`

A member-gated debugging window over the run's sandbox lifecycle: lease facts (status, sandbox id, activity and deadline stamps), snapshot identity + posture, the latest boot's per-step timings as recorded by the driver, and the run's cost receipts with totals. Deliberately more transparent than the product surfaces (sandbox and snapshot ids appear) but never exposes credentials or the gateway URL. Runs the lazy reaper before projecting. Per-user rate-limited at 60/60s.

## Path parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `runId` | `string` | Yes |  |

## Request

**curl**

```bash
curl https://api.wiblo.app/v1/agent-runs/{runId}/dev-status \
  -H "Authorization: Bearer $WIBLO_TOKEN"
```

**TypeScript**

```ts
import { createSdk, getAgentRunDevStatus } from "@workspace/sdk"

const sdk = createSdk({ baseUrl: "https://api.wiblo.app" })

const { data, error } = await getAgentRunDevStatus({
  client: sdk,
  path: { runId: "..." },
})
```

## Responses

**`200`** — The run's dev-surface status. Returns `AgentRunDevStatus`.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `runId` | `string` | Yes |  |
| `lease` | `AgentRunDevLease` | No |  |
| `snapshot` | `AgentRunDevSnapshot` | Yes |  |
| `bootTimings` | `object` | No |  |
| `costs` | `object` | Yes |  |
| `costs.totals` | `AgentSandboxCostTotals` | Yes |  |
| `costs.receipts` | `array<AgentSandboxCostReceipt>` | Yes |  |

**`401`** — No valid session cookie or `wbl_*` bearer was present. Returns `ApiErrorEnvelope`.

**`404`** — No run visible to the caller with this id (`AGENT_RUN_NOT_FOUND`). Returns `ApiErrorEnvelope`.

**`422`** — Path param failed UUID validation (`INVALID_PARAMS`). Returns `ApiErrorEnvelope`.

**`429`** — Rate limit exceeded. The body's `error.code` is `RATE_LIMITED` and `error.details.retry_after` is the same number of seconds as the `Retry-After` header. Returns `ApiErrorEnvelope`.

### The AgentRunDevLease object

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `status` | `string \| null` | No | Defaults to `null`. |
| `sandboxId` | `string \| null` | No | Defaults to `null`. |
| `runtime` | `string \| null` | No | Defaults to `null`. |
| `vcpus` | `integer \| null` | No | Defaults to `null`. |
| `idleDeadlineAt` | `string \| null` | No | Defaults to `null`. |
| `expiresAt` | `string \| null` | No | Defaults to `null`. |
| `lastUserActivityAt` | `string \| null` | No | Defaults to `null`. |
| `lastAgentActivityAt` | `string \| null` | No | Defaults to `null`. |
| `lastHeartbeatAt` | `string \| null` | No | Defaults to `null`. |

### The AgentRunDevSnapshot object

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `available` | `boolean` | Yes |  |
| `id` | `string \| null` | No | Defaults to `null`. |
| `sizeBytes` | `integer \| null` | No | Defaults to `null`. |
| `expiresAt` | `string \| null` | No | Defaults to `null`. |

### The AgentSandboxBootTimings object

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `lane` | `"create" \| "resume-snapshot" \| "resume-git"` | Yes |  |
| `totalMs` | `integer` | Yes |  |
| `steps` | `array<AgentSandboxBootStep>` | Yes |  |
| `recordedAt` | `string` | Yes |  |

### The AgentSandboxBootStep object

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `step` | `string` | Yes |  |
| `ms` | `integer` | Yes |  |
