> ## Documentation Index
> Fetch the complete documentation index at: https://opendata.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# List series

> Return the list of label sets (unique metric identities) that match
a set of series selectors. This is useful for discovering which time
series exist for a given metric name or label combination.

At least one `match[]` argument must be provided. Each `match[]`
value is a PromQL series selector (e.g. `up`, `http_requests_total{method="GET"}`).
Multiple selectors are OR'd together — a series is returned if it
matches any of the provided selectors.

Also accepts POST with a `application/x-www-form-urlencoded` body
containing the same parameters.




## OpenAPI

````yaml /openapi/timeseries.yaml get /api/v1/series
openapi: 3.1.0
info:
  title: OpenData Timeseries API
  version: 1.0.0
  description: |
    Prometheus-compatible HTTP API for the OpenData Timeseries service.

    Query endpoints accept both GET (query parameters) and POST
    (application/x-www-form-urlencoded body) with identical parameters.
    This spec documents the GET form; POST is always available as an
    alternative for large queries that may exceed URL character limits.

    ## Timestamp formats

    All timestamp parameters accept either **RFC 3339** format
    (e.g. `2024-01-20T00:00:00Z`) or **Unix seconds** as a float
    (e.g. `1705708800` or `1705708800.123`). Timestamps in responses are
    always Unix seconds.

    ## Duration format

    Duration parameters use PromQL duration syntax: an integer followed by a
    unit suffix. Supported units are `ms` (milliseconds), `s` (seconds),
    `m` (minutes), `h` (hours), `d` (days), `w` (weeks), and `y` (years).
    Examples: `30s`, `5m`, `1h30m`.

    ## Sample values

    Sample values are always transferred as JSON strings (not numbers) to
    allow special values such as `"NaN"`, `"+Inf"`, and `"-Inf"`.

    ## Response envelope

    Every JSON response follows a common envelope:
    ```json
    {
      "status": "success" | "error",
      "data": <payload>,
      "errorType": "<string>",
      "error": "<string>",
      "warnings": ["<string>"]
    }
    ```
    The `error` and `errorType` fields are only present when `status` is
    `"error"`. The `warnings` array may be present on successful responses
    when the query engine has non-fatal issues to report (e.g. partial
    results due to unavailable shards).
servers:
  - url: http://localhost:9090
    description: Local development server
security: []
paths:
  /api/v1/series:
    get:
      summary: List series
      description: >
        Return the list of label sets (unique metric identities) that match

        a set of series selectors. This is useful for discovering which time

        series exist for a given metric name or label combination.


        At least one `match[]` argument must be provided. Each `match[]`

        value is a PromQL series selector (e.g. `up`,
        `http_requests_total{method="GET"}`).

        Multiple selectors are OR'd together — a series is returned if it

        matches any of the provided selectors.


        Also accepts POST with a `application/x-www-form-urlencoded` body

        containing the same parameters.
      operationId: listSeries
      parameters:
        - name: match[]
          in: query
          required: false
          description: |
            Repeated series selector. At least one `match[]` argument must be
            provided. Each value is a PromQL series selector such as
            `up{job="node"}`. Multiple selectors are combined with logical OR.

            Example: `match[]=up&match[]=process_start_time_seconds{job="node"}`
            returns series matching either selector.
          schema:
            type: array
            items:
              type: string
          style: form
          explode: true
          example: up{job="node"}
        - name: start
          in: query
          required: false
          description: |
            Start timestamp to limit the time range of series considered.
            Only series with samples within `[start, end]` are returned.
            RFC 3339 or Unix seconds.
          schema:
            type: string
        - name: end
          in: query
          required: false
          description: |
            End timestamp to limit the time range of series considered.
            Only series with samples within `[start, end]` are returned.
            RFC 3339 or Unix seconds.
          schema:
            type: string
        - name: limit
          in: query
          required: false
          description: |
            Maximum number of series to return. A value of `0` disables the
            limit. When omitted the server applies its default maximum.
          schema:
            type: integer
            minimum: 0
      responses:
        '200':
          description: |
            Array of label sets, one per matching series. Each label set is
            an object whose keys are label names and values are label values.
            The `__name__` label contains the metric name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SeriesResponse'
              example:
                status: success
                data:
                  - __name__: up
                    job: node
                    instance: localhost:9100
        '400':
          description: |
            Bad request. No `match[]` selectors were provided, or a selector
            is malformed. The `errorType` will be `bad_data`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error. The `errorType` will be `internal`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: |
            Service unavailable. The `errorType` will be `unavailable`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    SeriesResponse:
      type: object
      description: |
        Response for the series listing endpoint (`/api/v1/series`). On
        success, `data` contains an array of label sets — one object per
        matching time series.
      properties:
        status:
          type: string
          enum:
            - success
            - error
        data:
          type: array
          items:
            type: object
            additionalProperties:
              type: string
          description: |
            Array of label sets, one per matching series. Each object is a
            map of label names to label values. The `__name__` label contains
            the metric name.
        error:
          type: string
          description: Human-readable error message (present when status is `error`).
        errorType:
          type: string
          description: Error category (present when status is `error`).
      required:
        - status
    ErrorResponse:
      type: object
      description: |
        Prometheus-compatible error response. Returned for all non-2xx
        responses. The `errorType` indicates the category:

        - `bad_data` (HTTP 400/422): The request was malformed or the
          expression could not be executed.
        - `internal` (HTTP 500): An unexpected server-side error occurred.
        - `unavailable` (HTTP 503): The server is temporarily unable to
          handle the request due to backpressure or a query timeout.
      properties:
        status:
          type: string
          example: error
        errorType:
          type: string
          description: |
            Error category. Maps to HTTP status codes:
            - `bad_data` → 400 or 422
            - `internal` → 500
            - `unavailable` → 503
          enum:
            - bad_data
            - internal
            - unavailable
        error:
          type: string
          description: Human-readable error message describing what went wrong.
      required:
        - status
        - errorType
        - error

````