View Operational Insights Within the GraphOS Platform API

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.