April 13, 2026

View Operational Insights Within the GraphOS Platform API

Nick Marsh

Nick Marsh

Over the past few months, we’ve introduced several additions to the GraphOS Platform API that make it easier than ever to analyze your graph’s usage and performance trends. These new Insights APIs allow for detailed metric analysis of operations, fields, and subgraphs.

Let’s take a closer look at what’s new and how you can start using it today.

Top Operation Report

The topOperationsReport field can be used when you’re looking for a point-in-time view of the operations run against your GraphQL server. This API can return operation details like the operation name, ID, and signature as well the total number of times the operation has been executed within the specified time range. The results can also be filtered to only show operations executed by specific client names and versions.

You could use this to generate a weekly report showing the top 10 operations executed by a client so that you can see how the operations and request counts are changing:

1query WeeklyTopOperations {2  graph(id: "your-graph") {3    variant(name: "current") {4      topOperationsReport(5        from: "2025-11-01T00:00:00Z"6        to: "2025-11-07T00:00:00Z"7        filter: { in: { clientName: [some-client"] } }8        limit: 209      ) {10        operationId11        name12        type13        requestCount14      }15    }16  }17}

You could also use this to get a list of all operation signatures that were executed within a day (assuming this is less than the max limit of 10k operations):

1 query AllDailyOperations {2  graph(id: "your-graph") {3    variant(name: "current") {4      topOperationsReport(5        from: "2025-11-01T00:00:00Z"6        to: "2025-11-02T00:00:00Z"7        limit: 100008      ) {9        operationId10        name11        signature12        requestCount13      }14    }15  }16}

Insights Timeseries APIs

When you need to track how your graph’s performance and usage evolve over time, you can use the timeseries operations to provide structured, time-bucketed insights. These insights are available for operations (operationInsightsTimeseriesReport), subgraphs (subgraphInsightsTimeseriesReport), and fields/enums (schemaCoordinateInsightsTimeseriesReport). These APIs allowing you to monitor changes in key metrics, automate data analysis workflows, or build dashboards.

They provide results in the form of a set of metrics, grouped by a set of dimensions, split into time chunks of a particular resolution across a specified time range, and include the option to filter in or out operations or fields that have specific dimensions.

Operation Insights Timeseries API

The operationInsightsTimeseriesReport field provides metrics such as request counts, latency percentiles, and error rates, grouped by time and dimensions like graph variant, operation name and ID, or client name and version. The results can be returned in a CSV or GraphQL format depending on your needs.

This is ideal for investigating usage spikes, comparing latency between operations, or monitoring error rates after a deployment.

For example, if you notice that a particular operation named GetUserProfile is slow, you could query for the p95 latency for each hour across the last week:

1query OperationLatencyTrend {2  graph(id: "your-graph") {3    operationInsightsTimeseriesReport(4      resolution: HOUR5      from: "2025-11-01T00:00:00Z"6      to: "2025-11-07T00:00:00Z"7      dimensions: [OPERATION_ID]8      metrics: [REQUEST_COUNT, REQUEST_LATENCY_P99_MS]9      filters: { 10        include: { 11          variantName: "current"12          operationName: ["GetUserProfile"]13        } 14      }15    ) {16      csv17      records {18        startTimestamp19        endExclusiveTimestamp20        dimensions { type value }21        metrics { type value }22      }23    }24  }25}

You could also query for the request count and error count per minute across an hour for each client and version except for an internal test client, so that you can see which clients contributed to a particularly heavy request period:

1query ClientRequestTrend {2  graph(id: "your-graph") {3    operationInsightsTimeseriesReport(4      resolution: MINUTE5      from: "2025-10-01T00:00:00Z"6      to: "2025-10-01T01:00:00Z"7      dimensions: [GRAPH_VARIANT, CLIENT_NAME, CLIENT_VERSION]8      metrics: [REQUEST_WITH_ERROR_COUNT, REQUEST_COUNT]9      filters: {10        exclude: { clients: [{ clientName: "internal-test-client" }] }11      }12    ) {13      csv14      records {15        startTimestamp16        endExclusiveTimestamp17        dimensions { type value }18        metrics { type value }19      }20    }21  }22}

Subgraph Insights Timeseries API

The subgraphInsightsTimeseriesReport field provides subgraph request count and latency percentiles grouped by time and dimensions like graph variant, fetch service name (the name of the subgraph or connector), client, or operation. Like all the timeseries reports, the results can be returned in a CSV or GraphQL format depending on your needs.

For example, to see a daily trend of fetches and fetches with errors to all your subgraphs and connectors across all variants of a graph, you could use the following query:

1query SubgraphInsights {2  graph(id: "your-graph") {3    subgraphInsightsTimeseriesReport(4      resolution: DAY, 5      from: "2025-10-01T00:00:00Z"6      to: "2025-11-01T00:00:00Z"7      dimensions: [GRAPH_VARIANT, FETCH_SERVICE_NAME], 8      metrics: [FETCH_COUNT, FETCH_WITH_ERRORS_COUNT], 9    ) {10      records {11        startTimestamp12        dimensions {13          type14          value15        }16        metrics {17          type18          value19        }20      }21    }22  }23}

Schema Coordinate Insights Timeseries API

The schemaCoordinateInsightsTimeseriesReport field focuses on schema coordinate metrics, helping you understand how specific object fields, input object fields, or enums are being used. Again, the results can be returned in a CSV or GraphQL format depending on your needs.

Use this to track adoption of new fields or monitor error rates tied to specific parts of your graph.

For example, to check the adoption and for any errors on a new User.email object field across all variants, you could use:

1query FieldUsageTrend {2  graph(id: "your-graph") {3    schemaCoordinateInsightsTimeseriesReport(4      resolution: HOUR5      from: "2025-11-01T00:00:00Z"6      to: "2025-11-02T00:00:00Z"7      dimensions: [VARIANT_NAME]8      metrics: [REQUEST_COUNT, ERROR_COUNT]9      filters: {10        include: { 11          coordinates: [{ 12            kind: OBJECT_FIELD, 13            namedType: "User", 14            namedAttribute: "email" 15          }] 16        }17      }18    ) {19      csv20      records {21        startTimestamp22        endExclusiveTimestamp23        dimensions { type value }24        metrics { type value }25      }26    }27  }28}

To see a monthly overview of the usage of the UserRole enum values or to check for any unused roles, you could use:

1query EnumUsageOverview {2  graph(id: "your-graph") {3    schemaCoordinateInsightsTimeseriesReport(4      resolution: MONTH5      from: "2025-01-01T00:00:00Z"6      to: "2025-11-01T00:00:00Z"7      dimensions: [NAMED_TYPE, NAMED_ATTRIBUTE]8      metrics: [REQUEST_COUNT]9      filters: {10        include: {11          coordinates: [{ kind: ENUM_VALUE, namedType: "UserRole" }]12        }13      }14    ) {15      csv16      records {17        startTimestamp18        endExclusiveTimestamp19        dimensions { type value }20        metrics { type value }21      }22    }23  }24}

Wrapping Up

For more information, check the Platform API schema and sample operations for querying insights. We hope you try out these new features soon, and if you have any feedback, we’d love to hear it in our Apollo Community discussion thread.

Written by

Nick Marsh

Nick Marsh

Read more by Nick Marsh