The response to a GraphQL request is a application/json object.

The response will include a errors key if there are fatal or non-fatal errors.

Fatal errors are those that occur before the query is executed; these represents parse failures or validation errors.

Response Format

The response format is always application/json.

The response body is the result map from executing the query (e.g., has data and/or errors keys).

In cases where there is a problem parsing or preparing the query, the response will still be in the regular format, e.g.:

{"errors": [{"message": "Request body is empty."}]}

GraphQL supports a third key, extensions, but does not define what content goes there; it is for application-specific extensions.

HTTP Status

The normal HTTP status is 200 OK.

If there was a fatal error (such as a query parse error), the HTTP status will be 400 Bad Request.

Status Conversion

Field resolvers may return error maps. If an error map contains a :status key, this value will be used as the overall HTTP status of the response.

When multiple error maps contains :status, the numerically largest value is used.

The :status key is removed from all error maps before the response is streamed to the client.