Skip to content

Jira — Overview

The @forge-clients/jira package provides type-safe clients for all Jira Cloud REST APIs, generated from Atlassian’s official OpenAPI specifications.

ModuleImport pathEndpointsDescription
Jira v3@forge-clients/jira/v3621Primary Jira Cloud REST API (recommended)
Jira v2@forge-clients/jira/v2612Legacy Jira Cloud REST API
Jira Software@forge-clients/jira/software95Boards, sprints, backlog (Jira Software only)
Jira Service Management@forge-clients/jira/service-management71Requests, queues, customers (JSM only)

Use Jira v3 for new development. It supports Atlassian Document Format (ADF) for rich text fields and is the actively developed version. Jira v2 is maintained for backwards compatibility only.

// ✅ Recommended — v3 is the default export
import { getIssue, createIssue } from '@forge-clients/jira';
import { getIssue, createIssue } from '@forge-clients/jira/v3'; // explicit
// ⚠️ Legacy — use only if you have a specific reason
import { getIssue } from '@forge-clients/jira/v2';
// Jira Software and Service Management are always explicit sub-path imports
import { getBoard, getSprint } from '@forge-clients/jira/software';
import { getQueue, getRequestTypes } from '@forge-clients/jira/service-management';

The root @forge-clients/jira import defaults to v3. It also re-exports v2, Software, and Service Management as named namespaces for cases where you need multiple APIs:

import {
getIssue, // v3 function (default)
JiraV2, // v2 namespace
JiraSoftware, // Jira Software namespace
JiraSM, // Jira Service Management namespace
} from '@forge-clients/jira';
// Use v3 (default)
const issue = await getIssue(client, { path: { issueIdOrKey: 'PROJ-1' } });
// Use v2 via namespace
const legacyIssue = await JiraV2.getIssue(client, { path: { issueIdOrKey: 'PROJ-1' } });
// Use Jira Software via namespace
const board = await JiraSoftware.getBoard(client, { path: { boardId: 1 } });

Function names match the operationId from the OpenAPI spec, converted to camelCase:

REST endpointFunction name
GET /rest/api/3/issue/{issueIdOrKey}getIssue
POST /rest/api/3/issuecreateIssue
DELETE /rest/api/3/issue/{issueIdOrKey}deleteIssue
POST /rest/api/3/issue/bulkcreateIssues
GET /rest/api/3/myselfgetCurrentUser
POST /rest/api/3/issue/pickergetIssuePickerResource

All types are available via the Types namespace re-exported from each module:

import { ForgeFunctionAdapter, asApp } from '@forge-clients/core';
import { getIssue } from '@forge-clients/jira/v3';
import type { IssueBean } from '@forge-clients/jira/v3';
const adapter = new ForgeFunctionAdapter({ product: 'jira' });
const issue: IssueBean = await getIssue(asApp(adapter), {
path: { issueIdOrKey: 'PROJ-123' },
});