GraphQL Errors
Validation, depth limits, N+1 queries and fragment problems.
Understanding GraphQL errors
GraphQL returns HTTP 200 with an errors array far more often than it returns a non-2xx status, so clients that only check the status code silently ignore failures. Errors split into validation (the query does not match the schema, always fixable from the schema), authorisation (per-field resolvers rejecting), and performance guards (depth and complexity limits) which exist to protect the server from expensive queries.
How to debug GraphQL errors
- Always inspect the
errorsarray, not just the HTTP status. Each entry carries apaththat points at the exact field that failed. - Validate the query against the schema locally before sending it. GraphQL IDEs and
graphql-codegencatch every validation error at build time. - For N+1 problems, enable resolver tracing or SQL logging and count queries per request. A DataLoader that batches by key is the standard fix.
- When you hit a depth or complexity limit, restructure the query rather than raising the limit. The limit is usually protecting the database from an unbounded traversal.
- Check whether the error is from the gateway or the subgraph in a federated setup; the two have separate schemas and separate authorisation.
Tools worth reaching for
GraphiQL / Apollo Sandboxgraphql-codegenApollo tracingDataLoader
All 19 GraphQL errors
- Apollo Client: Could not find "client" in the context or passed in as an option NewA useQuery or useMutation hook ran outside an ApolloProvider. When the provider clearly wraps the app, there are two…
- Apollo Client: Missing field 'x' while writing result to the cache NewThe normalised cache stores objects by id and typename, and the response left out a field the cache needed, usually…
- Apollo Server: POST body missing, invalid Content-Type NewApollo Server 4 does not parse request bodies itself, so the Express integration needs express.json() mounted before…
- GraphQL: Abstract type "SearchResult" must resolve to an Object type at runtime NewA field returns a union or interface, and the server could not work out which concrete type a returned object is…
- GraphQL: Cannot query field "email" on type "User" NewThe server's schema has no field by that name on that type, so the query fails validation before any resolver runs…
- GraphQL: Cannot return null for non-nullable field NewA resolver returned null where the schema promised a value. GraphQL then propagates the failure upward until it…
- GraphQL: Cannot spread fragment within itselfA fragment references itself directly or indirectly, creating a circular reference. GraphQL does not allow recursive…
- GraphQL: Cannot use GraphQLSchema from another module or realm NewTwo copies of the graphql package are installed, so the schema was built with one and validated by the other…
- GraphQL: Expected type X, found YA variable or argument type does not match the schema definition. For example, passing a String where an Int is…
- GraphQL: Field "user" of type "User" must have a selection of subfields NewThe field returns an object type, and GraphQL never returns a whole object implicitly: you have to name the scalar…
- GraphQL: Max query depth exceededThe query exceeds the server's maximum allowed nesting depth. This is a security measure to prevent deeply nested…
- GraphQL: N+1 query problemEach item in a list triggers a separate database query for related data, causing performance degradation. Resolvers…
- GraphQL: Not authenticatedThe resolver requires authentication but no valid token or session was provided in the request context.
- GraphQL: PersistedQueryNotFound NewWith automatic persisted queries the client first sends only a hash. If the server has not seen that query before (a…
- GraphQL: Syntax ErrorMalformed GraphQL query syntax. Missing braces, invalid characters, or bad formatting.
- GraphQL: Unknown argument "first" on field "Query.users" NewValidation rejected the query before any resolver ran because the schema has no argument with that name on that field…
- GraphQL: Validation errorQuery failed validation against the schema. Field undefined or argument mismatch.
- GraphQL: Variable "$id" of required type "ID!" was not provided NewValidation rejected the request before any resolver ran, because a non null variable was declared in the document but…
- This operation has been blocked as a potential Cross-Site Request Forgery (CSRF) NewApollo Server 4 turns on CSRF prevention by default. It refuses GET requests and "simple" POSTs (form-encoded…
Other categories
- AI 35Rate limits, context windows, GPU memory and model-serving failures.
- Ansible 18Unreachable hosts, become passwords, undefined variables and Jinja2 failures.
- API 20Auth headers, payload limits, versioning, idempotency and webhook signatures.
- Apple 20Command line tools, dyld, Homebrew permissions, notarisation and Keychain.
- Auth 20OIDC, SAML, Auth0, Okta, Keycloak, passkeys and MFA failures.
- BigData 17Spark, Kafka, Airflow, Snowflake, Flink and Databricks failures.
- C# 18NuGet restore, null references, EF Core migrations, async deadlocks and Blazor…
- C++ 20Segfaults, linker errors, memory corruption and template deduction failures.
- Caching 20Cache stampedes, stale content, Varnish and CloudFront failures.
- CI/CD 18GitHub Actions, GitLab CI, Jenkins, CircleCI: permissions, runners and…
- Client 21CORS, mixed content, module resolution, memory limits and framework runtime…
- Cloud 25IAM permissions, quotas, service limits and credential failures.
- Dart 20Null safety, pub version solving and build toolchain problems.
- Database 41Connections, deadlocks, constraints, replication and memory limits.
- DNS 20NXDOMAIN, SERVFAIL, timeouts, propagation and delegation problems.
- Docker 27Daemon connectivity, disk space, image pulls, ports and architecture mismatches.
- Elixir 18GenServer timeouts, supervision failures and Mix compilation problems.
- Email 20Delivery failures, relay denial, authentication, SPF, DKIM and DMARC.
- Frontend 23Hydration mismatches, bundler resolution, layout shift and font loading.
- Git 20Merge conflicts, rejected pushes, detached HEAD, LFS and repository corruption.
- Go 19Nil map assignment, concurrent map access, context cancellation and deadlocks.
- gRPC 17Status codes, deadlines, message limits, TLS and HTTP/2 transport failures.
- HTTP 494xx client errors, 5xx server errors, redirects, headers and protocol problems.
- ICMP 23Destination unreachable, time exceeded, fragmentation needed and redirects.
- Ingress 20404 default backend, missing TLS secrets, IngressClass and path matching.
- Java 19Class loading, dependency resolution, connection pools and JVM version…
- JavaScript 42npm resolution, async pitfalls, hydration, memory limits and runtime type…
- Kubernetes 34CrashLoopBackOff, ImagePullBackOff, OOMKilled, RBAC, scheduling and storage.
- Logging 18Log4j, Logback, Fluentd, Logstash and CloudWatch ingestion problems.
- MessageQueue 20Kafka, RabbitMQ, SQS, NATS and Celery: lag, rebalancing and poison messages.
- Mobile 20Gradle, CocoaPods, Xcode signing, Metro bundler and toolchain mismatches.
- Monitoring 18Prometheus scrapes, Grafana data sources, OpenTelemetry exporters and agent…
- Network 35Refused connections, timeouts, resets, MTU problems and port exhaustion.
- Performance 19GC pauses, thread pool starvation and event loop blocking.
- PHP 20Memory limits, execution timeouts, autoloading, Composer and PDO connections.
- Proxy 20nginx, Envoy, HAProxy, Traefik, Caddy and Cloudflare upstream failures.
- Python 35Imports, virtual environments, encoding, concurrency and dependency conflicts.
- Regex 17Catastrophic backtracking, back references, escaping and engine differences.
- Ruby 20Bundler, migrations, native extensions, encoding and asset compilation.
- Rust 19Borrow checker, ownership moves, trait bounds and lifetime mismatches.
- Scala 17Dependency resolution, binary compatibility and type inference failures.
- Security 25JWT validation, CSRF, OAuth grants, SELinux, SSH host keys and CSP.
- Serverless 20Lambda timeouts, package size limits, VPC networking and cold starts.
- Shell 19Command not found, permissions, quoting, expansion and Makefile syntax.
- Storage 19S3 permissions, NFS mounts, quotas, signed URLs and volume attachment.
- Svelte 20Store subscriptions, load functions and server/client boundaries.
- System 26Disk space, systemd units, file descriptors, OOM killer and scheduled jobs.
- Terraform 18State locks, provider auth, drift, dependency cycles and plan-time unknowns.
- Testing 18Jest, pytest, JUnit, Cypress and Playwright: fixtures, snapshots and timeouts.
- TLS 24Untrusted authorities, expiry, hostname mismatch, chains and cipher negotiation.
- TypeScript 19Assignability, missing declarations, strict null checks and generic constraints.
- Virtualization 20VirtualBox, VMware, Hyper-V, WSL, KVM and hypervisor conflicts.
- Web3 17Gas estimation, nonce management and reverted transactions.
- WebAssembly 17Compile errors, memory bounds and host binding mismatches.
- WebServer 20nginx, Apache, IIS and Caddy: binding, permissions, rewrites and TLS.
- Windows 20Installer failures, missing runtimes, update errors and permission problems.