{"formatVersion":"1","kind":"dock_integration","slug":"jira-cloud-api","title":"Jira Cloud API","summary":"Import a Harbor-safe Jira Cloud starter set for issue search, single-issue lookup, and approval-friendly issue creation.","description":"A Dock-hosted Jira Cloud starter integration for Harbor. Importing it creates a local http_api port shell plus a Harbor-safe Jira action set using Harbor's Action Model for explicit issue keys, bounded JQL search, and reviewable issue creation.","version":"0.1.0","publisher":{"slug":"atlassian","name":"Atlassian","websiteUrl":"https://developer.atlassian.com/cloud/jira/platform/rest/v3/"},"category":"Work Management","tags":["jira","atlassian","issues","tickets","planning"],"compatibility":{"harborNode":">=0.1.0","notes":"Requires local operator-configured auth after import. Jira Cloud also requires the local operator to set the tenant-specific site base URL before use. Templates use location-based inputs such as input.path, input.query, and input.body at execution time."},"requiredPlan":"community","portTemplates":[{"kind":"http_api","label":"Jira Cloud API","description":"Jira Cloud API connection managed locally through Harbor.","baseUrl":"https://your-domain.atlassian.net/","authMode":"header_token","authHeaderName":"Authorization","authTokenPrefix":"Bearer"}],"actionTemplates":[{"slug":"list-projects","label":"List Projects","description":"List Jira projects using bounded pagination and project filters so Harbor can discover valid project keys without widening into arbitrary admin surfaces.","method":"GET","path":"/rest/api/3/project/search","inputs":{"parameters":[{"name":"query","in":"query","schema":{"type":"string"},"description":"Optional project name or key filter."},{"name":"typeKey","in":"query","schema":{"type":"string"},"description":"Optional project type key such as software or service_desk."},{"name":"categoryId","in":"query","schema":{"type":"integer"},"description":"Optional project category ID filter."},{"name":"maxResults","in":"query","schema":{"type":"integer","minimum":1,"maximum":100},"default":25,"description":"Maximum number of projects to return in one page."},{"name":"startAt","in":"query","schema":{"type":"integer","minimum":0},"description":"Offset for paginated project results."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"search-issues","label":"Search Issues","description":"Search Jira issues using bounded JQL and typed pagination inputs.","method":"GET","path":"/rest/api/3/search/jql","inputs":{"parameters":[{"name":"jql","in":"query","required":true,"schema":{"type":"string","minLength":1},"description":"Bounded JQL query to run against the Jira site. Keep it explicit and reviewable."},{"name":"maxResults","in":"query","schema":{"type":"integer","minimum":1,"maximum":100},"default":25,"description":"Maximum number of issues to return in one page."},{"name":"nextPageToken","in":"query","schema":{"type":"string"},"description":"Continuation token from a previous Jira enhanced search response."},{"name":"failFast","in":"query","schema":{"type":"boolean"},"description":"Whether Jira should stop quickly when part of the search request is invalid."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-project","label":"Get Project","description":"Fetch a single Jira project using an explicit project ID or project key.","method":"GET","path":"/rest/api/3/project/{projectIdOrKey}","inputs":{"parameters":[{"name":"projectIdOrKey","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Jira project ID or project key."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-issue","label":"Get Issue","description":"Fetch a single Jira issue using an explicit issue key or issue ID.","method":"GET","path":"/rest/api/3/issue/{issueIdOrKey}","inputs":{"parameters":[{"name":"issueIdOrKey","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Jira issue ID or issue key, such as OPS-123."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"list-issue-comments","label":"List Issue Comments","description":"List comments for a Jira issue using an explicit issue key or ID with typed pagination inputs.","method":"GET","path":"/rest/api/3/issue/{issueIdOrKey}/comment","inputs":{"parameters":[{"name":"issueIdOrKey","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Jira issue ID or issue key, such as OPS-123."},{"name":"startAt","in":"query","schema":{"type":"integer","minimum":0},"description":"Offset for paginated comment results."},{"name":"maxResults","in":"query","schema":{"type":"integer","minimum":1,"maximum":100},"default":25,"description":"Maximum number of comments to return in one page."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-issue-transitions","label":"Get Issue Transitions","description":"List available transitions for a Jira issue using an explicit issue key or ID.","method":"GET","path":"/rest/api/3/issue/{issueIdOrKey}/transitions","inputs":{"parameters":[{"name":"issueIdOrKey","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Jira issue ID or issue key, such as OPS-123."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"find-users","label":"Find Users","description":"Find Jira users using a bounded query string and typed pagination inputs.","method":"GET","path":"/rest/api/3/user/search","inputs":{"parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","minLength":1},"description":"User search query."},{"name":"startAt","in":"query","schema":{"type":"integer","minimum":0},"description":"Offset for paginated user results."},{"name":"maxResults","in":"query","schema":{"type":"integer","minimum":1,"maximum":100},"default":25,"description":"Maximum number of users to return."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"create-issue","label":"Create Issue","description":"Create a Jira issue using a bounded JSON request body under input.body.","method":"POST","path":"/rest/api/3/issue","approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"assign-issue","label":"Assign Issue","description":"Assign a Jira issue using an explicit issue key or ID with a bounded JSON request body.","method":"PUT","path":"/rest/api/3/issue/{issueIdOrKey}/assignee","inputs":{"parameters":[{"name":"issueIdOrKey","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Jira issue ID or issue key."}]},"approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"update-issue","label":"Update Issue","description":"Update a Jira issue using an explicit issue key or ID with a bounded JSON request body.","method":"PUT","path":"/rest/api/3/issue/{issueIdOrKey}","inputs":{"parameters":[{"name":"issueIdOrKey","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Jira issue ID or issue key, such as OPS-123."}]},"approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"add-issue-comment","label":"Add Issue Comment","description":"Add a comment to a Jira issue using an explicit issue key or ID with a bounded JSON request body.","method":"POST","path":"/rest/api/3/issue/{issueIdOrKey}/comment","inputs":{"parameters":[{"name":"issueIdOrKey","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Jira issue ID or issue key, such as OPS-123."}]},"approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"delete-comment","label":"Delete Comment","description":"Delete a Jira issue comment using explicit issue and comment identifiers.","method":"DELETE","path":"/rest/api/3/issue/{issueIdOrKey}/comment/{id}","inputs":{"parameters":[{"name":"issueIdOrKey","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Jira issue ID or issue key."},{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Jira comment ID."}]},"approvalMode":"require_approval","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"transition-issue","label":"Transition Issue","description":"Transition a Jira issue using an explicit issue key or ID with a bounded JSON request body naming the desired transition.","method":"POST","path":"/rest/api/3/issue/{issueIdOrKey}/transitions","inputs":{"parameters":[{"name":"issueIdOrKey","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Jira issue ID or issue key, such as OPS-123."}]},"approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"delete-issue","label":"Delete Issue","description":"Delete a Jira issue using an explicit issue key or ID.","method":"DELETE","path":"/rest/api/3/issue/{issueIdOrKey}","inputs":{"parameters":[{"name":"issueIdOrKey","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Jira issue ID or issue key."}]},"approvalMode":"require_approval","requestBodyMode":"none","resultMode":"json_summary"}],"workflowTemplates":[{"slug":"issue-search-triage-check","title":"Issue Search Triage Check","summary":"Future workflow template for bounded JQL search, single-issue inspection, and operator-reviewed Jira issue creation."}],"helpText":"Import to Harbor, set the local Jira Cloud site URL, configure local auth, then validate and test search-issues and get-issue before enabling create-issue. Keep JQL bounded and keep create-issue on approval unless your local policy explicitly allows operator-reviewed writes.","installNotes":"Dock shares only safe metadata. Hidden auth must be configured locally inside Harbor after import, and the placeholder base URL must be replaced with your own Jira Cloud tenant URL. Jira search-issues uses input.query for JQL and pagination values, get-issue uses input.path.issueIdOrKey, and create-issue uses input.body for the issue payload."}