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"
}
}