Use Power Automate to Create Jira Tasks

I’m working on a Power Pages project that requires a Jira service desk task to be created for each portal submission. Out of the box, Jira provides a simple connector to create tasks and requests, but the connect falls short of handling field types other than simple text. This means choice, checkbox, and dropdown fields are not available. This only leaves a couple of options, and I opted to use a simple HTTP action to create the tasks.

Basic overview of what I’ll be creating:
Flow that’s triggered by a dataverse row creation
Create a Jira task and populate metadata
Attach a file to the Jira task

Jira fields and types:
Issue Type – Choice
Request Type – Choice
Tortilla – Choice
Meat – Choice
Veggies – Checkbox multi-select
Number of Tacos – Number
Pickup Date Time – Date and Time
Summary – Text
Attachment – Attachment

Interfacing with the Jira API requires knowing a little about the fields you’ll be updating and the project and issue type you want to use. If you haven’t created one already, you need a Jira API token to work with the API.


Request type:
Go to Project Settings, then look at the URL and copy the value after pid=
https://taco.atlassian.net/secure/project/EditProject!default.jspa?pid=10001

With the ID, you can query the service desk request-types endpoint
https://taco.atlassian.net/rest/servicedesk/1/servicedesk/request/10001/request-types
In the returned payload, note the portal key and key values; combine the two, and you have the request type value tr/9f7c4029-6d23-4cb1-bb8a-02d0050d944b

Project key:
The project key is available on the project settings page, listed under the name field.
Example: TACOS

Issue type:
For simplicity, I’m only dealing with one issue type, and I captured the issueType value using the request-types endpoint noted above.
Example: “issueType”: 10015

For the remaining field values, you can get them in one of two ways.
Create a new issue in the browser, then use the browser developer tools (F12 or Ctrl + Shift + I) to inspect each field’s HTML value.

The other option is to click the gear icon (top right), select Issues, click on Custom Fields, search for a field, click on it, click Edit detail, and then grab the ID value from the URL. Once the ID is captured, join it with customfield_, resulting in customfield_10073, which is the field’s internal value.

In this example, the summary issue type fields are the only ones that do not have a customfield_X naming convention. It might be possible that some system-generated fields have a different naming convention, but I’ll dig into that another day.

Column Display NameColumn Internal NameColumn Type
Issue Typeissuetypesystem
Request Typecustomfield_10010system
Tortillacustomfield_10073Select List (single)
Meatcustomfield_10074Select List (single)
Veggiescustomfield_10075Checkboxes
Number of Tacoscustomfield_10076Number Field
Pickup Date Timecustomfield_10077Date Time Picker
Summarysummarysystem

Endpoint URL:
https://taco.atlassian.net/rest/api/3/issue/
Headers: {“Content-Type”: “application/json”}
Authentication: Raw
Key: Basic aWhddsfadfafa..NOT…A…REAL…KEY..dafdfdafd=
Example payload:

{
  "fields": {
    "project": {
      "key": "TACOS"
    },
    "customfield_10010": "tr/9f7c4029-6d23-4cb1-bb8a-02d0050d944b",
    "summary": "Taco order summary",
    "issuetype": {
      "id": "10015"
    },
    "customfield_10073": {"value": "Flour"},
    "customfield_10074": {"value": "Chicken"},
    "customfield_10075": [{"value": "Pico"},{"value": "Grilled Veggies"}],
    "customfield_10076": 2,
    "customfield_10077":"2022-11-05T11:05:00.000+0000"
  }
}

View of the task in Jira

How do you attach a file to a Jira task using Power Automate?
Attaching a file to a Jira task requires one more API call, and it’s simple!

Endpoint URL:
https://taco.atlassian.net/rest/api/3/issue/Key/attachments
Headers: {“X-Atlassian-Token”: “no-check”}
Authentication: Raw
Key: Basic aWhddsfadfafa..NOT…A…REAL…KEY..dafdfdafd=

Example payload:

