In my last company we (I, mostly) made way too many design mistakes in our first attempt at implementing a GraphQL api. We wanted to make sure we'd not repeat ourselves in the next one.
One of the first things we did was to ensure every mutation used the same convention for exposing errors. We defined the following on the base mutation payload type:
module Types
class BaseMutationPayload < Types::BaseObject
field :errors, [String], null: false