> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.runtype.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.runtype.com/_mcp/server.

# List runs

GET https://api.runtype.com/v1/runs

Every agent and flow run in the span store, newest start first, including runs that write no control-plane row. The UNSCOPED feed is ROOT runs only: a subagent or nested-flow run folds under its parent, `childCount` says how many are folded there, and `parentExecutionId=<id>` reads them. Pass `includeChildren=true` for the flat enumeration. Any resource-scoped filter (`agentId`, `flowId`, `conversationId`, `surfaceId`, `recordId`, `batchExecutionId`, `parentExecutionId`, `rootExecutionId`, `executionId`) is already an explicit selection and never folds, so an agent that only ever runs as a subagent still lists under `agentId`. Each row carries `origin` (dashboard | api | internal | null), read from the caller's authenticated principal, and `test` as its derived alias for `origin === "dashboard"`; any entrance that resolves a principal stamps origin, including the Runtype MCP server tools and Code Mode (`api`) and the hosted `/v1/mcp` proxy (`internal`). A lane with no principal answers null for both by design: schedule, webhook, messaging, A2A, an agent exposed as an MCP surface, subagent, nested flow, a client-token product surface, an ingested run, and any row whose header predates the field. `overlay=live` adds live control-plane fields; the overlay never adds, drops or reorders a row. A cursor minted by the retired control-plane list lane (`cp.` prefix) restarts at page one and answers `pagination.cursorReset: true`. `includeCount=true` adds `pagination.totalCount`, counted up to 1000, and `pagination.totalCountCapped`. Each row carries `via` (schedule | surface | api | mcp | cli | test | eval, with the id and name of the thing that started it) where the entrance stated it; null otherwise.

Reference: https://docs.runtype.com/api-reference/runtype-api/runs/list-runs

## Authentication

- `Authorization` header (bearer token, required) — API key or Clerk session token

## Servers

- `https://api.runtype.com` (Production, default)
- `https://api.runtype-staging.com` (Staging)

## Request

### Query parameters

- `agentId` (V1RunsGetParametersAgentId, optional) — Filter by agent id; repeat for a set.
- `flowId` (V1RunsGetParametersFlowId, optional) — Filter by flow id; repeat for a set.
- `conversationId` (string, optional) — Filter by conversation id.
- `surfaceId` (string, optional) — Filter by surface id.
- `surfaceType` (string, optional) — Filter by surface family.
- `recordId` (string, optional) — Filter by record id.
- `batchExecutionId` (V1RunsGetParametersBatchExecutionId, optional) — Filter by batch id; repeat for a set.
- `parentExecutionId` (string, optional) — Runs spawned by this execution.
- `rootExecutionId` (string, optional) — Runs in this execution tree.
- `includeChildren` (enum, optional) — true restores the flat enumeration on the UNSCOPED feed, in which a subagent run and a nested-flow run list beside their parent. The unscoped feed is roots only by default: a row whose parentExecutionId is set folds under its parent and is read with parentExecutionId=\<executionId>. Any filter that scopes to a resource — agentId, flowId, conversationId, surfaceId, recordId, batchExecutionId, parentExecutionId, rootExecutionId or executionId — is already an explicit selection and never folds, so an agent that only ever runs as a subagent still lists under agentId. This parameter changes nothing on a scoped request.
  - Allowed values: `true`, `false`
- `executionId` (V1RunsGetParametersExecutionId, optional) — Read specific runs by id; at most 100 per request.
- `source` (enum, optional) — Filter by producing lane.
  - Allowed values: `hosted`, `ingested`
- `status` (enum, optional) — status accepts only running, completed or failed. queued, awaiting and cancelled exist only in the live overlay, which may never change which rows a page holds, so the server cannot filter on them.
  - Allowed values: `running`, `completed`, `failed`
- `traffic` (enum, optional) — live keeps runs real users and integrations started; test keeps runs started from the dashboard (Test, step tests, Ask); eval keeps eval-batch runs; sim keeps simulation turns; all, or omitted, keeps every run. A simulation turn is sim even when a schedule started it, a schedule run is live, and an eval batch run is eval whoever started it.
  - Allowed values: `live`, `test`, `eval`, `sim`, `all`
- `signal` (string, optional) — Runs where this signal fired: `key` for any fired value, or `key:value` for one choice value (for example frustration:churn_threat).
- `from` (string, optional) — Window start (ISO 8601). Defaults to 24 hours ago.
- `to` (string, optional) — Window end (ISO 8601). Defaults to now.
- `view` (enum, optional) — full (the default) returns every field. compact omits exactly these 16: stopReason, iterations, inputPreview, flowVersionId, agentVersionId, agentVersionLabel, agentVersionNumber, agentTargetResolution, otelProducer, lastHeartbeatAt, expiresAt, cancelRequestedAt, progress, pendingApproval, budgetExhausted and inputMessages. The status is still overlay-corrected on a compact page; only the fields differ.
  - Allowed values: `compact`, `full`
- `overlay` (enum, optional) — live adds control-plane fields; defaults to live for a session, none for an API key.
  - Allowed values: `live`, `none`
- `limit` (string, optional) — Page size, at most 100.
- `cursor` (string, optional) — Keyset cursor from a previous page.
- `includeCount` (string, optional) — "true" adds pagination.totalCount and pagination.totalCountCapped: the number of runs matching this request's filters within its window, ignoring the cursor and limit, counted up to 1000. Past that the count stops at 1000 and totalCountCapped is true, so read it as "more than 1000". Omitted, or any other value, the response carries neither field.

## Response

### 200

Runs returned

- `data` (list of RunListRow, required)
- `pagination` (V1RunsGetResponsesContentApplicationJsonSchemaPagination, required)
- `window` (V1RunsGetResponsesContentApplicationJsonSchemaWindow, required) — The started_at window the query resolved to, after defaults.

## Errors

### 400 Bad Request Error

Invalid request, including a filter whose value could not be read

- `error` (string, required)
- `code` (string, optional) — Stable error code. `insufficient_scope` marks an API key that lacks a scope this request needs.
- `details` (list of ErrorDetailsItems, optional)
- `requiredScopes` (list of string, optional) — On `insufficient_scope`: every API key scope this request needs.

### 401 Unauthorized Error

Unauthorized

- `error` (string, required)
- `code` (string, optional) — Stable error code. `insufficient_scope` marks an API key that lacks a scope this request needs.
- `details` (list of ErrorDetailsItems, optional)
- `requiredScopes` (list of string, optional) — On `insufficient_scope`: every API key scope this request needs.

### 403 Forbidden Error

Insufficient API key permissions

- `error` (string, required)
- `code` (string, optional) — Stable error code. `insufficient_scope` marks an API key that lacks a scope this request needs.
- `details` (list of ErrorDetailsItems, optional)
- `requiredScopes` (list of string, optional) — On `insufficient_scope`: every API key scope this request needs.

### 500 Internal Server Error

Internal server error

- `error` (string, required)
- `code` (string, optional) — Stable error code. `insufficient_scope` marks an API key that lacks a scope this request needs.
- `details` (list of ErrorDetailsItems, optional)
- `requiredScopes` (list of string, optional) — On `insufficient_scope`: every API key scope this request needs.

### 503 Service Unavailable Error

Run store temporarily unavailable; nothing could be read. Retry after the `Retry-After` interval (seconds).

- `code` (enum, required) — Stable error code. `insufficient_scope` marks an API key that lacks a scope this request needs.
  - Allowed values: `RUN_STORE_UNAVAILABLE`
- `error` (string, required)
- `details` (list of RunStoreUnavailableErrorDetailsItems, optional)
- `requiredScopes` (list of string, optional) — On `insufficient_scope`: every API key scope this request needs.

## Types

### V1RunsGetParametersAgentId

Filter by agent id; repeat for a set.

- string
- list of string

### V1RunsGetParametersFlowId

Filter by flow id; repeat for a set.

- string
- list of string

### V1RunsGetParametersBatchExecutionId

Filter by batch id; repeat for a set.

- string
- list of string

### V1RunsGetParametersExecutionId

Read specific runs by id; at most 100 per request.

- string
- list of string

### RunListRow

