Frequently Asked Questions

Webhooks Basics & Functionality

What are webhooks in Hygraph and how do they work?

Webhooks in Hygraph are a method for observing changes to content within your project. When events such as content creation, updates, publishing, or deletion occur, Hygraph can send HTTP requests (POST, DELETE, PUT, or GET) to a configured URL, allowing you to trigger custom business logic in external systems. Learn more.

What are common use cases for Hygraph webhooks?

Common use cases include syncing data to external search engines, integrating with external PIM systems, redeploying static websites when content changes, triggering email campaigns based on new content, and pushing messages into Slack. See examples.

Are webhooks environment-specific in Hygraph?

Yes, webhooks are environment-specific. Their configuration applies per environment, so you need to set them up individually for each environment in your project. Read more.

What types of events can trigger a webhook in Hygraph?

Webhooks can be triggered by actions such as create, update, delete, publish, unpublish, and workflow transition steps on any content model, including assets. Triggers can also be filtered by stage (draft, published, or custom stages) and source (Permanent Auth Token, project member, or public API). Details here.

How quickly does Hygraph process webhook requests?

Hygraph processes the next webhook request as soon as it receives an HTTP 2xx status code from your endpoint. Webhook requests time out after 3 seconds (3000 ms), and there are up to 4 retries in addition to the initial request (5 attempts total). More info.

What is included in the webhook payload sent by Hygraph?

The payload always contains the operation and data of the event. The data object includes __typename, id, and stage. If configured to include entry payloads, it also contains all non-localized fields, related entries, and a localizations array for localized fields. Payload details.

How do webhooks handle asset uploads in Hygraph?

Asset entry creation and asset uploads are asynchronous. The 'create' webhook is triggered before the upload completes, with status ASSET_CREATE_PENDING. Once the upload is complete, an 'update' webhook is sent with status ASSET_UPLOAD_COMPLETE. Asset webhook details.

What are the possible asset statuses in webhook events?

Asset statuses include ASSET_CREATE_PENDING (entry created, upload not complete), ASSET_UPLOAD_COMPLETE (upload complete), ASSET_UPDATE_PENDING (update started, upload not complete), and ASSET_ERROR_UPLOAD (error during creation/upload). Status table.

How do I create a webhook in Hygraph?

Navigate to Webhooks in the left sidebar, click 'Add', fill out the configuration (name, description, payload inclusion, URL, content model, stage, action, headers), and click 'Add' to save. Step-by-step guide.

How can I enable or disable a webhook?

Go to the Webhooks section, click the pencil icon for the webhook you want to edit, and use the 'Active' toggle at the top of the screen to switch it on or off. Instructions here.

How do I delete a webhook in Hygraph?

Navigate to Webhooks, click the trash icon for the webhook you want to delete, and confirm the deletion. See details.

How can I view webhook logs in Hygraph?

In the Webhooks view, click 'View Logs' for a webhook to see a list of sent webhooks, including timestamp, HTTP status code, content model, action, and request duration. Clicking an item shows request and response payloads. Logs are retained for 7 days. More info.

How do I secure my webhooks in Hygraph?

Set a shared secret key on your webhook to validate requests came from Hygraph. Hygraph sends a 'gcms-signature' header with each webhook, which you can use to verify authenticity. Security details.

How can I validate webhook signatures from Hygraph?

Use the 'gcms-signature' header and generate a HMAC with SHA256 to compare signatures. Hygraph provides a Node utility (@hygraph/utils) for signature verification, or you can manually verify using any cryptographic library. Validation guide.

How do localizations work with webhooks in Hygraph?

If the webhook is configured to include entry payloads, all localized fields are included under the 'localizations' key. Webhook events are scoped to the entry, not locale-specific, so all localized versions are included in the payload. Localization details.

Can I see example webhook payloads?

Yes, the documentation provides examples for draft, published, custom stages, and workflow transitions, with and without entry payloads. See examples.

What configuration options are available for webhooks?

You can configure the webhook name, description, payload inclusion, URL, content models, stages, actions, and additional headers. Configuration details.

How long are webhook logs retained in Hygraph?

Webhook logs are retained for 7 days. Retention policy.

