Free GraphQL Tester
Test GraphQL queries and mutations in your browser — no login, no install. Pingllo is the fastest way to send a GraphQL request and inspect the response.
What is GraphQL Testing?
GraphQL testing is the process of sending GraphQL queries and mutations to an API endpoint and verifying that the responses contain the correct data, handle errors properly, and enforce authorization rules.
Unlike REST APIs — which use multiple endpoints and HTTP methods to define operations — a GraphQL API exposes a single endpoint (typically /graphql) that accepts POST requests. The operation type (query, mutation, or subscription) is declared in the request body, not the URL or HTTP method.
When testing a GraphQL API, you should verify: correct field resolution, error handling (the errors array), authorization (field-level and resolver-level permissions), variable handling, and performance under concurrent queries.
How to Test a GraphQL API with Pingllo
- 1
Open Pingllo
Go to pingllo.com/tool. No account required — the tool is ready instantly.
- 2
Enter your GraphQL endpoint
Paste your GraphQL API URL (e.g. https://api.example.com/graphql) into the address bar.
- 3
Select GraphQL body type
In the Body tab, choose GraphQL. A query editor and a variables editor will appear.
- 4
Write your query or mutation
Type your GraphQL operation in the query editor. Use variables (e.g. $id: ID!) for reusable parameterized queries.
- 5
Add variables and authentication
Enter variables as a JSON object in the Variables editor. Add your auth token in the Auth tab if required.
- 6
Send and inspect the response
Click Send. View the GraphQL response including the data and errors fields. Check headers and response time.
Ready to test your GraphQL API?
Open Pingllo — It's Free →GraphQL Concepts
Understanding these core GraphQL concepts will help you write better tests and debug responses faster.
Queries
Read operations that fetch data. Queries are safe and have no side effects. Use them to retrieve resources from a GraphQL API.
query { users { id name } }Mutations
Write operations that create, update, or delete data. Mutations declare their return type so you can fetch the result of the operation in the same request.
mutation { createUser(name: "Alice") { id } }Variables
Parameterize queries to make them reusable and safe. Variables are declared in the operation signature and passed separately as a JSON object, avoiding string interpolation.
query GetUser($id: ID!) { user(id: $id) { name } }Fragments
Reusable field selections that can be shared across multiple queries. Fragments reduce duplication and keep queries maintainable.
fragment UserFields on User { id name email }Subscriptions
Real-time operations that push data from server to client over a persistent connection (WebSocket). Used for live feeds, notifications, and collaborative features.
subscription { messageAdded { id text } }Introspection
Query the GraphQL schema itself to discover all available types, fields, queries, and mutations. Most tools use introspection to power autocomplete and documentation.
{ __schema { types { name } } }GraphQL Query Examples
Copy these examples into Pingllo to test them against your GraphQL API.
Basic Query
Fetch data from a GraphQL endpoint
Query
query GetUser($id: ID!) {
user(id: $id) {
id
name
email
createdAt
}
}Variables
{ "id": "1" }Mutation
Create or update data via a mutation
Query
mutation CreatePost($input: PostInput!) {
createPost(input: $input) {
id
title
publishedAt
}
}Variables
{
"input": {
"title": "Hello World",
"body": "My first post"
}
}Introspection Query
Explore a GraphQL schema and all its types
Query
query IntrospectionQuery {
__schema {
queryType { name }
types {
name
kind
description
}
}
}Variables
{}Understanding GraphQL Errors
GraphQL always returns HTTP 200, even when errors occur. This is one of the biggest differences from REST API testing. Instead of relying on HTTP status codes, you must inspect the response body for an errors array.
// GraphQL error response example
{
"data": null,
"errors": [
{
"message": "Not authorized to view this resource",
"locations": [{ "line": 2, "column": 3 }],
"path": ["user"]
}
]
}
Partial data + errors
GraphQL can return partial data alongside errors. If one resolver fails but others succeed, the response includes both data and an errors array. Always check both.
Null fields vs missing fields
A null field in the response is different from an absent field. Null means the resolver ran but returned nothing; an absent field may mean it was never requested.
Extension data
Many GraphQL servers include an 'extensions' field in the response for debugging info — tracing data, validation errors, or custom metadata from the server.
Frequently Asked Questions
How do I test a GraphQL API?↓
Open Pingllo, enter your GraphQL endpoint URL (typically ending in /graphql), select GraphQL as the body type, write your query or mutation, add variables as a JSON object, and click Send. The response shows the data and errors fields from the GraphQL server.
What is the difference between a GraphQL query and a mutation?↓
A GraphQL query is a read operation — it fetches data from the server without side effects. A mutation is a write operation — it creates, updates, or deletes data. Both use the same HTTP endpoint but are declared with the 'query' or 'mutation' keyword in the operation.
How do I add variables to a GraphQL request?↓
In Pingllo, after selecting GraphQL as the body type, you can add a 'Variables' JSON object alongside your query. Variables are referenced in the query using the $ prefix (e.g., $id: ID!) and passed separately to keep queries reusable and safe.
Do I need authentication to test a GraphQL API?↓
Many GraphQL APIs require authentication. In Pingllo, add your Bearer token in the Auth tab or add an Authorization header manually. The token is sent with every request until you change it.
What does a GraphQL error response look like?↓
GraphQL always returns HTTP 200, even for errors. Instead of using HTTP status codes for errors, GraphQL returns an 'errors' array in the response body alongside a 'data' field (which may be null). Each error object contains a 'message' and optionally 'locations' and 'path' fields.
Can I introspect a GraphQL schema?↓
Yes. Send an IntrospectionQuery to any GraphQL endpoint to get its full schema — all types, fields, queries, and mutations. Pingllo lets you send introspection queries just like any other GraphQL operation.