- `agentId` (string, required, nullable) — Agent that ran.
- `batchExecutionId` (string, required, nullable) — Batch this run belongs to.
- `childCount` (double, required, nullable) — How many runs name this one as their parent. The unscoped feed returns roots only, so this is the size of the fold underneath a row; read the children with parentExecutionId=\<executionId>. It is populated on a resource-scoped page too, where nothing is folded, so a surface can still offer the same expansion. WHICH children are counted depends on the arm that served the row: the span store counts every child, agent and nested-flow alike, while the legacy control-plane fallback counts agent children only, so on that arm a parent whose only child is a nested flow reports 0. That is deliberate — the fallback arm cannot enumerate a nested-flow child either, so counting one would advertise a fold that opens on nothing. It counts only children the CALLER may read: a credential holding one execution family (AGENTS:READ or FLOWS:READ alone) counts the children of that family and no others, so a count never discloses a run the same credential could not list. NULL means the arm cannot count children at all, which is not zero.
- `completeness` (enum, required) — Storage completeness; null on a row the control-plane arm served.
  - Allowed values: `partial`, `complete`, `conflicted`, `expired`, `deleted`
- `conversationId` (string, required, nullable) — Conversation this run belongs to.
- `durationMs` (double, required, nullable) — Wall-clock duration in milliseconds.
- `endedAt` (string, required, nullable) — ISO instant the run ended; null while it is still running.
- `executionId` (string, required) — Runtime execution id; the key for /v1/logs and /v1/runs/\{id}.
- `fidelityTier` (string, required, nullable) — Fidelity of the projection behind this row.
- `flowId` (string, required, nullable) — Flow that ran.
- `inlineDefinition` (boolean, required, nullable) — True when the dispatch carried a complete inline agent definition (name and model) beside or instead of an agentId, so the run executed that inline config and no stored version; such a row stamps no agentVersionId. False when the run executed the saved definition by reference. NULL when the header states nothing: a flow run, a lane that resolves no agent definition, or a row that predates the field.
- `inputTokens` (double, required, nullable) — Input tokens reported.
- `kind` (enum, required) — Whether an agent or a flow ran.
  - Allowed values: `agent`, `flow`
- `origin` (enum, required) — Where the run was dispatched from, taken from the caller's authenticated principal and never from a request field. ANY entrance that resolves a principal stamps it: a Clerk session answers dashboard; a management API key answers api, which includes the Runtype MCP server's tools and Code Mode, since both reach dispatch with a management key; and Runtype's own internal caller answers internal, for example the hosted /v1/mcp proxy. A lane that resolves NO principal carries NULL BY DESIGN: schedule, webhook, messaging, A2A, an agent exposed AS an MCP surface, subagent, nested flow, a client-token product surface (an end user is none of the three origins) and an ingested OTLP run. So NULL says "no authenticated principal at this entrance" rather than "unknown caller". The one NULL that is not a statement about the lane is a row whose header predates the field or came from the backfill: it stamps nothing even for a run that did resolve a principal.
  - Allowed values: `dashboard`, `api`, `internal`
- `outputTokens` (double, required, nullable) — Output tokens reported.
- `parentExecutionId` (string, required, nullable) — Run that spawned this one.
- `parentToolCallId` (string, required, nullable) — Parent's tool call that spawned this run.
- `recordId` (string, required, nullable) — Record this run processed.
- `rootExecutionId` (string, required, nullable) — Outermost run of the tree.
- `selfReportedCost` (string, required, nullable) — Cost the producer reported.
- `source` (enum, required) — hosted, or ingested for an OTLP export. An ingested run is never reported running.
  - Allowed values: `hosted`, `ingested`
- `spanCount` (double, required, nullable) — Spans the projection wrote.
- `startedAt` (string, required) — ISO instant the run started.
- `status` (enum, required) — Customer-facing status, derived by runStatusFrom.
  - Allowed values: `queued`, `running`, `awaiting`, `completed`, `failed`, `cancelled`
