---
title: "GET /agent/runs/{id}"
description: "Fetch a previous run's execution trace"
full: true
---

**Auth:** required. Send an `ivy_` API key (`Authorization: Bearer ivy_…` or `X-Ivy-Api-Key`) or a Clerk session JWT (`Authorization: Bearer …`). See [Authentication](/docs/api/authentication).

Returns the harness_event_log projection for a previous /orchestrate run. Owner only — callers see only events whose actor_id matches their credential. A missing run, another account's run, an unauthenticated call and a malformed id all return the same 404 `RUN_NOT_FOUND` (guest turns write no event log, so there are no anonymous runs to fetch). A refused API key returns 401. 30-day retention.

## Request

#### Path parameters

- `id` (string (uuid)) —
Run / session id returned from /orchestrate

## Responses

### `200` OK

Run trace

Response shape: `object`

### `401` Unauthorized

A presented API key was refused

### `404` Not Found

`RUN_NOT_FOUND` — no run with this id that the caller owns: missing, expired, another account's, an unauthenticated call, or a malformed id (one identical body for all)

**curl**

```bash
curl -X GET 'https://ivybiosciences.com/api/v1/agent/runs/{id}' \
  -H "Authorization: Bearer $IVY_API_KEY"
```

**JavaScript**

```js
const res = await fetch('https://ivybiosciences.com/api/v1/agent/runs/{id}', {
  method: 'GET',
  headers: {
    'Authorization': `Bearer ${process.env.IVY_API_KEY}`,
  },
});
const data = await res.json();
```

**Python**

```python
import os, requests

res = requests.get(
    "https://ivybiosciences.com/api/v1/agent/runs/{id}",
    headers={"Authorization": f"Bearer {os.environ['IVY_API_KEY']}"},
)
data = res.json()
```
