This QuickStart demonstrates integrating JIRA's REST API with Sigma using Basic Authentication and API Actions. You'll connect to JIRA Cloud, query issues using JQL (JIRA Query Language), and optionally update issue statuses directly from Sigma workbooks.
Unlike simple no-authentication examples, this QuickStart shows enterprise-grade patterns using authenticated API requests with dynamic parameters.
What you'll build:
A Sigma workbook that:
Along the way you'll learn how to:
For more information on Sigma's product release strategy, see Sigma product releases
If something doesn't work as expected, here's how to contact Sigma support
This QuickStart is ideal for:

Assuming you have already created a JIRA trial account, perform the following steps:
Create API token:
QuickStarts Token and give it a date in the future that allows enough time to complete testing:
Create
Done.
JIRA Cloud uses Basic Authentication with API tokens. This is simpler than OAuth 2.0 and works well for server-to-server integrations like Sigma.
How Basic Auth works:
Authorization header of each API requestWhy this approach:
Sigma API Actions support many common authentication methods including (at the time of this QuickStart):
For more information, see Add a new API credential to Sigma

Now we'll create a credential in Sigma that securely stores your JIRA authentication details.
Administration > API connectors > CredentialsCreate Credential:
JIRA API TokenBasic Auth for JIRA Cloud APIBasic authyourname@domain.com)
Save.The credential is now available for use in API connectors throughout your Sigma organization.

API connectors define the endpoints we'll call from Sigma. First, let's create a connector that searches for JIRA issues using JQL.
Administration > API Connectors page, select the API connectors tab.Create connectorJIRA - Search IssuesQuery JIRA issues using JQLJIRA API Token (the credential we created)Request details section, configure:Custom connectorGET and enter https://YOUR-DOMAIN.atlassian.net/rest/api/3/search/jql (replace YOUR-DOMAIN with your actual JIRA domain)
Query parameters section, click Add parameter: jqlStaticproject = SCRUM ORDER BY created DESCThis default JQL query retrieves all issues from the SCRUM project, ordered by creation date.
fieldsStatickey,summary,status,priority,assignee,created,issuetypeThis tells JIRA which fields to return in the response. Without this parameter, the API returns minimal data (only IDs).
maxResultsStatic50This limits the number of results returned (JIRA's default is 50, maximum is 100).

Test connector to verify the connector works.You should see a successful response with JIRA issue data in JSON format, now including all the fields (key, summary, status, etc.):

Save to save the API connector
Before we build the Sigma workbook, let's create some sample issues in JIRA to work with. A JIRA trial starts with empty projects, so we need to add test data.
https://YOUR-DOMAIN.atlassian.net/jira/software/projects/SCRUM/boards/1To Do, In Progress, In Review, Done.JIRA may have created a couple of default tasks (Task 1, Task 2) to get you started. You can keep these or delete them to make the UI cleaner.

+ Create button at the top of the page:
Task for Work type.Summary field, use Set up development environmentCreate.A popup will appear that allows us to assign the new task to our default scrum and sprint. Click the Add to SCRUM Sprint 0 link:

The issue will appear in the TO DO column:

TO DO:
Search results not loading (Task)Export data to CSV (Story)IN PROGRESS:
Configure CI/CD pipeline (Task)User login with SSO (Story)IN REVIEW:
Dashboard performance improvements (Story)Timeout on large datasets (Task)DONE:
Update documentation (Task)API integration complete (Story)
The following optional sections are provided to orient readers less familiar with JIRA and are not required.
In ProgressIn ReviewDoneFilters tab at the bottom:
Create filter:
project = SCRUM ORDER BY created DESC
Alternatively, you can verify by simply viewing your board - all the issues you created should be visible in their respective columns.
Now you're ready to query this data from Sigma!

Before building the workbook, let's understand how we'll parse JIRA's JSON responses using Python. We're covering this now so you understand the overall data flow before implementing it in the next section. This preview will make the workbook setup clearer and help you understand why each element is needed.
Why Python elements:
JIRA's API returns nested JSON with arrays of issues, each containing multiple fields. Python elements (which run on Snowflake) let us transform this JSON into tabular data that Sigma can display and analyze.
How the workflow works:
sigma.get_control_value()sigma.output() to make it available to child elementsWhat the Python code does:
import pandas as pd
import json
# Read the API response from the text area control
raw = sigma.get_control_value("raw-response")
# Parse the JSON response
response_data = json.loads(raw)
# Extract issues array
issues = response_data.get('issues', [])
# Flatten nested JSON into tabular format
flattened_issues = []
for issue in issues:
flattened_issues.append({
'Issue Key': issue['key'],
'Summary': issue['fields']['summary'],
'Status': issue['fields']['status']['name'],
'Priority': issue['fields']['priority']['name'] if issue['fields'].get('priority') else 'None',
'Assignee': issue['fields']['assignee']['displayName'] if issue['fields'].get('assignee') else 'Unassigned',
'Created': issue['fields']['created'],
'Work Type': issue['fields']['issuetype']['name']
})
# Convert to DataFrame
df = pd.DataFrame(flattened_issues)
# Output the DataFrame so child elements can use it
sigma.output("jira_issues", df)
This code extracts key fields from each nested issue object and creates a DataFrame with one row per issue.
For more information, see Write and run Python code in Sigma

Now let's create a workbook that calls the JIRA API and displays the results.
Create New > WorkbookSave as and name the workbook JIRA Issues QuickStart in your preferred locationPage 1 to IssuesElement bar, add a Text area control from the Controls groupraw-responseFormat > ELEMENT STYLE tab): API response will appear hereThis control will display the raw JSON response for debugging purposes.

