# Quickstart

Key → run → result in under five minutes.

You'll create an API key, launch a physical run on a humanoid in a kitchen
replica, and read back a result with a confidence interval. Nothing here
requires hardware knowledge — the defaults are the point.

### Install the SDK and set your key

Keys have the `rbr_live_` prefix and are read from the `ROBORAMA_API_KEY`
environment variable by every SDK and every example on this site.

```bash
pip install roborama-sdk    # or: npm i roborama
export ROBORAMA_API_KEY=rbr_live_...
```

### Launch a run

Pin a robot (`model@firmware`), an environment (`id@revision`), and a task.
`episodes="auto(ci=0.95, moe=0.03)"` sizes the run for a ±3-point margin of
error at 95% confidence — statistics as an input, not an afterthought. With no
`policy` attached, the run exercises the catalogue baseline policy for the
task, so you can see the whole loop before wiring up your own
([policy packaging](/docs/concepts/policies/) is step two).

*Example: your first run*

**Python**

```python
import roborama  # reads ROBORAMA_API_KEY from the environment

run = roborama.run(
    robot="g1-edu-pro@fw2.3",
    environment="kitchen-std@v1.2",
    task="pick_place@v1",
    episodes="auto(ci=0.95, moe=0.03)",
)
print(run.result())  # n=612  rate=0.874  ci95=(0.846, 0.898)
```

**TypeScript**

```typescript
import Roborama from "@roborama/sdk"; // reads ROBORAMA_API_KEY

const roborama = new Roborama();

const run = await roborama.runs.create({
  robot: "g1-edu-pro@fw2.3",
  environment: "kitchen-std@v1.2",
  task: "pick_place@v1",
  episodes: "auto(ci=0.95, moe=0.03)",
});

console.log(await run.result()); // n=612  rate=0.874  ci95=(0.846, 0.898)
```

**cURL**

```bash
curl https://api.roborama.com/v1/runs \
  -H "Authorization: Bearer $ROBORAMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "kind": "run",
    "robot": "g1-edu-pro@fw2.3",
    "environment": "kitchen-std@v1.2",
    "task": "pick_place@v1",
    "episodes": "auto(ci=0.95, moe=0.03)"
  }'
```

**Agent (tool-use payload)**

```json
{
  "type": "tool_use",
  "name": "roborama_run",
  "input": {
    "robot": "g1-edu-pro@fw2.3",
    "environment": "kitchen-std@v1.2",
    "task": "pick_place@v1",
    "episodes": "auto(ci=0.95, moe=0.03)"
  }
}
```

### Read the result

The run queues, a cell schedules it, and episodes tick until the margin-of-error
target is met — here, n=612:

```text
n=612  rate=0.874  ci95=(0.846, 0.898)
```

A rate of 0.874 with a Wilson 95% interval of (0.846, 0.898): defensible in a
release review, reproducible from the recorded pins. Watch it live with
`run.watch()` or the [events stream](/docs/api-reference/runs/).

### Pull the artifacts

Every episode ships video, MCAP telemetry, and a re-runnable replay spec; the
run ships a citable verification report.

```python
import roborama

run = roborama.runs.get("run_8842")
print(run.episodes[17].video_url)
run.report(format="pdf")
```

## Where next

- The full engagement shape: [Advanced quickstart](/docs/quickstart-advanced/) —
  ship a kit, freeze your claim as a Task Spec, verify, and prove it across
  embodiments in seven calls.
- Attach your own policy: [Policies](/docs/concepts/policies/) — container,
  checkpoint, or endpoint, with contracts validated before any motor moves.
- Understand the numbers: [Runs & statistics](/docs/concepts/runs-and-statistics/).
- Price a bigger job first: [`POST /v1/quote`](/docs/api-reference/quote/) —
  both meters, visible in every quote.
- Gate your releases: [CI gates](/docs/guides/ci-gates/).
