Knowledge base
Breadcrumbs

Webhook Integration with JIRA

Last Updated: 2025-06-18


Purpose

This article describes how up setup Jira as a recipient for issues created in the Outpost24 platform using Webhook.

Introduction

Most SaaS organizations use Enterprise-grade tools for tracking Bugs and Security Fixes. One such solution is Atlassian Jira, a common project management tool used by developer teams to prioritize work. The Outscan platform helps to identify risks that need to be addressed in a timely manner by those developers, so automating the transfer and notification of high, critical, and other risks can often lead to superior time-to-close and meeting robust security deadlines. In addition, this significantly limits the need for developers to have access to the Outscan platform or to manually copy and paste data into Jira tickets, saving time on administrative tasks.

Using built-in Jira text templates, we can highlight the Impact, Recreation, and Solutions to make resolution of risks as easy as possible.

Requirements

  • Access to the Atlassian developer console

  • Access to the Admin role in Outscan (or equal rights)

Steps:

  1. Create App in Atlassian Developer Console

  2. Create Integration Configuration within Outscan

  3. Create Notification within Outscan

  4. Test

  5. Done!

Step 1: Atlassian Developer Console

  1. Navigate to the Atlassian Developer Console:
    https://developer.atlassian.com/console/myapps/

    Portal_Integration_AtlassianDeveloper_Create App.png


  2. Create an application and give it any name you want.

    Portal_Integration_AtlassianDeveloper_CreateNewOAuthIntegration.png


  3. Click Create.

  4. Click Permissions in the left-hand menu.

    Portal_Integration_AtlassianDeveloper_Permissions.png


  5. Click Add for Jira API.

    Portal_Integration_AtlassianDeveloper_AddJiraAPIPermission.png


  6. Click Configure.

    Portal_Integration_AtlassianDeveloper_ConfigureJiraAPIPermission.png


  7. Click the Edit Scopes button to add read:jira-work and write:jira-work and click Save.

    Portal_Integration_AtlassianDeveloper_ConfigureJiraAPIPermission2.png


  8. The new scopes have now been added.

    Portal_Integration_AtlassianDeveloper_Configure_ScopesAdded.png


  9. Next go to Authorization.

    Portal_Integration_AtlassianDeveloper_Authorization.png


  10. Enter Callback URLhttps://outscan.outpost24.com/portal/oauth

    Portal_Integration_AtlassianDeveloper_Authorization_CallBack.png


  11. Click the Save changes button.

  12. Go to Settings and note the Client ID and the Secret which will be used later in the process.

    Portal_Integration_AtlassianDeveloper_Settings.png


Step 2: Outpost24 Portal Integration

  1. Go to Portal > Configuration > Integrations.

  2. Click the green plus sign to the bottom right to create a new integration.

  3. Select Webhook in the drop-down menu.

  4. Select a name.

  5. For the URL you will need a cloudId from atlassian.
    To get the cloudId:

    1. Open a browser and navigate to <youraccount>.atlassian.net/_edge/tenant_info

    2. You will receive a cloudId string which will be part of the URL.
      {
      "cloudId": "98ab76cd-1234-5678-9abc-123a456b789c"
      }

  6. Fill in the URL together with the cloudId from the previous step.
    <https://api.atlassian.com/ex/jira/<your_cloudId>>/rest/api/3/issue
    Example:
    https://api.atlassian.com/ex/jira/98ab76cd-1234-5678-9abc-123a456b789c/rest/api/3/issue

It is important to get this URL correct.

  1. Proceed to fill in the Content sample.
    {
    "fields": {
    "issuetype": {
    "name": "Task"
    },
    "project": {
    "key": "JP"
    },
    "summary": "Just a Test"
    }
    }

Note the Project Key and IssueType must match one of your Projects. Some projects may use a different key or IssueType.

  1. Should look something like this.

    Portal_Integration_NewIntegration.png


  2. Click ADD to save.

    Portal_Integration_SavedIntegration.png


  3. Once Integration is added, select it again and select the Authentication tab.

  4. Edit the Authentication settings and fill in:
    Client ID & Client Secret:
    Both come from JIRA Developer Console. See Step 1: Developer Console #12 earlier in the document.

    Token URL:
    https://auth.atlassian.com/oauth/token

    Authorize URL:
    https://auth.atlassian.com/authorize

    Audience:
    api.atlassian.com

    Scope:
    write:jira-work,read:jira-work

    Portal_Integration_Authentication_Type.png


  5. Click Save and then click Authorize.

    Portal_Integration_Authentication_Authorize.png


  6. Go back to Settings tab and click Verify to test the verification to Atlassian. A pop up is displayed in the lower left corner indicating if the verification was successful or failed.

Step 3: Outpost24 Portal Notification


  1. In a browser, navigate to Portal > Notification Settings.

  2. Select Automation on the left-hand side menu.

  3. Select Notification Settings.

  4. Create new Notification configuration by clicking the green plus .

  5. Fill in the required Fields:
    Name:Select a name for the new configuration.

    Trigger: Finding Created, Finding Status Transitioned, etc.

    From-To: Set as needed.

    Integration: Select your newly created Integration in the list.

    View Template: Not required; can be used if scope of notifications is limited. For View Templates, look in the Findings section.

    Content: See below Example to copy and paste. Ensure your IssueType and Project Key match your environment.

    Screenshot 2025-06-17 101516.png


Example:

