PhishProof Webhooks

Written By Marissa Fegan (Super Administrator)

Updated at August 25th, 2026

The PhishProof Webhooks feature allows external systems to subscribe to real-time events occurring within PhishProof, enabling automated workflows across different platforms.

How It Works

The core function of a PhishProof webhook is to "emit" events as they happen.

  • Trigger: A subscribed event occurs within PhishProof (e.g., a campaign starts or a user clicks a link)
  • Dispatch: PhishProof constructs a secure data payload (JSON schema) containing contextual information about the event
  • Delivery: The payload is sent via an HTTP POST request to a specific destination URL provided by the user
  • Action: The receiving external system parses the payload to trigger automated, secondary actions
 
Use Case Description
Automated LMS Enrollment A common integration involves connecting PhishProof with a Learning Management System (LMS). For example, if a user is phished during an active campaign, the webhook immediately notifies the LMS. The LMS then automatically enrolls that specific user in remedial security awareness training, closing the loop on training vulnerabilities without manual administrator intervention.

 

Configuration and Management

The PhishProof User Interface (UI) provides a centralized location for configuring, monitoring, and managing your webhook subscriptions.

Admins can register multiple webhook URLs. This flexibility allows you to route different events to different endpoints or entirely separate applications (e.g., sending campaign alerts to Slack, while routing user interactions to an LMS).

  1. From within PhishProof, navigate to Settings > Webhooks
  2. Click Create Webhook in the top right
  3. Fill out the webhook name and payload URL

To ensure secure data transmission and verify that incoming payloads genuinely originate from PhishProof, you can configure unique authentication headers for each webhook.

  1. Next to Authentication, select one of the following supported authentication options:
    1. None
    2. Secret Keys (HMAC signatures): Used to cryptographically sign the payload 
    3. Basic Authentication: Using a designated username and password configuration

Webhook Configuration Guide: Setting Up Your Authentication

To securely deliver data to your server, our system sends webhooks via HTTP POST requests. To ensure these requests are secure and verified, you must configure your preferred authentication method within your webhook configuration profile.

When our system sends a webhook to your URL, it includes an Authorization header containing the credentials you saved. Your server must read and validate this header to verify that the request genuinely originated from our system.

Please choose one of the three authentication methods below to secure your configuration profile:

1. Secret Key Authentication (Recommended)

This method uses a single, secure token (a "shared secret") provided by you.

How to Configure

Generate a secure, random secret key on your server.

Input and save this key into the SecretKey field in our webhook configuration dashboard.

What Our System Sends

We will automatically prepend Bearer to your key in the header:

Authorization: Bearer YOUR_SAVED_SECRET_KEY

Your Server's Job

Configure your server to inspect incoming requests and verify that the Authorization header contains this exact key.

2. Basic Authentication (Credentials)

This method uses a traditional username and password combination.

How to Configure

Create a dedicated username and password on your system specifically for our webhooks.

Select Basic Authentication in our configuration dashboard and input these credentials.

What Our System Sends

Our system automatically combines the credentials (username:password) and encodes them into a standard Base64 string:

Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=

Your Server's Job

Your web server or API gateway will automatically decode this header to verify that the username and password match the credentials you created.

3. No Authentication (NoAuth)

This option disables credential checking at the HTTP header layer.

How to Configure

Select NoAuth in our configuration dashboard.

What Our System Sends

Our system will omit the Authorization header entirely.

⚠️ Important Security Note: Only choose this option for temporary testing, or if your server is already protecting the webhook URL using an alternative method—such as restricting access via IP Whitelisting.

Technical Reference for Developers

When your engineering team builds the endpoint to receive our data, they should configure their system to expect the following technical payload structure:

Webhook URL: [Your Configured URL]

HTTP Method: POST

Headers:

Accept: application/json

Content-Type: application/json

Authorization: (Dynamic based on your saved setting below)

Authorization Header Formats

If You Selected This Profile: Your Server Will Receive This Header Format:
SecretKey Authorization: Bearer {your_saved_secretkey}
Basic (Credentials) Authorization: Basic {Base64Encoded(your_username:your_password)}
NoAuth (Header is omitted or empty)
 
 

PhishProof currently supports five primary subscription events, providing granular visibility into campaign progress and user interactions.

  1. Next to Events, select one of the following supported event types from the dropdown menu:

Description

Event Name

Trigger Condition

Example of JSON Payload

Campaign Started

campaign.started

Triggered when a scheduled simulation campaign begins sending emails to target users.

