Summary: Workspace admins can enable HTTPS webhooks for renewal reminders, workflow changes, and completed vendor extractions. When a secret is configured, Contrax sends it in the X-Contrax-Signature request header for simple origin checks.
Contrax webhooks
Events use a versioned envelope under contrax.eventVersion and contrax.event. Scheduled reminder jobs run via Inngest (weekdays 9:00 Europe/Paris).
Event types
renewal.reminder/renewal.non_renewal_window— expiration or opt-out window (kind:expirationornon_renewal)renewal.workflow_started/renewal.intent_changed/renewal.resolved— workflow PATCH on a contractcontract.analysis_completed— vendor PDF/Word extraction finishedvendor.dates_confirmed— vendor portal confirmation applied to the contract row (term end, notice, opt-out)vendor.proactive_push— vendor workspace proactive date push (before buyer invite)vendor.counter_proposal— vendor counter-proposal pending buyer reviewportfolio.at_risk_count_changed— org-wide at-risk count changed (Slack, Teams, generic webhook when enabled)
Reminder payload
{
"contrax": { "eventVersion": 1, "event": "renewal.reminder" },
"organizationId": "<org id>",
"contractId": "<contract id>",
"contractNumber": "…",
"message": "…",
"daysUntil": 30,
"kind": "expiration"
}Workflow payload
{
"contrax": { "eventVersion": 1, "event": "renewal.workflow_started" },
"organizationId": "<org id>",
"contractId": "<contract id>",
"contractNumber": "…",
"renewalWorkflowStatus": "in_progress",
"renewalIntent": "negotiate",
"message": "Renewal plan started for …"
}Vendor dates confirmed payload
{
"contrax": { "eventVersion": 1, "event": "vendor.dates_confirmed" },
"organizationId": "<org id>",
"contractId": "<contract id>",
"contractNumber": "…",
"confirmedDates": {
"termEndDate": "2026-12-31",
"noticeDays": 60,
"optOutDeadline": "2026-10-31",
"confirmedAt": "2026-06-17T12:00:00.000Z"
},
"message": "Vendor confirmed renewal dates for …"
}Vendor proactive push
Vendors signed into the workspace can push dates via POST /api/vendor/dashboard/proactive using either an existing portal token or orgSlug + contractNumber when they already have a trusted relationship with that customer (prior portal link with the same email). Contrax may auto-create a portal access row when pushing by reference.
{
"contrax": { "eventVersion": 1, "event": "vendor.proactive_push" },
"organizationId": "<org id>",
"contractId": "<contract id>",
"contractNumber": "…",
"confirmedDates": {
"termEndDate": "2027-06-30",
"noticeDays": 60,
"proactive": true,
"portalCreated": true
},
"message": "Vendor proactive push for …"
}Analysis completed payload
{
"contrax": { "eventVersion": 1, "event": "contract.analysis_completed" },
"organizationId": "<org id>",
"contractId": "<contract id>",
"contractNumber": "…",
"analysisId": "<analysis uuid>",
"analysisVersion": 1,
"modelId": "claude-3-5-sonnet-20241022",
"pageCount": 12,
"severityHighest": "medium",
"message": "Vendor extraction completed for …"
}