/install jira-atlassian
\r \r
Jira Integration\r
\r Interact with Atlassian Jira Cloud via REST API v3.\r \r
Authentication\r
\r Use Basic Auth with email and API token:\r \r Required Environment Variables:\r
[email protected]\r
JIRA_API_TOKEN=your_api_token\r
JIRA_DOMAIN=your_domain # e.g. "yourcompany" for yourcompany.atlassian.net\r
```\r
\r
**Credentials:**\r
- Email: `$JIRA_EMAIL`\r
- API Token: `$JIRA_API_TOKEN`\r
- Domain: `https://$JIRA_DOMAIN.atlassian.net`\r
\r
**Base URL:**\r
```\r
https://$JIRA_DOMAIN.atlassian.net/rest/api/3\r
```\r
\r
**Jira Software (Agile) Base URL:**\r
```\r
https://$JIRA_DOMAIN.atlassian.net/rest/agile/1.0\r
```\r
\r
**Generate API Token:**\r
1. Go to https://id.atlassian.com/manage-profile/security/api-tokens\r
2. Click "Create API token"\r
3. Label it (e.g., "nanobot")\r
4. Copy the token\r
\r
## Common Headers\r
\r
```\r
Content-Type: application/json\r
Accept: application/json\r
Authorization: Basic base64(email:token)\r
```\r
\r
---\r
\r
# Complete API Reference\r
\r
## Total API Summary\r
\r
| Category | Count |\r
|----------|-------|\r
| **Total Endpoints** | 122 |\r
| **Total Schemas** | 64 |\r
| **Jira Software (Agile)** | 51 endpoints |\r
| **Builds API** | 9 endpoints |\r
| **Deployments API** | 7 endpoints |\r
| **DevInfo API** | 7 endpoints |\r
| **DevOps Components** | 7 endpoints |\r
| **Feature Flags** | 6 endpoints |\r
| **Operations** | 11 endpoints |\r
| **Remote Links** | 5 endpoints |\r
| **Security** | 13 endpoints |\r
\r
---\r
\r
## Jira Software (Agile) API\r
\r
### Boards\r
\r
#### Get All Boards\r
```\r
GET /rest/agile/1.0/board\r
```\r
Returns all boards visible to the user.\r
\r
#### Create Board\r
```\r
POST /rest/agile/1.0/board\r
```\r
Body:\r
```json\r
{\r
"name": "Sprint Board",\r
"type": "scrum",\r
"filterId": 12345,\r
"location": {\r
"type": "project",\r
"projectKeyOrId": "PROJ"\r
}\r
}\r
```\r
\r
#### Get Board by ID\r
```\r
GET /rest/agile/1.0/board/{boardId}\r
```\r
\r
#### Delete Board\r
```\r
DELETE /rest/agile/1.0/board/{boardId}\r
```\r
\r
#### Get Board Configuration\r
```\r
GET /rest/agile/1.0/board/{boardId}/configuration\r
```\r
Returns board configuration including column config, estimation type, and ranking info.\r
\r
#### Get Issues for Board\r
```\r
GET /rest/agile/1.0/board/{boardId}/issue\r
```\r
Query params: `startAt`, `maxResults`, `jql`, `validateQuery`, `fields`, `expand`\r
\r
#### Move Issues to Board\r
```\r
POST /rest/agile/1.0/board/{boardId}/issue\r
```\r
Body:\r
```json\r
{\r
"issues": ["PROJ-1", "PROJ-2"],\r
"rankBeforeIssue": "PROJ-3",\r
"rankAfterIssue": "PROJ-4",\r
"rankCustomFieldId": 10001\r
}\r
```\r
\r
#### Get Backlog Issues\r
```\r
GET /rest/agile/1.0/board/{boardId}/backlog\r
```\r
\r
#### Move Issues to Backlog\r
```\r
POST /rest/agile/1.0/backlog/{boardId}/issue\r
```\r
Body:\r
```json\r
{\r
"issues": ["PROJ-1", "PROJ-2"]\r
}\r
```\r
\r
---\r
\r
### Sprints\r
\r
#### Get All Sprints\r
```\r
GET /rest/agile/1.0/board/{boardId}/sprint\r
```\r
\r
#### Create Sprint\r
```\r
POST /rest/agile/1.0/sprint\r
```\r
Body:\r
```json\r
{\r
"name": "Sprint 1",\r
"originBoardId": 1,\r
"startDate": "2024-01-15T00:00:00.000Z",\r
"endDate": "2024-01-29T00:00:00.000Z",\r
"goal": "Sprint 1 goal"\r
}\r
```\r
\r
#### Get Sprint\r
```\r
GET /rest/agile/1.0/sprint/{sprintId}\r
```\r
\r
#### Update Sprint (Full)\r
```\r
PUT /rest/agile/1.0/sprint/{sprintId}\r
```\r
Body:\r
```json\r
{\r
"name": "Updated Sprint Name",\r
"startDate": "2024-01-15T00:00:00.000Z",\r
"endDate": "2024-01-29T00:00:00.000Z",\r
"goal": "Updated goal",\r
"state": "active"\r
}\r
```\r
\r
#### Partially Update Sprint\r
```\r
POST /rest/agile/1.0/sprint/{sprintId}\r
```\r
Body:\r
```json\r
{\r
"name": "Updated Name",\r
"goal": "Updated goal",\r
"state": "closed"\r
}\r
```\r
\r
#### Delete Sprint\r
```\r
DELETE /rest/agile/1.0/sprint/{sprintId}\r
```\r
\r
#### Get Issues for Sprint\r
```\r
GET /rest/agile/1.0/sprint/{sprintId}/issue\r
```\r
\r
#### Move Issues to Sprint\r
```\r
POST /rest/agile/1.0/sprint/{sprintId}/issue\r
```\r
Body:\r
```json\r
{\r
"issues": ["PROJ-1", "PROJ-2"]\r
}\r
```\r
\r
#### Swap Sprint\r
```\r
POST /rest/agile/1.0/sprint/{sprintId}/swap\r
```\r
Body:\r
```json\r
{\r
"sprintToSwapWith": 5\r
}\r
```\r
\r
---\r
\r
### Epics\r
\r
#### Get Epics for Board\r
```\r
GET /rest/agile/1.0/board/{boardId}/epic\r
```\r
\r
#### Get Epic\r
```\r
GET /rest/agile/1.0/epic/{epicIdOrKey}\r
```\r
\r
#### Partially Update Epic\r
```\r
POST /rest/agile/1.0/epic/{epicIdOrKey}\r
```\r
Body:\r
```json\r
{\r
"name": "Epic Name",\r
"summary": "Epic summary",\r
"color": "color_1",\r
"done": false\r
}\r
```\r
\r
#### Get Issues for Epic\r
```\r
GET /rest/agile/1.0/epic/{epicIdOrKey}/issue\r
```\r
\r
#### Move Issues to Epic\r
```\r
POST /rest/agile/1.0/epic/{epicIdOrKey}/issue\r
```\r
Body:\r
```json\r
{\r
"issues": ["PROJ-1", "PROJ-2"]\r
}\r
```\r
\r
#### Rank Epics\r
```\r
PUT /rest/agile/1.0/epic/{epicIdOrKey}/rank\r
```\r
Body:\r
```json\r
{\r
"rankBeforeEpic": "EPIC-2",\r
"rankAfterEpic": "EPIC-3",\r
"rankCustomFieldId": 10001\r
}\r
```\r
\r
#### Get Issues Without Epic\r
```\r
GET /rest/agile/1.0/epic/none/issue\r
```\r
\r
#### Remove Issues from Epic\r
```\r
POST /rest/agile/1.0/epic/none/issue\r
```\r
Body:\r
```json\r
{\r
"issues": ["PROJ-1", "PROJ-2"]\r
}\r
```\r
\r
---\r
\r
### Issue Ranking\r
\r
#### Rank Issues\r
```\r
PUT /rest/agile/1.0/issue/rank\r
```\r
Body:\r
```json\r
{\r
"issues": ["PROJ-1", "PROJ-2"],\r
"rankAfterIssue": "PROJ-3",\r
"rankBeforeIssue": "PROJ-4",\r
"rankCustomFieldId": 10001\r
}\r
```\r
\r
#### Get Agile Issue\r
```\r
GET /rest/agile/1.0/issue/{issueIdOrKey}\r
```\r
Returns issue with Agile fields (sprint, closedSprints, flagged, epic).\r
\r
#### Get Issue Estimation\r
```\r
GET /rest/agile/1.0/issue/{issueIdOrKey}/estimation?boardId={boardId}\r
```\r
\r
#### Estimate Issue\r
```\r
PUT /rest/agile/1.0/issue/{issueIdOrKey}/estimation\r
```\r
Body:\r
```json\r
{\r
"boardId": 1,\r
"value": "3h"\r
}\r
```\r
Accepts formats: "1w", "2d", "3h", "20m" or number (minutes).\r
\r
---\r
\r
## Jira Platform API\r
\r
### Issues (CRUD Operations)\r
\r
#### Get Issue\r
```\r
GET /rest/api/3/issue/{issueIdOrKey}\r
```\r
Query params: `fields`, `expand`, `properties`, `updateHistory`\r
Examples:\r
- `GET /rest/api/3/issue/PROJ-123`\r
- `GET /rest/api/3/issue/PROJ-123?fields=summary,status,assignee`\r
- `GET /rest/api/3/issue/PROJ-123?expand=changelog`\r
\r
#### Create Issue\r
```\r
POST /rest/api/3/issue\r
```\r
Body:\r
```json\r
{\r
"fields": {\r
"project": { "key": "PROJECT_KEY" },\r
"summary": "Issue title",\r
"description": {\r
"type": "doc",\r
"version": 1,\r
"content": [\r
{ "type": "paragraph", "content": [{ "type": "text", "text": "Description" }] }\r
]\r
},\r
"issuetype": { "name": "Task" },\r
"priority": { "id": "3" },\r
"assignee": { "accountId": "USER_ACCOUNT_ID" }\r
}\r
}\r
```\r
\r
#### Edit Issue\r
```\r
PUT /rest/api/3/issue/{issueIdOrKey}\r
```\r
Body:\r
```json\r
{\r
"fields": {\r
"summary": "Updated summary",\r
"description": { ... }\r
},\r
"update": {\r
"labels": [\r
{ "add": "bugfix" },\r
{ "remove": "blocker" }\r
]\r
}\r
}\r
```\r
\r
#### Delete Issue\r
```\r
DELETE /rest/api/3/issue/{issueIdOrKey}?deleteSubtasks=true\r
```\r
\r
#### Assign Issue\r
```\r
PUT /rest/api/3/issue/{issueIdOrKey}/assignee\r
```\r
Body:\r
```json\r
{\r
"accountId": "USER_ACCOUNT_ID"\r
}\r
```\r
Use `"accountId": "-1"` for default assignee, `null` for unassigned.\r
\r
---\r
\r
### Search (JQL)\r
\r
#### Search Issues\r
```\r
GET /rest/api/3/search?jql={jql}&startAt={offset}&maxResults={limit}&fields={fields}\r
```\r
Query params: `jql`, `startAt`, `maxResults`, `fields`, `expand`, `properties`\r
Examples:\r
- `GET /rest/api/3/search?jql=project=PMG ORDER BY created DESC`\r
- `GET /rest/api/3/search?jql=assignee=currentUser()&maxResults=50`\r
\r
---\r
\r
### Issue Operations\r
\r
#### Get Transitions\r
```\r
GET /rest/api/3/issue/{issueIdOrKey}/transitions\r
```\r
\r
#### Transition Issue\r
```\r
POST /rest/api/3/issue/{issueIdOrKey}/transitions\r
```\r
Body:\r
```json\r
{\r
"transition": { "id": "21" }\r
}\r
```\r
\r
#### Add Comment\r
```\r
POST /rest/api/3/issue/{issueIdOrKey}/comment\r
```\r
Body:\r
```json\r
{\r
"body": {\r
"type": "doc",\r
"version": 1,\r
"content": [\r
{ "type": "paragraph", "content": [{ "type": "text", "text": "Comment text" }] }\r
]\r
}\r
}\r
```\r
\r
#### Send Notification\r
```\r
POST /rest/api/3/issue/{issueIdOrKey}/notify\r
```\r
Body:\r
```json\r
{\r
"subject": "Subject",\r
"textBody": "Body text",\r
"to": { "reporter": true },\r
"restrict": { "group": { "name": "jira-software-users" } }\r
}\r
```\r
\r
---\r
\r
### Issue Metadata\r
\r
#### Get Create Issue Metadata\r
```\r
GET /rest/api/3/issue/createmeta?projectKeys={project}&issuetypeNames={type}\r
```\r
\r
#### Get Edit Metadata\r
```\r
GET /rest/api/3/issue/{issueIdOrKey}/editmeta\r
```\r
\r
#### Get Create Metadata for Project\r
```\r
GET /rest/api/3/issue/createmeta/{projectIdOrKey}/issuetypes\r
```\r
\r
#### Get Create Metadata for Project & Issue Type\r
```\r
GET /rest/api/3/issue/createmeta/{projectIdOrKey}/issuetypes/{issueTypeId}\r
```\r
\r
---\r
\r
### Bulk Operations\r
\r
#### Bulk Create Issues (up to 50)\r
```\r
POST /rest/api/3/issue/bulk\r
```\r
Body:\r
```json\r
{\r
"issueUpdates": [\r
{ "fields": { "project": { "key": "PROJ" }, "summary": "...", "issuetype": { "name": "Task" } } },\r
{ "fields": { "project": { "key": "PROJ" }, "summary": "...", "issuetype": { "name": "Bug" } } }\r
]\r
}\r
```\r
\r
#### Bulk Fetch Issues (up to 100)\r
```\r
POST /rest/api/3/issue/bulkfetch\r
```\r
Body:\r
```json\r
{\r
"issueIdsOrKeys": ["PROJ-1", "PROJ-2", "10005"],\r
"fields": ["summary", "project", "status", "assignee"],\r
"properties": []\r
}\r
```\r
\r
#### Bulk Fetch Changelogs\r
```\r
POST /rest/api/3/changelog/bulkfetch\r
```\r
Body:\r
```json\r
{\r
"issueIdsOrKeys": ["PROJ-1", "PROJ-2"],\r
"fieldIds": ["status", "assignee"],\r
"maxResults": 100\r
}\r
```\r
\r
#### Get Changelogs\r
```\r
GET /rest/api/3/issue/{issueIdOrKey}/changelog?startAt=0&maxResults=50\r
```\r
\r
#### Get Changelogs by IDs\r
```\r
POST /rest/api/3/issue/{issueIdOrKey}/changelog/list\r
```\r
Body:\r
```json\r
{\r
"changelogIds": [10001, 10002]\r
}\r
```\r
\r
---\r
\r
### Projects\r
\r
#### Get Projects\r
```\r
GET /rest/api/3/project\r
```\r
\r
#### Get Project\r
```\r
GET /rest/api/3/project/{projectIdOrKey}\r
```\r
\r
---\r
\r
### Users\r
\r
#### Get User\r
```\r
GET /rest/api/3/user?accountId={accountId}\r
```\r
\r
#### Get Current User (Myself)\r
```\r
GET /rest/api/3/myself\r
```\r
\r
#### Search Users\r
```\r
GET /rest/api/3/user/search?query={query}&maxResults={limit}\r
```\r
\r
---\r
\r
### Issue Events\r
\r
#### Get Events (Admin)\r
```\r
GET /rest/api/3/events\r
```\r
\r
---\r
\r
## DevOps Integration APIs\r
\r
### Build Information API\r
\r
#### Submit Build Data\r
```\r
POST /rest/builds/0.1/bulk\r
```\r
**Note:** Requires Connect JWT token or OAuth token for on-premise integration.\r
\r
#### Get Build by Key\r
```\r
GET /rest/builds/0.1/pipelines/{pipelineId}/builds/{buildNumber}\r
```\r
\r
---\r
\r
## Error Handling\r
\r
| Status | Meaning |\r
|--------|---------|\r
| 400 | Bad request or malformed data |\r
| 401 | Invalid credentials or expired token |\r
| 403 | Permission denied |\r
| 404 | Resource not found |\r
| 409 | Conflict |\r
| 429 | Rate limited - wait and retry |\r
| 500 | Internal server error |\r
\r
---\r
\r
## Notes\r
\r
- **JQL (Jira Query Language)**: Use JQL for powerful issue search and filtering\r
- **Issue IDs vs Keys**: Use `PROJ-123` format for keys, numeric ID for direct lookups\r
- **Transition IDs**: Get available transitions first via `GET /rest/api/3/issue/{key}/transitions`\r
- **Account IDs**: Jira Cloud uses account IDs for users - get them via the users API\r
- **Bulk Operations**: Use bulk endpoints for efficiency when creating/fetching multiple issues\r
- **Expand**: Use `?expand=changelog` on issue GET to retrieve full change history\r
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install jira-atlassian - After installation, invoke the skill by name or use
/jira-atlassian - Provide required inputs per the skill's parameter spec and get structured output
What is Publish Jira?
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... It is an AI Agent Skill for Claude Code / OpenClaw, with 82 downloads so far.
How do I install Publish Jira?
Run "/install jira-atlassian" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is Publish Jira free?
Yes, Publish Jira is completely free, licensed under MIT-0. You can download, install and use it at no cost.
Which platforms does Publish Jira support?
Publish Jira is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created Publish Jira?
It is built and maintained by AlienTree (@jeffersonling1217-png); the current version is v1.0.0.