What It Can Do
| Category | Capability |
|---|---|
| Issues | Create, read, update, delete, assign, and transition issues, individually or in bulk. Search with JQL, read changelogs, and manage comments, attachments, issue links, remote links, watchers, and votes. |
| Worklogs | Log time against an issue, and read, update, or delete existing worklog entries. |
| Projects | Search and read project details, and manage components and versions. |
| Boards and Sprints | Read Scrum and Kanban boards, read and create sprints, move issues into a sprint, and read the issues on a board or in a sprint. |
| Users | Search users, look up a specific user or the current authenticated user, and find users assignable to an issue or project. |
| Reference Data | Read labels, priorities, statuses, issue types, fields, and field options. |
| Filters and Dashboards | Create, read, update, and delete saved JQL filters, and read dashboards. |
Connecting
Register an OAuth app
Go to the Atlassian Developer Console and select Create → OAuth 2.0 integration. Give the app a name, for example “Airia Jira,” and save.
Add the callback URL
Select Authorization in the left sidebar, then click Add next to OAuth 2.0 (3LO). Add the following callback URL and save:
Add API permissions
Select Permissions in the left sidebar, click Add next to the Jira API, and enable every scope listed under Tools and Required Scopes below. The Granting All Scopes section has both scope lists ready to paste in.
Find your Cloud ID
Your Cloud ID is a UUID Airia uses to reach your specific Jira site. Visit the following URL, replacing
{your-site} with your Atlassian domain, and copy the cloudId value from the response:The OAuth Scopes field in Airia is optional. Leave it blank to request the standard scopes above, or fill it in to request a different set. If you customize it, make sure to include
offline_access so your connection can refresh automatically.Tools and Required Scopes
Every tool below needs a specific Jira scope before it will work. Tool names are what an agent actually calls, the same names you’d see in an agent’s tool call log.Atlassian scopes come in two flavors. Classic scopes are broad and recommended, granting one alone is enough for every tool that lists one. Granular scopes are narrower and only needed if you’re building an OAuth app without classic scopes, in which case a tool needs every listed granular scope granted together. A few tools, mostly Jira Software board and sprint tools, have no classic equivalent at all and always need their granular scope(s) regardless of which approach you use.
Issues
| Tool | What it does | Scope(s) required |
|---|---|---|
jira_cloud_rest_api_searchissuesjql | Search Jira issues using JQL query language. | read:jira-work (Classic) or read:issue-details:jira and read:field.default-value:jira and read:field.option:jira and read:field:jira and read:group:jira (Granular) |
jira_cloud_rest_api_getsearchapproximatecount | Get approximate count of issues matching JQL. | read:jira-work (Classic) or read:issue-details:jira and read:field.default-value:jira and read:field.option:jira and read:field:jira and read:group:jira (Granular) |
jira_cloud_rest_api_bulkfetchissues | Fetch multiple issues by ID in bulk. | read:jira-work (Classic) or read:issue-meta:jira and read:issue-security-level:jira and read:issue.vote:jira and read:issue.changelog:jira and read:avatar:jira and read:issue:jira and read:status:jira and read:user:jira and read:field-configuration:jira (Granular) |
jira_cloud_rest_api_getissue | Get a single Jira issue by key or ID. | read:jira-work (Classic) or read:issue-meta:jira and read:issue-security-level:jira and read:issue.vote:jira and read:issue.changelog:jira and read:avatar:jira and read:issue:jira and read:status:jira and read:user:jira and read:field-configuration:jira (Granular) |
jira_cloud_rest_api_updateissue | Update an existing Jira issue. | write:jira-work (Classic) or write:issue:jira (Granular) |
jira_cloud_rest_api_deleteissue | Delete a Jira issue permanently. | write:jira-work (Classic) or delete:issue:jira (Granular) |
jira_cloud_rest_api_createissue | Create a new Jira issue. | write:jira-work (Classic) or write:issue:jira and write:comment:jira and write:comment.property:jira and write:attachment:jira and read:issue:jira (Granular) |
jira_cloud_rest_api_getissuetransitions | Get available workflow transitions for an issue. | read:jira-work (Classic) or read:issue.transition:jira and read:status:jira and read:field-configuration:jira (Granular) |
jira_cloud_rest_api_transitionissue | Transition an issue to a new status. | write:jira-work (Classic) or write:issue:jira and write:issue.property:jira (Granular) |
jira_cloud_rest_api_assignissue | Assign an issue to a user. | write:jira-work (Classic) or write:issue:jira (Granular) |
jira_cloud_rest_api_getissuechangelog | Get issue change history. | read:jira-work (Classic) or read:issue-meta:jira and read:avatar:jira and read:issue.changelog:jira (Granular) |
jira_cloud_rest_api_bulkcreateissues | Bulk create multiple issues. | write:jira-work (Classic) or write:issue:jira and write:comment:jira and write:comment.property:jira and write:attachment:jira and read:issue:jira (Granular) |
jira_cloud_rest_api_bulktransitionissues | Bulk transition multiple issues. | write:jira-work (Classic) or write:issue:jira and read:issue:jira (Granular) |
Comments
| Tool | What it does | Scope(s) required |
|---|---|---|
jira_cloud_rest_api_getcomments | Get comments on an issue. | read:jira-work (Classic) or read:comment:jira and read:comment.property:jira and read:group:jira and read:project:jira and read:project-role:jira and read:user:jira and read:avatar:jira (Granular) |
jira_cloud_rest_api_addcomment | Add a comment to an issue. | write:jira-work (Classic) or read:comment:jira and read:comment.property:jira and read:group:jira and read:project:jira and read:project-role:jira and read:user:jira and write:comment:jira and read:avatar:jira (Granular) |
jira_cloud_rest_api_updatecomment | Update an existing comment. | write:jira-work (Classic) or read:comment:jira and read:comment.property:jira and read:group:jira and read:project:jira and read:project-role:jira and read:user:jira and write:comment:jira and read:avatar:jira (Granular) |
jira_cloud_rest_api_deletecomment | Delete a comment from an issue. | write:jira-work (Classic) or delete:comment:jira and delete:comment.property:jira (Granular) |
Attachments
| Tool | What it does | Scope(s) required |
|---|---|---|
jira_cloud_rest_api_getattachments | Get attachments on an issue. | read:jira-work (Classic) or read:issue-meta:jira and read:issue-security-level:jira and read:issue.vote:jira and read:issue.changelog:jira and read:avatar:jira and read:issue:jira and read:status:jira and read:user:jira and read:field-configuration:jira (Granular) |
jira_cloud_rest_api_addattachment | Add an attachment to an issue. | write:jira-work (Classic) or read:user:jira and write:attachment:jira and read:attachment:jira and read:avatar:jira (Granular) |
jira_cloud_rest_api_deleteattachment | Delete an attachment. | write:jira-work (Classic) or delete:attachment:jira (Granular) |
Issue Links
| Tool | What it does | Scope(s) required |
|---|---|---|
jira_cloud_rest_api_linkissues | Create a link between two issues. | write:jira-work (Classic) or write:comment:jira and write:issue:jira and write:issue-link:jira (Granular) |
jira_cloud_rest_api_deleteissuelink | Delete a link between issues. | write:jira-work (Classic) or delete:issue-link:jira (Granular) |
jira_cloud_rest_api_getremotelinks | Get remote links on an issue. | read:jira-work (Classic) or read:issue.remote-link:jira and read:status:jira (Granular) |
jira_cloud_rest_api_addremotelink | Add a remote/external link to an issue. | write:jira-work (Classic) or write:issue:jira and write:issue.remote-link:jira and read:issue.remote-link:jira (Granular) |
Worklogs
| Tool | What it does | Scope(s) required |
|---|---|---|
jira_cloud_rest_api_getworklogs | Get work logs (time entries) on an issue. | read:jira-work (Classic) or read:group:jira and read:issue-worklog:jira and read:issue-worklog.property:jira and read:project-role:jira and read:user:jira and read:avatar:jira (Granular) |
jira_cloud_rest_api_addworklog | Log time/work on an issue. | write:jira-work (Classic) or write:issue-worklog:jira and write:issue-worklog.property:jira and read:avatar:jira and read:group:jira and read:issue-worklog:jira and read:project-role:jira and read:user:jira and read:issue-worklog.property:jira (Granular) |
jira_cloud_rest_api_updateworklog | Update a work log entry. | write:jira-work (Classic) or read:comment:jira and read:group:jira and read:issue-worklog:jira and read:issue-worklog.property:jira and read:project-role:jira and read:user:jira and write:comment:jira and write:issue-worklog:jira and write:issue-worklog.property:jira and read:avatar:jira (Granular) |
jira_cloud_rest_api_deleteworklog | Delete a work log entry. | write:jira-work (Classic) or delete:issue-worklog:jira and delete:issue-worklog.property:jira and write:issue.time-tracking:jira (Granular) |
Watchers
| Tool | What it does | Scope(s) required |
|---|---|---|
jira_cloud_rest_api_getwatchers | Get users watching an issue. | read:jira-work (Classic) or read:issue.watcher:jira and read:user:jira and read:avatar:jira (Granular) |
jira_cloud_rest_api_addwatcher | Add a watcher to an issue. | write:jira-work (Classic) or write:issue.watcher:jira (Granular) |
jira_cloud_rest_api_removewatcher | Remove a watcher from an issue. | write:jira-work (Classic) or write:issue.watcher:jira (Granular) |
Votes
| Tool | What it does | Scope(s) required |
|---|---|---|
jira_cloud_rest_api_getvotes | Get votes on an issue. | read:jira-work (Classic) or read:issue.vote:jira and read:user:jira and read:application-role:jira and read:avatar:jira and read:group:jira (Granular) |
jira_cloud_rest_api_addvote | Vote for an issue. | write:jira-work (Classic) or write:issue.vote:jira (Granular) |
jira_cloud_rest_api_removevote | Remove your vote from an issue. | write:jira-work (Classic) or write:issue.vote:jira (Granular) |
Projects
| Tool | What it does | Scope(s) required |
|---|---|---|
jira_cloud_rest_api_getprojects | Search and list Jira projects. | read:jira-work (Classic) or read:issue-type:jira and read:project:jira and read:project.property:jira and read:user:jira and read:application-role:jira and read:avatar:jira and read:group:jira and read:issue-type-hierarchy:jira and read:project-category:jira and read:project-version:jira and read:project.component:jira (Granular) |
jira_cloud_rest_api_getproject | Get a specific project’s details. | read:jira-work (Classic) or read:issue-type:jira and read:project:jira and read:project.property:jira and read:user:jira and read:application-role:jira and read:avatar:jira and read:group:jira and read:issue-type-hierarchy:jira and read:project-category:jira and read:project-version:jira and read:project.component:jira (Granular) |
Components
| Tool | What it does | Scope(s) required |
|---|---|---|
jira_cloud_rest_api_getprojectcomponents | Get components in a project. | read:jira-work (Classic) or read:project:jira and read:project.component:jira and read:user:jira and read:application-role:jira and read:avatar:jira and read:group:jira (Granular) |
jira_cloud_rest_api_createcomponent | Create a new component in a project. | manage:jira-project (Classic) or read:project:jira and read:user:jira and write:project.component:jira and read:application-role:jira and read:avatar:jira and read:group:jira and read:project.component:jira (Granular) |
Versions
| Tool | What it does | Scope(s) required |
|---|---|---|
jira_cloud_rest_api_getprojectversions | Get versions/releases in a project. | read:jira-work (Classic) or read:project-version:jira (Granular) |
jira_cloud_rest_api_createversion | Create a new version/release. | manage:jira-project (Classic) or write:project-version:jira and read:project-version:jira (Granular) |
jira_cloud_rest_api_updateversion | Update or release a version. | manage:jira-project (Classic) or write:project-version:jira and read:project-version:jira (Granular) |
Boards
Jira Software’s agile endpoints (Boards and Sprints) have no classic scope equivalent. Their granular scopes are always required, even if you otherwise use classic scopes for everything else.
| Tool | What it does | Scope(s) required |
|---|---|---|
jira_cloud_rest_api_getboards | Get all agile boards (Scrum/Kanban). | read:board-scope:jira-software and read:project:jira |
jira_cloud_rest_api_getboardsprints | Get sprints for a board. | read:sprint:jira-software |
jira_cloud_rest_api_getboardissues | Get issues on a board. | read:board-scope:jira-software and read:issue-details:jira |
Sprints
| Tool | What it does | Scope(s) required |
|---|---|---|
jira_cloud_rest_api_getsprintissues | Get issues in a sprint. | read:sprint:jira-software and read:issue-details:jira and read:jql:jira |
jira_cloud_rest_api_moveissuestosprint | Move issues to a sprint. | write:sprint:jira-software |
jira_cloud_rest_api_createsprint | Create a new sprint. | write:sprint:jira-software |
jira_cloud_rest_api_updatesprint | Update a sprint. | write:sprint:jira-software |
Users
| Tool | What it does | Scope(s) required |
|---|---|---|
jira_cloud_rest_api_searchusers | Search for Jira users. | read:jira-user (Classic) or read:user:jira and read:user.property:jira and read:application-role:jira and read:avatar:jira and read:group:jira (Granular) |
jira_cloud_rest_api_getuser | Get a specific user’s details. | read:jira-user (Classic) or read:application-role:jira and read:group:jira and read:user:jira and read:avatar:jira (Granular) |
jira_cloud_rest_api_getcurrentuser | Get current authenticated user. | read:jira-user (Classic) or read:application-role:jira and read:group:jira and read:user:jira and read:avatar:jira (Granular) |
jira_cloud_rest_api_searchassignableusers | Get users assignable to an issue or project. | read:jira-user (Classic) or read:issue:jira and read:project:jira and read:user:jira and read:application-role:jira and read:avatar:jira and read:group:jira (Granular) |
Reference Data
| Tool | What it does | Scope(s) required |
|---|---|---|
jira_cloud_rest_api_getlabels | Get all labels used in Jira. | read:jira-work (Classic) or read:label:jira (Granular) |
jira_cloud_rest_api_getpriorities | Get all priority levels. | read:jira-work (Classic) or read:priority:jira (Granular) |
jira_cloud_rest_api_getstatuses | Get all status values. | read:jira-work (Classic) or read:status:jira (Granular) |
jira_cloud_rest_api_getissuetypes | Get all issue types. | read:jira-work (Classic) or read:issue-type:jira and read:avatar:jira and read:project-category:jira and read:project:jira (Granular) |
jira_cloud_rest_api_getfields | Get all fields (standard and custom). | read:jira-work (Classic) or read:field:jira and read:avatar:jira and read:project-category:jira and read:project:jira and read:field-configuration:jira (Granular) |
jira_cloud_rest_api_getfieldoptions | Get options for a select/dropdown field. | manage:jira-configuration (Classic) or read:field.option:jira (Granular) |
Filters
| Tool | What it does | Scope(s) required |
|---|---|---|
jira_cloud_rest_api_getfilters | Search saved JQL filters. | read:jira-work (Classic) or read:filter:jira and read:group:jira and read:project:jira and read:project-role:jira and read:user:jira and read:jql:jira and read:application-role:jira and read:avatar:jira and read:issue-type-hierarchy:jira (Granular) |
jira_cloud_rest_api_getfavoritefilters | Get your favorite filters. | read:jira-work (Classic) or read:filter:jira and read:group:jira and read:project:jira and read:project-role:jira and read:user:jira and read:jql:jira and read:application-role:jira and read:avatar:jira and read:issue-type-hierarchy:jira (Granular) |
jira_cloud_rest_api_createfilter | Create a new saved filter. | write:jira-work (Classic) or read:filter:jira and read:group:jira and read:project:jira and read:project-role:jira and read:user:jira and write:filter:jira and read:application-role:jira and read:avatar:jira and read:issue-type-hierarchy:jira and read:issue-type:jira and read:project-category:jira and read:project-version:jira and read:project.component:jira (Granular) |
jira_cloud_rest_api_updatefilter | Update a saved filter. | write:jira-work (Classic) or write:filter:jira and read:filter:jira and read:group:jira and read:project:jira and read:project-role:jira and read:user:jira and read:jql:jira and read:application-role:jira and read:avatar:jira and read:issue-type-hierarchy:jira (Granular) |
jira_cloud_rest_api_deletefilter | Delete a saved filter. | write:jira-work (Classic) or delete:filter:jira (Granular) |
Dashboards
| Tool | What it does | Scope(s) required |
|---|---|---|
jira_cloud_rest_api_getdashboards | Get all dashboards. | read:jira-work (Classic) or read:dashboard:jira and read:group:jira and read:project:jira and read:project-role:jira and read:user:jira and read:application-role:jira and read:avatar:jira and read:issue-type-hierarchy:jira and read:issue-type:jira and read:project-category:jira and read:project-version:jira and read:project.component:jira (Granular) |
Granting All Scopes
If you’d rather not cross-reference the table above tool by tool, enable every scope below in the Atlassian console and every tool becomes available at once. Classic scopesTogether, these two short lists cover every tool in the reference above. The five Classic scopes cover every tool that lists a Classic option, and the Granular list adds the handful of scopes Jira Software’s Boards and Sprints tools need, since those have no Classic equivalent. You don’t need to hunt down the long Granular lists shown per tool above unless you’re deliberately building an OAuth app that avoids Classic scopes entirely.
Troubleshooting
Sign-in fails or a consent screen shows an error
Sign-in fails or a consent screen shows an error
Double check the callback URL on your OAuth app is exactly
https://auth.airia.ai/OAuth/callback, and that your Cloud ID is correct. A wrong Cloud ID connects successfully but every tool call fails, since Airia is pointed at a site that doesn’t match the app’s authorization.A specific tool fails even though the connection works
A specific tool fails even though the connection works
Check the Tools and Required Scopes table above for the exact scope that tool needs, add it to your app registration, and reconnect.
The connection stops working after about an hour
The connection stops working after about an hour
This happens when
offline_access wasn’t included in the granted scopes, so Airia has no way to refresh the session. If you customized the OAuth Scopes field in Airia, add offline_access back in and reconnect.Learn More
- Jira Cloud REST API
- Jira Cloud scopes for OAuth 2.0
- Atlassian Developer Console
- OAuth 2.0 for Atlassian apps
Jira Cloud (API Token)
It exposes the exact same tools as Jira Cloud (OAuth) above, just with a different way of authenticating: every request runs as whichever Atlassian account owns the token, so there’s no OAuth app, no Cloud ID, and no scopes to grant. The token has full access to whatever that account can already do in Jira.Create an API token
Go to your Atlassian API token settings and create a new token. Copy it, along with the email address of the Atlassian account it belongs to.
Base64 encode your credential
Combine your email and token as
{your email}:{your API token}, then Base64 encode the whole string. On macOS or Linux, you can run:The credential Airia needs is the Base64 encoding of
email:apitoken, not the API token by itself. This method authenticates every request with a single token rather than individual user sign-in, so it’s best suited to simpler or single-account setups.