- `storeResults` (boolean, required, nullable) — The persistence posture the dispatch declared. FALSE means the run wrote no control-plane row, no journal outputs and no span content, so a surface that reports a missing transcript keys on this and never on origin. NULL means the header states nothing, which is not "true": a lane that takes no such flag carries no stamp, and an ingested (OTLP) run declared none. A row served from the legacy control-plane lane answers true, because that row exists only when the run stored.
- `surfaceId` (string, required, nullable) — Product surface that entered this run.
- `surfaceType` (string, required, nullable) — Surface family (api, chat, webhook, schedule, ...).
- `totalCost` (string, required, nullable) — Metered cost as a decimal string.
- `traceId` (string, required, nullable) — Trace id in the span store; null on a row the control-plane arm served.
- `test` (boolean, required, nullable, deprecated) — DEPRECATED: a derived alias of origin, kept for one release — read origin instead. True when the run came from the dashboard, i.e. origin === "dashboard"; NULL exactly when origin is NULL. It is never derived from storeResults, which defaults to false across the whole flow lane and which an API caller sets for its own privacy reasons: reading it as "test" labelled production runs as tests. A run whose header predates origin therefore reads NULL rather than claiming either answer.
- `agentTargetResolution` (string, optional, nullable) — How the run chose its version: alias, version or legacy-live-row. Absent means the overlay did not answer, which is not false and not null.
- `agentVersionId` (string, optional, nullable) — Agent version that ran. Absent means the overlay did not answer, which is not false and not null.
- `agentVersionLabel` (string, optional, nullable) — Version label. Absent means the overlay did not answer, which is not false and not null.
- `agentVersionNumber` (double, optional, nullable) — Version number, for a version chip and version grouping. Absent means the overlay did not answer, which is not false and not null.
- `budgetExhausted` (boolean, optional, nullable) — Budget exhausted. Absent means the overlay did not answer, which is not false and not null.
- `cacheReadTokens` (double, optional, nullable) — Prompt-cache reads summed over the run's model calls (a subset of inputTokens). Returned by GET /v1/runs/\{executionId} only; null means no model call reported one.
- `cacheWriteTokens` (double, optional, nullable) — Prompt-cache writes summed over the run's model calls (a subset of inputTokens). Returned by GET /v1/runs/\{executionId} only; null means no model call reported one.
- `cancelRequestedAt` (string, optional, nullable) — Cancel request. Absent means the overlay did not answer, which is not false and not null.
- `expiresAt` (string, optional, nullable) — Budget expiry. Absent means the overlay did not answer, which is not false and not null.
- `flowVersionId` (string, optional, nullable) — Exact saved flow version or test capture that ran. Absent means the overlay did not answer, which is not false and not null.
- `inputMessages` (any, optional) — Messages the run started from. Absent means the overlay did not answer, which is not false and not null.
- `inputPreview` (string, optional, nullable) — The run's first user message, secret-scrubbed and cut to 160 characters, so a list can say what a run was asked to do without reading content. Absent means no input text is recorded for this run, which is not an empty message: the span store holds no run-level input at all, so a run with no control-plane row (a flow leg, a storeResults:false run) has none.
- `iterations` (double, optional, nullable) — Loop iterations from the terminal frame.
- `lastHeartbeatAt` (string, optional, nullable) — Last heartbeat. Absent means the overlay did not answer, which is not false and not null.
- `otelProducer` (any, optional) — Framework identity the producer reported, for a versionless run group. Absent means the overlay did not answer, which is not false and not null.
- `pendingApproval` (any, optional) — Approval awaiting a human. Absent means the overlay did not answer, which is not false and not null.
- `progress` (any, optional) — Live progress document. Absent means the overlay did not answer, which is not false and not null.
- `reasoningTokens` (double, optional, nullable) — Reasoning tokens summed over the run's model calls (a subset of outputTokens). Returned by GET /v1/runs/\{executionId} only; null means no model call reported one.
- `requestedFlowId` (string, optional, nullable) — The flow.id an inline /v1/dispatch named when the caller's organization does not own a flow with that id. Such a run executes as the "virtual" flow, so flowId reads "virtual" and this field carries the caller's id (control characters stripped, cut to 128 characters) so the caller can still recognise its runs. It is a label only: it grants nothing, is never used as a sender or resume identity, and is not a list filter; filter with flowId=virtual and match on this field. Absent when the run executed under the id it named.
- `retentionElided` (boolean, optional) — Retention removed the spans; the run still lists and reads as completed.
- `signals` (RunListRowSignals, optional) — Trace signals. A list row carries status and fired only; GET /v1/runs/\{id} adds results. Omitted entirely until the organization binds a signal set.
- `stopReason` (string, optional, nullable) — Stop reason from the terminal frame.
- `via` (RunListRowVia, optional, nullable) — How the run started, for a Via column. Forward-only for schedule, api key, cli, mcp and eval detail: a header written before those stamps reads null, or falls back to the coarse origin/surface facts when they alone answer it. A label is a snapshot or a lookup and never authority; mcp, cli and sdk are self-declared by the client.

