Install
openclaw skills install jira-atlassianFull-featured Atlassian Jira Cloud REST API v3 skill. Manage issues, sprints, boards, epics, projects, users, and more via direct Jira API calls. Use when managing Jira issues, running JQL queries, creating tickets, managing sprints/boards, or interacting with Jira via API. Requires Atlassian email and API token for authentication.
openclaw skills install jira-atlassianInteract with Atlassian Jira Cloud via REST API v3.
Use Basic Auth with email and API token:
Required Environment Variables:
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:
https://$JIRA_DOMAIN.atlassian.net/rest/api/3
Jira Software (Agile) Base URL:
https://$JIRA_DOMAIN.atlassian.net/rest/agile/1.0
Generate API Token:
Content-Type: application/json
Accept: application/json
Authorization: Basic base64(email:token)
| Category | Count |
|---|---|
| Total Endpoints | 122 |
| Total Schemas | 64 |
| Jira Software (Agile) | 51 endpoints |
| Builds API | 9 endpoints |
| Deployments API | 7 endpoints |
| DevInfo API | 7 endpoints |
| DevOps Components | 7 endpoints |
| Feature Flags | 6 endpoints |
| Operations | 11 endpoints |
| Remote Links | 5 endpoints |
| Security | 13 endpoints |
GET /rest/agile/1.0/board
Returns all boards visible to the user.
POST /rest/agile/1.0/board
Body:
{
"name": "Sprint Board",
"type": "scrum",
"filterId": 12345,
"location": {
"type": "project",
"projectKeyOrId": "PROJ"
}
}
GET /rest/agile/1.0/board/{boardId}
DELETE /rest/agile/1.0/board/{boardId}
GET /rest/agile/1.0/board/{boardId}/configuration
Returns board configuration including column config, estimation type, and ranking info.
GET /rest/agile/1.0/board/{boardId}/issue
Query params: startAt, maxResults, jql, validateQuery, fields, expand
POST /rest/agile/1.0/board/{boardId}/issue
Body:
{
"issues": ["PROJ-1", "PROJ-2"],
"rankBeforeIssue": "PROJ-3",
"rankAfterIssue": "PROJ-4",
"rankCustomFieldId": 10001
}
GET /rest/agile/1.0/board/{boardId}/backlog
POST /rest/agile/1.0/backlog/{boardId}/issue
Body:
{
"issues": ["PROJ-1", "PROJ-2"]
}
GET /rest/agile/1.0/board/{boardId}/sprint
POST /rest/agile/1.0/sprint
Body:
{
"name": "Sprint 1",
"originBoardId": 1,
"startDate": "2024-01-15T00:00:00.000Z",
"endDate": "2024-01-29T00:00:00.000Z",
"goal": "Sprint 1 goal"
}
GET /rest/agile/1.0/sprint/{sprintId}
PUT /rest/agile/1.0/sprint/{sprintId}
Body:
{
"name": "Updated Sprint Name",
"startDate": "2024-01-15T00:00:00.000Z",
"endDate": "2024-01-29T00:00:00.000Z",
"goal": "Updated goal",
"state": "active"
}
POST /rest/agile/1.0/sprint/{sprintId}
Body:
{
"name": "Updated Name",
"goal": "Updated goal",
"state": "closed"
}
DELETE /rest/agile/1.0/sprint/{sprintId}
GET /rest/agile/1.0/sprint/{sprintId}/issue
POST /rest/agile/1.0/sprint/{sprintId}/issue
Body:
{
"issues": ["PROJ-1", "PROJ-2"]
}
POST /rest/agile/1.0/sprint/{sprintId}/swap
Body:
{
"sprintToSwapWith": 5
}
GET /rest/agile/1.0/board/{boardId}/epic
GET /rest/agile/1.0/epic/{epicIdOrKey}
POST /rest/agile/1.0/epic/{epicIdOrKey}
Body:
{
"name": "Epic Name",
"summary": "Epic summary",
"color": "color_1",
"done": false
}
GET /rest/agile/1.0/epic/{epicIdOrKey}/issue
POST /rest/agile/1.0/epic/{epicIdOrKey}/issue
Body:
{
"issues": ["PROJ-1", "PROJ-2"]
}
PUT /rest/agile/1.0/epic/{epicIdOrKey}/rank
Body:
{
"rankBeforeEpic": "EPIC-2",
"rankAfterEpic": "EPIC-3",
"rankCustomFieldId": 10001
}
GET /rest/agile/1.0/epic/none/issue
POST /rest/agile/1.0/epic/none/issue
Body:
{
"issues": ["PROJ-1", "PROJ-2"]
}
PUT /rest/agile/1.0/issue/rank
Body:
{
"issues": ["PROJ-1", "PROJ-2"],
"rankAfterIssue": "PROJ-3",
"rankBeforeIssue": "PROJ-4",
"rankCustomFieldId": 10001
}
GET /rest/agile/1.0/issue/{issueIdOrKey}
Returns issue with Agile fields (sprint, closedSprints, flagged, epic).
GET /rest/agile/1.0/issue/{issueIdOrKey}/estimation?boardId={boardId}
PUT /rest/agile/1.0/issue/{issueIdOrKey}/estimation
Body:
{
"boardId": 1,
"value": "3h"
}
Accepts formats: "1w", "2d", "3h", "20m" or number (minutes).
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=changelogPOST /rest/api/3/issue
Body:
{
"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" }
}
}
PUT /rest/api/3/issue/{issueIdOrKey}
Body:
{
"fields": {
"summary": "Updated summary",
"description": { ... }
},
"update": {
"labels": [
{ "add": "bugfix" },
{ "remove": "blocker" }
]
}
}
DELETE /rest/api/3/issue/{issueIdOrKey}?deleteSubtasks=true
PUT /rest/api/3/issue/{issueIdOrKey}/assignee
Body:
{
"accountId": "USER_ACCOUNT_ID"
}
Use "accountId": "-1" for default assignee, null for unassigned.
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=50GET /rest/api/3/issue/{issueIdOrKey}/transitions
POST /rest/api/3/issue/{issueIdOrKey}/transitions
Body:
{
"transition": { "id": "21" }
}
POST /rest/api/3/issue/{issueIdOrKey}/comment
Body:
{
"body": {
"type": "doc",
"version": 1,
"content": [
{ "type": "paragraph", "content": [{ "type": "text", "text": "Comment text" }] }
]
}
}
POST /rest/api/3/issue/{issueIdOrKey}/notify
Body:
{
"subject": "Subject",
"textBody": "Body text",
"to": { "reporter": true },
"restrict": { "group": { "name": "jira-software-users" } }
}
GET /rest/api/3/issue/createmeta?projectKeys={project}&issuetypeNames={type}
GET /rest/api/3/issue/{issueIdOrKey}/editmeta
GET /rest/api/3/issue/createmeta/{projectIdOrKey}/issuetypes
GET /rest/api/3/issue/createmeta/{projectIdOrKey}/issuetypes/{issueTypeId}
POST /rest/api/3/issue/bulk
Body:
{
"issueUpdates": [
{ "fields": { "project": { "key": "PROJ" }, "summary": "...", "issuetype": { "name": "Task" } } },
{ "fields": { "project": { "key": "PROJ" }, "summary": "...", "issuetype": { "name": "Bug" } } }
]
}
POST /rest/api/3/issue/bulkfetch
Body:
{
"issueIdsOrKeys": ["PROJ-1", "PROJ-2", "10005"],
"fields": ["summary", "project", "status", "assignee"],
"properties": []
}
POST /rest/api/3/changelog/bulkfetch
Body:
{
"issueIdsOrKeys": ["PROJ-1", "PROJ-2"],
"fieldIds": ["status", "assignee"],
"maxResults": 100
}
GET /rest/api/3/issue/{issueIdOrKey}/changelog?startAt=0&maxResults=50
POST /rest/api/3/issue/{issueIdOrKey}/changelog/list
Body:
{
"changelogIds": [10001, 10002]
}
GET /rest/api/3/project
GET /rest/api/3/project/{projectIdOrKey}
GET /rest/api/3/user?accountId={accountId}
GET /rest/api/3/myself
GET /rest/api/3/user/search?query={query}&maxResults={limit}
GET /rest/api/3/events
POST /rest/builds/0.1/bulk
Note: Requires Connect JWT token or OAuth token for on-premise integration.
GET /rest/builds/0.1/pipelines/{pipelineId}/builds/{buildNumber}
| Status | Meaning |
|---|---|
| 400 | Bad request or malformed data |
| 401 | Invalid credentials or expired token |
| 403 | Permission denied |
| 404 | Resource not found |
| 409 | Conflict |
| 429 | Rate limited - wait and retry |
| 500 | Internal 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