---
title: "List project sandboxes."
description: "API reference for GET /v1/sandboxes: List project sandboxes. Review its parameters, input, response, and generated SDK method names."
canonical: "https://wildflower.computer/docs/reference/list-sandboxes/"
openapi_version: "0.8.0"
source_revision: "788b7325a454b8b753a7d614247d5694bad5c967"
---

# List project sandboxes.

**GET** `/v1/sandboxes`

Returns project-scoped registry records in newest-first order, including deleted tombstones. This endpoint never calls a sandbox provider; status is the last provider state observed by Wildflower Computer and statusObservedAt describes its freshness.

- **Operation ID:** `listSandboxes`
- **Success:** **200**
- **Authentication:** **Bearer key**

## Query parameters

| Name | Type | Requirement | Meaning |
| --- | --- | --- | --- |
| `cursor` | string | Optional | Opaque cursor returned as nextCursor by the previous page. |
| `limit` | integer | Optional | Maximum records to return. Defaults to 50. |

## Request and response

- **Request body:** **None**
- **Response:** [SandboxPage](https://wildflower.computer/docs/reference/models/sandbox-page/)

## HTTP example

This credential-safe request and its representative success response are generated with the operation contract. Replace placeholder IDs and read secrets from your environment.

Request

```bash
curl --fail-with-body --request GET \
  "$WILDFLOWER_URL/v1/sandboxes?limit=2" \
  -H "Authorization: Bearer $WILDFLOWER_API_KEY"
```

Response / 200

```json
{
  "items": [
    {
      "id": "wf_e2b_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
      "provider": "e2b",
      "status": "running",
      "metadata": {
        "nativeProviderId": "native-1"
      },
      "createdAt": "2026-07-28T12:00:00Z",
      "updatedAt": "2026-07-28T12:00:00Z",
      "statusObservedAt": "2026-07-28T12:00:00Z"
    }
  ],
  "nextCursor": "next-page"
}
```

## SDK examples

Use the same operation through any generated client. Each snippet comes from the SDK generator rather than a hand-copied website example.

### TypeScript

```typescript
import { Wildflower } from "@wildflowercomputer/sdk";

const client = new Wildflower({
  wildflowerApiKey: process.env.WILDFLOWER_API_KEY,
});

const page = await client.sandboxes.list({ limit: 2 });
console.log(page.items, page.nextCursor);
```

### Python

```python
import os

from wildflower import (
    E2bCreateSandboxInput,
    ReadFileInput,
    RunCommandInput,
    WriteFileInput,
    Wildflower,
)

client = Wildflower(
    wildflower_api_key=os.environ.get("WILDFLOWER_API_KEY"),
)

page = client.sandboxes.list(limit=2)
print(page.items, page.next_cursor)
```

### Rust

```rust
use wildflower::{
    CreateSandboxInput, FileEncoding, ListSandboxesOptions, ReadFileInput,
    RunCommandInput, WriteFileInput,
    Wildflower,
};

let client = Wildflower::new(std::env::var("WILDFLOWER_API_KEY")?)?;

let page = client.sandboxes().list_page(&ListSandboxesOptions {
    cursor: None,
    limit: Some(2),
}).await?;
println!("{:?} {:?}", page.items, page.next_cursor);
```

### Go

```go
client, err := wildflower.NewClient(os.Getenv("WILDFLOWER_API_KEY"))
if err != nil {
    return err
}

limit := 2
page, err := client.Sandboxes.List(ctx, &wildflower.ListSandboxesOptions{
    Limit: &limit,
})
if err != nil {
    return err
}
fmt.Println(page.Items, page.NextCursor)
```

### Zig

```zig
var client = try Wildflower.init(
    allocator,
    wildflower_api_key,
    transport,
);
defer client.deinit();

var page = try client.listSandboxes(.{ .limit = 2 });
defer page.deinit();
std.debug.print("{any}\n", .{page.value.items});
```

## Generated SDK methods

Every name below comes from the generator mapping for this operation, so a language-specific rename creates website drift.

- [TypeScript](https://wildflower.computer/sdk/typescript/): `list`
- [Python](https://wildflower.computer/sdk/python/): `list`
- [Rust](https://wildflower.computer/sdk/rust/): `list`
- [Go](https://wildflower.computer/sdk/go/): `List`
- [Zig](https://wildflower.computer/sdk/zig/): `list`
