GraphQL answers 200 even when the query failed
Errors live in the response body, not in the status code. Assert sends the query and the variables, requires the errors array to be empty, and asserts on the resolved data underneath.
An uptime monitor calls this a success
One clause for the errors, the rest for the data
The first assertion on every GraphQL monitor. A single entry in the errors array fails the check, whatever the status code says.
Assert on the resolved fields: a plan, a status, a count, a price.
Catch a resolver that returns null for a field the client treats as required.
A latency budget for the whole operation, per region. A resolver that drifts past it fails the check in that region before your users report it.
Where GraphQL fails quietly
Authentication mutations
Assert that the login mutation returns a token and a user, not an errors array with a 200 beside it.
Primary data queries
An empty list and a null data object both come back as 200. Assert on the row count behind your main screen.
Partial resolver failure
GraphQL can return data and errors together. Assert fails the check when either half is wrong.
Schema changes
A renamed field resolves to null. The assertion on that path catches it the first time it runs.
Subscription setup
Run the initialisation query as a monitor. When it breaks, the real-time feature on top of it stops delivering.
Rate limiting
Watch for the rate-limit error your consumers hit, in the errors array where it lands.