---
title: "Aggregate profile sample values over time"
method: POST
path: "/api/{org_id}/{stream_name}/profiles/series"
tags: ["Profiles"]
---

# Aggregate profile sample values over time

`POST /api/{org_id}/{stream_name}/profiles/series`

## Request

- Base URL: `https://api.openobserve.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.openobserve.ai/api/{org_id}/{stream_name}/profiles/series`
- Auth: API key in header `Authorization`
- TypeScript: <https://skmtc.dev/openobserve/apis/openobserve-api-http/docs/api/:org_id/:stream_name/profiles/series/post.ts> (a function with typed inputs; its response is checked against the schema)

Returns a time series of sum(value) for the selected profile filters, with `rate` (value per second of profiled time) when the stream records profile duration. In-use (`inuse_*`) types average each instance's snapshots per bucket instead of summing them. Set `group_by` to a label column to also get the top `group_limit` groups. `profile_type` and `profile_unit` are required.

## Path parameters

- `org_id` string, required
- `stream_name` string, required

## Request body

- ProfilesQueryBody
  - `data_source` string, nullable
  - `end_time` integer
  - `filters` ProfileFilter[]
    - `key` string, required
    - `op` string
    - `value` string, required
  - `group_by` string, nullable: Label column that splits `series` into `groups` (series endpoint only).
  - `group_limit` integer, nullable: Groups returned before the rest fold into one `others` group: 1..=50, default 10.
  - `max_nodes` integer, nullable
  - `profile_type` string, nullable
  - `profile_unit` string, nullable
  - `service_name` string, nullable
  - `start_time` integer: Missing reads as 0 so `parse_required_time_range` reports it, not the JSON parser.
  - `step` string, nullable
  - `timeout` integer, nullable

## Response `200`

Success

- ProfilesSeriesResponse
  - `groups` ProfilesSeriesGroup[], nullable: Only when `group_by` is set: top `group_limit` values by total, then one `others` group.
    - `others` boolean, required: True for the single group that sums every value past `group_limit`.
    - `series` ProfilesSeriesPoint[], required
      - `rate` number, double, nullable: Value per second of profiled time, summed over instances; CPU ns / 1e9 = cores.
      - `timestamp` integer, required
      - `value` number, double, required
    - `total` number, double, required
    - `value` string, required: Label value; "" when rows lack the label, and for the `others` group.
  - `profile_type` string, required
  - `series` ProfilesSeriesPoint[], required: Sum over all groups per bucket.
    - `rate` number, double, nullable: Value per second of profiled time, summed over instances; CPU ns / 1e9 = cores.
    - `timestamp` integer, required
    - `value` number, double, required
  - `step_secs` integer, required
  - `took` integer, required
  - `unit` string, required

## Other responses

- `400`: Invalid request
- `403`: Forbidden
- `500`: Failure

---

[API](https://skmtc.dev/openobserve/apis/openobserve-api-http.md) - [All operations](https://skmtc.dev/openobserve/apis/openobserve-api-http/llms.txt) - [OpenAPI document](https://skmtc.dev/openobserve/apis/openobserve-api-http/revisions/0529b8a10252?raw)
