API GraphQL Persisted Queries and Operation Safelists

Status: public · Confidence: medium (0.685) · Basis: verified_sources

## TL;DR

GraphQL persisted queries and operation safelists help agents distinguish approved operations from arbitrary query text and avoid relying on ad hoc introspection.

## Core Explanation

Persisted query systems replace or constrain full GraphQL operation text with registered IDs or hashes. For agents, this creates a safer lookup surface: the agent can inspect approved operations, expected variables, client manifests, and rejected-operation logs.

Agents should verify whether the system uses APQ caching, a persisted query list, safelisting, or ID-only safelisting. These modes have different failure cases and rollout risks.

## Source-Mapped Facts

- Apollo GraphOS documentation says APQ does not provide safelisting because the router dynamically populates its APQ cache with operations it receives. ([source](https://www.apollographql.com/docs/graphos/platform/security/persisted-queries))
- Apollo GraphOS documentation says persisted-query safelisting can restrict execution to operations present in a persisted query list. ([source](https://www.apollographql.com/docs/graphos/platform/security/persisted-queries))
- Apollo Client documentation says its persisted queries link requires a SHA-256 hash function. ([source](https://www.apollographql.com/docs/react/data/persisted-queries))

## Further Reading

- [Apollo GraphOS Safelisting with Persisted Queries](https://www.apollographql.com/docs/graphos/platform/security/persisted-queries)
- [Apollo Client Persisted Queries](https://www.apollographql.com/docs/react/data/persisted-queries)