{

 "webhookId": 34,
  "eventId": "c14277b-29a3-4832-a2be-75b968303d33",
  "event": "campaign.started",
  "orgId": 113,
  "url": "https://your-org.phishproof.com",
  "data": {
    "campaignId": 13,

    "campaignName": "Test Campaign",
    "eventDate": "YYYY-MM-DDTHH:MM:SS",

"campaignStartDate": "YYYY-MM-DDTHH:MM:SS",

"campaignCollectionEndDate": "YYYY-MM-DDTHH:MM:SS",

"isRandomized": true,

"templateSelectionType": "Single/Multiple/Random",

"totalUsersTargeted":200
  }
}

Campaign Closed

campaign.closed

Triggered when a campaign's data collection window officially ends.

{

 "webhookId": 34,
  "eventId": "c14277b-29a3-4832-a2be-75b968303d33",
  "event": "campaign.closed",
  "orgId": 113,
  "url": "https://your-org.phishproof.com",
  "data": {
    "campaignId": 13,

    "campaignName": "Test Campaign",
    "eventDate": "YYYY-MM-DDTHH:MM:SS",

"campaignStartDate": "YYYY-MM-DDTHH:MM:SS",

"campaignCollectionEndDate": "YYYY-MM-DDTHH:MM:SS",

"isRandomized": true,

"templateSelectionType": "Single/Multiple/Random",

"totalUsersTargeted":200
  }
}

User Phished

user.phished

Triggered when a user interacts with a phishing simulation (e.g., clicks a link, submits data to a form, opens an attachment, or scans a QR code).

{
  "webhookId": 34,
  "eventId": "bc14277b-29a3-4832-a2be-75b968303d33",
  "event": "user.phished",
  "orgId": 113,
  "url": "https://your-org.phishproof.com",
  "timeToPhishInSeconds": 90,
  "data": {
    "userId": 13236,
    "userEmail": "test@inspiredelearning.com",
    "campaignId": 13,
    "eventDate": "YYYY-MM-DDTHH:MM:SS",
    "eventPhishScore": 3,
    "template": {
      "educationType": "link",
      "type": "system/user",
      "id": 45,
      "tags": "ecommerce,amazon",
      "difficultyLevel": "High"
    }    
  }
} 

User Reported an Email

user.phishing_reported

Triggered when a user flags a suspicious email using an endpoint tool like the PhishHook reporting button.

{
  "webhookId": 34,
  "eventId": "c14277b-29a3-4832-a2be-75b968303d33",
  "event": "user.phishing_reported",
  "orgId": 113,
  "url": "https://your-org.phishproof.com",
  "data": {
    "userId": 13236,
    "userEmail": "test@inspiredelearning.com",
    "campaignId": 13,
    "eventDate": "YYYY-MM-DDTHH:MM:SS",
    "template": {
      "educationType": "link",
      "type": "system/user",
      "id": 45,
      "tags": "ecommerce,amazon",
      "difficultyLevel": "High"
    },
    "timeToReportInSeconds": 90
  }
}

Susceptible User Removed

user.phished.removed

Triggered when an administrator manually removes a user from the susceptible list within the admin UI.

{
  "webhookId": 34,
  "eventId": "bc14277b-29a3-4832-a2be-75b968303d33",
  "event": "user.phished.removed",
  "orgId": 113,
  "url": "https://your-org.phishproof.com",
  "data": {
    "userId": 13236,
    "userEmail": "test@inspiredelearning.com",
    "campaignId": 13,
    "eventDate": "YYYY-MM-DDTHH:MM:SS",
    "originalPhishedDate": "YYYY-MM-DDTHH:MM:SS",
    "template": {
      "educationType": "link",
      "type": "system/user",
      "id": 45,
      "tags": "ecommerce,amazon",
      "difficultyLevel": "High"
    }    
  }
}
  1. Click the toggle to enable your webhook
  2. Click Save Webhook

 

Managing Webhooks

From the dedicated webhook list page, administrators have full control over active connections:

  • Edit webhook to toggle between Active and Inactive states
  • Edit payload URLs, authentication, and subscribed events
  • Delete obsolete webhook configurations

 

System Webhooks

Certain webhooks within the PhishProof ecosystem are classified as System Webhooks. These are reserved for deep, native integrations with core partners, and are provisioned, updated, and managed exclusively via secure back-end APIs. To prevent critical integration failures, these configurations cannot be manually added, modified, or deleted through the standard web UI.