Connect Retool to Jira using Retool's native Jira connector. Authenticate with an Atlassian API token, then query issues using JQL, bulk-update statuses, manage sprints, and create new issues — all from a single Retool dashboard. This gives ops and engineering teams a unified view of Jira data alongside internal databases, without requiring every stakeholder to hold a full Jira license.
| Fact | Value |
|---|---|
| Tool | JIRA |
| Category | Productivity |
| Method | Retool Native Resource |
| Difficulty | Intermediate |
| Time required | 25 minutes |
| Last updated | April 2026 |
Build a Unified Jira Operations Dashboard in Retool
Jira is powerful but its interface is optimized for individual contributors managing their own work. Ops managers, customer support leads, and cross-functional teams often need a different view: all open issues across multiple projects in a single table, bulk status updates without clicking into individual tickets, or Jira data displayed alongside customer records from an internal database. Retool's native Jira connector makes this possible without any custom code or middleware.
The native connector handles Atlassian authentication behind the scenes, proxying every request through Retool's server-side backend so that API tokens are never exposed in the browser. You write queries using Jira Query Language (JQL) — the same syntax used in Jira's own search interface — and bind results to Retool's Table, Chart, and Form components. Because Retool is just calling Jira's REST API under the hood, you have access to the full breadth of Jira's capabilities: issues, sprints, projects, users, transitions, comments, and attachments.
A particularly powerful use case is combining Jira data with other sources. A customer escalation dashboard might join open Jira issues with customer records from PostgreSQL and Stripe subscription data, letting support leads see the full context of a customer complaint in one place without leaving Retool. The native connector makes this composable architecture easy to build and maintain.
Integration method
Retool includes a native Jira connector that handles Atlassian authentication and exposes pre-built action types for common Jira operations. You authenticate with your Atlassian domain, email address, and an API token. Retool then provides a dedicated query interface with dropdowns for operation type — such as searching issues, creating issues, or transitioning status — so you do not need to manually construct REST requests. All requests are proxied server-side through Retool's backend.
Prerequisites
- A Jira Cloud account (this guide covers Jira Cloud; Jira Data Center requires a slightly different base URL format)
- Your Atlassian instance URL in the format https://your-domain.atlassian.net
- An Atlassian API token generated from id.atlassian.com/manage-profile/security/api-tokens
- Your Atlassian account email address associated with the token
- At least View permission on the Jira projects you want to query in Retool
Step-by-step guide
Generate an Atlassian API token
Navigate to id.atlassian.com/manage-profile/security/api-tokens in your browser. Click 'Create API token', give it a label like 'Retool Integration', and click 'Create'. Copy the token value immediately — Atlassian will not show it again after you close the dialog. This token is associated with your Atlassian account, so all Jira actions taken through it will be attributed to you. If you are setting up Retool for a team and want actions attributed to a service account, create a dedicated Atlassian account with the appropriate Jira permissions, generate the token from that account, and use that account's email in Retool. The token grants access to all Atlassian products your account can access, so treat it with the same sensitivity as a password. In Retool, you will store it as a configuration variable rather than hardcoding it in the resource settings.
Pro tip: API tokens in Atlassian do not expire automatically, but you can revoke and regenerate them at any time from the API tokens page. Set a calendar reminder to rotate them quarterly.
Expected result: An Atlassian API token string is copied and ready to be stored in Retool. The token is visible on the API tokens page and can be revoked from there.
Configure the native Jira resource in Retool
In Retool, go to the Resources tab in the left sidebar and click '+ Create new resource'. Scroll through the connector list and find 'Jira' under the Productivity or Project Management category. Click it to open the configuration panel. Fill in the Name field with something descriptive, such as 'Jira (Engineering)'. For Host, enter your Atlassian domain in the format your-domain.atlassian.net — do not include 'https://' here; Retool prepends the protocol automatically. In the Email field, enter the email address associated with your Atlassian account. In the API token field, paste the token you generated in the previous step. Leave the Base path at its default (/rest/api/3/ for Jira Cloud). Click 'Test connection' — Retool will make a request to the Jira myself API endpoint to verify credentials. A successful test shows a green checkmark and your Atlassian account details. Click 'Save resource'. The Jira resource is now available in the query editor for all apps in your organization.
Pro tip: If you have both Jira Cloud and Jira Data Center instances, create separate resources for each. Data Center uses a different base path (/rest/api/2/) and may require VPN or IP whitelisting for Retool Cloud to reach.
Expected result: A Jira resource appears in your Resources list with a green connection status and your Atlassian account display name shown in the test result.
Search issues with JQL in the query editor
Open your Retool app and create a new query in the Code panel. Select your Jira resource. In the Operation dropdown, select 'Search Issues'. This reveals a JQL field where you write your search query. JQL is Jira's native search syntax — the same language used in Jira's Issue Navigator. For a basic query, enter: project = 'ENG' AND status != Done ORDER BY priority DESC. To make the JQL dynamic, reference Retool component values: project = {{ projectSelect.value }} AND status = '{{ statusFilter.value }}' AND text ~ '{{ searchInput.value }}' ORDER BY updated DESC. Add a maxResults parameter to limit the page size (default is 50, maximum is 100). If you need more fields than the default response includes, add a fields parameter listing the field IDs you want — common ones include summary, status, priority, assignee, reporter, created, updated, duedate, labels, and customfield_XXXXX for custom fields. The response includes a total count and an issues array. Name this query searchIssues and click Run to test.
1// JQL query to search issues across multiple projects2// Reference Retool components for dynamic filtering34project in ('ENG', 'OPS', 'INFRA')5 AND status NOT IN (Done, Closed)6 AND priority in (High, Critical)7 AND assignee = {{ assigneeFilter.value || 'EMPTY' }}8 AND updated >= {{ dateRange.start }}9ORDER BY priority DESC, updated DESCPro tip: Use Jira's issue navigator in your browser to test JQL queries interactively before putting them into Retool. Open Jira → Issues → Advanced search → switch to JQL mode.
Expected result: The query returns a JSON response with an issues array and a total count. Each issue contains id, key, summary, status, priority, and assignee fields based on your JQL and fields configuration.
Display issues in a Table and add status transitions
Drag a Table component from the component panel onto your app canvas. Set its Data source to {{ searchIssues.data.issues }} — note the .issues path because Jira wraps results in an outer object. In the Table column configuration, add columns for key (set type to Link to open the issue in Jira using https://your-domain.atlassian.net/browse/{{ self }}), summary, status.name (rename to 'Status'), priority.name (rename to 'Priority'), and assignee.displayName (rename to 'Assignee'). To enable status transitions from the table, create a new query using the Transition Issue operation. Set the Issue ID parameter to {{ table1.selectedRow.id }}. For the transition ID, you need to first query available transitions: create a Get Transitions query with Issue ID set to {{ table1.selectedRow.id }}, which returns the valid transitions for that issue's current status. Build a Select component that maps transition IDs to display names from the Get Transitions query result, then use the selected value in your Transition Issue query. Wire a 'Transition' button to run getTransitions first, then display the Select, and finally run transitionIssue on confirmation. On success, trigger searchIssues to refresh the table.
1// Transformer: flatten Jira issue response for Table display2const issues = data.issues || [];3return issues.map(issue => ({4 id: issue.id,5 key: issue.key,6 summary: issue.fields.summary,7 status: issue.fields.status?.name ?? 'Unknown',8 statusCategory: issue.fields.status?.statusCategory?.name ?? '',9 priority: issue.fields.priority?.name ?? 'None',10 assignee: issue.fields.assignee?.displayName ?? 'Unassigned',11 reporter: issue.fields.reporter?.displayName ?? '',12 updated: new Date(issue.fields.updated).toLocaleDateString(),13 dueDate: issue.fields.duedate ?? ''14}));Pro tip: Use the Table component's row color feature to visually highlight overdue issues. In Table properties → Row color, add a conditional: return row.dueDate && new Date(row.dueDate) < new Date() ? '#fef2f2' : 'transparent'.
Expected result: A Table displays Jira issues with clickable issue keys, color-coded status badges, and a row selection that enables the transition workflow.
Build an issue creation form
To create new Jira issues from Retool, drag a Form component onto your canvas and add the following inputs inside it: a Select component for Project (query available projects using the List Projects operation and set options to {{ listProjects.data.values.map(p => ({ label: p.name, value: p.id })) }}), a Select for Issue Type (query using Get Issue Types for Project with the selected project ID), a TextInput for Summary, a TextArea for Description, a Select for Priority with static options (Highest, High, Medium, Low, Lowest), and a Select for Assignee (query project members). Create a new query using the Create Issue operation. Map the form fields to the query parameters: project.id to the project select value, issuetype.id to the issue type value, summary to the summary input value, description to the description textarea, and priority.name to the priority select value. In the Form's Submit event handler, trigger the createIssue query. On the query's Success event handler, add Show Notification ('Issue created: ' + createIssue.data.key) and trigger searchIssues to refresh the table. For complex integrations involving multiple Jira projects, custom field mappings, and automated Workflows, RapidDev's team can help architect and build your Retool solution.
1// Create Issue query body configuration2// Set Operation to 'Create Issue' in the Jira native connector3{4 "fields": {5 "project": { "id": "{{ projectSelect.value }}" },6 "issuetype": { "id": "{{ issueTypeSelect.value }}" },7 "summary": "{{ summaryInput.value }}",8 "description": {9 "type": "doc",10 "version": 1,11 "content": [{12 "type": "paragraph",13 "content": [{ "type": "text", "text": "{{ descriptionInput.value }}" }]14 }]15 },16 "priority": { "name": "{{ prioritySelect.value }}" },17 "assignee": { "id": "{{ assigneeSelect.value }}" }18 }19}Pro tip: Jira's description field uses Atlassian Document Format (ADF) — a structured JSON format, not plain text. The code example above shows the minimal ADF structure for a plain paragraph. For richer descriptions, build a more complex ADF document in a JavaScript transformer.
Expected result: Submitting the form creates a new Jira issue and the confirmation shows the new issue key (e.g., 'Issue created: ENG-247'). The Table refreshes to include the newly created issue.
Common use cases
Build a cross-project issue triage dashboard
Your ops team needs to review all open high-priority bugs across five Jira projects every morning. The Retool dashboard uses JQL to fetch all issues with priority = High AND status != Done, displays them in a Table with project, assignee, status, and age columns, and includes buttons to transition issues to In Progress or reassign them to different team members — all without navigating into individual Jira tickets.
Build a triage dashboard that shows all open issues with priority = 'High' or 'Critical' across all projects. Display columns for key, summary, project, assignee, status, and created date. Add a button to transition selected issues to 'In Progress' and a dropdown to reassign to a team member.
Copy this prompt to try it in Retool
Create a sprint health and burndown panel
Engineering managers want a live view of sprint progress: how many story points are complete, how many remain, which issues are blocked, and whether the team is on track. The Retool app queries the active sprint for a given board, aggregates points by status using a JavaScript transformer, and displays a burndown chart alongside a table of blocked issues that need attention.
Build a sprint dashboard for a given Jira board ID. Show the active sprint name and end date at the top. Display a pie chart of issues by status (To Do, In Progress, Done, Blocked). List all blocked issues in a table with assignee and last updated date. Add a filter to switch between multiple boards.
Copy this prompt to try it in Retool
Build a customer escalation issue creator
Your support team needs to create Jira issues directly from a Retool customer dashboard when a customer reports a bug. The form pre-fills the project and issue type, pulls the customer's name and account ID from a PostgreSQL query, and creates a Jira issue with a structured description including customer context. After creation, the issue key is stored back in the customer database for tracking.
Build an issue creation form that creates a Jira bug in the 'Customer Issues' project. Pre-populate the description with the selected customer's name, subscription tier, and account ID from the customers table. After successful creation, update the customers table with the new Jira issue key.
Copy this prompt to try it in Retool
Troubleshooting
Test connection fails with 'Invalid credentials' or 401 error
Cause: The API token, email address, or host domain is incorrect. A common mistake is including 'https://' in the Host field, using the wrong email address (e.g., a different Atlassian account than the one used to generate the token), or entering a workspace name rather than the full subdomain.
Solution: Verify the Host field contains only your-domain.atlassian.net without any protocol prefix. Confirm the email matches the Atlassian account used to generate the token by logging into id.atlassian.com and checking account details. Regenerate the API token if there is any doubt about its validity.
JQL query returns 400 Bad Request with 'invalid JQL' message
Cause: The JQL syntax is malformed, a project key does not exist, a field name is invalid, or a dynamic Retool expression injected an unexpected value (such as an empty string or undefined) into the JQL string.
Solution: Test the JQL in Jira's own Advanced search interface first. For dynamic values, add null checks in the JQL expression to avoid injecting empty values: project = '{{ projectSelect.value || 'ENG' }}'. Use single quotes around string values in JQL. Project keys are case-insensitive but field names must match Jira's schema exactly.
1// Add fallback values to prevent invalid JQL from empty components2project = '{{ projectSelect.value || 'ENG' }}'3 AND status in ({{ statusFilter.value ? '\'' + statusFilter.value + '\'' : 'Open, In Progress' }})4 AND updated >= '{{ dateRange.start || '-30d' }}'Transition Issue query fails with 'Workflow transition not available'
Cause: The selected transition is not valid for the issue's current status, or the user account associated with the API token does not have permission to perform the transition in that project's workflow.
Solution: Always query Get Transitions for the specific issue before attempting a transition — the available transitions depend on the current status and the user's project role. Verify in Jira (Project Settings → Workflows) that your account has the required transition permissions. Some transitions require certain conditions to be met (e.g., all sub-tasks resolved).
Custom field values are missing from query results
Cause: Jira's issue search API only returns a default set of fields. Custom fields (with IDs like customfield_10001) are not included unless explicitly requested in the fields parameter.
Solution: In your Search Issues query, add the custom field IDs to the fields list. Find custom field IDs in Jira (Settings → Issues → Custom Fields → select field → ID is in the URL) or by running a query with fields set to '*all' and inspecting the response to find the field IDs.
Best practices
- Create a dedicated Atlassian service account for your Retool integration rather than using a personal account — this ensures the connection remains active when team members leave and makes it easier to manage permissions.
- Store the Atlassian API token as a secret configuration variable in Retool (Settings → Configuration Variables → mark as secret) rather than embedding it directly in the resource settings, so it is never exposed in exports or version control.
- Use the Get Transitions operation to dynamically fetch valid transitions for each issue rather than hardcoding transition IDs — workflow configurations change over time and hardcoded IDs break when transitions are renamed or reordered.
- Add the maxResults parameter to all Search Issues queries and implement server-side pagination using Retool's Table pagination feature — Jira queries without pagination will silently truncate results at the default limit.
- Build separate Retool apps for different audiences (e.g., one app for sprint management used by engineers, another for escalations used by support), rather than one monolithic app — this keeps each app's permission requirements minimal.
- Use Retool Workflows instead of in-app queries for complex Jira automations like automated triage rules, SLA monitoring, or bulk operations — Workflows provide retry logic, error handling, and audit logging.
- Test JQL queries in Jira's own Advanced search interface before using them in Retool to avoid syntax errors and verify the results match expectations.
Alternatives
ClickUp connects via REST API Resource (no native connector) and is a better fit if your team uses ClickUp's task hierarchy, custom statuses, and time tracking features rather than Jira's sprint-based workflow.
Asana connects via REST API Resource and suits teams focused on task and project management with a simpler structure than Jira's issue tracking and sprint system.
Confluence shares Atlassian authentication with Jira and is the natural companion integration if you also need to read or update documentation pages alongside Jira issue data.
Frequently asked questions
Does Retool support Jira Data Center or only Jira Cloud?
Retool's native Jira connector is primarily designed for Jira Cloud. Jira Data Center (self-hosted) can be connected using a REST API Resource with basic auth or personal access token, but the base URL will be your internal server address. If your Data Center instance is behind a firewall, you will need to whitelist Retool's IP ranges or use a self-hosted Retool deployment with direct VPC access.
Can I use JQL to filter issues by custom fields?
Yes. Custom fields in JQL are referenced by their field name (if it is a standard text name) or by cf[FIELD_ID] syntax. For example: cf[10001] = 'Approved'. Find your custom field IDs in Jira's Administration panel under Issues → Custom Fields — the field ID is visible in the URL when you edit a field. You can also use the custom field's name directly in JQL if it is unique within your instance.
How do I display Jira issue status with color-coded badges in Retool?
In the Table component, set the status column type to 'Tag'. Each tag value maps to a color — configure the color mapping in the column settings using the status category names (To Do = gray, In Progress = blue, Done = green). Alternatively, use a Transformer to add a statusColor field to each row and reference it in the Table's row color configuration.
Can multiple Retool users share the same Jira resource, or does each person need their own credentials?
By default, all Retool users share the same resource credentials (the service account token). This means all actions in Jira are attributed to that service account. If you need per-user attribution (so actions show the actual user's name in Jira), configure the resource to use per-user OAuth 2.0 authentication — each user authenticates with their own Atlassian account. This requires a more complex OAuth setup with an Atlassian Connected App.
Is there a limit to how many Jira issues Retool can fetch in one query?
Jira's Search Issues API returns a maximum of 100 issues per request. For larger result sets, implement pagination by using the startAt parameter (set to the page offset) and making multiple requests. Retool's Table component supports server-side pagination — set Pagination type to 'Server-side' and use the table's paginationOffset variable as the startAt value in your query.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation