Frequently Asked Questions

GraphQL Mutations & Content API

What are GraphQL mutations in Hygraph and how do they work?

GraphQL mutations in Hygraph allow you to modify the contents of your project by creating, updating, deleting, upserting, publishing, and unpublishing entries. These mutations are exposed via your project endpoint and can be used outside the Hygraph UI through GraphQL. For more details, visit the Mutations documentation.

How are mutations auto-generated in Hygraph?

When you add a new model to your project, Hygraph automatically generates custom GraphQL mutations for that model. For example, if you create a Product model, mutations like createProduct, updateProduct, deleteProduct, upsertProduct, publishProduct, and unpublishProduct are generated. These mutations accept input types specific to your project's GraphQL schema. See Auto-generated mutations for more details.

What types of operations can I perform with Hygraph mutations?

You can perform operations such as creating, updating, upserting, deleting, publishing, unpublishing, and batch operations (update many, delete many, publish many, unpublish many) on your content models. Nested mutations allow you to manage relationships between entries, and you can also set conditional visibility for fields. For more, see Mutations documentation.

How do I create, update, or delete entries using mutations?

To create an entry, use the create[Model] mutation with a data argument specific to your model. To update, use update[Model] with where and data arguments. To delete, use delete[Model] with a where argument. For batch operations, use updateMany[Model]Connection or deleteMany[Model]Connection. See Create entries, Update entries, and Delete entries for examples.

What are nested mutations and how do they help manage relationships?

Nested mutations in Hygraph allow you to create, connect, update, upsert, disconnect, delete, or set relationships between entries within a single mutation. This helps manage complex data models and relationships efficiently. For more details, see Nested mutations.

How can I insert related entries at a specific position?

Hygraph allows you to insert related entries at a specific position using the position input in mutations. You can specify before, after, start, or end to control where the entry is inserted in the relation list. Only one value should be provided per operation. See Insert at position for examples.

How does Hygraph handle publishing and unpublishing content via mutations?

Hygraph automatically generates publish and unpublish mutations for each content model, including assets. You can batch publish or unpublish entries using publishMany[Model]Connection and unpublishMany[Model]Connection mutations. For more information, see Publishing content mutations.

Can I mutate localized content entries in Hygraph?

Yes, if your schema includes localized fields, you can mutate each localized content entry using the appropriate mutations. Learn more at Mutating localized content.

How do conditional fields work in Hygraph mutations?

Conditional fields in Hygraph allow you to set visibility conditions for fields when creating or updating entries via mutations. You can use the visibilityCondition argument to control field visibility based on boolean or enumeration fields. For more details, see Conditional fields documentation.

Features & Capabilities

What are the key features of Hygraph's GraphQL API?

Hygraph's GraphQL API provides efficient content management and delivery, supporting queries and mutations for all content models. It enables batch operations, nested mutations, localization, and conditional fields. The API is designed for performance, scalability, and flexibility, allowing integration with modern development workflows. Learn more at the API Reference.

What integrations does Hygraph support?

Hygraph offers integrations with platforms such as Netlify, Vercel, BigCommerce, commercetools, Shopify, Lokalise, Crowdin, EasyTranslate, Smartling, Aprimo, AWS S3, Bynder, Cloudinary, Mux, Scaleflex Filerobot, Ninetailed, AltText.ai, Adminix, and Plasmic. For a full list, visit the Hygraph Integrations page.

How does Hygraph ensure security and compliance?

Hygraph is SOC 2 Type 2 compliant, ISO 27001 certified, and GDPR compliant. It offers features such as SSO integrations, audit logs, encryption at rest and in transit, and sandbox environments to protect sensitive data and meet regulatory standards. For more details, visit the Hygraph Security Features page.

What documentation and support resources are available for developers?

Hygraph provides comprehensive technical documentation, API references, onboarding guides, video tutorials, and a community Slack channel. 24/7 support is available via chat, email, and phone, with dedicated onboarding for enterprise customers. Access documentation at Hygraph Documentation.

Pricing & Plans

What is Hygraph's pricing model?

Hygraph offers a free forever Hobby plan, a Growth plan starting at $199/month, and custom Enterprise plans. For more details, visit the pricing page.

Use Cases & Benefits

Who can benefit from using Hygraph?

Hygraph is ideal for developers, IT decision-makers, content creators, project/program managers, agencies, solution partners, and technology partners. It is especially beneficial for modern software companies, enterprises seeking to modernize their tech stack, and brands aiming to scale globally or improve development velocity. See more at Hygraph Case Studies.

What business impact can customers expect from Hygraph?

Customers can expect time-saving through streamlined workflows, ease of use with an intuitive interface, faster speed-to-market, and enhanced customer experience through scalable content delivery. These benefits help businesses modernize their tech stack and achieve operational efficiency. Learn more at Hygraph Product Page.

