# Can anyone list your GraphQL schema?

By Mark Kashef, founder of Lockpick. Published 2026-10-08, updated 2026-10-08.

This Deep scan check sends one introspection request with no credentials and notes when a GraphQL endpoint lists its operations to anyone.

This check sends one introspection request with no credentials and notes when your GraphQL endpoint lists its operations to anyone. The list maps your API, and it does not prove any operation is open.

## What does this check look at?

It looks at whether a GraphQL endpoint lists its operations to a request with no credentials. OWASP recommends disabling introspection queries in any production or publicly accessible environments. Only operation names and counts are kept, and no mutation is ever sent.

Only a Deep scan runs it, after you prove you own the site.

## What does a result mean?

| What the report shows | What it means | What to do |
| --- | --- | --- |
| Info finding | The schema was listed to an anonymous request. | Turn introspection off in production, or require sign-in for it. |

A listed schema does not show that any operation is unprotected. A clean result means nothing was found in what the scan read. It does not prove the problem is absent from parts the scan never sees.

## How serious is a finding?

This is information only. It claims no weakness, so it carries no verdict, and you decide whether anything should change. Confidence starts high, because a response from your site shows the thing itself. The report lists what to fix by how directly someone could use it, not by the severity label.

## Which standards does it relate to?

No OWASP, CWE or ASVS reference fits this check closely enough to state, so the report and this page leave it unmapped.

## Fix it with your AI

Most GraphQL servers have one option for this. Keep it on in development.

:::fix-prompt any
My production GraphQL endpoint answers introspection queries from anyone. Turn introspection off in production for my GraphQL server (for example introspection: process.env.NODE_ENV !== 'production'), and turn off GraphiQL or other playgrounds there too. Then check every query and mutation enforces authentication and authorization in its resolver, since hiding the schema does not protect them.
:::

## How to check

Say Atlas, our example app at `atlas.example`, runs a GraphQL server with default settings. A Deep scan lists its operation names, keeps only names and counts, and notes it as information.

Deep scans come with the Deep plan, and [pricing](/pricing) shows what it includes. [Pulse or Deep](/docs/get-started/pulse-or-deep) explains what each scan reads, and the [full list of checks](/checks) shows the rest.

## Questions people ask

### If I turn introspection off, is my GraphQL API safe?

No. Attackers can guess operation names or find them in your site code. Every resolver still needs its own permission checks.

### Why is this information only?

A listed schema helps an attacker plan, but it shows no operation is unprotected, so it carries no weakness on its own.

## Sources

- [GraphQL Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/GraphQL_Cheat_Sheet.html), OWASP Cheat Sheet Series, read on 2026-10-07
- [How we rate findings](https://www.lockpick.app/docs/security/how-we-rate-findings), Lockpick docs, read on 2026-10-07
