Frontify · AsyncAPI Specification

Frontify Webhooks

Version

View Spec View on GitHub CompanyMarketingBrand ManagementDigital Asset ManagementDAMContentGraphQLCreative OperationsAsyncAPIWebhooksEvents

AsyncAPI Specification

frontify-webhooks.yml Raw ↑
generated: '2026-08-13'
method: derived
source: >-
  graphql/frontify.graphql (the live Frontify GraphQL schema — AssetWebhookEvent enum,
  Webhook interface, ProjectWebhook type, InstallProjectWebhookInput /
  ConfigureProjectWebhookInput, and the install/configure/uninstall mutations)
docs: https://developer.frontify.com/d/wJcTnsuhwb6T/webhooks#/introduction/frontify-webhooks
spec_type: none
asyncapi_published: false
description: >-
  Frontify has a real, first-class event surface: project-scoped webhooks with a
  24-value event vocabulary, a per-webhook shared secret for signature verification, and
  two payload versions. Frontify publishes NO AsyncAPI document — this catalogue is
  derived field-for-field from the live GraphQL schema, which is where the event
  vocabulary is actually declared. Nothing here was authored; every event name is an
  enum value in graphql/frontify.graphql.
webhook_model:
  scope: project
  note: >-
    Webhooks are installed on a Frontify project. Each webhook has an id, name,
    notificationUrl, creator, createdAt and a randomly generated `secret`.
  delivery: HTTP POST to the subscriber-supplied notificationUrl
  payload_versions: [1, 2]
  payload_version_note: >-
    ConfigureProjectWebhookInput.version is a required Int documented in the schema as
    "Webhook payload version (1 or 2)" — an explicit, in-contract payload versioning
    mechanism.
  subscription: >-
    ConfigureProjectWebhookInput.subscribeTo is [AssetWebhookEvent!]. The schema states:
    "Subscribe to specific webhook events. If not defined the webhook will subscribe to
    all events" — i.e. subscribe-to-everything is the default.
  signature:
    present: true
    field: secret
    schema_description: The randomly generated secret of the current `Webhook`.
    note: >-
      Frontify signs deliveries; a receiver must verify the signature against the
      webhook secret. Third-party connector documentation notes that replaying a sample
      will not validate because only events genuinely sent by Frontify carry a valid
      event signature. The exact header name and signing algorithm are documented on the
      JS-rendered webhooks page and were NOT captured verbatim in this pass.
management_api:
  list: RootQuery.webhooks(limit, page) -> WebhookItems
  install: RootMutation.installProjectWebhook(InstallProjectWebhookInput) -> InstallProjectWebhook
  configure: RootMutation.configureProjectWebhook(ConfigureProjectWebhookInput) -> ConfigureProjectWebhook
  uninstall: RootMutation.uninstallWebhook(UninstallWebhookInput) -> UninstallWebhook
  scopes: [webhooks:read, webhooks:write, basic:write]
  scopes_confidence: medium
  scopes_note: >-
    The webhook scope names come from third-party connector documentation, not from a
    Frontify-served page. See scopes/frontify-scopes.yml.
  mcp_gap: >-
    None of the four webhook operations is exposed as an MCP tool — an agent connected
    through the Frontify MCP server cannot subscribe Frontify to events. See
    mcp/frontify-tool-crosswalk.yml graphql_only[].
events:
  vocabulary: AssetWebhookEvent
  count: 24
  note: >-
    Names verbatim from the enum, including Frontify's British spelling of LICENCE. No
    per-value descriptions are published in the schema, so none are invented here.
  asset_lifecycle:
    - ASSET_CREATED
    - ASSET_UPDATED
    - ASSET_DELETED
    - ASSET_MOVED
    - ASSET_PROCESSED
    - ASSET_REVISION_ADDED
  asset_variants:
    - ASSET_VARIANT_ADDED
    - ASSET_VARIANT_UPDATED
    - ASSET_VARIANT_REMOVED
  asset_attachments:
    - ASSET_ATTACHMENT_ADDED
    - ASSET_ATTACHMENT_REMOVED
  asset_relations:
    - ASSET_RELATION_ADDED
    - ASSET_RELATION_REMOVED
  asset_organization:
    - ASSET_COLLECTION_ADDED
    - ASSET_COLLECTION_REMOVED
    - ASSET_TAG_ADDED
    - ASSET_TAG_REMOVED
    - ASSET_TARGET_CHANGED
    - ASSET_CUSTOM_METADATA_UPDATED
  asset_licensing:
    - ASSET_LICENCE_ADDED
    - ASSET_LICENCE_REMOVED
  workflow:
    - WORKFLOW_TASK_ASSIGNED
    - WORKFLOW_TASK_MOVED
    - WORKFLOW_TASK_DELETED
gaps:
  - No AsyncAPI (or CloudEvents) document is published for this event surface.
  - >-
    No public payload schema per event — the payload shape for each AssetWebhookEvent is
    not in the GraphQL schema and the webhooks docs page is JS-rendered, so payloads were
    not captured. This is the single highest-value thing Frontify could publish for
    event consumers.
  - No documented retry/backoff policy or delivery-log surface was found.
cross_links:
  - graphql/frontify-graphql.yml
  - mcp/frontify-tool-crosswalk.yml
  - scopes/frontify-scopes.yml