Storylane · AsyncAPI Specification

Storylane Webhooks

Version

View Spec View on GitHub Interactive DemosProduct WalkthroughsSales EnablementMarketingDemo AnalyticsDemo AutomationBuyer HubSalesMCPAgent ToolsWebhookEmbedsoEmbedDemo Automation PlatformAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-13'
method: searched
source: >
  https://docs.storylane.io/integrations/integrations-and-data-flow/webhooks and
  https://docs.storylane.io/integrations/integrations-and-data-flow/cross-frame-events
description: >
  Storylane's event surface. There are two distinct channels and they are easy to
  confuse: server-to-server outbound WEBHOOKS carrying completed demo sessions,
  and in-browser CROSS-FRAME postMessage events emitted in real time by an
  embedded demo iframe to its host page. Storylane publishes no AsyncAPI document
  for either; this catalog is the machine-readable capture of what the docs
  describe, with payload shapes taken verbatim from the published samples.
asyncapi_published: false
asyncapi_note: >
  No AsyncAPI document was found on any Storylane host. This file is a webhook +
  event catalog derived from the provider's own documentation, not a fabricated
  AsyncAPI.
channels:
  - id: outbound-webhooks
    name: Demo session webhooks
    transport: HTTPS POST
    direction: storylane-to-customer
    docs: https://docs.storylane.io/integrations/integrations-and-data-flow/webhooks
    plan_gate: Starter plan and above.
    configuration: >
      Settings > Integration > Webhook > Connect in the Storylane dashboard.
      The customer supplies the receiving URL and chooses whether to receive all
      demo sessions (known and unknown) or only sessions with a known lead or
      account.
    delivery_filter:
      - all sessions (known and unknown)
      - known lead or account only
    security:
      signature_header: x-storylane-signature
      algorithm: HMAC-SHA256
      encoding: base64
      signed_material: raw, unparsed request body
      secret_location: Settings > Integrations > Webhook (Webhook Verification Secret)
      timestamp: not included
      replay_protection: not documented
      reference_implementations:
        - Node.js / Express
        - Ruby
        - Python / Flask
    events:
      - name: demo_viewed
        description: >
          Emitted for a completed demo viewing session. The only event name
          appearing in Storylane's published payload samples.
        payload_fields:
          - name: id
            type: uuid
            description: Session identifier.
          - name: event
            type: string
            description: Event name; "demo_viewed" in both published samples.
          - name: analytics_url
            type: url
            description: Deep link to the session in the Storylane audience analytics UI.
          - name: host_url
            type: url
            description: The demo share URL the session ran against.
          - name: link
            type: url
            description: The share link URL used.
          - name: link_name
            type: string
            description: Name of the share link (for example "Default").
          - name: name
            type: string
            description: Demo name.
          - name: completion
            type: integer
            description: Percentage of the demo completed.
          - name: time_spent
            type: integer
            description: Seconds spent in the demo.
          - name: intent_level
            type: string
            description: Storylane-assigned intent scoring (for example "high").
          - name: checklist_completed
            type: boolean
          - name: cta_opened
            type: "string|null"
          - name: viewed_at
            type: datetime
            description: ISO 8601 with offset.
          - name: referers
            type: array of url
          - name: utm_params
            type: object
          - name: location
            type: object
            fields: [city, state, country]
          - name: lead
            type: "object|null"
            description: >
              null on an unknown session. When known, carries id, email,
              first_name, last_name, client_source, client_tracking_id and
              lead_source.
          - name: buyer_reveal
            type: object
            description: >
              Firmographic account reveal. Fields company_name, company_domain,
              company_annual_revenue_range, company_employee_range and
              confidence_score. Subject to the per-plan account reveal quota in
              rate-limits/storylane-rate-limits.yml.
        variants:
          - known demo session (lead object populated)
          - unknown demo session (lead is null, buyer_reveal may still resolve)
  - id: cross-frame-events
    name: Cross-frame demo analytics events
    transport: window.postMessage (browser, iframe to parent)
    direction: embedded-demo-to-host-page
    docs: https://docs.storylane.io/integrations/integrations-and-data-flow/cross-frame-events
    envelope:
      message: storylane-demo-event
      payload_key: payload
      subscribe: window.addEventListener('message', handler)
    use_cases:
      - Launch a chat window based on user action inside the demo
      - Display a demo-booking calendar based on user action
      - Forward Storylane analytics into GA, Amplitude or Mixpanel
    events:
      - name: demo_open
        description: Sent when the demo loads for the first time.
        payload_fields:
          - demo.id
          - demo.url
          - demo.name
      - name: step_view
        description: >
          Sent when a guided step (hotspot, walkthrough or modal) is displayed.
        payload_fields:
          - demo.id
          - demo.url
          - demo.name
          - step.id
          - step.index
          - flow.id
          - flow.name
      - name: demo_finished
        description: Sent when the viewer completes all steps and flows.
        payload_fields:
          - demo.id
          - demo.url
          - demo.name
      - name: lead_identify
        description: Sent when a lead is captured through a form or URL parameters.
        payload_fields:
          - demo.id
          - demo.url
          - demo.name
          - lead.email
          - "lead.<custom>"
      - name: open_external_url
        description: Sent when the viewer clicks a CTA to an external URL.
        payload_fields:
          - demo.id
          - demo.url
          - demo.name
          - step.id
          - step.index
  - id: consent-inbound
    name: Cookie consent handshake
    transport: window.postMessage (browser, parent to iframe)
    direction: host-page-to-embedded-demo
    docs: https://docs.storylane.io/trust-and-security/gdpr-compliance
    events:
      - name: storylane-cookie-consent
        description: >
          Posted by the host page to the demo iframe after the visitor accepts
          cookies. Until it arrives (and with "Disable Tracking on Demos" enabled
          in workspace config) Storylane suppresses analytics collection inside
          embedded demos. This is the inbound half of the GDPR consent flow.
related_surfaces:
  alerts:
    docs: https://docs.storylane.io/account/alerts
    description: >
      Real-time engagement alerts can be pushed to Slack, email or a webhook —
      a third, notification-shaped delivery channel distinct from the session
      webhook above.
gaps:
  - Only one webhook event name (demo_viewed) appears in the published samples; no full event catalog is published.
  - No retry, backoff or delivery-guarantee policy is documented.
  - No webhook delivery log or replay UI is documented.
  - Signatures carry no timestamp, so replay is not defended against.