---
title: "Step Results"
description: "Query step execution results"
---

# Step Results

## List Step Results

Get a paginated list of step execution results with optional filtering.

**List all step results:**
```bash
curl http://localhost:8002/osm/api/step-results \
  -H "Authorization: Bearer $TOKEN"
```

**With pagination:**
```bash
curl "http://localhost:8002/osm/api/step-results?offset=0&limit=50" \
  -H "Authorization: Bearer $TOKEN"
```

**Filter by workspace:**
```bash
curl "http://localhost:8002/osm/api/step-results?workspace=example_com" \
  -H "Authorization: Bearer $TOKEN"
```

**Filter by status:**
```bash
curl "http://localhost:8002/osm/api/step-results?status=completed" \
  -H "Authorization: Bearer $TOKEN"
```

**Filter by step type:**
```bash
curl "http://localhost:8002/osm/api/step-results?step_type=bash" \
  -H "Authorization: Bearer $TOKEN"
```

**Filter by run ID:**
```bash
curl "http://localhost:8002/osm/api/step-results?run_id=123" \
  -H "Authorization: Bearer $TOKEN"
```

**Multiple filters:**
```bash
curl "http://localhost:8002/osm/api/step-results?workspace=example_com&status=completed&limit=100" \
  -H "Authorization: Bearer $TOKEN"
```

**Query Parameters:**

| Parameter | Type | Description |
|-----------|------|-------------|
| `workspace` | string | Filter by workspace name |
| `status` | string | Filter by status (pending, running, completed, failed) |
| `step_type` | string | Filter by step type (bash, function, foreach, parallel-steps, remote-bash, http, llm) |
| `run_id` | int | Filter by run ID |
| `offset` | int | Pagination offset (default: 0) |
| `limit` | int | Maximum records to return (default: 20, max: 10000) |

**Response:**
```json
{
  "data": [
    {
      "id": 1,
      "run_id": 123,
      "step_name": "run-subfinder",
      "step_type": "bash",
      "status": "completed",
      "command": "subfinder -d example.com -o {{Output}}/subdomains.txt",
      "output": "Found 150 subdomains",
      "error": "",
      "started_at": "2025-01-15T10:00:00Z",
      "completed_at": "2025-01-15T10:01:30Z",
      "duration_ms": 90000,
      "created_at": "2025-01-15T10:00:00Z",
      "updated_at": "2025-01-15T10:01:30Z"
    },
    {
      "id": 2,
      "run_id": 123,
      "step_name": "run-httpx",
      "step_type": "bash",
      "status": "completed",
      "command": "httpx -l {{Output}}/subdomains.txt -o {{Output}}/httpx.txt",
      "output": "Probed 150 hosts, 120 alive",
      "error": "",
      "started_at": "2025-01-15T10:01:30Z",
      "completed_at": "2025-01-15T10:03:00Z",
      "duration_ms": 90000,
      "created_at": "2025-01-15T10:01:30Z",
      "updated_at": "2025-01-15T10:03:00Z"
    },
    {
      "id": 3,
      "run_id": 124,
      "step_name": "process-results",
      "step_type": "function",
      "status": "completed",
      "command": "",
      "output": "true",
      "error": "",
      "started_at": "2025-01-15T11:00:00Z",
      "completed_at": "2025-01-15T11:00:01Z",
      "duration_ms": 1000,
      "created_at": "2025-01-15T11:00:00Z",
      "updated_at": "2025-01-15T11:00:01Z"
    }
  ],
  "pagination": {
    "total": 250,
    "offset": 0,
    "limit": 20
  }
}
```

**Step Status Values:**

| Status | Description |
|--------|-------------|
| `pending` | Step is queued but not yet started |
| `running` | Step is currently executing |
| `completed` | Step finished successfully |
| `failed` | Step failed with an error |
| `skipped` | Step was skipped (pre_condition not met) |

**Step Types:**

| Type | Description |
|------|-------------|
| `bash` | Shell command execution |
| `function` | Utility function execution |
| `foreach` | Loop over input items |
| `parallel-steps` | Execute steps in parallel |
| `remote-bash` | Remote command execution (Docker/SSH) |
| `http` | HTTP request step |
| `llm` | LLM/AI step |
