---
title: "Designing Response Types"
canonical: "https://support.apollographql.com/space/ETKB/655065138/Designing%20Response%20Types"
format: markdown
---
Let's say we have a basic GraphQL API that defines the following `Query` type:

```
type Query {
  users: [User!]!
}
```

This `Query.users` field makes intuitive sense: if you query it, you get back a list of `User `objects. *However*, this return type doesn't provide any insight into the result:

- If the list is empty, is that because there are zero users, or did an error occur?
- Even if the list is populated, did the API return *all *users or just a subset?

To answer questions like these, it's helpful for top-level fields of `Query` and `Mutation` to return "wrapper" objects that can include both the operation result *and *metadata about the operation's execution.

[Learn more on the dev docs](https://www.apollographql.com/docs/technotes/TN0010-reponse-type-pattern/).