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
| Event | Trigger |
|---|
demo.completed | A prospect finished a full demo session |
demo.abandoned | A prospect dropped off before completing |
lead.hot | Laura detected strong buying signals |
meeting.booked | A follow-up meeting was scheduled |
contact.created | A 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.