# About the GraphQL API

The GitHub GraphQL API offers flexibility and the ability to define precisely the data you want to fetch.

## Overview

Here are some quick links to get you up and running with the GraphQL API:

* [Authentication](/en/enterprise-server@3.22/graphql/guides/forming-calls-with-graphql#authenticating-with-graphql)
* [Root endpoint](/en/enterprise-server@3.22/graphql/guides/forming-calls-with-graphql#the-graphql-endpoint)
* [Schema introspection](/en/enterprise-server@3.22/graphql/guides/introduction-to-graphql#discovering-the-graphql-api)
* [Rate limits](/en/enterprise-server@3.22/graphql/overview/rate-limits-and-query-limits-for-the-graphql-api)
* [Migrating from REST](/en/enterprise-server@3.22/graphql/guides/migrating-from-rest-to-graphql)

For more information about GitHub's APIs, see [Comparing GitHub's REST API and GraphQL API](/en/enterprise-server@3.22/rest/about-the-rest-api/comparing-githubs-rest-api-and-graphql-api).

## About GraphQL

The [GraphQL](https://graphql.org/) data query language is:

* **A [specification](https://spec.graphql.org/June2018/).** The spec determines the validity of the [schema](/en/enterprise-server@3.22/graphql/guides/introduction-to-graphql#schema) on the API server. The schema determines the validity of client calls.

* **[Strongly typed](#about-the-graphql-schema-reference).** The schema defines an API's type system and all object relationships.

* **[Introspective](/en/enterprise-server@3.22/graphql/guides/introduction-to-graphql#discovering-the-graphql-api).** A client can query the schema for details about the schema.

* **[Hierarchical](/en/enterprise-server@3.22/graphql/guides/forming-calls-with-graphql).** The shape of a GraphQL call mirrors the shape of the JSON data it returns. [Nested fields](/en/enterprise-server@3.22/graphql/guides/migrating-from-rest-to-graphql#example-nesting) let you query for and receive only the data you specify in a single round trip.

* **An application layer.** GraphQL is not a storage model or a database query language. The *graph* refers to graph structures defined in the schema, where [nodes](/en/enterprise-server@3.22/graphql/guides/introduction-to-graphql#node) define objects and [edges](/en/enterprise-server@3.22/graphql/guides/introduction-to-graphql#edge) define relationships between objects. The API traverses and returns application data based on the schema definitions, independent of how the data is stored.

## Why GitHub is using GraphQL

GitHub chose GraphQL because it offers significantly more flexibility for our integrators. The ability to define precisely the data you want—and *only* the data you want—is a powerful advantage over traditional REST API endpoints. GraphQL lets you replace multiple REST requests with *a single call* to fetch the data you specify.

For more details about why GitHub invested in GraphQL, see the original [announcement blog post](https://github.blog/2016-09-14-the-github-graphql-api/).

## About the GraphQL schema reference

The docs in the sidebar are generated from the GitHub GraphQL [schema](/en/enterprise-server@3.22/graphql/guides/introduction-to-graphql#discovering-the-graphql-api). All calls are validated and executed against the schema. Use these docs to find out what data you can call:

* Allowed operations: queries and mutations.

* Schema-defined types: scalars, objects, enums, interfaces, unions, and input objects.

For other information, such as authentication and rate limit details, check out the [guides](/en/enterprise-server@3.22/graphql/guides).

## Requesting support

For questions, bug reports, and discussions about GitHub Apps, OAuth apps, and API development, explore the [API and Webhooks category in GitHub's Community Discussions](https://github.com/orgs/community/discussions/categories/api-and-webhooks). The discussions are moderated and maintained by GitHub staff, and answered by the GitHub community.

Consider reaching out to [GitHub Support](https://support.github.com/) directly using the contact form for:

* Guaranteed response from GitHub staff
* Support requests involving sensitive data or private concerns
* Feature requests
* Feedback about GitHub products

If you observe unexpected failures, you can use [githubstatus.com](https://www.githubstatus.com/) or the [GitHub status API](https://www.githubstatus.com/api) to check for incidents affecting the API.