Button element from the UI groupLoad JIRA IssuesAction sequence from the Element properties panelWe'll create a sequence of three actions for now:
Set control valueRaw API Response
Call APIJIRA - Search IssuesSearch with JQLThe Outputs section shows the action variables:
Call 'JIRA - Search Issues' - Data (the response body)Call 'JIRA - Search Issues' - Status (HTTP status code)Call 'JIRA - Search Issues' - Headers (response headers)
Set control valueRaw API ResponseAction variableCall 'JIRA - Search Issues' - Data
Load JIRA Issues buttonYou should see the raw JSON response appear in the text area control, showing your JIRA issues.


Now we'll use a Python element to transform the JSON response into a table.
Element bar, add a Python element from the Data groupFor more information, see Write and run Python code in Sigma
import pandas as pd
import json
# Read the API response from the text area control
raw = sigma.get_control_value("raw-response")
# Handle empty response - create empty DataFrame with proper schema
if not raw:
df = pd.DataFrame({
"Issue Key": pd.Series(dtype="str"),
"Summary": pd.Series(dtype="str"),
"Status": pd.Series(dtype="str"),
"Priority": pd.Series(dtype="str"),
"Assignee": pd.Series(dtype="str"),
"Created": pd.Series(dtype="str"),
"Work Type": pd.Series(dtype="str")
})
else:
# Parse the JSON response
response_data = json.loads(raw)
# Extract issues array
issues = response_data.get('issues', [])
# Flatten nested JSON into tabular format
flattened_issues = []
for issue in issues:
flattened_issues.append({
'Issue Key': issue['key'],
'Summary': issue['fields']['summary'],
'Status': issue['fields']['status']['name'],
'Priority': issue['fields']['priority']['name'] if issue['fields'].get('priority') else 'None',
'Assignee': issue['fields']['assignee']['displayName'] if issue['fields'].get('assignee') else 'Unassigned',
'Created': issue['fields']['created'],
'Work Type': issue['fields']['issuetype']['name']
})
# Convert to DataFrame
df = pd.DataFrame(flattened_issues)
# Output the DataFrame as 'jira_issues' for child elements
sigma.output("jira_issues", df)
Run to execute the Python codeYou should see an output option appear:

jira_issues control and click Table from the menu:
A table will appear showing all the parsed JIRA issues with properly formatted columns. We moved the elements around in the screenshot below...
JIRA Issues Table
Load JIRA Issues button and add a fourth action:Click on the button and select Edit actions
Run Python elementCode (Issues) (your Python element)This triggers the Python element to re-execute and parse the updated API response.

Load JIRA Issues buttonYou should now see:
The complete workflow now refreshes both the raw response and the parsed table automatically!

Let's add a control that lets users filter issues by status.
List values control from the Controls groupstatus-filterSet display valuesAll → Value: AllTo Do → Value: "To Do"In Progress → Value: "In Progress"In Review → Value: "In Review"Done → Value: "Done"This separates what users see (clean text without quotes) from what gets used in formulas (values with quotes for JQL).

Following the pattern from the Salesforce QuickStart, we'll create a second API connector specifically for filtered queries. This keeps the button working unchanged.
Administration > API ConnectorsJIRA - Search Issues connector and click the three-dot menuDuplicate:
JIRA - Search Issues by StatusAuthentication credential to JIRA API Token.Query parameters section, find the jql parameterStatic to DynamicDynamic parameters don't have default values:

SaveNow we have two connectors:
Now we'll configure the status filter control to automatically refresh the data when a user selects a different status.
Status Filter controlElement properties panel, go to the Actions tabWe'll create a sequence similar to the button, but using the new dynamic connector:
Set control valueRaw ResponseCall APIJIRA - Search Issues by StatusIn the parameter mapping section:
jqlIf([status-filter] = "All", "project = SCRUM ORDER BY created DESC", "project = SCRUM AND status = " & [status-filter] & " ORDER BY created DESC")
This formula:
project = SCRUM ORDER BY created DESCproject = SCRUM AND status = "In Progress" ORDER BY created DESCThe quotes are already part of the control value, so they're automatically included in the JQL query.

Set control valueRaw ResponseAction variableCall 'JIRA - Search Issues by Status' - DataRun Python elementCode (Issues) (your Python element)
Try selecting different statuses from the Status Filter control.
The the Python will run, raw-response will update and the table will update to show only issues matching the selected status - no need to click the button.


