6sense · AsyncAPI Specification
6Sense Ai Email Webhooks
Version
View Spec
View on GitHub
Account Based MarketingIntent DataB2BPredictive AnalyticsRevenueSales IntelligenceArtificial IntelligenceMarketing TechnologyAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-13'
method: searched
source: https://docs.saleswhale.com/
spec_type: WebhookCatalog
note: >-
The only event surface 6sense publishes sits on the acquired AI Email product
(formerly Conversational Email, formerly Saleswhale), documented at
docs.saleswhale.com and linked from 6sense's own knowledge base as "the API
documentation" for AI Email. Ownership is the acquisition case: 6sense acquired
Saleswhale in 2022 and still serves that product's reference from the legacy
domain — see https://support.6sense.com/docs/6sense-conversational-email-overview-of-api,
which points customers there directly. The core 6sense data APIs
(identification, enrichment, scoring, search) publish NO webhooks, no streaming
surface and no AsyncAPI; they are strictly request/response.
delivery:
transport: http
method: POST
target: customer-configured Target URL
configuration: AI Email app > Account Settings > webhook Target URL
content_type: application/json
acknowledgement:
expected_status: 200
note: Any status other than 200 is treated as a failed delivery.
retries:
attempts: 4
strategy: exponential backoff
note: Up to 4 additional delivery attempts after the initial failure.
ordering: not guaranteed
latency_note: A small delay between the real-world action and webhook delivery is documented for email.sent.
security:
scheme: hmac-sha256-query-signature
signature_location: query parameter
parameters:
- name: signature
description: SHA256 HMAC hexdigest.
- name: timestamp
description: Unix timestamp of when the webhook was sent.
computation: >-
HMAC-SHA256 hexdigest keyed with the account's Saleswhale API key, over the
string "<timestamp>.<raw request body>" — note the literal period separator
and that the RAW body must be used, not a re-serialized parse.
verification_guidance:
- Use a constant-time string comparison to protect against timing attacks.
- Check that the difference between now and the timestamp parameter is within your own tolerance (replay window).
note: >-
Signature and timestamp arrive as QUERY parameters rather than headers, which
is unusual and means they can land in access logs. The scheme itself is sound.
envelope:
fields:
- name: event_name
type: string
description: Name of the event that triggered the request.
- name: event_time
type: string
format: iso8601
description: Timestamp of when the webhook was triggered.
- name: event_payload
type: object
description: Event-specific body.
events:
- name: conversation.ended
description: >-
Fired when a Conversation reaches a terminal state. Can fire MORE THAN ONCE
for the same conversation — a conversation can re-enter a terminal state
after a late lead reply or a human-review completion, so consumers must be
prepared for repeat deliveries on one conversation id.
payload_root: conversation
payload_fields:
- conversation.id
- conversation.started_at
- conversation.handover_rep
- conversation.leads[]
- conversation.status
- conversation.enrolment
terminal_statuses:
- Bounced
- Human Review
- Not Interested
- Qualified
- Stopped Responding
- Unresponsive
- Cancelled
note: >-
leads[] may contain multiple people when the lead CCs or refers a colleague.
is_main marks the last person who replied; is_original marks the person the
conversation started with.
- name: email.sent
description: Fired when the AI email agent sends an email to a lead.
payload_root: email
payload_fields:
- email.to[]
- email.cc[]
- email.from
- email.snippet
- email.subject
- email.created_at
- email.conversation_id
note: snippet is truncated to a maximum of 117 characters.
- name: lead.marked_do_not_contact
description: >-
Fired when a lead is marked Do Not Contact, or do_not_contact is set to true.
Marking a lead DNC cannot be reverted.
payload_root: lead
payload_fields:
- lead.id
- lead.email
- lead.first_name
- lead.last_name
- lead.job_title
- lead.follow_up_at
- lead.account_name
- lead.lead_owner
- lead.do_not_contact
- lead.custom_attribute_values[]
compliance_note: >-
This is the suppression signal. Downstream systems should treat it as
authoritative and irreversible.
asyncapi_document: asyncapi/6sense-ai-email-asyncapi.yml
gaps:
- No AsyncAPI document is published by the provider.
- No event catalogue or webhook surface for the core identification/enrichment/scoring APIs.
- No webhook replay or event-history endpoint.
- No event id in the envelope, so deduplication of the documented repeat conversation.ended deliveries must key on conversation.id plus status.