### V1RunsGetResponsesContentApplicationJsonSchemaPagination

- `hasMore` (boolean, required)
- `hasPrev` (boolean, required)
- `limit` (integer, required)
- `nextCursor` (string, required, nullable)
- `cursorReset` (boolean, optional) — True when the supplied cursor could not be honoured and the read restarted at page one. A paging client must stop rather than follow the fresh cursor. Absent otherwise.
- `totalCount` (integer, optional) — The runs the request's filters match within its window, ignoring the cursor and limit, counted up to 1000. Present only when `includeCount=true`.
- `totalCountCapped` (boolean, optional) — True when more than 1000 runs matched, so `totalCount` is the cap rather than the total. Present only when `includeCount=true`.

### V1RunsGetResponsesContentApplicationJsonSchemaWindow

The started_at window the query resolved to, after defaults.

- `from` (string, required)
- `to` (string, required)

### ErrorDetailsItems

- `message` (string, required)
- `code` (string, optional) — Stable Runtype validation code (e.g. MISSING_REQUIRED_FIELD, INVALID_ENUM).
- `path` (string, optional) — Dotted JSON path to the offending field.
- `suggestion` (string, optional) — Actionable hint (allowed values, accepted range, …).

### RunStoreUnavailableErrorDetailsItems

- `message` (string, required)
- `code` (string, optional) — Stable Runtype validation code (e.g. MISSING_REQUIRED_FIELD, INVALID_ENUM).
- `path` (string, optional) — Dotted JSON path to the offending field.
- `suggestion` (string, optional) — Actionable hint (allowed values, accepted range, …).

### RunListRowSignals

Trace signals. A list row carries status and fired only; GET /v1/runs/\{id} adds results. Omitted entirely until the organization binds a signal set.

- `fired` (list of string, required)
- `status` (enum, required)
  - Allowed values: `complete`, `pending`, `partial`, `none`, `unavailable`
- `results` (list of RunListRowSignalsResultsItems, optional)

### RunListRowVia

How the run started, for a Via column. Forward-only for schedule, api key, cli, mcp and eval detail: a header written before those stamps reads null, or falls back to the coarse origin/surface facts when they alone answer it. A label is a snapshot or a lookup and never authority; mcp, cli and sdk are self-declared by the client.

- `id` (string, required, nullable) — The thing that started it: the schedule id (schedule), product surface id (surface), API key id (api), the acting user id (cli), eval suite id (eval) or simulation run id (simulation). Null for mcp and test, and for an api run whose header predates key stamping.
- `kind` (enum, required) — One word for the way the run started.
  - Allowed values: `schedule`, `surface`, `api`, `mcp`, `cli`, `test`, `eval`, `simulation`
- `label` (string, required, nullable) — Its display name when the API could resolve one: schedule name, surface name, API key name as it was at dispatch, MCP client name, the acting user's first name, or eval suite name. Null when unresolved, for example a deleted schedule.

### RunListRowSignalsResultsItems

- `answers` (map from string to RunListRowSignalsResultsItemsAnswers, required)
- `bindingId` (string, required)
- `computedAt` (string, required)
- `fired` (list of string, required)
- `sample` (enum, required)
  - Allowed values: `uniform`, `filtered`
- `signalSet` (RunListRowSignalsResultsItemsSignalSet, required)
- `status` (enum, required)
  - Allowed values: `complete`, `failed`, `skipped_budget`, `skipped_policy`, `skipped_billing`
- `target` (RunListRowSignalsResultsItemsTarget, required)
- `unit` (enum, required)
  - Allowed values: `turn`, `conversation`, `run`
