## `GET /sop/metrics`

**Get metrics** — Returns aggregate throughput and success metrics for all processes over the last 24 hours.

> **Auth:** Requires `X-SOP-Token` header. See [Authentication](/api-docs/guides/authentication.md).

### Response

`200 application/json` — Aggregate metrics object.

```json
{
  "window":          "24h",
  "started":          42,
  "completed":        38,
  "failed":            2,
  "completion_rate":  0.95,
  "avg_duration_ms":  84320,
  "p95_duration_ms":  192000
}
```

### Errors

| Status | Code | Meaning |
|--------|------|---------|
| 401 | `unauthorized` | Token missing or revoked. |

### Code examples

#### curl

```bash
curl https://api.opensop.dev/sop/metrics \
  -H "X-SOP-Token: $OPENSOP_TOKEN"
```

#### Node

```js
const metrics = await fetch(
  "https://api.opensop.dev/sop/metrics",
  { headers: { "X-SOP-Token": process.env.OPENSOP_TOKEN } }
).then(r => r.json());
```

#### Python

```python
resp = requests.get(
  "https://api.opensop.dev/sop/metrics",
  headers={"X-SOP-Token": os.environ["OPENSOP_TOKEN"]}
)
```

#### Ruby

```ruby
Net::HTTP.start("api.opensop.dev", use_ssl: true) do |h|
  req = Net::HTTP::Get.new("/sop/metrics")
  req["X-SOP-Token"] = ENV["OPENSOP_TOKEN"]
  puts h.request(req).body
end
```