{
  "$content-type": "multipart/form-data",
  "$multipart": [
    {
      "headers": {
        "Content-Disposition": "form-data; name=\"file\"; filename=@{outputs('Get_file_properties')?['body/{FilenameWithExtension}']}"
      },
      "body": @{body('Get_file_content')}
    }
  ]
}

Attachment
I’m getting a file from SharePoint and passing its contents to the API call for the attachment. The same thing works with Azure blob storage or grabbing a file from the dataverse. If you want to attach more than one file, create additional HTTP attachment calls.

Here’s a simple overview of the Flow:

Parse JSON schema:

{
    "type": "object",
    "properties": {
        "id": {
            "type": "string"
        },
        "key": {
            "type": "string"
        },
        "self": {
            "type": "string"
        }
    }
}

11 thoughts on “Use Power Automate to Create Jira Tasks

  1. Hi!
    Great document! I am also trying to add an/multiple attachment to a jira issue. I am using OneDrive and sharepoint but I do not really understand what to put in the fields in “get file properties”, “get file content” and for the “content” field in Parse JSON. Would you mind showing what you put in those fields?
    It would be greatly appreciated.

  2. The parse JSON is getting the key from the HTTP Create Jira Task action. The key is then used to form the HTTP URI for the attachment action. http://example/rest/api/3/issue/key

    In the example, I’m using dataverse as the trigger source. From there, I’m getting the associated SharePoint doc properties, then file content.

    http jira create attachment

    Let me know if this helps or not.

  3. Have you been able to do this and make the attachment visible to the customer via the customer portal?

  4. Hey Marcus, I haven’t worked with the Customer Portal related to Atlassian. Their forum is active and valuable; someone there might have some insight into the issue if it’s not working. I got this working in Postman, then moved to Flow to iron out things.

  5. Hi Its a great post and thanks for detail blog.

    I am trying to implement the same thing, but somehow no luck. Every time i am getting error as “{“errorMessages”:[“You do not have permission to create issues in this project.”],”errors”:{}}”

    Strange part i can create from UI.

    Below is sample code , Kindly suggest what is wrong in it.

    https://<>/rest/api/3/issue/

    Body :
    {
    “fields”: {
    “project”: {
    “key”: “CADD”
    },
    “summary”: “Jira Integration summary-1”,
    “description”: “Creating an issue via REST API”,
    “issuetype”: {
    “name”: “Bug”
    }
    }
    }

    Authentication using as Raw

  6. You need an API key. The Jira API is unaware of the user running the Flow.

    This info was included in the post:
    you haven’t created one already, you need a Jira API token to work with the API.

    Look at the post above for the link to create the key, then use it in your Flow.

    Before I got my Flow working, I spent a lot of time in Postman trying to figure things out. You might start there.

  7. Yes, I have tried the reference of blog but still i am getting the same error. Below is sample code.

    I have created the API key and that key I have used as Value after selecting the Authentication method as Raw and value is
    1 option: “Basic keyvalue”‘
    1 option: “Keyvalue”‘

    Kindly suggest on the part

  8. @Pravin,

    You need to set an header as Authorization with value as Basic followed by your key. I am assuming you are encrypting your key using the method specified by Atlassian.

    @Ian,

    Thanks for a great thread. It cleared all the doubts that I had.

  9. Hi, i tried using the same steps but content for the file is not decoding here is the code i used

    {
    “$content-type”: “multipart/form-data”,
    “$multipart”: [
    {
    “headers”: {
    “Content-Disposition”: “form-data; name=\”file\”; filename=@{items(‘For_each_1’)[‘name’]}”
    },
    “body”: {
    “$content”: @{body(‘Get_file_content’)}
    }
    }
    ]
    }

    Attachment looks like this
    {“$content-type”:”image/jpeg”,”$content”:[{“$content-type”:”image/jpeg”,”$content”:”890898/asd

Leave a Reply

Your email address will not be published. Required fields are marked *