What industries are represented in Hygraph's case studies?

Hygraph's case studies span industries such as food and beverage, consumer electronics, automotive, healthcare, travel and hospitality, media and publishing, eCommerce, SaaS, marketplace, education technology, and wellness and fitness. Explore more at Hygraph Case Studies.

Can you share specific customer success stories using Hygraph?

Yes. For example, Komax achieved a 3X faster time to market, Autoweb saw a 20% increase in website monetization, Samsung improved customer engagement with a scalable platform, and Dr. Oetker enhanced their digital experience using MACH architecture. More stories are available at Hygraph Product Page.

Technical Requirements & Getting Started

How easy is it to get started with Hygraph?

Hygraph is designed for quick onboarding, even for non-technical users. For example, Top Villas launched a new project in just 2 months. Users can sign up for a free account and access documentation, tutorials, and onboarding guides. Learn more at Hygraph Documentation.

What support is available for implementation, maintenance, and troubleshooting?

Hygraph provides 24/7 support via chat, email, and phone. Enterprise customers receive dedicated onboarding and expert guidance. All users have access to documentation, tutorials, and the community Slack channel. For more, visit the Hygraph Contact Page.

Pain Points & Solutions

What common pain points does Hygraph solve?

Hygraph addresses operational pains (reliance on developers, outdated tech stacks, global team conflicts, clunky content creation), financial pains (high costs, slow speed-to-market, expensive maintenance, scalability challenges), and technical pains (boilerplate code, overwhelming queries, evolving schemas, cache problems, OpenID integration). For more, see Hygraph Product Page.

How does Hygraph solve these pain points?

Hygraph provides an intuitive interface for non-technical users, modernizes legacy systems with GraphQL-native architecture, ensures consistent branding via content federation, streamlines workflows to reduce costs, and supports scalability. It simplifies development, streamlines query management, and resolves cache and integration challenges. See Hygraph Product Page for details.

What KPIs and metrics are associated with the pain points Hygraph solves?

Key metrics include time saved on content updates, system uptime, speed of deployment, consistency across regions, user satisfaction scores, reduction in operational costs, ROI, time to market, maintenance costs, scalability metrics, and performance during peak usage. For more, visit the CMS KPIs blog.

Customer Proof & Case Studies

Who are some of Hygraph's customers?

Hygraph is trusted by companies such as Sennheiser, Holidaycheck, Ancestry, Samsung, Dr. Oetker, Epic Games, Bandai Namco, Gamescom, Leo Vegas, and Clayton Homes. See more at Hygraph Case Studies.

Competition & Differentiation

How does Hygraph differentiate itself from other CMS platforms?

Hygraph stands out with its GraphQL-native architecture, content federation, scalability, and intuitive interface for non-technical users. It streamlines workflows, reduces operational costs, and supports rapid speed-to-market, making it a strong choice for modern digital experiences. For more, visit the Hygraph Product Page.

Help teams manage content creation and approval in a clear and structured way
Hygraph
Docs

#Mutations

Your project endpoint exposes GraphQL mutations you can use to modify the contents of your project. The mutations API allows you to interact with content ouside of the Hygraph UI using GraphQL.

#Auto-generated mutations

When a new model is added to your project, so are custom GraphQL mutations.

For example, if you created a Product model, these mutations would also be generated inside your GraphQL schema:

  • createProduct
  • updateProduct
  • deleteProduct
  • upsertProduct
  • publishProduct
  • unpublishProduct
  • updateManyProductsConnection
  • deleteManyProductsConnection
  • publishManyProductsConnection
  • unpublishManyProductsConnection

All of these mutations accept input types that are specific to your projects GraphQL schema.

#Create entries

When creating new content entries, the data argument will have an associated input type that is specific to your content model.

For example, if your project contains the model Product, you will have:

MutationArgumentInput Type
createProductdataProductCreateInput!

The id is a default system field that is automatically generated for all new entries.

#Update entries

When updating single content entry, you must specify the unique where criteria of which you want to update, as well as the new data.

For example, if your project contains the model Product, you will have:

ArgumentInput Type
whereProductWhereUniqueInput!
dataProductUpdateInput!

#Upsert entries

The upsert mutation allows you to create, or update a content entry based on whether the unique where values exist.

For example, if your project contains the model Product, you will have:

ArgumentInput Type
whereProductWhereUniqueInput!
upsertProductUpsertInput!
upsert > createProductCreateInput!
upsert > updateProductUpdateInput!

#Delete entries

Similar to updating, and upserting entries, you can specify using where the entries you want to delete.

For example, if your project contains the model Product, you will have:

ArgumentInput Type
whereProductWhereUniqueInput!

