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: expiration or non_renewal)
  • renewal.workflow_started / renewal.intent_changed / renewal.resolved — workflow PATCH on a contract
  • contract.analysis_completed — vendor PDF/Word extraction finished
  • vendor.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 review
  • portfolio.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 …"
}

Related product pages

Frequently asked questions

What events do Contrax HTTPS webhooks send?

Renewal reminders, workflow lifecycle events, and extraction completion—JSON payloads documented on the reminder webhooks page.

Configure an optional shared secret header in Workspace settings and verify it in your receiver.