The big picture
This guide walks through a complete integration: your platform receives a collab pitch, pushes it into the Sight AI Outreach Agent via the REST API, and receives real-time webhook notifications as the agent triages, replies, and tracks the conversation.Step 1: Register an OAuth client + authorize
- Open Integrations → Sight AI API → OAuth apps in the Sight AI app.
-
Create a client with your app’s name and your HTTPS redirect URI (e.g.
https://your-platform.com/oauth/callback). For a server-side platform, check Server-side app (issue a client secret) to register a confidential client and copy theclient_id+client_secret(sai_ocsec_…) shown once. Otherwise copy just theclient_id(public client). -
In your platform, add a “Connect Sight AI” button that redirects the user to Sight AI’s authorize endpoint with the scopes you need (
webhooks:write,webhooks:read,inbox:write) + PKCE: -
The user picks a site and approves the scopes on Sight AI’s consent screen. Your redirect handler exchanges the code for a
sai_oauth_*access token atPOST /oauth/token.
Step 2: Create the webhook subscription via API
After your platform has an access token, create the webhook subscription programmatically (no dashboard form needed):SIGHTAI_WEBHOOK_SECRET. See Outreach Webhooks API for the full reference, and Webhooks for the event catalog.
Step 3: Push a message
When your platform receives a collab pitch (e.g. a prospect emailed your support inbox), POST it to the ingestion endpoint:conversationId and opportunityId Sight AI created. Store these so you can correlate webhook events back to the original pitch.
Always send an
Idempotency-Key header. If the request times out or fails, you can safely retry with the same key without creating a duplicate conversation.Step 4: Verify the signature on incoming webhooks
Your webhook handler must verify theSightAI-Signature header before processing the payload. The header is in the format t=<unix>,v1=<hex> where the hex is HMAC-SHA256 over ${timestamp}.${raw_body} using your signing secret.
Step 5: Handle outreach.reply_sent
When the agent sends a reply, you’ll receive a outreach.reply_sent event:
conversationId to correlate this reply with the original pitch you pushed in Step 3. Update your CRM with the reply details (e.g. “Sight AI agent replied — accepted the collab request”).
Step 6: Handle outreach.conversation_status_changed
When the conversation reaches a terminal state, you’ll receive this event:
resolved→ “Closed — collab accepted”declined→ “Closed — declined”awaiting_human→ “Needs human review”
Step 7: Handle outreach.contact_suppressed
When a prospect opts out (or bounces / complains), you’ll receive this event. Remove them from your outbound lists immediately — continuing to email a suppressed contact risks deliverability damage.
Troubleshooting
| Problem | Cause | Fix |
|---|---|---|
402 response | Team subscription or site license problem | Ensure the team has an active subscription and the site is licensed |
403 INSUFFICIENT_SCOPE | API key lacks inbox:write | Re-create the key with the inbox:write scope |
429 response | Rate limit or per-site daily ingestion cap | Slow down your request rate; contact support to raise the daily cap |
| Webhooks not arriving | Subscription auto-disabled or endpoint returning non-2xx | Check the Developers page for auto-disabled status; verify your endpoint returns 200 within 10s |
| Duplicate conversations | Missing Idempotency-Key header on retries | Always send the same Idempotency-Key when retrying a failed request |
aiPaused: true in response | Agent is inactive, auto-reply is off, or sender is a noreply address | Turn on the Outreach Agent in Inbox → Settings; the message still lands in the inbox for manual triage |