# GraphQL

The **GraphQL** tab breaks traffic down by GraphQL operation: the queries,
mutations, and subscriptions clients send through routes you've marked as
GraphQL endpoints. Use it to find your most-used operations, separate validation
and resolver errors, and see how much of each operation's latency falls in your
upstream resolvers. It's visible when the project proxies a GraphQL API.

## When to use this

- Find the highest-volume operations and the ones clients call most.
- Separate resolver, validation, and auth errors when a GraphQL endpoint
  misbehaves.
- Compare total round-trip latency against resolver-only time to see whether the
  gateway or the upstream owns a slowdown.

## Summary KPIs

| Name              | What it measures                                                                              |
| ----------------- | --------------------------------------------------------------------------------------------- |
| **Operations**    | Total GraphQL operations in the window.                                                       |
| **Success Rate**  | Share of operations that completed without error. Secondary: ok / err split.                  |
| **p95 Latency**   | Total P95 across operations. Secondary: resolver P95.                                         |
| **Error Classes** | Total errored operations. Secondary: resolver / validation / auth split (`res · val · auth`). |

See [Metrics glossary](../reference/metrics-glossary.md) for error-class and
resolver-latency definitions.

## Charts

**GraphQL Operations Over Time.** Operation volume per interval. Populates once
a client sends a query, mutation, or subscription.

**Operation Types.** A donut splitting operations across **query**,
**mutation**, and **subscription**.

**Latency — Total vs Resolver.** Total P95 and resolver P95 over time, with P50
total, P95 total, P99 total, and P95 resolver summary cards. _What to look for:_
a total P95 well above the resolver P95 means the operation spends its time
outside your resolvers — in parsing, validation, or gateway policies — rather
than in the upstream.

## Operations table

| Column               | Notes                                          |
| -------------------- | ---------------------------------------------- |
| Operation            | The GraphQL operation name.                    |
| Type                 | query, mutation, or subscription.              |
| Operations           | Count with an inline volume bar.               |
| Errors               | Errored-operation count.                       |
| Error Rate           | Errors ÷ operations.                           |
| Complexity (avg/max) | Average and maximum computed query complexity. |
| p95                  | P95 latency for the operation.                 |

The table is searchable and sortable on any column (default: operations
descending).

## Filters

The filter bar applies. See [Shared controls](../shared-controls.md#filters).

## Troubleshooting

**The GraphQL tab is empty.** No GraphQL operations arrived in the selected
window. Operations appear once a client sends a query, mutation, or subscription
through a route you've marked as a GraphQL endpoint. See
[GraphQL on Zuplo](../../articles/graphql.mdx) for how to mark a route.

**The tab isn't visible.** Visibility requires at least one route you've marked
as a GraphQL endpoint. See [GraphQL on Zuplo](../../articles/graphql.mdx).

**Total latency is high but resolver latency is low.** The operation spends its
time outside your resolvers. Check the gateway policies on the GraphQL route —
parsing, validation, complexity analysis, or auth — rather than the upstream.
