Webhook Integration

Receive a POST request to any HTTP endpoint when DryRun Security detects a finding on a pull request.

Overview #

DryRun Security sends a webhook POST request to a configured endpoint when a finding is detected on a pull request. Use this to route finding data to custom dashboards, ticketing systems, SIEMs, or automation tools.

Webhook setup is a two-step process: first create the webhook in Integrations, then attach it to a configuration to activate it for specific repositories.

Step 1: Create a Webhook #

  1. In the left nav of the DryRun Security dashboard, click Integrations.
  2. Find the Generic Webhook entry and click Details.
  3. Click Add Webhook +.
  4. Enter a Name for the webhook.
  5. Enter the Webhook URL of your endpoint.
  6. Select a Risk Level. Findings at the selected severity and above will trigger the webhook.
Risk LevelFindings included
AllAll findings regardless of severity
MediumMedium, High, and Critical
HighHigh and Critical
CriticalCritical only
  1. Use the Enabled toggle to activate or pause the webhook at any time.
  2. Check Global to trigger this webhook for all repositories, regardless of configuration. Leave it unchecked to activate it only through specific configurations (see Step 2).
  3. Click Save.

Step 2: Activate for Repositories #

A webhook only fires for repositories included in a configuration with notifications enabled. To attach your webhook to a configuration:

  1. Navigate to Configurations in the dashboard.
  2. Click Edit on an existing configuration.
  3. Toggle Notifications Enabled on.
  4. In the Select Integrations dropdown, choose the webhook you created in Step 1.
  5. Click Save at the bottom of the page.

The webhook will now fire for any PR finding in the repositories covered by that configuration.

If you have not created a webhook yet, click Add + on the Configurations page to go directly to the Generic Webhook setup page.

Payload Format #

DryRun Security sends an HTTP POST with a JSON body to your endpoint when a scan completes. The body includes PR context, scan metadata, and the full list of findings.

{
    "dashboard_url": "https://app.dryrun.security/pull-requests/00000000-0000-0000-0000-000000000000",
    "github_url": "https://github.com/org/repo/pull/123",
    "risk_threshold": "high",
    "org": "your-org",
    "repo_name": "your-repo",
    "repo_full_name": "your-org/your-repo",
    "pr_number": 123,
    "pr_title": "Add payment endpoint",
    "pr_status": "open",
    "branch": "feature/payments",
    "commit_author": "developer",
    "issue_status": "open",
    "run_time": "2026-06-09T16:48:44.960558Z",
    "results": [
        {
            "id": "00000000-0000-0000-0000-000000000001",
            "finding_type": "pullrequest",
            "type": "Missing Authorization on Payment Endpoint",
            "filename": "src/payments/handler.py",
            "line_start": 42,
            "line_end": 58,
            "description": "The POST /payments endpoint does not verify the caller's identity...",
            "risk": "high"
        }
    ]
}

Top-level fields #

FieldTypeDescription
dashboard_urlstringLink to the PR in the DryRun Security dashboard
github_urlstringLink to the pull request in your SCM
risk_thresholdstringHighest risk level among all findings in this scan: critical, high, medium, or low. Returns passing when no findings meet the configured Risk Level threshold.
orgstringOrganization name
repo_namestringRepository name
repo_full_namestringFull repository identifier in org/repo format
pr_numberintegerPull request number
pr_titlestringPull request title
pr_statusstringPull request status: open or closed
branchstringBranch the pull request was opened from
commit_authorstringAuthor of the triggering commit
issue_statusstringWhether any open findings remain: open or resolved
run_timestring (date-time)Timestamp of when the scan completed
resultsarrayList of findings from this scan. Empty when no findings meet the configured Risk Level.

Result fields #

FieldTypeDescription
idstring (uuid)Unique finding ID
finding_typestringSource of the finding: pullrequest, code_policy, deepscan, or sca
typestringFinding name
filenamestringFile where the finding was detected
line_startintegerStarting line of the affected code
line_endintegerEnding line of the affected code
descriptionstringFull finding description
riskstringRisk level of this finding: critical, high, medium, or low