Want to update JIRA issues directly from Sigma? Let's add a write-back workflow using JIRA's transitions API.
Before creating the transition connector, we need to discover the transition IDs for your workflow. Let's create a connector in Sigma to find them.
Administration > API ConnectorsCreate connectorJIRA - Get TransitionsGet available transitions for an issueJIRA API TokenCustom connectorGET and enter https://YOUR-DOMAIN.atlassian.net/rest/api/3/issue/:issueKey/transitionsReplace YOUR-DOMAIN with your actual JIRA domain. The /:issueKey syntax tells Sigma this is a path parameter.
Path parameters section and configure: issueKey (matches the parameter name in the base URL)StaticSCRUM-1)

The /:issueKey in the base URL will be replaced with this value when the connector is called.
Test connectorThe response shows available transitions for that issue:
{
"transitions": [
{
"id": "11",
"name": "To Do",
"to": { "id": "10000", "name": "To Do" }
},
{
"id": "21",
"name": "In Progress",
"to": { "id": "10001", "name": "In Progress" }
},
{
"id": "31",
"name": "In Review",
"to": { "id": "10002", "name": "In Review" }
},
{
"id": "41",
"name": "Done",
"to": { "id": "10003", "name": "Done" }
}
]
}
These are the IDs you'll use in the next connector. Yours will likely be different.
Administration > API Connectors.JIRA - Transition IssueTransition JIRA issue to a new statusJIRA API TokenCustom connectorGET to POSThttps://YOUR-DOMAIN.atlassian.net/rest/api/3/issue/:issueKey/transitionsReplace YOUR-DOMAIN with your actual JIRA domain. The /:issueKey syntax tells Sigma this is a path parameter.
Path parameters section, configure: issueKey (matches the parameter name in the base URL)DynamicThe /:issueKey in the base URL will be dynamically replaced with values from your workbook, so set it to be Dynamic under Path parameters.
Request body section: raw radio button (not "none" or "form-data"){
"transition": {
"id": {{transitionId}}
}
}
The {{transitionId}} is a placeholder that will be replaced by the parameter value.
Body parameters section. Sigma automatically detects the transitionId parameter from your JSON template. Configure it: transitionId (automatically added)Number (transition IDs are numeric)
SCRUM-10)21 for "In Progress")Test connector to verify it works:
You can also check to make sure JIRA shows the change (moved SCRUM-10 from TO DO to IN-PROGRESS)

Now let's create an interactive modal that allows users to update issue statuses.
UI > Modal elementUpdate Status ModalText input control:modal-issue-keyThis control will display which issue is being updated.
List values control.Toggle on Set display values.
modal-new-status11 → Display: To Do21 → Display: In Progress31 → Display: In Review41 → Display: DoneWe will use the Primary button to initiate actions when clicked but first we need to configure actions on the table.
JIRA Issues Table, click on the Status column headerElement properties panel, go to the Actions tabOn click > Status.Set control valuemodal-issue-keyColumn valueIssue Key
Open modalModal 1Now when users click a Status cell, the modal opens with the Modal Issue Key pre-filled:

Modal 1, add the following action sequence to the On click - primary action sequence.Call APIJIRA - Transition IssueControl from the dropdownmodal-issue-keyFormula from the dropdown (not Control, since we need to convert to Number)Number([modal-new-status])

Call APIJIRA - Search Issues (use the Static connector to fetch all issues)This re-fetches all issues from JIRA after the transition, ensuring you see the updated status regardless of what filter is currently selected:
Set control valueraw-responseAction variableCall 'JIRA - Search Issues' - DataRun Python elementCode (Issues)This parses the fresh data and updates the table.
Clear controlSpecific controlModal New Status (Modal 1)This resets the dropdown so the next time the modal opens, no status is pre-selected.
Close modalClick Save to save the complete action sequence.
Let's move the Set up development environment task that we moved into IN PROGRESS manually a few steps back to TO DO:

Status cell for the issue
Save.The API call will execute, the modal will close, and the table should refresh to show the updated status:

Now users can transition issue statuses directly from Sigma, and the table will automatically refresh to show the changes!

In about an hour, you built a complete bidirectional JIRA integration—querying issues with dynamic filters, parsing nested JSON responses, and updating issue statuses through an interactive modal—all without writing backend code or managing servers.
Sigma API Actions turned what would typically require dedicated API infrastructure, authentication handling, and custom middleware into a straightforward workflow: configure credentials, define connectors, build actions.
This same pattern works for any REST API using Basic Authentication (ServiceNow, Zendesk, GitHub, GitLab, Confluence, Bitbucket). Create credentials, define endpoints, call APIs, parse responses, display results.
The value isn't just speed—it's accessibility. Business analysts and data teams can now build operational integrations that previously required engineering resources, turning Sigma into a true operational analytics platform where data doesn't just flow in for reporting, but flows back out to drive action.
Additional Resource Links
Blog
Community
Help Center
QuickStarts
Be sure to check out all the latest developments at Sigma's First Friday Feature page!
