Jira
Let hires search, read, create, update, move, comment on and assign Jira issues and plan sprints, on Jira Cloud or your own Jira Data Center.
Explore 10 actions and their permissionsExact inputs, sign-in scopes, access limits and approval rules.
With Jira, a hire can:
- list your projects and search issues with JQL, the way your team already does,
- read an issue with its description, labels and latest comments,
- create issues, change their summary, description, labels or priority,
- move an issue to another status by name ("move WEB-12 to In Progress"), through your workflow,
- comment, assign an issue to someone by name or email, or unassign it,
- see a project's active and upcoming sprints and move an issue into one.
It works on Jira Cloud (atlassian.net) and on Jira Data Center or Server that you run yourself.
1. Choose how Roster signs in
| You use | Sign in with | You need |
|---|---|---|
| Jira Cloud | Email and API token | an Atlassian account and an API token |
| Jira Cloud | An OAuth app of yours | an OAuth 2.0 app at developer.atlassian.com |
| Jira Data Center or Server | Personal access token | a personal access token from your Jira |
What hires do shows as the account the token or app belongs to, so you may want a Jira account just for Roster, with access to the projects hires work in.
Jira Cloud: an API token
- Open your Atlassian API tokens (the form in Roster links there too), signed in as the account hires should act as.
- Click Create API token, name it
Rosterand copy it.
Jira Cloud: an OAuth app
- At developer.atlassian.com/console/myapps,
click Create → OAuth 2.0 integration and name it
Roster. - Under Permissions, add Jira API with
read:jira-work,write:jira-workandread:jira-user, and for sprints the Jira Software scopesread:board-scope:jira-software,read:sprint:jira-software,write:sprint:jira-softwareandread:project:jira. - Under Authorization, set the callback URL to the address Roster shows on the Jira
connection. It ends in
/api/integrations/jira/oauth/callback. - Under Settings, copy the Client ID and Secret.
Jira Data Center or Server: a personal access token
- In Jira, click your avatar → Profile → Personal Access Tokens → Create token.
- Name it
Roster, choose when it expires, and copy it.
2. Connect it in Roster
- Open Integrations → Tools → Add a tool, search for Jira and choose it.
- How Roster signs in: pick the way you chose above. Only its fields are shown.
- Paste the email and API token, the personal access token, or the OAuth app's client ID and secret.
- Jira address: the address you open Jira at, like
https://acme.atlassian.net, or your own server's address with any path, likehttps://jira.example.com/jira. - Click Connect. With an API token or a personal access token, Roster asks Jira who it belongs to, and the connection shows Connected as that account and your site. If Jira refuses it, Roster says so and saves nothing. With an OAuth app, then click Connect with Jira on the new connection, choose your site and click Accept.
3. Give hires access
On the hire's Tools tab, click Give access on Jira:
- Read only: it can list projects, search and read issues and see sprints, and nothing else.
- Read and write: it can also create, update, move, comment on and assign issues and add them to sprints.
- Projects: project keys like
WEB. Leave it empty for every project the account can reach. Anything outside the list is refused, including searches: a hire's JQL only ever runs inside its projects.
Hires refer to issues by key, like WEB-12, and to statuses, people and sprints by name. When
an issue can't move to the status asked for, the hire is told which statuses it can move to.
Watching for changes
A hire's responsibility can watch Jira: when issues in its projects change, the hire is woken with the list. Checking is one search and costs nothing when nothing changed.
If something goes wrong
- "Didn't accept the connection's credential": the API token or personal access token was revoked or expired, or the email doesn't match the token's account.
- "The app was approved for … not …": with an OAuth app, connect again and pick the site in your Jira address.
- "Can't move to …": your workflow has no transition from the issue's status to that one; the message lists the ones it has.
- Sprints are empty: sprints come from Scrum boards; a project with only a Kanban board has none.
Tools and permissions reference
This reference is built from the same definitions Roster uses to connect Jira and give hires access. It updates with each release.
Authentication and requested permissions
The account or app you connect sets the outer limit. Each hire's access can narrow it further. Connecting a tool gives it to no hire until you give access on that hire's Tools tab.
User name and password or key pair
The email of the Atlassian account hires act as. Make the token at id.atlassian.com → Security → API tokens.
For: How Roster signs in: Jira Cloud: email and API token.
API key or access token
In Jira: your avatar → Profile → Personal Access Tokens → Create token.
For: How Roster signs in: Jira Data Center or Server: personal access token.
OAuth 2.0
From the OAuth 2.0 (3LO) app you made at developer.atlassian.com.
For: How Roster signs in: Jira Cloud: an OAuth app of yours.
Requested scopes:
read:jira-workwrite:jira-workread:jira-userread:board-scope:jira-softwareread:sprint:jira-softwarewrite:sprint:jira-softwareread:project:jiraoffline_access
Connection fields
| Field | What to provide |
|---|---|
How Roster signs insignInOptional | Jira Cloud (atlassian.net) with an API token is quickest. Data Center and Server use a personal access token. Choices: Jira Cloud: email and API token (cloud-token); Jira Cloud: an OAuth app of yours (cloud-oauth); Jira Data Center or Server: personal access token (datacenter). Starts with: |
Atlassian account emailemailRequired | The email of the Atlassian account hires act as. Make the token at id.atlassian.com → Security → API tokens. Shown when |
API tokenapiTokenRequired · sealed secret | Use the value for your account or connection. Shown when |
Personal access tokenpersonalTokenRequired · sealed secret | In Jira: your avatar → Profile → Personal Access Tokens → Create token. Shown when |
OAuth app client IDclientIdOptional | From the OAuth 2.0 (3LO) app you made at developer.atlassian.com. Shown when |
OAuth app client secretclientSecretOptional · sealed secret | Use the value for your account or connection. Shown when |
Jira addressurlRequired | The address you open Jira at: https://acme.atlassian.net for Cloud, or your own server's address (with any path, like /jira). |
Per-hire limits
Read-only hires receive only actions that read. Read-and-write access also allows actions that change things, where the connection itself permits them. An empty resource allowlist usually means everything the connected account can reach; each field below explains its meaning.
| Field | What to provide |
|---|---|
ProjectsprojectsOptional | Project keys like WEB, one per line. Leave empty for every project the account can reach. |
Actions
10 actions: 4 only read and 6 change something. A read action may still need approval when your workspace or hire is set to ask. A locked approval requirement always applies.
10 of 10 actions. Open an action for its arguments and full input schema.
list_projectsRead only
The Jira projects this hire can use, with their keys.
Approval: Uses your workspace and hire approval settings.
This action takes no arguments.
Full input schema (JSON)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {}
}search_issuesRead only
Search issues with JQL, e.g. assignee = currentUser() AND statusCategory != Done, or text ~ "login". Most recently updated first unless the JQL says ORDER BY.
Approval: Uses your workspace and hire approval settings.
| Argument | Type | Details |
|---|---|---|
jqlOptional | string | a JQL query; empty for the latest issuesDefault: "" |
limitOptional | integer | See input schema below.Default: 20 |
Full input schema (JSON)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"jql": {
"default": "",
"description": "a JQL query; empty for the latest issues",
"type": "string"
},
"limit": {
"default": 20,
"type": "integer",
"minimum": 1,
"maximum": 50
}
}
}get_issueRead only
An issue's description, status, assignee, labels and latest comments.
Approval: Uses your workspace and hire approval settings.
| Argument | Type | Details |
|---|---|---|
keyRequired | string | issue key, e.g. WEB-12 |
Full input schema (JSON)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"key": {
"type": "string",
"pattern": "^([A-Za-z][A-Za-z0-9_]{0,19})-(\\d+)$",
"description": "issue key, e.g. WEB-12"
}
},
"required": [
"key"
]
}create_issueRead and write
Create an issue in a project.
Approval: Uses your workspace and hire approval settings.
| Argument | Type | Details |
|---|---|---|
projectRequired | string | project key, e.g. WEB |
summaryRequired | string | See input schema below. |
typeOptional | string | issue type name, e.g. Task, Bug, StoryDefault: "Task" |
descriptionOptional | string | plain text; blank lines start new paragraphsDefault: "" |
labelsOptional | string[] | See input schema below.Default: [] |
priorityOptional | string | a priority name, e.g. High |
Full input schema (JSON)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"project": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,19}$",
"description": "project key, e.g. WEB"
},
"summary": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"type": {
"default": "Task",
"description": "issue type name, e.g. Task, Bug, Story",
"type": "string"
},
"description": {
"default": "",
"description": "plain text; blank lines start new paragraphs",
"type": "string"
},
"labels": {
"default": [],
"type": "array",
"items": {
"type": "string",
"pattern": "^\\S+$"
}
},
"priority": {
"description": "a priority name, e.g. High",
"type": "string"
}
},
"required": [
"project",
"summary"
]
}update_issueRead and write
Change an issue's summary, description, labels or priority. Only what's given changes.
Approval: Uses your workspace and hire approval settings.
| Argument | Type | Details |
|---|---|---|
keyRequired | string | issue key, e.g. WEB-12 |
summaryOptional | string | See input schema below. |
descriptionOptional | string | replaces the description; plain text |
labelsOptional | string[] | replaces the labels |
priorityOptional | string | See input schema below. |
Full input schema (JSON)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"key": {
"type": "string",
"pattern": "^([A-Za-z][A-Za-z0-9_]{0,19})-(\\d+)$",
"description": "issue key, e.g. WEB-12"
},
"summary": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"description": {
"description": "replaces the description; plain text",
"type": "string"
},
"labels": {
"description": "replaces the labels",
"type": "array",
"items": {
"type": "string",
"pattern": "^\\S+$"
}
},
"priority": {
"type": "string"
}
},
"required": [
"key"
]
}transition_issueRead and write
Move an issue to another status by name, e.g. In Progress or Done, through its workflow.
Approval: Uses your workspace and hire approval settings.
| Argument | Type | Details |
|---|---|---|
keyRequired | string | issue key, e.g. WEB-12 |
statusRequired | string | the status to move to, or the transition's name |
Full input schema (JSON)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"key": {
"type": "string",
"pattern": "^([A-Za-z][A-Za-z0-9_]{0,19})-(\\d+)$",
"description": "issue key, e.g. WEB-12"
},
"status": {
"type": "string",
"minLength": 1,
"description": "the status to move to, or the transition's name"
}
},
"required": [
"key",
"status"
]
}commentRead and write
Comment on an issue.
Approval: Uses your workspace and hire approval settings.
| Argument | Type | Details |
|---|---|---|
keyRequired | string | issue key, e.g. WEB-12 |
bodyRequired | string | plain text |
Full input schema (JSON)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"key": {
"type": "string",
"pattern": "^([A-Za-z][A-Za-z0-9_]{0,19})-(\\d+)$",
"description": "issue key, e.g. WEB-12"
},
"body": {
"type": "string",
"minLength": 1,
"description": "plain text"
}
},
"required": [
"key",
"body"
]
}assign_issueRead and write
Assign an issue to someone by name or email, or "none" to unassign.
Approval: Uses your workspace and hire approval settings.
| Argument | Type | Details |
|---|---|---|
keyRequired | string | issue key, e.g. WEB-12 |
assigneeRequired | string | a name or email, or "none" |
Full input schema (JSON)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"key": {
"type": "string",
"pattern": "^([A-Za-z][A-Za-z0-9_]{0,19})-(\\d+)$",
"description": "issue key, e.g. WEB-12"
},
"assignee": {
"type": "string",
"minLength": 1,
"description": "a name or email, or \"none\""
}
},
"required": [
"key",
"assignee"
]
}list_sprintsRead only
A project's active and upcoming sprints, from its Scrum boards.
Approval: Uses your workspace and hire approval settings.
| Argument | Type | Details |
|---|---|---|
projectRequired | string | project key, e.g. WEB |
Full input schema (JSON)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"project": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,19}$",
"description": "project key, e.g. WEB"
}
},
"required": [
"project"
]
}add_to_sprintRead and write
Move an issue into one of its project's active or upcoming sprints, by the sprint's name.
Approval: Uses your workspace and hire approval settings.
| Argument | Type | Details |
|---|---|---|
keyRequired | string | issue key, e.g. WEB-12 |
sprintRequired | string | the sprint's name |
Full input schema (JSON)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"key": {
"type": "string",
"pattern": "^([A-Za-z][A-Za-z0-9_]{0,19})-(\\d+)$",
"description": "issue key, e.g. WEB-12"
},
"sprint": {
"type": "string",
"minLength": 1,
"description": "the sprint's name"
}
},
"required": [
"key",
"sprint"
]
}Watches and incoming events
- This integration supports a responsibility that watches for changes. The guide above explains what it checks and how to limit it.
- No incoming webhook handler is declared for this integration.
Limits and troubleshooting
- Permission errors: check both the connected account's rights and the hire's resource and read/write limits.
- Expired or revoked access: reconnect or replace the key on the connection.
- Rate limits and unavailable services can interrupt work. The hire's timecard records the outcome.
- The action schema describes accepted inputs. It does not grant additional access or bypass approvals.