Salesight
ProductPricingCustomersChangelog
LoginSign inStart free
Documentation
Documentation
Documentation
Overview
Outbound WebhooksZapierMaken8n

Outbound Webhooks

Receive Salesight call_review.finalised events in Zapier, Make, n8n, or a custom HTTPS endpoint.

Outbound webhooks send finalised Salesight call reviews to an HTTPS endpoint. Use them when you want to write scored call data into a CRM, spreadsheet, data warehouse, or no-code automation tool.

Event

Salesight currently emits one event:

call_review.finalised

The event fires after a call analysis has been saved as a CallReview.

Headers

Every delivery is a POST with JSON body and these verification headers:

Content-Type: application/json
User-Agent: Salesight-Outbound-Webhooks/1.0
X-Salesight-Event: call_review.finalised
X-Salesight-Delivery: del_...
X-Salesight-Timestamp: 1760000000
X-Salesight-Signature: sha256=...

The signature is an HMAC SHA-256 digest of:

<X-Salesight-Timestamp>.<raw request body>

Use the signing secret shown in the Integrations page. Compare signatures with a timing-safe equality function.

import { createHmac, timingSafeEqual } from "node:crypto";

export function verifySalesightWebhook({
	body,
	secret,
	signature,
	timestamp,
}: {
	body: string;
	secret: string;
	signature: string;
	timestamp: string;
}) {
	const expected = `sha256=${createHmac("sha256", secret)
		.update(`${timestamp}.${body}`)
		.digest("hex")}`;
	const expectedBuffer = Buffer.from(expected);
	const signatureBuffer = Buffer.from(signature);

	return (
		expectedBuffer.length === signatureBuffer.length &&
		timingSafeEqual(expectedBuffer, signatureBuffer)
	);
}

Payload

{
	"event": "call_review.finalised",
	"deliveryId": "del_0123456789abcdef",
	"createdAt": "2026-05-25T03:00:00.000Z",
	"data": {
		"callReview": {
			"id": "review_123",
			"organization": {
				"id": "org_123",
				"name": "Acme Sales",
				"slug": "acme-sales"
			},
			"company": {
				"id": "company_123",
				"name": "Acme",
				"slug": "acme"
			},
			"product": {
				"id": "product_123",
				"name": "Revenue Platform",
				"slug": "revenue-platform"
			},
			"offer": {
				"id": "product_123",
				"name": "Revenue Platform",
				"slug": "revenue-platform",
				"targetClient": "Mid-market sales teams",
				"hasTiers": true,
				"tiers": [
					{
						"id": "tier_growth",
						"name": "Growth",
						"kind": "standard",
						"rank": 1,
						"priceModel": "fixed",
						"priceInterval": null,
						"priceMinCents": 1200000,
						"priceMaxCents": null,
						"priceCurrency": "USD",
						"priceNote": null
					},
					{
						"id": "tier_pilot",
						"name": "Pilot",
						"kind": "fallback",
						"rank": 1,
						"priceModel": "custom",
						"priceInterval": null,
						"priceMinCents": null,
						"priceMaxCents": null,
						"priceCurrency": "USD",
						"priceNote": "Custom pilot pricing"
					}
				],
				"rules": [
					{
						"id": "rule_budget_gate",
						"type": "tier_gate",
						"description": "Confirm annual budget before recommending Growth.",
						"appliesToTierId": "tier_growth",
						"enforcedByCriterionKey": "budget-confirmed",
						"appliesToTier": {
							"id": "tier_growth",
							"name": "Growth",
							"kind": "standard",
							"rank": 1
						}
					}
				]
			},
			"soldTier": {
				"id": "tier_growth",
				"name": "Growth",
				"kind": "standard",
				"rank": 1,
				"priceModel": "fixed",
				"priceInterval": null,
				"priceMinCents": 1200000,
				"priceMaxCents": null,
				"priceCurrency": "USD",
				"priceNote": null
			},
			"score": 87,
			"summary": "Rep handled pricing concerns and confirmed next steps.",
			"sentiment": "Positive",
			"topObjections": ["Price sensitivity", "Implementation timing"],
			"coachingFlags": ["Confirm decision criteria earlier"],
			"flagTriggers": [
				{
					"id": "flag_trigger_budget",
					"triggered": true,
					"transcriptQuote": "We still need finance to approve the annual budget.",
					"timestampSec": 842,
					"flag": {
						"id": "flag_budget_risk",
						"key": "budget-risk",
						"name": "Budget risk",
						"description": "Buyer indicates budget approval is not confirmed.",
						"effect": "penalty",
						"capScore": null,
						"penaltyPoints": 8,
						"order": 1
					}
				}
			],
			"rep": {
				"id": "rep_123",
				"name": "Avery Stone",
				"email": "avery@example.com",
				"memberId": "member_123",
				"userId": "user_123"
			},
			"customer": {
				"name": "Jordan Lee"
			},
			"source": {
				"provider": "fathom",
				"externalId": "call_123"
			},
			"timestamps": {
				"finalisedAt": "2026-05-25T02:59:57.000Z",
				"createdAt": "2026-05-25T02:59:57.000Z"
			},
			"links": {
				"app": "https://salesight.ai/app/acme-sales/analyzer"
			}
		}
	}
}

Retries

Salesight treats any non-2xx response or network timeout as a failed delivery. Failed deliveries retry up to 5 times with exponential backoff. After 5 consecutive failures, the webhook is disabled and the Integrations page shows the failure count.

Test Events

Use Send test on the Integrations page after adding an endpoint. Test events use the same headers and payload shape, with fixture IDs like review_test_call_review_finalised.

On this page

EventHeadersPayloadRetriesTest Events
Salesight

AI-powered sales call analysis and coaching for teams that want to close more deals.

Product

FeaturesPricingFAQ

Company

Contact

Legal

Privacy policyTerms and conditions

© 2026 Salesight.ai.