Check GraphQL APIs for Public Schema Introspection

Enter a page that references the application API. Scan.now discovers same-origin GraphQL endpoints and checks whether an unauthenticated schema introspection query returns __schema.

Enter the exact public page to inspect. No form is submitted and no data is modified.

A registered account is required to run this test. Finding status, evidence, affected locations and remediation are Premium-only. How active scanning works · Acceptable use

What public GraphQL introspection reveals

GraphQL introspection returns the schema: object types, fields, arguments and relationships available through an endpoint. It is central to developer tooling and is often intentionally enabled, but it also gives an unauthenticated observer a precise map of operations worth testing.

Scan.now discovers same-origin GraphQL endpoint references on the entered page and sends a small schema query asking only for the query type. A finding is recorded only when the response contains a __schema object. No application resolver or business mutation is called.

Endpoint discovery and schema evidence

The check is deliberately bounded to the signals below.

Coverage areaWhat the scanner examines
Page-discovered endpointsGraphQL routes referenced in links and bounded same-origin JavaScript are candidates; arbitrary hosts are not guessed.
Minimal schema queryThe probe asks for schema metadata rather than customer objects, records or mutations.
Anonymous exposureThe result describes what the unauthenticated scanner received. Authenticated schema policy may differ.

Public schemas and unavailable introspection

A scan result is evidence with a boundary, not a guarantee about every route.

Introspection returned

Decide whether anonymous schema discovery is intended. Then review field-level authorisation, query limits and sensitive descriptions independently.

No schema returned

The discovered endpoint rejected, disabled or did not support this query. That does not test ordinary GraphQL operations or prevent guessing field names.

No endpoint discovered

The entered page did not expose a recognisable GraphQL URL. Paste a page that loads the client or use configuration and network logs to locate it.

Control schema access and query behaviour

Use the recommendations below to address confirmed findings and strengthen the surrounding control.

  1. Make an explicit environment decision

    Keep introspection where consumers need it; otherwise restrict production schema access by authentication, role or network.

  2. Authorise every resolver

    Schema secrecy is not access control. Enforce object and field permissions for every request and every nested relationship.

  3. Limit query cost

    Apply depth, complexity, alias and pagination bounds plus per-user rate limits before execution.

  4. Protect sensitive descriptions

    Remove internal notes, implementation details and example secrets from schema descriptions and defaults.

  5. Consider persisted operations

    For tightly controlled first-party clients, allow-listed operation hashes reduce arbitrary query surface while preserving an internal schema workflow.

How it works

  1. Enter the client page

    Use a page whose JavaScript references the same-origin GraphQL service.

  2. We locate likely endpoints

    Page and bounded same-origin script references are inspected without calling business operations.

  3. A minimal schema query is sent

    Only a returned __schema object confirms anonymous introspection in the report.

What this tool checks

1 checks across 1 areas. Each links to its reference page with the test, the risk and the fix.

Full reference

Exposed files and information disclosure

1 check

The ones that most often decide the grade:

Guides for this tool

Background reading written to go with these results.

Frequently asked questions

Is GraphQL introspection always unsafe in production?

No. Public developer APIs often need it. The decision should be intentional and separate from the resolver-level authorisation that protects actual data.

Does disabling introspection secure the API?

No. Attackers can infer fields from errors, clients and documentation. Authentication, object and field authorisation, query limits and monitoring remain essential.

Does this scan read GraphQL data?

No. The query asks for schema metadata and does not invoke a customer-data field or mutation.

Why might the scanner miss my endpoint?

It discovers endpoints referenced by the entered page and sampled same-origin scripts. Dynamically constructed, alternate-host or authenticated-only endpoints may not appear.