{
    "fields": {
		"summary": "[APP]: {{ finding.assetName }} [Finding]: {{ finding.name | replace('"','') | tojson | replace('"','') }}",
		"labels": [
			"pentest-findings",
		    "Sev-{{ finding.cvssSeverity }}"
		],
        "issuetype": {
            "name": "Task"
        },
        "project": {
            "key": "JP"
        },
		"description": {
		  "version": 1,
		  "type": "doc",
		  "content": [
			{
			  "type": "heading",
			  "attrs": {
				"level": 1
			  },
			  "content": [
				{
				  "type": "text",
				  "text": "Pentest Finding: {{ finding.name | replace('"','') | tojson | replace('"','') }}"
				}
			  ]
			},
			{
			  "type": "paragraph",
			  "content": [
				{
				  "type": "text",
				  "text": "{{ finding.description | replace('"','') | tojson | replace('"','') }}"
				}
			  ]
			},
			{
			  "type": "paragraph",
			  "content": [
				{
				  "type": "text",
				  "text": "Web App Name",
				  "marks": [
					{
					  "type": "strong"
					}
				  ]
				},
				{
				  "type": "text",
				  "text": ": {{ finding.assetName }}"
				}
			  ]
			},
			{
			  "type": "paragraph",
			  "content": [
				{
				  "type": "text",
				  "text": "First Seen",
				  "marks": [
					{
					  "type": "strong"
					}
				  ]
				},
				{
				  "type": "text",
				  "text": ": {{ finding.firstSeen }}"
				}
			  ]
			},
			{
			  "type": "paragraph",
			  "content": [
				{
				  "type": "text",
				  "text": "Last Seen",
				  "marks": [
					{
					  "type": "strong"
					}
				  ]
				},
				{
				  "type": "text",
				  "text": ": {{ finding.lastSeen }}"
				}
			  ]
			},
			{
			  "type": "paragraph",
			  "content": [
				{
				  "type": "text",
				  "text": "CVSSv3 Score",
				  "marks": [
					{
					  "type": "strong"
					}
				  ]
				},
				{
				  "type": "text",
				  "text": ": {{ finding.cvssV3Score }}"
				}
			  ]
			},
			{
			  "type": "paragraph",
			  "content": [
				{
				  "type": "text",
				  "text": "Risk Level",
				  "marks": [
					{
					  "type": "strong"
					}
				  ]
				},
				{
				  "type": "text",
				  "text": ": {{ finding.cvssSeverity }}"
				}
			  ]
			},
			{
			  "type": "paragraph",
			  "content": [
				{
				  "type": "text",
				  "text": "Exploits?",
				  "marks": [
					{
					  "type": "strong"
					}
				  ]
				},
				{
				  "type": "text",
				  "text": ": {{ finding.exploitAvailable }}"
				}
			  ]
			},
			{
			  "type": "panel",
			  "attrs": {
				"panelType": "info"
			  },
			  "content": [
				{
				  "type": "paragraph",
				  "content": [
					{
					  "type": "text",
					  "text": "Recreation",
					  "marks": [
						{
						  "type": "strong"
						}
					  ]
					}
				  ]
				},
				{
				  "type": "paragraph",
				  "content": [
					{
					  "type": "text",
					  "text": "{{finding.recreation | replace('"','') | tojson | replace('"','')}}"
					}
				  ]
				}
			  ]
			},
			{
			  "type": "panel",
			  "attrs": {
				"panelType": "warning"
			  },
			  "content": [
				{
				  "type": "paragraph",
				  "content": [
					{
					  "type": "text",
					  "text": "Impact",
					  "marks": [
						{
						  "type": "strong"
						}
					  ]
					}
				  ]
				},
				{
				  "type": "paragraph",
				  "content": [
					{
					  "type": "text",
					  "text": "{{ finding.impact | replace('"','') | tojson | replace('"','') }}"
					}
				  ]
				}
			  ]
			},
			{
			  "type": "panel",
			  "attrs": {
				"panelType": "success"
			  },
			  "content": [
				{
				  "type": "paragraph",
				  "content": [
					{
					  "type": "text",
					  "text": "Solution",
					  "marks": [
						{
						  "type": "strong"
						}
					  ]
					}
				  ]
				},
				{
				  "type": "paragraph",
				  "content": [
					{
					  "type": "text",
					  "text": "{{ finding.solution | replace('"','') | tojson | replace('"','') }}"
					}
				  ]
				}
			  ]
			},
			{
			  "type": "paragraph",
			  "content": []
			},
			{
			  "type": "paragraph",
			  "content": [
				{
				  "type": "text",
				  "text": "All details about finding can be found in the Outpost24 Platform "
				},
				{
				  "type": "text",
				  "text": "Here",
				  "marks": [
					{
					  "type": "link",
					  "attrs": {
						"href": "https://outscan.outpost24.com/portal/en/#/findings/{{ finding.id }}/details"
					  }
					}
				  ]
				}
			  ]
			}
		  ]
		}
    }
}


Step 4: Test

A great and easy test is to add any Tag to a Finding and then view the appropriate project in Jira to view the Issue created by the webhook.

If you’ve mimicked the configuration above, then this webhook will trigger upon the “Finding Modified” condition. This applies to most user interactions on a Finding.

Using the template above, your Issues should look something like this:

image-20250617-153052.png


If your project is not creating the Issues as expected, try these steps:

  1. Review your configuration. Make sure your IssueType and Project Keys match your environment.

  2. Trigger the Webhook on multiple Findings in Outscan. If you find that some work and some don’t, please notify Outpost24 Support at https://support.outpost24.com

Step 5: Done!

If you have questions or would like to offer additions to the provided example code, you can always open a case with Outpost24 Support at https://support.outpost24.com



Related Articles