- `values` (map from string to any, required)
- `error` (string, optional)

### RunListRowSignalsResultsItemsAnswers

- `band` (enum, required)
  - Allowed values: `act`, `review`, `low`
- `confidence` (double, optional)
- `distribution` (map from string to double, optional)
- `fired` (boolean, optional)
- `pNull` (double, optional)
- `refused` (boolean, optional)
- `source` (RunListRowSignalsResultsItemsAnswersSource, optional)
- `sources` (list of RunListRowSignalsResultsItemsAnswersSourcesItems, optional)
- `value` (any, optional)

### RunListRowSignalsResultsItemsSignalSet

- `id` (string, required)
- `name` (string, required)
- `version` (integer, required)

### RunListRowSignalsResultsItemsTarget

- `executionId` (string, required)
- `spanId` (string, required, nullable)
- `turnIndex` (integer, required, nullable)

### RunListRowSignalsResultsItemsAnswersSource

- `end` (integer, required)
- `field` (string, required)
- `spanId` (string, required)
- `start` (integer, required)

### RunListRowSignalsResultsItemsAnswersSourcesItems

- `end` (integer, required)
- `field` (string, required)
- `spanId` (string, required)
- `start` (integer, required)

## Examples

**Response**

```json
{
  "data": [
    {
      "agentId": "string",
      "batchExecutionId": "string",
      "childCount": 1.1,
      "completeness": "partial",
      "conversationId": "string",
      "durationMs": 1.1,
      "endedAt": "string",
      "executionId": "string",
      "fidelityTier": "string",
      "flowId": "string",
      "inlineDefinition": true,
      "inputTokens": 1.1,
      "kind": "agent",
      "origin": "dashboard",
      "outputTokens": 1.1,
      "parentExecutionId": "string",
      "parentToolCallId": "string",
      "recordId": "string",
      "rootExecutionId": "string",
      "selfReportedCost": "string",
      "source": "hosted",
      "spanCount": 1.1,
      "startedAt": "string",
      "status": "queued",
      "storeResults": true,
      "surfaceId": "string",
      "surfaceType": "string",
      "totalCost": "string",
      "traceId": "string",
      "test": true,
      "agentTargetResolution": "string",
      "agentVersionId": "string",
      "agentVersionLabel": "string",
      "agentVersionNumber": 1.1,
      "budgetExhausted": true,
      "cacheReadTokens": 1.1,
      "cacheWriteTokens": 1.1,
      "cancelRequestedAt": "string",
      "expiresAt": "string",
      "flowVersionId": "string",
      "inputMessages": null,
      "inputPreview": "string",
      "iterations": 1.1,
      "lastHeartbeatAt": "string",
      "otelProducer": null,
      "pendingApproval": null,
      "progress": null,
      "reasoningTokens": 1.1,
      "requestedFlowId": "string",
      "retentionElided": true,
      "signals": {
        "fired": [
          "string"
        ],
        "status": "complete",
        "results": [
          {
            "answers": {},
            "bindingId": "string",
            "computedAt": "string",
            "fired": [
              "string"
            ],
            "sample": "uniform",
            "signalSet": {
              "id": "string",
              "name": "string",
              "version": 1
            },
            "status": "complete",
            "target": {
              "executionId": "string",
              "spanId": "string",
              "turnIndex": 1
            },
            "unit": "turn",
            "values": {},
            "error": "string"
          }
        ]
      },
      "stopReason": "string",
      "via": {
        "id": "string",
        "kind": "schedule",
        "label": "string"
      }
    }
  ],
  "pagination": {
    "hasMore": true,
    "hasPrev": true,
    "limit": 1,
    "nextCursor": "string",
    "cursorReset": true,
    "totalCount": 1,
    "totalCountCapped": true
  },
  "window": {
    "from": "string",
    "to": "string"
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.runtype.com/v1/runs"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.runtype.com/v1/runs';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.runtype.com/v1/runs"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.runtype.com/v1/runs")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.runtype.com/v1/runs")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.runtype.com/v1/runs', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.runtype.com/v1/runs");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.runtype.com/v1/runs")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```