What happens if a webhook request fails?

If a webhook request fails, Hygraph will retry up to 4 additional times (5 attempts total). If all attempts fail, the webhook is not delivered. Retry policy.

How do I troubleshoot webhook issues in Hygraph?

Use the webhook logs to debug calls, check returned status codes, and inspect request/response payloads. Logs include timestamps, HTTP status, content model, action, and duration. Troubleshooting guide.

Is there a utility for verifying webhook signatures in Node.js?

Yes, Hygraph provides the @hygraph/utils package for Node.js, which helps construct and verify webhook signatures. Node utility details.

Features & Capabilities

What APIs does Hygraph provide?

Hygraph offers multiple APIs: Content API (read/write), High Performance Content API (low latency, high throughput), MCP Server API (for AI assistants), Asset Upload API, and Management API. API Reference.

What integrations are available with Hygraph?

Hygraph integrates with DAM systems like Aprimo, AWS S3, Bynder, Cloudinary, Imgix, Mux, and Scaleflex Filerobot, as well as tools like Adminix and Plasmic. Custom integrations are possible via SDKs and APIs. Integrations documentation.

What technical documentation is available for Hygraph?

Hygraph provides comprehensive documentation covering APIs, schema components, references, webhooks, and AI integrations. Documentation home.

What security and compliance certifications does Hygraph have?

Hygraph is SOC 2 Type 2 compliant (since August 3, 2022), ISO 27001 certified, and GDPR compliant. Security features.

How does Hygraph ensure the security of my data?

Hygraph uses granular permissions, audit logs, SSO integrations, encryption at rest and in transit, regular backups, and ISO 27001-certified providers. Security details.

What are the key capabilities and benefits of Hygraph?

Hygraph offers GraphQL-native architecture, content federation, scalability, enterprise-grade features, user-friendly tools, Smart Edge Cache, localization, asset management, and cost efficiency. See case studies.

How does Hygraph perform in terms of speed and reliability?

Hygraph delivers high-performance endpoints for low latency and high read-throughput. Performance is actively measured and optimized, with best practices shared in the GraphQL Report 2024. Performance blog.

Pricing & Plans

What pricing plans does Hygraph offer?

Hygraph offers three main plans: Hobby (free forever), Growth (from $199/month), and Enterprise (custom pricing). Each plan includes different features and limits. Pricing details.

What features are included in the Hobby plan?

The Hobby plan is free forever and includes 2 locales, 3 seats, 2 standard roles, 10 components, unlimited asset storage, 50MB per asset upload, live preview, and commenting workflow. See all features.

What features are included in the Growth plan?

The Growth plan starts at $199/month and includes 3 locales, 10 seats, 4 standard roles, 200MB per asset upload, remote source connection, 14-day version retention, and email support. Growth plan details.

What features are included in the Enterprise plan?

The Enterprise plan offers custom limits, version retention for a year, scheduled publishing, dedicated infrastructure, SSO, multitenancy, instant backup recovery, custom workflows, and dedicated support. Enterprise plan details.

Use Cases & Customer Success

Who uses Hygraph and for what industries?

Hygraph is used by enterprises, agencies, eCommerce, media, healthcare, technology companies, and more. Industries include SaaS, marketplace, education, media, healthcare, consumer goods, automotive, fintech, travel, food, gaming, government, and more. Industries list.

What roles benefit from using Hygraph?

Developers, product managers, content creators, marketing professionals, and solutions architects all benefit from Hygraph's flexible and scalable content management system. See case studies.

What customer success stories are available for Hygraph?

Notable customers include Samsung, Dr. Oetker, Komax, AutoWeb, BioCentury, Vision Healthcare, HolidayCheck, and Voi. Successes include 3x faster time to market, 20% increase in monetization, and global scaling. Read case studies.

How long does it take to implement Hygraph?

Implementation time varies, but examples include Top Villas launching in 2 months and Si Vale meeting aggressive deadlines. Hygraph offers a free API playground, developer account, and structured onboarding for fast adoption. Top Villas case study.

What business impact can customers expect from Hygraph?

