Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.repixa.io/llms.txt

Use this file to discover all available pages before exploring further.

Webhook Events

When a subscribed event fires, Repixa sends a POST request to your registered webhook URL with a JSON payload.

Registering a webhook

POST https://api.repixa.io/v1/webhooks
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

{
  "url": "https://yourapp.com/webhooks/repixa",
  "events": ["demo.completed", "lead.hot", "meeting.booked"]
}

Available events

EventTrigger
demo.completedA prospect finished a full demo session
demo.abandonedA prospect dropped off before completing
lead.hotLaura detected strong buying signals
meeting.bookedA follow-up meeting was scheduled
contact.createdA new prospect contact was captured

Payload structure

All events share this base structure:
{
  "event": "demo.completed",
  "timestamp": "2026-05-20T14:32:00Z",
  "data": { ... }
}

demo.completed

{
  "event": "demo.completed",
  "timestamp": "2026-05-20T14:32:00Z",
  "data": {
    "session_id": "ses_01hx...",
    "agent_id": "agt_01hx...",
    "contact": {
      "name": "Jane Smith",
      "email": "jane@startup.io",
      "company": "Startup Inc."
    },
    "duration_seconds": 742,
    "intent_score": 82,
    "meeting_booked": true,
    "replay_url": "https://app.repixa.io/sessions/ses_01hx..."
  }
}

lead.hot

{
  "event": "lead.hot",
  "timestamp": "2026-05-20T14:28:00Z",
  "data": {
    "session_id": "ses_01hx...",
    "agent_id": "agt_01hx...",
    "contact": {
      "name": "Jane Smith",
      "email": "jane@startup.io",
      "company": "Startup Inc."
    },
    "signals": {
      "interest": 90,
      "buying_signals": 5,
      "objections": 1
    }
  }
}

meeting.booked

{
  "event": "meeting.booked",
  "timestamp": "2026-05-20T14:33:00Z",
  "data": {
    "session_id": "ses_01hx...",
    "contact": {
      "name": "Jane Smith",
      "email": "jane@startup.io"
    },
    "meeting": {
      "scheduled_at": "2026-05-22T14:00:00Z",
      "calendar_link": "https://cal.com/your-team/demo"
    }
  }
}

Verifying webhook signatures

Repixa signs every webhook payload with an X-Repixa-Signature header. Verify it to ensure the request came from Repixa:
const crypto = require('crypto');

function verifySignature(payload, signature, secret) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');
  return `sha256=${expected}` === signature;
}
Your webhook secret is shown once when you register the webhook. Store it securely.

Responding to webhooks

Return a 2xx status within 5 seconds to acknowledge receipt. Repixa retries up to 3 times with exponential backoff if your endpoint fails or times out.