A query language for APIs where the client specifies exactly which fields it needs and receives them in one response, instead of calling several REST endpoints and discarding the surplus.
It pays off when many different clients — web, mobile, partners — need different slices of the same data, or when mobile users are on slow networks and every extra kilobyte costs a visible delay.
We use GraphQL where the data graph is genuinely complex, with query depth limits, caching, and monitoring of expensive queries. For simple products we recommend REST, because GraphQL adds operational overhead that must be justified.