Navattic · AsyncAPI Specification
Navattic Webhooks
Version
View Spec
View on GitHub
Interactive DemosProduct DemoSales EnablementMarketingNo-CodeWebhookCRM IntegrationSales AutomationMCPAgentsProduct AnalyticsAsyncAPIWebhooksEvents
AsyncAPI Specification
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'}