---
title: "Read a monitor's metric timeseries"
method: GET
path: "/monitors/{id}/timeseries"
tags: ["monitors"]
---

# Read a monitor's metric timeseries

`GET /monitors/{id}/timeseries`

## Request

- Base URL: `https://www.socialcrawl.dev/v1`
- URL: `https://www.socialcrawl.dev/v1/monitors/{id}/timeseries`
- Auth: API key in header `x-api-key`

Projects every stored run into a `{t, metrics}` series over the recipe's stable numeric keys, so a monitor doubles as a metric history without you storing anything. Reads snapshots only: it never calls an upstream and is free. On a numbers-only monitor (created with `track`) the response also carries `series`, one `{ row_id, metric, points: [{t, value}] }` per row and metric, and `points` holds the numbers read off the page itself. Reads at most the newest 1,000 runs in the window.

## Path parameters

- `id` string, required

## Query parameters

- `metric` string
- `from` string, date-time
- `to` string, date-time
- `row` string

## Response `200`

The metric series

- object
  - `series` object[]: Numbers-only monitors only. One entry per row and metric, oldest point first. `value` is null when the run had no number there.
    - `metric` string
    - `points` object[]
      - `t` string, date-time
      - `value` number, nullable
    - `row_id` string
  - `series_truncated` boolean: Numbers-only monitors only. True when the response hit its 100,000-point cap; narrow with `row`, `metric`, `from` and `to`.
  - `metric_keys` string[]
  - `points` object[]
    - `metrics` object
    - `t` string, date-time

## Other responses

- `400`: Invalid request - missing or malformed parameters
- `401`: Unauthorized - missing or invalid API key
- `404`: Not found - the endpoint does not exist, or the requested resource was not found upstream
- `429`: Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.
- `500`: Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit

---

[API](https://skmtc.dev/socialcrawl/apis/socialcrawl-api.md) · [All operations](https://skmtc.dev/socialcrawl/apis/socialcrawl-api/llms.txt) · [OpenAPI document](https://skmtc.dev/socialcrawl/apis/socialcrawl-api/revisions/a0ad2511004a?raw)
