Navattic · AsyncAPI Specification

Navattic Webhooks

Version

View Spec View on GitHub Interactive DemosProduct DemoSales EnablementMarketingNo-CodeWebhookCRM IntegrationSales AutomationMCPAgentsProduct AnalyticsAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-13'
method: searched
source: https://docs.navattic.com/integrations/webhook
spec_type: none
description: >
  Navattic publishes no AsyncAPI document — probed for one and none is served —
  but it does publish a genuinely complete webhook reference: the envelope, both
  payload variants, every field with its type and nullability, the recorded-event
  type enumeration, the request headers it sends, and the Launchpad/Salesforce
  extension fields. This artifact captures that catalog as the event surface.
  Nothing here is inferred; every field below appears in the provider's own
  reference table.
delivery:
  direction: outbound
  trigger: A visitor session in a demo is marked as closed
  transport: HTTPS POST
  content_type: application/json
  user_agent: navattic-tour
  authorization: >
    Sent only when configured on the webhook — "Basic <credentials>" or
    "Bearer <token>". No HMAC signature header is documented.
  timestamps: ISO 8601 strings
  numeric_note: Large numeric values (e.g. estimatedAnnualRevenue) are sent as strings
  change_policy: >
    "Navattic strives to minimize the changes to the Webhook integration, and if
    necessary will provide ample notice for any breaking changes." — an informal
    commitment, not a dated deprecation policy.
  retries: not documented
  ordering: not documented
envelope:
  fields:
    - {name: eventType, type: string, description: 'The type of event. Currently always session_closed.'}
    - {name: timestamp, type: string, description: When the session closed.}
    - {name: data, type: object, description: 'Visitor events carry {session, endUser, companyAccount}; account events carry the company account object only.'}
events:
  - name: session_closed
    variant: visitor
    description: Full session, visitor and account details for a closed demo session.
    payload_root: 'data.{session,endUser,companyAccount}'
    example: published in the docs
  - name: session_closed
    variant: account
    description: Company account details only.
    payload_root: data (the companyAccount object)
    example: published in the docs
objects:
  - name: session
    path: data.session
    fields_common: [type, createdAt, closedAt, mostRecentDemoName, recordedEvents]
    type_enum: [INTERACTIVE_DEMO, AGENT_DEMO]
    fields_interactive_demo: [recordedGuideSessionId, mostRecentProjectId, mostRecentShareLinkId, shareLink]
    fields_agent_demo: [agentDemoSessionId, agentDemoId]
  - name: endUser
    path: data.endUser
    fields: [id, createdAt, updatedAt, sharedId, workspaceId, companyAccountId, mostRecentEmail, mostRecentName, mostRecentCompany, mostRecentCountry, mostRecentCountryRegion, mostRecentCity, converted, navigated, engaged, customPropertyValues, recordedEvents]
  - name: companyAccount
    path: data.companyAccount
    nullable: true
    nullable_note: null on visitor events when no account could be matched
    fields: [id, createdAt, updatedAt, workspaceId, websiteDomain, name, engaged, description, linkedinUrl, sector, industryGroup, industry, subIndustry, employeeCount, estimatedAnnualRevenue, amountRaised, trafficRank, foundedYear, city, state, country, postalCode, technologies, clearbitConfidence, customPropertyValues]
  - name: recordedEvent
    path: data.session.recordedEvents[]
    mirrored_at: data.endUser.recordedEvents[]
    fields: [id, createdAt, updatedAt, type, recordedStepId, recordedStepIndex, recordedStepCommonId, recordedStepName, recordedFlowId, recordedFlowName, recordedProjectId, recordedProjectName, recordedChecklistId, recordedChecklistName, recordedTaskId, recordedTaskName, recordedInterestId, recordedInterestName, urlNavigated, workspaceId, projectId, projectShareLinkId, flowId, checklistId, projectVersionId, projectLanguage, guideId, sessionId, endUserId, mobileId, mobileVersionId]
    type_enum:
      - VIEW_STEP
      - START_FLOW
      - COMPLETE_FLOW
      - START_CHECKLIST
      - OPEN_CHECKLIST
      - CLOSE_CHECKLIST
      - IDENTIFY_USER
      - ENGAGE
      - CONVERTED
      - NAVIGATE
      - COMPLETE_TASK
      - SESSION_CLOSED
  - name: customPropertyValue
    path: '{endUser,companyAccount}.customPropertyValues[]'
    fields: [propertyId, value, createdAt, source, property]
    source_enum: [FORM, IDENTIFY, QUERY_PARAMS, REDUCER, SHARE_LINK, PRESENTATION, ENRICHMENT, INTEGRATION, OTHER]
    property_object_enum: [END_USER, COMPANY_ACCOUNT]
extensions:
  - name: opportunityOwnerEmail
    condition: Launchpad presentation connected to a Salesforce opportunity
    description: Email address of the Salesforce user who owns the opportunity.
  - name: opportunityOwnerId
    condition: Launchpad presentation connected to a Salesforce opportunity
    description: Salesforce user ID of the opportunity owner.
client_side_events:
  note: >
    A second, browser-side event stream exists via Navattic JS —
    navattic.onEvent(cb) delivers the same recorded-event types to the host page
    for forwarding to GA4, Segment, GTM, HubSpot Forms or Marketo Forms.
  docs: https://docs.navattic.com/tracking/navattic-js/subscribe-to-events
testing:
  recommended_tool: https://webhook.site/
  caution: >
    Navattic warns that webhook.site is public, so only test data should be sent
    through it to avoid exposing customer event data.
asyncapi_probe:
  found: false
  note: >
    No AsyncAPI document is served. The Navattic GitHub organization
    (https://github.com/Navattic) has zero public repositories, and no
    /asyncapi.yaml or event-catalog endpoint answers on any Navattic host.
x-evidence:
  - {url: 'https://docs.navattic.com/integrations/webhook.md', status: 200}
  - {url: 'https://api.github.com/orgs/Navattic/repos', status: 200, note: 'zero public repos'}