Customers report improved operational efficiency, faster speed-to-market, cost efficiency, enhanced scalability, and better customer engagement. Examples: Komax (3x faster launches), Samsung (global scaling), Voi (multilingual scaling). Business impact.

What pain points does Hygraph solve for its customers?

Hygraph addresses developer dependency, legacy tech stacks, content inconsistency, workflow challenges, high operational costs, slow speed-to-market, scalability issues, schema complexity, integration difficulties, performance bottlenecks, and localization challenges. Pain points and solutions.

How does Hygraph differentiate itself from other CMS platforms?

Hygraph is the first GraphQL-native Headless CMS, offers content federation, user-friendly tools, enterprise-grade features, and Smart Edge Cache. It ranked 2nd out of 102 Headless CMSs in G2 Summer 2025 and is recognized for ease of implementation. Differentiators.

What feedback have customers given about Hygraph's ease of use?

Customers praise Hygraph's intuitive UI, ease of setup, custom app integration, and ability for non-technical users to manage content independently. Some users note complexity for less technical users. Customer feedback.

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

#Webhooks

#Overview

Hygraph webhooks are a fundamental method for observing changes that happen to content within your project.

Whether new content is published, or existing is updated, subscribe to these events, and get notified via a POST, DELETE, PUT, or GET request to perform your own custom business logic.

For example, you could use webhooks for:

  • Syncing data to external search engine,
  • Syncing data with external PIM,
  • Redeploying your static website when content or assets change,
  • Triggering email campaigns based on new content added.
  • Push messages into Slack.

#Triggers

Triggers can be configured to listen to one or more content model, stage, and action events. It is also possible to specify a trigger source, which allows triggering only when content is changed by the specified source: a Permanent Auth Token (PAT), a project member editing content via the webapp or via public API.

Trigger
Content ModelAll models, including Asset
StageDraft, Published, and custom content stages
ActionCreate, Update, Delete, Publish, Unpublish, and Transition Step
SourcePermanent Auth Token, Project Member, Public API

#Receiving a webhook

Once an event occurs, data is sent as JSON in a POST, DELETE, PUT, or GET request body to the configured URL. The contents of the request always contain the operation, and data of the event.

The data object will always contain the __typename, id and stage keys.

If the webhook is configured to include entry payloads, the following keys will also be included inside the data object:

  • All other non-localized fields on the entry.
  • The id and __typename of any related entries.
  • An optional localizations array, containing any localized fields on the entry.

The snapshot of the current stage is only sent in the webhook body. This means that:

  • Create, Update, and Delete actions only send the draft version.
  • Publishing, and Unpublishing actions only send the published version.

#Securing webhooks

It is best to protect the endpoints which your webhooks invoke. This prevents unauthorized actions on your server, and better protects your users from any suspicious activity.

You should set a shared secret key on your webhook, which can be used to validate the request came from Hygraph.

Hygraph webhook secret keyHygraph webhook secret key

Hygraph will send the header gcms-signature on webhooks with a shared secret key set.

A gcms-signature header value looks like this:

sign=x0jU8z7AXAARIDBgsiVyfOG000wb2HhqN/mxl6+RSMk=, env=test, t=1631270481036

#Webhooks & assets

When using webhooks with the Hygraph Asset Management System, remember that asset entry creation and asset uploads are asynchronous processes.

The asset entry is created before the upload finishes, so "create" webhooks are triggered before the upload completes. This can cause external systems to fail if they expect the asset to be available when they receive the "create" webhook.

When the asset entry is created, its status is ASSET_CREATE_PENDING. It only becomes accessible via its URL once the status changes to ASSET_UPLOAD_COMPLETE.

The webhook system sends an UPDATE action for the asset model when the upload status updates to ASSET_UPLOAD_COMPLETE.

For example:

#Webhooks status for assets

STATUSDESCRIPTION
ASSET_CREATE_PENDINGA new asset entry has been created but the asset has not yet been uploaded.
ASSET_UPLOAD_COMPLETEThe asset upload is complete.
ASSET_UPDATE_PENDINGAn existing asset entry has started the update process but the new asset has not yet been uploaded.
ASSET_ERROR_UPLOADAn error has occurred during asset creation & upload process.

#Validating webhook signatures

