Skip to main content

What are outreach webhooks?

Outreach webhooks let your platform receive real-time notifications when the Sight AI Outreach Agent acts on a conversation you pushed in via the Ingestion API or that arrived via email forwarding. Instead of polling the inbox, Sight AI POSTs an event to your URL the moment something happens.

When webhooks fire

Sight AI emits events at these points in the outreach lifecycle:

Subscribing

Webhook subscriptions are managed via the REST API after a platform completes the OAuth flow. There is no manual dashboard form — a platform registers an OAuth client, the user authorizes it, and the platform creates its subscription programmatically.

The OAuth flow

  1. Register an OAuth client (one-time, developer setup). In Integrations → Sight AI API → OAuth apps, create a client with your app’s name and HTTPS redirect URI. For a server-side app, check Server-side app (issue a client secret) to register a confidential client — copy the client_id and the client_secret (sai_ocsec_…) shown once. For a desktop/SPA client, leave it unchecked (public client, PKCE only). See Authentication → Public vs. confidential clients.
  2. Redirect the user to authorize. Your app redirects the user to Sight AI’s authorize endpoint with the scopes it needs (webhooks:write, inbox:write, etc.) and PKCE:
  3. User consents. The user picks the site(s) to grant access to and approves the requested scopes on Sight AI’s consent screen.
  4. Exchange the code for an access token. Your app exchanges the authorization code for a sai_oauth_* access token. Confidential clients also send their client_secret; public clients rely on PKCE alone:
  5. Create the webhook subscription. Your app uses the access token to create its subscription, selecting the event types it wants:
    The response includes the signing secret (shown once — store it securely). See Outreach Webhooks API for the full request/response reference.
You can create multiple subscriptions per site (e.g. one for your CRM, one for your analytics pipeline) and multiple event types per subscription. To revoke a platform’s access, delete its OAuth client in Integrations → Sight AI API → OAuth apps — this cascades to delete all webhook subscriptions that client created.
Event types are selected when you create the subscription, not as OAuth scopes. The webhooks:write scope grants the capability to create subscriptions; the eventTypes array in the create request chooses which events you receive.

Verifying the signature

Every webhook POST includes a SightAI-Signature header in the Stripe-style format:
The signature is an HMAC-SHA256 over ${timestamp}.${raw_request_body} using your subscription’s signing secret.

Verify in Node.js

Verify in Python

Always verify the signature before processing the payload. An unverified webhook could be a forged request from anyone who knows your endpoint URL.

Event payload

All events share the same envelope shape:
The data object is event-specific:

outreach.opportunity_created

outreach.message_received

outreach.reply_sent

outreach.conversation_status_changed

outreach.contact_suppressed

Responding to webhooks

Your endpoint must return a 2xx status code within 10 seconds. Anything else (3xx, 4xx, 5xx, or a timeout) is treated as a failure and triggers a retry. Sight AI does not inspect the response body — only the status code matters.

Retries

Failed deliveries are retried up to 3 times with exponential backoff. A failure is:
  • A non-2xx HTTP response.
  • A network error (DNS failure, connection refused, timeout).
  • A response that takes longer than 10 seconds.
Retries use Inngest’s built-in retry mechanism. Each retry re-sends the same event payload (same id), so your endpoint can dedup on id if needed.

Auto-disable

After 10 consecutive failures, Sight AI auto-disables the subscription (is_active = false) to stop hammering a broken endpoint. The subscription appears as auto-disabled in the Developers page. Fix your endpoint and re-create the subscription to resume delivery. A successful delivery (2xx) resets the consecutive-failure counter to 0.

Security

  • Verify the signature on every incoming webhook. Never process an unverified payload.
  • Never expose the signing secret in client-side code, logs, or error messages.
  • Use HTTPS for your endpoint URL. Sight AI does not POST to HTTP URLs.
  • Rotate the secret by deleting and re-creating the subscription if you suspect it’s been exposed.
  • Sight AI does not currently publish stable egress IPs for allowlisting. Rely on the HMAC signature for authentication rather than IP-based access control.

Delivery history

The Developers page shows the last delivery status for each subscription. For full per-event delivery history (payload, response status, retry schedule), contact support — the outreach_webhook_deliveries audit table records every attempt.