Skip to main content

Webhooks

Event catalog

SmartComply supports 11 webhook event types today. When you create or update an endpoint, you choose which events it receives. Each event type is documented below with a representative example payload.

test.submitted

A backflow test report was submitted

Fired when a certified tester submits a backflow test report for an assembly. Includes the assembly, tester, and pass/fail result.

{
  "id": "evt_8f3a2c1b6e9d4a07",
  "type": "test.submitted",
  "created_at": "2026-05-05T14:30:00.000Z",
  "data": {
    "test_id": "bft_a1b2c3d4",
    "assembly_id": "asm_d4c3b2a1",
    "tester_id": "tst_7e8f9a0b",
    "result": "pass",
    "test_date": "2026-05-05",
    "next_due_date": "2027-05-05",
    "facility_name": "City Hall Annex"
  }
}

test.failed

A backflow test report recorded a failure

Same shape as test.submitted, but fired only when the result is a failure. Useful for triggering repair workflows without filtering on the result field.

{
  "id": "evt_c4d5e6f7a8b90123",
  "type": "test.failed",
  "created_at": "2026-05-05T15:10:00.000Z",
  "data": {
    "test_id": "bft_e5f6a7b8",
    "assembly_id": "asm_d4c3b2a1",
    "tester_id": "tst_7e8f9a0b",
    "result": "fail",
    "test_date": "2026-05-05",
    "failure_reason": "First check valve failed to hold",
    "facility_name": "City Hall Annex"
  }
}

assembly.due_soon

A backflow assembly test is approaching its due date

Fired 30 days before an assembly's annual test is due. Lets scheduling systems queue work orders proactively.

{
  "id": "evt_1a2b3c4d5e6f7890",
  "type": "assembly.due_soon",
  "created_at": "2026-04-05T08:00:00.000Z",
  "data": {
    "assembly_id": "asm_d4c3b2a1",
    "facility_id": "fac_9876abcd",
    "due_date": "2026-05-05",
    "days_remaining": 30,
    "assembly_type": "RPZ",
    "facility_name": "City Hall Annex",
    "address": "100 Main St"
  }
}

iu.exceedance_detected

A sample result exceeded a permit limit

Fired when a lab result for an industrial user exceeds one or more permitted discharge limits. Includes the specific parameters that exceeded and their values.

{
  "id": "evt_f0e1d2c3b4a59687",
  "type": "iu.exceedance_detected",
  "created_at": "2026-05-05T11:45:00.000Z",
  "data": {
    "sample_id": "smp_aabbccdd",
    "industrial_user_id": "iu_11223344",
    "permit_id": "prm_55667788",
    "facility_name": "Acme Metal Finishing",
    "exceedances": [
      {
        "parameter": "Zinc",
        "result_value": 3.8,
        "permit_limit": 2.6,
        "unit": "mg/L"
      }
    ],
    "sample_date": "2026-05-03",
    "monitoring_point": "MP-001"
  }
}

permit.expiring

A discharge permit is nearing its expiration date

Fired 60 days before a permit expires. Gives partner systems and utility staff lead time to initiate renewal workflows.

{
  "id": "evt_abcdef0123456789",
  "type": "permit.expiring",
  "created_at": "2026-03-06T08:00:00.000Z",
  "data": {
    "permit_id": "prm_55667788",
    "industrial_user_id": "iu_11223344",
    "facility_name": "Acme Metal Finishing",
    "expiration_date": "2026-05-05",
    "days_remaining": 60,
    "permit_type": "individual"
  }
}

manifest.filed

A grease-trap pump-out manifest was filed

Fired when a FOG hauler files a pump-out manifest. Includes the establishment, hauler, gallons pumped, and disposal destination.