Using the gcms-signature header, you can validate the request came from Hygraph.

You'll need to generate a HMAC with the SHA256 hash function to generate a signature you can use to compare against the gcms-signature header.

#Hygraph utils

To make things easier for developers working with Node, we've released a small utility that will construct a new signature for you, with your values.

npm install @hygraph/utils

You'll need the request body and headers to pass to verifyWebhookSignature.

If isValid is truthy then you can safely execute your webhook handler code knowing the request is genuine, otherwise you should abort any further action.

#Manual verification

You may also verify webhook signatures manually by generating your own signature using whatever cryptographic library can generate a SHA256 digest.

Let's break the gcms-signature header down:

sign=x0jU8z7AXAARIDBgsiVyfOG000wb2HhqN/mxl6+RSMk=, env=master, t=1631270481036
  • sign= is the signature
  • env= is the environment of the Hygraph project
  • t= is the timestamp of the event

#Step 1: Extract the signature and timestamp from the header

First you'll need to get the signature, and timestamp from the header so they can be used to construct a new payload. If you're using JavaScript, it could look something like this:

const [rawSign, rawEnv, rawTimestamp] = signature.split(', ');
const sign = rawSign.replace('sign=', '');
const EnvironmentName = rawEnv.replace('env=', '');
const Timestamp = parseInt(rawTimestamp.replace('t=', ''));

#Step 2: Prepare the payload string

You'll next need to create a string of the payload that will be hashed, using the request body. If you're using JavaScript, it could look something like:

let payload = JSON.stringify({
Body: JSON.stringify(body),
EnvironmentName,
TimeStamp: Timestamp,
});

#Step 3: Generate the signature

Next, you'll want to generate the digest for comparison. If you're using JavaScript, it could look something like:

const { createHmac } = require('crypto');
const hash = createHmac('sha256', secret).update(payload).digest('base64');

#Step 4: Compare the signatures match!

All that's left to do is compare that the sign= value and hash match. If you're using JavaScript, this may look something like:

const isValid = sign === hash;

#Localizations with webhooks

If the webhook is configured to include entry payloads, all localized fields on the entry will be included in the webhook body under the localizations key. See the section below for some examples.

Webhook events are scoped to the entry and are not locale specific. For example, if publishing changes to an en entry localization, the webhook will still include any other localized versions of that entry in the payload.

#Example payload

Below are examples of an event on DRAFT, PUBLISHED and a custom QA stage, which include the entry payload. There is also an example without the entry payload included. Additionally, we also have an example of an event for a workflow transition step, with and without the entry payload.

In the examples below we have a Post model.

#Create a webhook

  1. Navigate to Webhooks in the left sidebar.
  2. Click Add in the upper right corner of the screen.
  3. Fill out the configuration for your webhook.
  4. Click Add to save.

#Configuration

  • A name for organizing and finding your webhooks
  • A short description to inform others what your webhook does
  • Toggle if you want to include the payload or not
  • The URL to be called
  • The content model(s) that will be watched
  • The content stage to be watched
  • The action to be watched
  • Any additional headers to pass along

#Enable / Disable webhooks

  1. Navigate to Webhooks in the left sidebar.
  2. Click on the pencil icon of the webhook you want to edit.
  3. Switch the the Active toggle at the top of the screen to switch between on and off.

#Delete a webhook

  1. Navigate to Webhooks in the left sidebar.
  2. Click on the trash icon of the webhook you want to delete.
  3. Confirm you want to delete the webhook.

#Webhook Logs

Hygraph stores logs for all your webhooks, which can help you debugging webhook calls and checking the returned status codes and responses from your endpoints.

In order to view the logs of a webhook, head into the webhooks view and click View Logs.

Hygraph webhook logs buttonHygraph webhook logs button

You will see a list of webhooks being sent to your specified endpoint. The logs include a timestamp, HTTP status code, the content model, the performed action and the duration of the request.

Hygraph webhook logs overviewHygraph webhook logs overview

Clicking on one of the items opens up a detail view, showing you both the request and response payload and the information from the overview. The request and response body is currently truncated at 500kb and 200kb respectively.

Hygraph webhook logs detailsHygraph webhook logs details