---
title: "Execute point-in-time engineering metrics queries"
method: POST
path: "/api/v1/eng-intel/metrics/point-in-time"
tags: ["Eng Intel: 2-Metrics"]
---

# Execute point-in-time engineering metrics queries

`POST /api/v1/eng-intel/metrics/point-in-time`

## Request

- Base URL: `https://api.getcortexapp.com`
- URL: `https://api.getcortexapp.com/api/v1/eng-intel/metrics/point-in-time`
- Auth: HTTP bearer

Query current metric values with optional period comparisons and flexible grouping. Supports batch queries for multiple metrics efficiently.

## Request body

- BatchPointInTimeRequest: Point-in-time metrics query request for batch processing
  - `comparison` union
    - FilterDefinedPeerComparison: Optional comparison to previous time period
      - `type` string, required
      - `peerFilters` AttributeFilterObject[], required
        - `attribute` string, required
        - `operator` 'ANY' | 'BETWEEN' | 'CONTAINS' | 'EQUAL' | 'GREATER_THAN' | 'GREATER_THAN_OR_EQUAL' | 'IN' | 'IS_NOT_NULL' | 'IS_NULL' | 'LESS_THAN' | 'LESS_THAN_OR_EQUAL' | 'LIKE' | 'NOT_EQUAL' | 'NOT_IN' | 'NOT_LIKE', required
        - `predicate` union, required: The value or values of the attribute to filter by. The specific predicate value should match the type of the attribute column and is either a scalar value or array of values depending on the operator. A single, scalar value for EQUAL, NOT_EQUAL, GREATER_THAN, GREATER_THAN_OR_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL, CONTAINS, LIKE, NOT_LIKE. LIKE and NOT_LIKE perform case insensitive matches on a string and use % wildcards to perform partial matching. An array of values for IN, NOT_IN, ANY, BETWEEN. BETWEEN takes an array of two arguments, the inclusive lower and upper bounds. The predicate is ignored for IS_NULL, IS_NOT_NULL, which accept null or empty object as arguments.
          - string
          - number
          - boolean
          - union[]
            - union
              - …
    - TimeWindow: Optional comparison to previous time period
      - `type` string, required
      - `decimalPlaces` integer, required
      - `endTime` string, date-time, required
      - `startTime` string, date-time, required
  - `daysOfWeek` integer[]: Optional day-of-week restriction (ISO: Monday=1..Sunday=7). When set, the query filters out rows whose time-attribute does not fall on one of these weekdays. Use {1,2,3,4,5} to exclude weekends. Empty set matches nothing.
  - `endTime` string, date-time, required: End time for the query period
  - `filters` AttributeFilterObject[], required: Filters to apply to the data
    - `attribute` string, required
    - `operator` 'ANY' | 'BETWEEN' | 'CONTAINS' | 'EQUAL' | 'GREATER_THAN' | 'GREATER_THAN_OR_EQUAL' | 'IN' | 'IS_NOT_NULL' | 'IS_NULL' | 'LESS_THAN' | 'LESS_THAN_OR_EQUAL' | 'LIKE' | 'NOT_EQUAL' | 'NOT_IN' | 'NOT_LIKE', required
    - `predicate` union, required: The value or values of the attribute to filter by. The specific predicate value should match the type of the attribute column and is either a scalar value or array of values depending on the operator. A single, scalar value for EQUAL, NOT_EQUAL, GREATER_THAN, GREATER_THAN_OR_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL, CONTAINS, LIKE, NOT_LIKE. LIKE and NOT_LIKE perform case insensitive matches on a string and use % wildcards to perform partial matching. An array of values for IN, NOT_IN, ANY, BETWEEN. BETWEEN takes an array of two arguments, the inclusive lower and upper bounds. The predicate is ignored for IS_NULL, IS_NOT_NULL, which accept null or empty object as arguments.
      - string
      - number
      - boolean
      - union[]
        - union
          - string
          - number
          - boolean
  - `groupBy` string[], required: Fields to group results by
  - `limit` integer, required: Maximum number of results to return
  - `metrics` MetricAggregation[], required: List of metrics to query with their aggregation functions
    - `aggregation` 'SUM' | 'AVG' | 'COUNT' | 'RATIO' | 'MIN' | 'MAX' | 'P50' | 'P95' | 'RANKING' | 'COLLECT' | 'COLLECT_UNIQUE' | 'COUNT_UNIQUE' | 'LATEST', required
    - `density` 'REQUIRED' | 'OPTIONAL'
    - `endTime` string, date-time
    - `filters` AttributeFilterObject[]
      - `attribute` string, required
      - `operator` 'ANY' | 'BETWEEN' | 'CONTAINS' | 'EQUAL' | 'GREATER_THAN' | 'GREATER_THAN_OR_EQUAL' | 'IN' | 'IS_NOT_NULL' | 'IS_NULL' | 'LESS_THAN' | 'LESS_THAN_OR_EQUAL' | 'LIKE' | 'NOT_EQUAL' | 'NOT_IN' | 'NOT_LIKE', required
      - `predicate` union, required: The value or values of the attribute to filter by. The specific predicate value should match the type of the attribute column and is either a scalar value or array of values depending on the operator. A single, scalar value for EQUAL, NOT_EQUAL, GREATER_THAN, GREATER_THAN_OR_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL, CONTAINS, LIKE, NOT_LIKE. LIKE and NOT_LIKE perform case insensitive matches on a string and use % wildcards to perform partial matching. An array of values for IN, NOT_IN, ANY, BETWEEN. BETWEEN takes an array of two arguments, the inclusive lower and upper bounds. The predicate is ignored for IS_NULL, IS_NOT_NULL, which accept null or empty object as arguments.
        - string
        - number
        - boolean
        - union[]
          - union
            - string
            - number
            - boolean
    - `metric` string, required
    - `startTime` string, date-time
  - `nestedAggregations` NestedAggregation[]: Nested aggregations for advanced sub-queries
    - `aggregations` MetricAggregation[], required
      - `aggregation` 'SUM' | 'AVG' | 'COUNT' | 'RATIO' | 'MIN' | 'MAX' | 'P50' | 'P95' | 'RANKING' | 'COLLECT' | 'COLLECT_UNIQUE' | 'COUNT_UNIQUE' | 'LATEST', required
      - `density` 'REQUIRED' | 'OPTIONAL'
      - `endTime` string, date-time
      - `filters` AttributeFilterObject[]
        - `attribute` string, required
        - `operator` 'ANY' | 'BETWEEN' | 'CONTAINS' | 'EQUAL' | 'GREATER_THAN' | 'GREATER_THAN_OR_EQUAL' | 'IN' | 'IS_NOT_NULL' | 'IS_NULL' | 'LESS_THAN' | 'LESS_THAN_OR_EQUAL' | 'LIKE' | 'NOT_EQUAL' | 'NOT_IN' | 'NOT_LIKE', required
        - `predicate` union, required: The value or values of the attribute to filter by. The specific predicate value should match the type of the attribute column and is either a scalar value or array of values depending on the operator. A single, scalar value for EQUAL, NOT_EQUAL, GREATER_THAN, GREATER_THAN_OR_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL, CONTAINS, LIKE, NOT_LIKE. LIKE and NOT_LIKE perform case insensitive matches on a string and use % wildcards to perform partial matching. An array of values for IN, NOT_IN, ANY, BETWEEN. BETWEEN takes an array of two arguments, the inclusive lower and upper bounds. The predicate is ignored for IS_NULL, IS_NOT_NULL, which accept null or empty object as arguments.
          - string
          - number
          - boolean
          - union[]
            - union
              - …
      - `metric` string, required
      - `startTime` string, date-time
    - `filters` AttributeFilterObject[]
      - `attribute` string, required
      - `operator` 'ANY' | 'BETWEEN' | 'CONTAINS' | 'EQUAL' | 'GREATER_THAN' | 'GREATER_THAN_OR_EQUAL' | 'IN' | 'IS_NOT_NULL' | 'IS_NULL' | 'LESS_THAN' | 'LESS_THAN_OR_EQUAL' | 'LIKE' | 'NOT_EQUAL' | 'NOT_IN' | 'NOT_LIKE', required
      - `predicate` union, required: The value or values of the attribute to filter by. The specific predicate value should match the type of the attribute column and is either a scalar value or array of values depending on the operator. A single, scalar value for EQUAL, NOT_EQUAL, GREATER_THAN, GREATER_THAN_OR_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL, CONTAINS, LIKE, NOT_LIKE. LIKE and NOT_LIKE perform case insensitive matches on a string and use % wildcards to perform partial matching. An array of values for IN, NOT_IN, ANY, BETWEEN. BETWEEN takes an array of two arguments, the inclusive lower and upper bounds. The predicate is ignored for IS_NULL, IS_NOT_NULL, which accept null or empty object as arguments.
        - string
        - number
        - boolean
        - union[]
          - union
            - string
            - number
            - boolean
    - `groupBy` string[], required
    - `timeAttribute` string
  - `nextPage` string: Pagination token for next page of results
  - `orderBy` OrderBy[], required: Sort order for results
    - `attribute` string, required
    - `direction` 'ASC' | 'DESC', required
  - `startTime` string, date-time, required: Start time for the query period
  - `timeAttribute` string: Deprecated: use timeAttributes instead. Single time attribute override as a fully-qualified path (e.g. 'pull_requests.date_closed').
  - `timeAttributes` string[]: Time attributes to use for queries. Each entry is a fully-qualified attribute path (e.g. 'pull_requests.date_closed'). The source is inferred from the prefix. For single-source queries, provide one entry. For multi-source, provide one per source to override.

