Full-featured Atlassian Jira Cloud REST API v3 skill. Manage issues, sprints, boards, epics, projects, users, and more via direct Jira API calls. Use when ma...
Interact with Atlassian Jira Cloud via REST API v3.
Use Basic Auth with email and API token:
Required Environment Variables:
bash
JIRA_EMAIL=your_email@example.com
JIRA_API_TOKEN=your_api_token
JIRA_DOMAIN=your_domain # e.g. "yourcompany" for yourcompany.atlassian.net
Credentials:
$JIRA_EMAIL$JIRA_API_TOKENhttps://$JIRA_DOMAIN.atlassian.netBase URL:
text
https://$JIRA_DOMAIN.atlassian.net/rest/api/3
Jira Software (Agile) Base URL:
text
https://$JIRA_DOMAIN.atlassian.net/rest/agile/1.0
Generate API Token:
text
Content-Type: application/json
Accept: application/json
Authorization: Basic base64(email:token)
CategoryCountTotal Endpoints122Total Schemas64Jira Software (Agile)51 endpointsBuilds API9 endpointsDeployments API7 endpointsDevInfo API7 endpointsDevOps Components7 endpointsFeature Flags6 endpointsOperations11 endpointsRemote Links5 endpointsSecurity13 endpoints
text
GET /rest/agile/1.0/board
Returns all boards visible to the user.
text
POST /rest/agile/1.0/board
Body:
json
{
"name": "Sprint Board",
"type": "scrum",
"filterId": 12345,
"location": {
"type": "project",
"projectKeyOrId": "PROJ"
}
}
text
GET /rest/agile/1.0/board/{boardId}
text
DELETE /rest/agile/1.0/board/{boardId}
text
GET /rest/agile/1.0/board/{boardId}/configuration
Returns board configuration including column config, estimation type, and ranking info.
text
GET /rest/agile/1.0/board/{boardId}/issue
Query params: startAt, maxResults, jql, validateQuery, fields, expand
text
POST /rest/agile/1.0/board/{boardId}/issue
Body:
json
{
"issues": ["PROJ-1", "PROJ-2"],
"rankBeforeIssue": "PROJ-3",
"rankAfterIssue": "PROJ-4",
"rankCustomFieldId": 10001
}
text
GET /rest/agile/1.0/board/{boardId}/backlog
text
POST /rest/agile/1.0/backlog/{boardId}/issue
Body:
json
{
"issues": ["PROJ-1", "PROJ-2"]
}
text
GET /rest/agile/1.0/board/{boardId}/sprint
text
POST /rest/agile/1.0/sprint
Body:
json
{
"name": "Sprint 1",
"originBoardId": 1,
"startDate": "2024-01-15T00:00:00.000Z",
"endDate": "2024-01-29T00:00:00.000Z",
"goal": "Sprint 1 goal"
}
text
GET /rest/agile/1.0/sprint/{sprintId}
text
PUT /rest/agile/1.0/sprint/{sprintId}
Body:
json
{
"name": "Updated Sprint Name",
"startDate": "2024-01-15T00:00:00.000Z",
"endDate": "2024-01-29T00:00:00.000Z",
"goal": "Updated goal",
"state": "active"
}
text
POST /rest/agile/1.0/sprint/{sprintId}
Body:
json
{
"name": "Updated Name",
"goal": "Updated goal",
"state": "closed"
}
text
DELETE /rest/agile/1.0/sprint/{sprintId}
text
GET /rest/agile/1.0/sprint/{sprintId}/issue
text
POST /rest/agile/1.0/sprint/{sprintId}/issue
Body:
json
{
"issues": ["PROJ-1", "PROJ-2"]
}
text
POST /rest/agile/1.0/sprint/{sprintId}/swap
Body:
json
{
"sprintToSwapWith": 5
}
text
GET /rest/agile/1.0/board/{boardId}/epic
text
GET /rest/agile/1.0/epic/{epicIdOrKey}
text
POST /rest/agile/1.0/epic/{epicIdOrKey}
Body:
json
{
"name": "Epic Name",
"summary": "Epic summary",
"color": "color_1",
"done": false
}
text
GET /rest/agile/1.0/epic/{epicIdOrKey}/issue
text
POST /rest/agile/1.0/epic/{epicIdOrKey}/issue
Body:
json
{
"issues": ["PROJ-1", "PROJ-2"]
}
text
PUT /rest/agile/1.0/epic/{epicIdOrKey}/rank
Body:
json
{
"rankBeforeEpic": "EPIC-2",
"rankAfterEpic": "EPIC-3",
"rankCustomFieldId": 10001
}
text
GET /rest/agile/1.0/epic/none/issue
text
POST /rest/agile/1.0/epic/none/issue
Body:
json
{
"issues": ["PROJ-1", "PROJ-2"]
}
text
PUT /rest/agile/1.0/issue/rank
Body:
json
{
"issues": ["PROJ-1", "PROJ-2"],
"rankAfterIssue": "PROJ-3",
"rankBeforeIssue": "PROJ-4",
"rankCustomFieldId": 10001
}
text
GET /rest/agile/1.0/issue/{issueIdOrKey}
Returns issue with Agile fields (sprint, closedSprints, flagged, epic).
text
GET /rest/agile/1.0/issue/{issueIdOrKey}/estimation?boardId={boardId}
text
PUT /rest/agile/1.0/issue/{issueIdOrKey}/estimation
Body:
json
{
"boardId": 1,
"value": "3h"
}
Accepts formats: "1w", "2d", "3h", "20m" or number (minutes).
text
GET /rest/api/3/issue/{issueIdOrKey}
Query params: fields, expand, properties, updateHistory
Examples:
GET /rest/api/3/issue/PROJ-123GET /rest/api/3/issue/PROJ-123?fields=summary,status,assigneeGET /rest/api/3/issue/PROJ-123?expand=changelogtext
POST /rest/api/3/issue
Body:
json
{
"fields": {
"project": { "key": "PROJECT_KEY" },
"summary": "Issue title",
"description": {
"type": "doc",
"version": 1,
"content": [
{ "type": "paragraph", "content": [{ "type": "text", "text": "Description" }] }
]
},
"issuetype": { "name": "Task" },
"priority": { "id": "3" },
"assignee": { "accountId": "USER_ACCOUNT_ID" }
}
}
text
PUT /rest/api/3/issue/{issueIdOrKey}
Body:
json
{
"fields": {
"summary": "Updated summary",
"description": { ... }
},
"update": {
"labels": [
{ "add": "bugfix" },
{ "remove": "blocker" }
]
}
}
text
DELETE /rest/api/3/issue/{issueIdOrKey}?deleteSubtasks=true
text
PUT /rest/api/3/issue/{issueIdOrKey}/assignee
Body:
json
{
"accountId": "USER_ACCOUNT_ID"
}
Use "accountId": "-1" for default assignee, null for unassigned.
text
GET /rest/api/3/search?jql={jql}&startAt={offset}&maxResults={limit}&fields={fields}
Query params: jql, startAt, maxResults, fields, expand, properties
Examples:
GET /rest/api/3/search?jql=project=PMG ORDER BY created DESCGET /rest/api/3/search?jql=assignee=currentUser()&maxResults=50text
GET /rest/api/3/issue/{issueIdOrKey}/transitions
text
POST /rest/api/3/issue/{issueIdOrKey}/transitions
Body:
json
{
"transition": { "id": "21" }
}
text
POST /rest/api/3/issue/{issueIdOrKey}/comment
Body:
json
{
"body": {
"type": "doc",
"version": 1,
"content": [
{ "type": "paragraph", "content": [{ "type": "text", "text": "Comment text" }] }
]
}
}
text
POST /rest/api/3/issue/{issueIdOrKey}/notify
Body:
json
{
"subject": "Subject",
"textBody": "Body text",
"to": { "reporter": true },
"restrict": { "group": { "name": "jira-software-users" } }
}
text
GET /rest/api/3/issue/createmeta?projectKeys={project}&issuetypeNames={type}
text
GET /rest/api/3/issue/{issueIdOrKey}/editmeta
text
GET /rest/api/3/issue/createmeta/{projectIdOrKey}/issuetypes
text
GET /rest/api/3/issue/createmeta/{projectIdOrKey}/issuetypes/{issueTypeId}
text
POST /rest/api/3/issue/bulk
Body:
json
{
"issueUpdates": [
{ "fields": { "project": { "key": "PROJ" }, "summary": "...", "issuetype": { "name": "Task" } } },
{ "fields": { "project": { "key": "PROJ" }, "summary": "...", "issuetype": { "name": "Bug" } } }
]
}
text
POST /rest/api/3/issue/bulkfetch
Body:
json
{
"issueIdsOrKeys": ["PROJ-1", "PROJ-2", "10005"],
"fields": ["summary", "project", "status", "assignee"],
"properties": []
}
text
POST /rest/api/3/changelog/bulkfetch
Body:
json
{
"issueIdsOrKeys": ["PROJ-1", "PROJ-2"],
"fieldIds": ["status", "assignee"],
"maxResults": 100
}
text
GET /rest/api/3/issue/{issueIdOrKey}/changelog?startAt=0&maxResults=50
text
POST /rest/api/3/issue/{issueIdOrKey}/changelog/list
Body:
json
{
"changelogIds": [10001, 10002]
}
text
GET /rest/api/3/project
text
GET /rest/api/3/project/{projectIdOrKey}
text
GET /rest/api/3/user?accountId={accountId}
text
GET /rest/api/3/myself
text
GET /rest/api/3/user/search?query={query}&maxResults={limit}
text
GET /rest/api/3/events
text
POST /rest/builds/0.1/bulk
Note: Requires Connect JWT token or OAuth token for on-premise integration.
text
GET /rest/builds/0.1/pipelines/{pipelineId}/builds/{buildNumber}
StatusMeaning400Bad request or malformed data401Invalid credentials or expired token403Permission denied404Resource not found409Conflict429Rate limited - wait and retry500Internal server error
PROJ-123 format for keys, numeric ID for direct lookupsGET /rest/api/3/issue/{key}/transitions?expand=changelog on issue GET to retrieve full change history