#Nested mutations

  • create: Create and relate entries
  • connect: Connect additional existing entries by unique field
  • update: Update the connected entries
  • upsert: Create or update connected entries
  • disconnect: Disconnect connected relations by unique field
  • delete: Delete all connected entries
  • set: Override all connected entries

#Create

#Update

#Insert at position

When inserting related entries, you can connect entries at a given position. The position of entries reflects that fetching relations.

The position input accepts the following values:

FieldTypeDefinition
beforeIDThe ID of the entry you want to insert before
afterIDThe ID of the entry you want to insert after
startBooleanSet to true if you want to insert at the start
endBooleanSet to true if you want to insert at the end

#Before

mutation {
updateAuthor(
where: { id: "..." }
data: { posts: { connect: { position: { before: "..." } } } }
) {
id
}
}

#After

mutation {
updateAuthor(
where: { id: "..." }
data: { posts: { connect: { position: { after: "..." } } } }
) {
id
}
}

#Start

mutation {
updateAuthor(
where: { id: "..." }
data: { posts: { connect: { position: { start: true } } } }
) {
id
}
}

#End

mutation {
updateAuthor(
where: { id: "..." }
data: { posts: { connect: { position: { end: true } } } }
) {
id
}
}

#Publishing content mutations

Hygraph automatically generates publish, and unpublish mutations for each of your content models, including the asset model.

Learn more about publishing and unpublishing content.

#Batch mutations

Hygraph supports batch mutations that can be applied to "many" entries at once. You may wish to update, or delete many entries at once that fit given criteria.

Batch mutations comply with the Relay connection type specification.

#Update many

To update many entries at once, you must use the updateMany[Model]Connection mutation. You can use where, or pagination filters to set the criteria you wish to update.

ArgumentInput TypeDescription
whereProductManyWhereInputFiltering criteria for entries you want to update.
dataCreateInput!An object that specifies the data you'd like to update matching entries with.
firstIntSeek forwards from end of result set.
lastIntSeek backwards from start of result set.
skipIntSkip result set by given amount.
beforeIDSeek backwards before specific ID.
afterIDSeeks forwards after specific ID.

For example, let's update all products where featured: true, to be featured: false.

#Delete many

To delete many entries at once, you must use the deleteMany[Model]Connection mutation. You can use where, or pagination filters to set the criteria you wish to delete.

ArgumentInput TypeDescription
whereProductManyWhereInputFiltering criteria for entries you want to delete.
firstIntSeek forwards from end of result set.
lastIntSeek backwards from start of result set.
skipIntSkip result set by given amount.
beforeIDSeek backwards before specific ID.
afterIDSeeks forwards after specific ID.

#Publish many

Just like you can publish content, you can also batch publish.

ArgumentInput TypeDescription
whereProductManyWhereInputFiltering criteria finding entries.
fromStage = DRAFTThe content stage to find entries from.
to[Stage!]! = [PUBLISHED]The target published content stage.
firstIntSeek forwards from end of result set.
lastIntSeek backwards from start of result set.
skipIntSkip result set by given amount.
beforeIDSeek backwards before specific ID.
afterIDSeeks forwards after specific ID.

For example, we could publish the first 5 products to the PUBLISHED stage.

#Unpublish many

Just like you can batch publish, you can also batch unpublish.

ArgumentInput TypeDescription
whereProductManyWhereInputFiltering criteria for entries you want to find.
stageStage = DRAFTThe content stage to find entries in.
to[Stage!]! = [PUBLISHED]The target published content stage.
firstIntSeek forwards from end of result set.
lastIntSeek backwards from start of result set.
skipIntSkip result set by given amount.
beforeIDSeek backwards before specific ID.
afterIDSeeks forwards after specific ID.

#Localized content mutations

Depending on whether or not you have localized fields in your schema, you will be able to mutate each of the localized content entries.

Learn more about mutating localized content.

#Conditional fields

When you create a field via mutation, you can use visibilityCondition to set conditional visibility for it:

mutation CreateConditionalRichTextField {
createSimpleField(
data: {type: RICHTEXT, parentId: "6b0ce6afe6c74bd196948b3eb28501a3", apiId: "conditionalRichtext", displayName: "Conditional Richtext", isRequired: false, isUnique: false, isList: false, isLocalized: false, visibilityCondition: {baseField: "d1798ceb369c4aad98d6bd286b879109", operator: IS, booleanValue: true}}
) {
migration {
id
}
}
}

In this example parentId is an ID of a model or a component, and baseField is an ID of the field used for condition, in this case a boolean field.

To create an entry for an existing model and set a visibility condition:

In this example, Subsidiaries is a model that contains a publicHoliday boolean which, when set to true, makes the publicHolidayMessage field visible.

When you go to the content editor and access the edit view of this content entry, publicHolidayMessage will be visible:

Conditional visibility in the UIConditional visibility in the UI