{
  "id": "evt_1122334455667788",
  "type": "manifest.filed",
  "created_at": "2026-05-05T16:20:00.000Z",
  "data": {
    "pump_out_id": "po_aabb1122",
    "establishment_id": "fse_ccdd3344",
    "hauler_id": "hsp_eeff5566",
    "establishment_name": "Downtown Grill",
    "hauler_name": "CleanPipe Services",
    "gallons_pumped": 450,
    "disposal_facility": "Metro WWTP",
    "service_date": "2026-05-05"
  }
}

notice.created

A violation notice was issued

Fired when a compliance notice (warning, NOV, consent order, etc.) is created in the system. Useful for triggering external case-management or regulatory-tracking workflows.

{
  "id": "evt_99887766aabbccdd",
  "type": "notice.created",
  "created_at": "2026-05-05T09:00:00.000Z",
  "data": {
    "notice_id": "ntc_ddeeff00",
    "facility_id": "fac_9876abcd",
    "facility_name": "Acme Metal Finishing",
    "notice_type": "NOV",
    "severity": "significant",
    "summary": "Zinc exceedance on 2026-05-03 sample",
    "due_date": "2026-05-20"
  }
}

inspection.completed

A field inspection was marked complete

Fired when an inspector finalizes an inspection record. Covers FOG inspections, stormwater site inspections, and construction inspections.

{
  "id": "evt_ffeeddccbbaa9988",
  "type": "inspection.completed",
  "created_at": "2026-05-05T13:00:00.000Z",
  "data": {
    "inspection_id": "insp_aabb1234",
    "facility_id": "fac_9876abcd",
    "facility_name": "Downtown Grill",
    "inspection_type": "fog_routine",
    "result": "satisfactory",
    "inspector_name": "Jordan Lee",
    "completed_at": "2026-05-05T12:45:00.000Z"
  }
}

report.certified

An annual or periodic report was certified for submission

Fired when a compliance report is electronically signed and locked. Applies to DMR submissions, annual reports, and baseline monitoring reports.

{
  "id": "evt_0011223344556677",
  "type": "report.certified",
  "created_at": "2026-05-05T17:00:00.000Z",
  "data": {
    "report_id": "rpt_8899aabb",
    "report_type": "annual_report",
    "period": "2025",
    "certified_by": "Maria Chen",
    "certified_at": "2026-05-05T16:55:00.000Z",
    "facility_name": "Metro Water Authority"
  }
}

partner.approved

A partner integration application was approved

Fired when a SmartComply admin approves a partner application. Useful for onboarding automation on the partner side.

{
  "id": "evt_aabb00112233eeff",
  "type": "partner.approved",
  "created_at": "2026-05-05T10:30:00.000Z",
  "data": {
    "partner_id": "prt_44556677",
    "partner_name": "LIMS Connect Inc.",
    "approved_at": "2026-05-05T10:28:00.000Z",
    "integration_type": "lims"
  }
}

partner.application_submitted

A new partner application was submitted

Fired when a prospective partner submits their integration application via the developer portal. Intended for internal SmartComply automation.

{
  "id": "evt_ddeeff0011223344",
  "type": "partner.application_submitted",
  "created_at": "2026-05-05T08:15:00.000Z",
  "data": {
    "partner_id": "prt_88990011",
    "partner_name": "GeoSync Mapping",
    "contact_email": "dev@geosync.example",
    "integration_type": "gis",
    "submitted_at": "2026-05-05T08:14:00.000Z"
  }
}

webhook.test

Synthetic test event sent from the dashboard

This event is not subscribable — it is only delivered when you (or the API) explicitly send a test event to verify your receiver. Useful during initial setup.

{
  "id": "evt_test_a1b2c3d4e5f67890",
  "type": "webhook.test",
  "created_at": "2026-05-05T14:00:00.000Z",
  "data": {
    "test": true,
    "note": "This is a test event sent from the SmartComply dashboard. Subsequent live events will use the same envelope and signature scheme.",
    "sent_at": "2026-05-05T14:00:00.000Z"
  }
}