## Response `200`

Successfully executed metrics query

- PointInTimeResponse
  - `metadata` QueryMetadata, required: Query metadata describing the structure of returned columns
    - `columns` union[], required: List of column definitions describing each field in the result rows
      - union
        - AggregatedAttributeColumn: List of column definitions describing each field in the result rows
          - `alias` string, required
          - `category` string
          - `description` string
          - `name` string, required
          - `ordinal` integer, required: Zero-based column position in the result data rows - use this to map column metadata to actual row data values
          - `type` string, required
          - `aggregationFunction` 'SUM' | 'AVG' | 'COUNT' | 'RATIO' | 'MIN' | 'MAX' | 'P50' | 'P95' | 'RANKING' | 'COLLECT' | 'COLLECT_UNIQUE' | 'COUNT_UNIQUE' | 'LATEST', required: Type of aggregation function applied to the attribute
          - `attributeName` string, required: Name of the attribute field this column aggregates
          - `resultType` 'STRING' | 'BOOLEAN' | 'INTEGER' | 'DECIMAL' | 'DOUBLE' | 'DATE' | 'TREE' | 'DATETIME' | 'JSON' | 'ARRAY' | 'ENUM' | 'UNSUPPORTED', required: Type of the produced cell rather than of the underlying attribute
        - AttributeColumn: List of column definitions describing each field in the result rows
          - `alias` string, required
          - `category` string
          - `description` string
          - `name` string, required
          - `ordinal` integer, required: Zero-based column position in the result data rows - use this to map column metadata to actual row data values
          - `type` string, required
          - `attributeName` string, required: Name of the attribute field this column represents
        - EntityReferenceColumn: List of column definitions describing each field in the result rows
          - `alias` string, required
          - `category` string
          - `description` string
          - `name` string, required
          - `ordinal` integer, required: Zero-based column position in the result data rows - use this to map column metadata to actual row data values
          - `type` string, required
          - `attributeName` string, required: Name of the attribute that references the entity
          - `entityType` string, required: Type of entity being referenced (e.g., 'user', 'team', 'service')
          - `factScope` 'UNIQUE_PER_ROW' | 'SHARED_ACROSS_ROWS', required: Whether sibling rows under this grouping hold disjoint or overlapping facts. SHARED_ACROSS_ROWS means the grouping fans out (e.g. a repo maps to many entities), so the grouped values share underlying records and do not sum to the total; UNIQUE_PER_ROW means each row's values are its own and are additive.
        - MetricAggregateColumn: List of column definitions describing each field in the result rows
          - `alias` string, required
          - `category` string
          - `description` string
          - `name` string, required
          - `ordinal` integer, required: Zero-based column position in the result data rows - use this to map column metadata to actual row data values
          - `type` string, required
          - `aggregationFunction` 'SUM' | 'AVG' | 'COUNT' | 'RATIO' | 'MIN' | 'MAX' | 'P50' | 'P95' | 'RANKING' | 'COLLECT' | 'COLLECT_UNIQUE' | 'COUNT_UNIQUE' | 'LATEST', required: Type of aggregation function applied to the metric
          - `metricKey` string, required: Unique identifier of the metric being aggregated
        - MetricValueColumn: List of column definitions describing each field in the result rows
          - `alias` string, required
          - `category` string
          - `description` string
          - `name` string, required
          - `ordinal` integer, required: Zero-based column position in the result data rows - use this to map column metadata to actual row data values
          - `type` string, required
          - `metricKey` string, required: Unique identifier of the metric this column represents
        - TimeWindowColumn: List of column definitions describing each field in the result rows
          - `alias` string, required
          - `category` string
          - `description` string
          - `name` string, required
          - `ordinal` integer, required: Zero-based column position in the result data rows - use this to map column metadata to actual row data values
          - `type` string, required
          - `windowSize` object, required: Duration of the time window represented by this column
            - `nano` integer
            - `negative` boolean
            - `positive` boolean
            - `seconds` integer
            - `units` object[]
              - …
            - `zero` boolean
        - UrlColumn: List of column definitions describing each field in the result rows
          - `alias` string, required
          - `category` string
          - `description` string
          - `name` string, required
          - `ordinal` integer, required: Zero-based column position in the result data rows - use this to map column metadata to actual row data values
          - `type` string, required
          - `attributeName` string, required: Name of the attribute containing the URL
    - `nextPage` string: Cursor for the next page, or null when this is the last page. Pass it back as the request's nextPage.
  - `rows` array[], required: Result rows, one array per grouping. Cells are positional: the value at index i corresponds to `metadata.columns[i]`, and its JSON type follows that column's type (string, number, boolean, or null). Rows are not keyed by column name.
    - object[]: Result rows, one array per grouping. Cells are positional: the value at index i corresponds to `metadata.columns[i]`, and its JSON type follows that column's type (string, number, boolean, or null). Rows are not keyed by column name.

## Other responses

- `400`: Invalid metric names, date range exceeds 6 months, validation errors, or unsupported orderBy attributes
- `403`: Forbidden
- `429`: The client has exceeded the rate limit by performing too many requests in a short period. Retry the request after a delay.

## Changes

- **2026-11-03** `a7b058663c95`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/cortex/apis/cortex-api/changes/api/v1/eng-intel/metrics/point-in-time/post.md)

---

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