Launch GraphOS Studio

Operation request format

How to send requests to the Apollo Router over HTTP

By default, almost every GraphQL IDE and client library takes care of sending s in a format that the Apollo supports. This article describes that format, which is also described on and in this preliminary spec.

The Apollo accepts queries and s sent as POST requests. It also accepts queries sent as GET requests.

POST requests

The Apollo accepts POST requests with a JSON body. A valid request contains a query , along with optional variables and an operationName (if query contains multiple possible s).

Let's say we want to execute the following query:

query GetBestSellers($category:ProductCategory) {
bestSellers(category: $category) {

Here's an example of a valid POST request body for that query:

"query":"query GetBestSellers($category:ProductCategory){bestSellers(category: $category){title}}",
"operationName": "GetBestSellers",
"variables": { "category": "BOOKS" }

Note that operationName isn't required for this particular request body, because query includes only one definition.

You can execute this query against an Apollo-hosted example server right now with the following curl command:

curl --request POST \
-H 'Content-Type: application/json' \
--data '{"query":"query GetBestSellers($category:ProductCategory){bestSellers(category: $category){title}}", "operationName":"GetBestSellers", "variables":{"category":"BOOKS"}}' \

The Apollo 's default landing page provides a curl command you can use to execute a test query on your own server:

GET requests

The Apollo also accepts GET requests for queries (but not s). With a GET request, query details (query, operationName, variables) are provided as URL query parameters. The variables option is a URL-escaped JSON object.

Here's the same query from POST requests formatted for a curl GET request:

curl --request GET \
@defer support
Query batching
Edit on GitHubEditForumsDiscord