Access forms data with the Forms API in Jira Cloud

Platform Notice: Cloud Only - This article only applies to Atlassian apps on the cloud platform.

Summary

Use the {{forms.last}} smart value with the Forms submitted trigger. For other triggers, use the Jira Forms API to retrieve the information you need.

Solution

First step - Authentication

The first step is to create an API Token to be used for the authentication process.

Second step - Getting a list of forms on the work item

Now, we must list all the forms we have on a given work item. For that, we can use the following API call along with a 'Send Web Request' action:

GET https://api.atlassian.com/jira/forms/cloud/{cloudId}/issue/{WorkItemIdOrKey}/form

Needed Headers:

Authorization: Basic <token> X-ExperimentalApi: opt-in

Delay execution of subsequent rule actions until we've received a response for this web request, so we can work with the values later.

Screenshot of a Jira automation rule configuration, showing a scheduled trigger, adding a value to the audit log, sending a web request to the Jira Forms API, and comparing the response body.

Third step: Log actions!

Log actions are an essential part of all automation rules. They let us inspect variable values, action results, and so on. Here, it is a good idea to log the response from the previous action.

[ { "id": "bc1bc47f-b192-4bde-8467-d14a5bcc9731", "formTemplate": { "id": "aafb5779-f76f-408f-8cc8-7e9077bc2e08" }, "internal": false, "submitted": true, "lock": false, "name": "2/14/2023 new form", "updated": "2025-01-28T18:55:32.115Z" }, { "id": "53af9d19-c61d-4f61-bc36-f08891af2db7", "formTemplate": { "id": "b9f12dbf-7955-471a-8808-60f628f52058" }, "internal": true, "submitted": true, "lock": false, "name": "Guest wifi account form", "updated": "2025-01-09T14:03:42.125Z" }, { "id": "b13e2d21-bc20-4df5-bbc8-5d199e4fd40c", "formTemplate": { "id": "9e63f619-03df-488e-b1c1-e1084adee4dc" }, "internal": true, "submitted": true, "lock": false, "name": "Nested form sections example", "updated": "2025-01-31T13:02:55.289Z" } ]

Fourth step - Conditions and branching

The branch is only needed when the work item can contain more than one form. If the work item is known to contain only one form, the branch is not needed.

As you can see, we have three forms attached here. There is a simple check you can add to make sure the rule will only proceed if the work item has at least one form attached to it:

A screenshot of a rule configuration in a workflow automation tool. The rule compares two values: {{webresponse.body}} and empty. If the web response body is not empty, a value is added to the audit log.

Now, we will add a branch action to loop through each of the forms (If you are sure that your work item will have only one form, this is not needed):

Screenshot of advanced branching configuration in a workflow automation tool.  The branch uses {{webresponse.body}} as the smart value and assigns it to the variable form.

In this example, we're looking for a specific form named '2/14/2023 new form', so we will add a simple smart values condition to proceed only with the form we need:

Screenshot of a rule configuration comparing two values. The rule checks if {{form.name}} equals 2/14/2023 new form. If true, it adds a value to the audit log and sends a web request.

Last step: Getting the form values

There is a simplified call that we can now make to get the form answers directly: Get form answers API

Screenshot of a "Send web request" action configuration. The action sends a GET request to a Jira Forms API endpoint. The configuration includes authorization and experimental API headers, and delays subsequent actions until a response is received.

The returned data will look something like this:

[ { "label": "test pdf date", "answer": "" }, { "label": "what the form", "fieldKey": "assignee", "answer": "Wesley Nery" }, { "label": "Unlinked field", "answer": "option1", "choice": 1 }, { "label": "This is linked to that field that prevents issue creation", "fieldKey": "customfield_10324", "answer": "Yes", "choice": 10465 }, { "label": "This is the description from the ticket", "fieldKey": "description", "answer": "something" } ]

The answers are returned in the order of the form template. If the form structure does not change, you can retrieve an answer by its array position:

{{fromJson(webResponse.body).get(2).answer}}

For a more future-proof approach, return the answer whose label matches the field you need:

{{#webResponse.body}} {{#if(equals(label,"Unlinked field"))}}{{answer}}{{/}} {{/webResponse.body}}

Updated on August 25, 2026

Still need help?

The Atlassian Community is here for you.