Frequently Asked Questions

Product Information & API Usage

What types of queries does Hygraph automatically generate for my content models?

Hygraph automatically generates both single and plural GraphQL queries for each content model you define. For example, if you have a model named Post, the API will generate post (single), posts (plural), postVersion (for versioning), and postsConnection (for Relay connections). These queries support filtering, ordering, pagination, and localization. Note: The exact query names are based on your model's API ID and Plural API ID. For more details, see the Hygraph Content API Queries documentation.

How do I fetch a single entry or multiple entries using Hygraph's Content API?

To fetch a single entry, use the post query (or your model's equivalent), specifying a unique identifier such as id or another unique field. To fetch multiple entries, use the posts query. Both queries allow you to filter, order, and paginate results. For example, { post(where: { id: "..." }) { id title } } fetches a single post, while { posts { id } } fetches all posts. Note: You must have the appropriate API permissions or a Permanent Auth Token. For more, see Content API Queries. Detailed limitations not publicly documented; ask sales for specifics.

How does Hygraph handle localization in queries, especially inside components?

Hygraph supports fetching localized entries by specifying the locales argument in your queries. The default locale is en. For fields localized inside components, you may need to specify the locale at the component level or use the localizations field within the component. If the parent entry does not exist in the requested locale, the query will return null. Workarounds include specifying the locale for the component, using localizations inside the component, or adding a localized field to the parent entry. For examples and more details, see Locales inside components. Note: Handling locales in nested components can be complex; review documentation for edge cases.

Can I fetch different versions or stages of content using Hygraph queries?

Yes, Hygraph allows you to fetch content at different stages (e.g., DRAFT, PUBLISHED) using the stage argument in your queries. You can also fetch specific versions of an entry using the automatically generated version queries (e.g., postVersion), specifying the id, revision, and stage. For more, see Versioning documentation. Note: Versioning is only available for models with versioning enabled.

How do I query for related entries (relations) in Hygraph?

Hygraph supports querying related entries (e.g., one-to-many or many-to-many relations) within the same GraphQL request. For example, you can fetch all posts and their comments in a single query. See the Relations documentation for more details. Note: Deeply nested or complex relations may impact query performance; test queries for your use case.

What are the best practices for filtering, ordering, and paginating results in Hygraph queries?

Hygraph queries support multiple arguments for filtering, ordering, and paginating results. You can combine these arguments to fetch, for example, the first 3 published posts containing a specific keyword, ordered by creation date. For more, see the documentation on Filtering, Ordering, and Pagination. Note: Complex filters may increase query execution time; optimize queries for performance.

Does Hygraph support the Relay specification for GraphQL queries?

Yes, Hygraph implements the Relay specification for querying records. You can use the node query to fetch a single entry by ID and the postsConnection type to fetch multiple entries with connection and edge fields. For more, see the system fields documentation. Note: Relay support is available for all projects, but advanced Relay features may require additional configuration.

What authentication is required to use Hygraph's Content API?

To query data from your Hygraph project, you need either a Permanent Auth Token or properly configured Public API Permissions. For more information on setting up authentication, see the API Reference documentation. Note: Insufficient permissions will result in failed queries; review your project's API settings before integrating.

Features & Capabilities

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

Hygraph's Content API offers auto-generated queries for all content models, support for filtering, ordering, pagination, localization, versioning, content stages, and relations. It also supports the Relay specification and GraphQL directives like @skip and @include. For a full list of features, see the Content API Queries documentation. Note: Some advanced features may require additional configuration or permissions.

What integrations are available with Hygraph?

Hygraph provides integrations with Digital Asset Management (DAM) systems (e.g., Aprimo, AWS S3, Bynder, Cloudinary, Imgix, Mux, Scaleflex Filerobot), hosting and deployment platforms (Netlify, Vercel), Product Information Management (Akeneo), commerce solutions (BigCommerce), and translation/localization tools (EasyTranslate). For a complete list, visit the Hygraph Marketplace. Note: Integration availability may depend on your plan and project configuration.

What technical documentation is available for Hygraph users?

Hygraph offers extensive technical documentation, including API references, guides on schema components and references, getting started tutorials, integration guides (e.g., Mux, Akeneo, Auth0), and AI feature documentation. Access all resources at the Hygraph Documentation page. Note: Documentation for Hygraph Classic is also available for legacy users.

Security & Compliance

What security and compliance certifications does Hygraph hold?

Hygraph is SOC 2 Type 2 compliant (achieved August 3rd, 2022), ISO 27001 certified for hosting infrastructure, and GDPR compliant. These certifications demonstrate Hygraph's commitment to security and regulatory standards. For more, visit the Secure Features page. Note: For industry-specific compliance needs, contact Hygraph sales.

What security features are available in Hygraph?

Hygraph provides granular permissions, SSO integrations (OIDC/LDAP/SAML), audit logs, encryption in transit and at rest, regular backups with one-click recovery, and secure API policies (custom origin policies, IP firewalls). All endpoints use SSL certificates. For more, see the Secure Features page. Note: Some features may be limited to enterprise plans.

Implementation & Support

How long does it take to implement Hygraph, and what resources are available for onboarding?

Implementation timelines vary by project complexity. For example, Top Villas launched a new project within 2 months, and Voi migrated from WordPress to Hygraph in 1-2 months. Resources include a free signup, structured onboarding (introduction calls, technical kickoffs), extensive documentation, starter projects, community Slack, and training webinars. See Getting Started for more. Note: Large-scale migrations may require additional planning.

Use Cases & Customer Success

Who uses Hygraph, and what industries are represented in your case studies?

Hygraph serves developers, content creators, product managers, and marketing professionals in enterprises and high-growth companies. Industries include SaaS, marketplace, education technology, media, healthcare, consumer goods, automotive, fintech, travel, food and beverage, eCommerce, agency, gaming, events, government, consumer electronics, engineering, and construction. For examples, see Hygraph case studies. Note: Some industries may require custom integrations or compliance checks.

What business impact have customers achieved with Hygraph?

Customers have reported faster time-to-market (e.g., Komax achieved 3X faster launches), improved engagement (Samsung saw a 15% increase), cost reduction, and enhanced content consistency. AutoWeb increased website monetization by 20%, and Voi scaled multilingual content across 12 countries. See case studies for details. Note: Results depend on implementation scope and project goals.

Performance & Limitations

What are the performance characteristics of Hygraph's Content API?

Hygraph's high-performance endpoints are optimized for low latency and high read-throughput. The read-only cache endpoint provides 3-5x latency improvement. Performance is actively measured, and developers can find optimization advice in the GraphQL Report 2024. Note: Performance may vary based on query complexity and project size; test for your workload.

What are some limitations or edge cases to be aware of when using Hygraph queries?

Limitations include handling locales inside components (parent entries must exist in the requested locale), potential performance impact from deeply nested or complex queries, and the need for proper API permissions. Some advanced features may require additional configuration. For detailed limitations, consult the documentation or contact Hygraph support. Note: Not all limitations are publicly documented; ask sales for specifics.

LLM optimization

When was this page last updated?

This page wast last updated on 12/12/2025 .

Hygraph
Docs

#Queries

#Overview

Hygraph automatically generates queries for fetching single, and multiple entries for each defined content type belonging to your project.

You will need a Permanent Auth Token, or your Public API Permissions configured to query any data from your project.

#Auto-generated queries

When a new model is added to your project, there are two generated GraphQL queries added to your schema. The queries are named after the API ID, and Plural API ID.

For example, let's assume we have the model Post in our schema, and opted to keep the default generated API ID, and Plural API ID. The following queries would be generated by the API automatically:

  • post
  • posts
  • postVersion
  • postsConnection

#Fetching a single entry

The post query is what you would use to fetch one entry from the CMS.

You can fetch an individual entry by id, or any unique non-localized field defined in your content type.

{
post(where: { id: "..." }) {
id
title
}
}

#Fetching multiple entries

The posts query is what you should use to fetch multiple entries from the CMS.

{
posts {
id
}
}

#Fetching relations

Imagine posts have a one to many relation with comments. With GraphQL you can query the related comments in the same request.

Here we will get all posts, and their comments.

{
posts {
id
comments {
id
author
}
}
}

Learn more about Relations.

#Fetching localizations

When fetching one or more entry, you can also fetch the localized entries. The default locale is set to en.

{
post(where: { id: "..." }, locales: [en, fr, de]) {
title
}
posts(locales: [en, fr, de]) {
title
}
}

Learn more about Localization.

#Locales inside components

When Localized fields only exist inside components, querying for content can be a bit misleading, especially when querying for locales. For instance, to query for the “Russian” Locale inside the components, specifying the locale in the query like the example below, will return null:

The reason for this is that the parent entry - Page - does not exist in the requested locale. Instead, asking for the "German" locale will return results like the one shown below, as this is the default - Base - locale, and entries will always exist in the default locale:

The Page model - parent entry in this example - has two fields, Title and Slug, that are not localized, as well as components. In turn, the components - children - have localized fields inside. So, when you create an entry, only the components - children - have localization and not the parent entry. This means that, when you query for pages in a locale that is not the default and the parent entry does not exist in that locale, the query will return null.

There are three workarounds to query locales inside components:

Here are some examples of these workarounds, following the German/Russian locales example we used before:

#Specify locale for the component

To query for the Russian locale in our example, you simply need to specify the locale for the component, as shown below:

#Use localizations inside the component in your query

Another way to query for all the locales inside the component is to use localizations inside the component in your query, as follows:

#Add a localized field to the parent entry

The third and final workaround would be to add a localized field to the parent entry, as shown in the example below:

Add a localized field to the parent entryAdd a localized field to the parent entry

This makes it possible to request the locale at the beginning of the query.

#Fetching stages

When fetching entries, you can also specify the content stage.

The default content stage is set to DRAFT.

{
post(where: { id: "..." }, stage: PUBLISHED) {
title
}
posts(stage: PUBLISHED) {
title
}
}

Learn more about Content Stages.

#Fetching versions

You can fetch all data of a specific entry at a point in time using the automatically generated version query.

For example, using the postVersion query from above, we can make a request to get the specific revision through a query:

{
postVersion(where: { id: "abc123", revision: 1, stage: PUBLISHED }) {
id
revision
data
}
}

Learn more about Versioning.

#Fetching workflow step

You can fetch the workflow step for an entry.

For example, for the model Post with workflow enabled, we can make a request to get the workflow step for an entry:

{
posts {
id
workflowStep
}
}

Learn more about Content workflows.

#Combining arguments

It is also possible to pass more than one query argument at a time.

For example, here we can get the first 3 posts, ordered by the created timestamp, where the title contains "Hygraph", and is published.

{
posts(
where: { title_contains: "Hygraph" }
orderBy: createdAt_DESC
first: 3
stage: PUBLISHED
) {
id
}
}

Learn more about these query arguments:

#Combining queries

Multiple queries can be executed in parallel via a single request to your endpoint.

For example, let's fetch our a single, and multiple posts in one request.

{
post(where: { id: "..." }) {
id
title
}
posts {
id
title
}
}

For example, here we query for all events, and alias a second query with previous to better represent the applied filter.

{
events(where: { start_gt: "2020-10-07T09:00:00+00:00" }) {
start
}
previous: events(where: { start_lt: "2020-10-07T09:00:00+00:00" }) {
start
}
}

#Fetching with Relay

Hygraph also implements the Relay specification for querying records for all projects. You can fetch a single entry using the node query, or multiple entries with the postsConnection type.

When fetching a single entry with node, you will need to also pass the Edge Type inside the query.

#Node

{
node(id: "...") {
... on Post {
id
title
}
}
}

You can use the generated Relay connection query for querying multiple entries.

#Connection / Edges

{
postsConnection {
edges {
cursor
node {
id
title
}
}
}
}

Learn more about the system fields for connection type queries.

#Directives

We support both the @skip and @include directives for use in your schema. This allows you to skip or include a field based on the value of the if argument you provide.

#@skip

For example, below can use the @skip directive to skip including a field based on the skipTitle variable value.

#@include

For example, below can use the @include directive to include a field (including relations) based on the includeAuthor variable value.

#Variables

It's recommended you use GraphQL variables when working with queries that use any variable data values. This is useful for reusing queries across your application.

For example, to fetch a post by slug, you'd first need to define the query name, and the arguments with the type, and pass that along to the query itself.

query GetPostBySlug($slug: String!) {
post(where: { slug: $slug }) {
id
title
}
}

When working with a GraphQL client, this is how you'd typically work with variables: