luke.mxDocs

Search docs

Search every page of the documentation.

API reference

Issue tracking

Search, create, edit, transition, rank, link, comment on and log work on issues.

See Issues.

GET /v1/orgs/:orgId/issues

Searches with the query language (jql), paged. Default order: most recently updated.

Auth: user access token or platform agent key · Scope: issues:read

Path parameterDescription
:orgIdOrganization id (org_…).
Query parameterTypeRequiredDefaultNotes
jqlstringNo""up to 10,000 characters
startAtintegerNo00–100000; coerced from a string
maxResultsintegerNo501–1000; coerced from a string
order"rank" | "updated" | "created" | "key"No

Response 200

{
  issues: {
    orgId: string
    issueId: string
    spaceId: string
    number: number
    key: string
    typeId: string
    summary: string
    statusId: string
    statusCategory: "done" | "todo" | "inprogress"
    statusChangedAt?: number
    resolutionId?: string
    resolvedAt?: number
    priorityId?: string
    assigneeId?: string
    reporterId?: string
    creatorId?: string
    labels: string[]
    componentIds: string[]
    fixVersionIds: string[]
    affectsVersionIds: string[]
    dueDate?: string
    startDate?: string
    storyPoints?: number
    originalEstimate?: number
    remainingEstimate?: number
    timeSpent?: number
    environment?: string
    parentId?: string
    sprintId?: string
    closedSprintIds: string[]
    rank: string
    watchers: string[]
    voters: string[]
    securityLevelId?: string
    fields: {
      [key: string]: boolean | null | string | number | string[] | {
        parent: string
        child?: string
      }
    }
    excerpt: string
    statusLog: [string, number][]
    commentCount: number
    attachmentCount: number
    requestTypeId?: string
    channel?: string
    participants: string[]
    satisfaction?: number
    satisfactionComment?: string
    sla: {
      [key: string]: {
        runningSince?: number
        elapsed: number
        paused?: boolean
        stopped?: boolean
        goal?: number
        calendar: "business" | "always"
        breached?: boolean
        startedAt?: number
        stoppedAt?: number
      }
    }
    version: number
    createdAt: number
    updatedAt: number
  }[]
  total: number
  startAt: number
  maxResults: number
  scanned: number
}

POST /v1/orgs/:orgId/issues/search

The same search with the query in the body (long queries).

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).

Request body

FieldTypeRequiredDefaultNotes
jqlstringNo""up to 10,000 characters
startAtintegerNo00–100000; coerced from a string
maxResultsintegerNo501–1000; coerced from a string
order"rank" | "updated" | "created" | "key"No

Response 200

{
  issues: {
    orgId: string
    issueId: string
    spaceId: string
    number: number
    key: string
    typeId: string
    summary: string
    statusId: string
    statusCategory: "done" | "todo" | "inprogress"
    statusChangedAt?: number
    resolutionId?: string
    resolvedAt?: number
    priorityId?: string
    assigneeId?: string
    reporterId?: string
    creatorId?: string
    labels: string[]
    componentIds: string[]
    fixVersionIds: string[]
    affectsVersionIds: string[]
    dueDate?: string
    startDate?: string
    storyPoints?: number
    originalEstimate?: number
    remainingEstimate?: number
    timeSpent?: number
    environment?: string
    parentId?: string
    sprintId?: string
    closedSprintIds: string[]
    rank: string
    watchers: string[]
    voters: string[]
    securityLevelId?: string
    fields: {
      [key: string]: boolean | null | string | number | string[] | {
        parent: string
        child?: string
      }
    }
    excerpt: string
    statusLog: [string, number][]
    commentCount: number
    attachmentCount: number
    requestTypeId?: string
    channel?: string
    participants: string[]
    satisfaction?: number
    satisfactionComment?: string
    sla: {
      [key: string]: {
        runningSince?: number
        elapsed: number
        paused?: boolean
        stopped?: boolean
        goal?: number
        calendar: "business" | "always"
        breached?: boolean
        startedAt?: number
        stoppedAt?: number
      }
    }
    version: number
    createdAt: number
    updatedAt: number
  }[]
  total: number
  startAt: number
  maxResults: number
  scanned: number
}

GET /v1/orgs/:orgId/issues/export

Issues matching a query as a CSV (Jira-style columns) or JSON download, up to 10,000.

Auth: user access token or platform agent key · Scope: issues:read

Path parameterDescription
:orgIdOrganization id (org_…).
Query parameterTypeRequiredDefaultNotes
jqlstringNo""up to 10,000 characters
format"csv" | "json"No"csv"

Response 200 with no body.

POST /v1/orgs/:orgId/issues/import

Imports a Jira CSV export (or this API's JSON export) into a space, 200 rows per call: pass startRow and keyMap from the previous answer until done. Space admins only.

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).

Request body (up to 5 MB)

FieldTypeRequiredNotes
spacestringYes1–64 characters
format"csv" | "json"Yes
contentstringYes1–5,242,880 characters
startRowintegerNo≥ 0
keyMapobjectNokeys up to 64 characters; values: string (up to 64 characters)
createMissingbooleanNo

Response 200

{
  total: number
  processed: number
  done: boolean
  nextRow: null | number
  keyMap: {
    [key: string]: string
  }
  results: {
    row: number
    key?: string
    from?: string
    error?: string
    warnings?: string[]
  }[]
}

Errors

StatusMessage
413Import files can be up to 5 MB.

GET /v1/orgs/:orgId/issues/labels

Labels in use (most used first), for suggestions; space narrows to one space.

Auth: user access token or platform agent key · Scope: issues:read

Path parameterDescription
:orgIdOrganization id (org_…).
Query parameterTypeRequiredNotes
spacestringNoup to 64 characters

Response 200

{
  labels: string[]
}

POST /v1/orgs/:orgId/issues

Creates an issue. Catalog fields take names or ids, people take ids or emails, parent an issue key.

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).

Request body

FieldTypeRequiredNotes
typestringNoup to 80 characters
summarystringNoup to 255 characters
descriptionstringNoup to 65,536 characters
prioritystringNoup to 80 characters; can be null
assigneestringNoup to 320 characters; can be null
reporterstringNoup to 320 characters; can be null
labelsstring[]Noup to 30 items; each up to 64 characters
componentsstring[]Noup to 50 items; each up to 100 characters
fixVersionsstring[]Noup to 50 items; each up to 100 characters
affectsVersionsstring[]Noup to 50 items; each up to 100 characters
dueDatestringNomatches ^\d{4}-\d{2}-\d{2}$; can be null
startDatestringNomatches ^\d{4}-\d{2}-\d{2}$; can be null
storyPointsnumberNo0–10000; can be null
originalEstimatenumber | stringNo0–315360000; up to 40 characters; can be null
remainingEstimatenumber | stringNo0–315360000; up to 40 characters; can be null
environmentstringNoup to 32,768 characters; can be null
parentstringNoup to 64 characters; can be null
sprintstringNoup to 100 characters; can be null
securityLevelstringNoup to 80 characters; can be null
resolutionstringNoup to 80 characters; can be null
fieldsobjectNokeys up to 100 characters; values: any JSON
requestTypestringNoup to 80 characters
participantsstring[]Noup to 100 items; each up to 320 characters
spacestringYes1–64 characters
summarystringYes1–255 characters; trimmed

Response 201

{
  issue: {
    orgId: string
    issueId: string
    spaceId: string
    number: number
    key: string
    typeId: string
    summary: string
    statusId: string
    statusCategory: "done" | "todo" | "inprogress"
    statusChangedAt?: number
    resolutionId?: string
    resolvedAt?: number
    priorityId?: string
    assigneeId?: string
    reporterId?: string
    creatorId?: string
    labels: string[]
    componentIds: string[]
    fixVersionIds: string[]
    affectsVersionIds: string[]
    dueDate?: string
    startDate?: string
    storyPoints?: number
    originalEstimate?: number
    remainingEstimate?: number
    timeSpent?: number
    environment?: string
    parentId?: string
    sprintId?: string
    closedSprintIds: string[]
    rank: string
    watchers: string[]
    voters: string[]
    securityLevelId?: string
    fields: {
      [key: string]: boolean | null | string | number | string[] | {
        parent: string
        child?: string
      }
    }
    excerpt: string
    statusLog: [string, number][]
    commentCount: number
    attachmentCount: number
    requestTypeId?: string
    channel?: string
    participants: string[]
    satisfaction?: number
    satisfactionComment?: string
    sla: {
      [key: string]: {
        runningSince?: number
        elapsed: number
        paused?: boolean
        stopped?: boolean
        goal?: number
        calendar: "business" | "always"
        breached?: boolean
        startedAt?: number
        stoppedAt?: number
      }
    }
    version: number
    createdAt: number
    updatedAt: number
  }
}

POST /v1/orgs/:orgId/issues/rank

Reorders issues: puts them (in order) right before or after another issue.

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).

Request body

FieldTypeRequiredNotes
issuesstring[]Yes1–200 items; each up to 64 characters
beforestringNoup to 64 characters
afterstringNoup to 64 characters

Response 200

{
  issues: {
    issueId: string
    key: string
    rank: string
  }[]
}

POST /v1/orgs/:orgId/issues/bulk

Runs one operation (edit, transition, move, delete, watch, unwatch) on up to 200 issues; each reports its own result.

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).

Request body

FieldTypeRequiredNotes
issuesstring[]Yes1–200 items; each up to 64 characters
operation"edit" | "transition" | "move" | "delete" | "watch" | "unwatch"Yes
fieldsobjectNo
fields.typestringNoup to 80 characters
fields.summarystringNoup to 255 characters
fields.descriptionstringNoup to 65,536 characters
fields.prioritystringNoup to 80 characters; can be null
fields.assigneestringNoup to 320 characters; can be null
fields.reporterstringNoup to 320 characters; can be null
fields.labelsstring[]Noup to 30 items; each up to 64 characters
fields.componentsstring[]Noup to 50 items; each up to 100 characters
fields.fixVersionsstring[]Noup to 50 items; each up to 100 characters
fields.affectsVersionsstring[]Noup to 50 items; each up to 100 characters
fields.dueDatestringNomatches ^\d{4}-\d{2}-\d{2}$; can be null
fields.startDatestringNomatches ^\d{4}-\d{2}-\d{2}$; can be null
fields.storyPointsnumberNo0–10000; can be null
fields.originalEstimatenumber | stringNo0–315360000; up to 40 characters; can be null
fields.remainingEstimatenumber | stringNo0–315360000; up to 40 characters; can be null
fields.environmentstringNoup to 32,768 characters; can be null
fields.parentstringNoup to 64 characters; can be null
fields.sprintstringNoup to 100 characters; can be null
fields.securityLevelstringNoup to 80 characters; can be null
fields.resolutionstringNoup to 80 characters; can be null
fields.fieldsobjectNokeys up to 100 characters; values: any JSON
fields.requestTypestringNoup to 80 characters
fields.participantsstring[]Noup to 100 items; each up to 320 characters
transitionstringNoup to 80 characters
spacestringNoup to 64 characters
typestringNoup to 80 characters

Response 200

{
  results: {
    issue: string
    ok: true
    error?: undefined
  } | {
    issue: string
    ok: false
    error: string
  }[]
  done: number
  failed: number
}

GET /v1/orgs/:orgId/issues/:issueKey

Everything the issue page shows: fields, description, comments, links, attachments, children, transitions.

Auth: user access token or platform agent key · Scope: issues:read

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
Query parameterTypeRequiredNotes
remember"0" | "1"No

Response 200

{
  issue: {
    orgId: string
    issueId: string
    spaceId: string
    number: number
    key: string
    typeId: string
    summary: string
    statusId: string
    statusCategory: "done" | "todo" | "inprogress"
    statusChangedAt?: number
    resolutionId?: string
    resolvedAt?: number
    priorityId?: string
    assigneeId?: string
    reporterId?: string
    creatorId?: string
    labels: string[]
    componentIds: string[]
    fixVersionIds: string[]
    affectsVersionIds: string[]
    dueDate?: string
    startDate?: string
    storyPoints?: number
    originalEstimate?: number
    remainingEstimate?: number
    timeSpent?: number
    environment?: string
    parentId?: string
    sprintId?: string
    closedSprintIds: string[]
    rank: string
    watchers: string[]
    voters: string[]
    securityLevelId?: string
    fields: {
      [key: string]: boolean | null | string | number | string[] | {
        parent: string
        child?: string
      }
    }
    excerpt: string
    statusLog: [string, number][]
    commentCount: number
    attachmentCount: number
    requestTypeId?: string
    channel?: string
    participants: string[]
    satisfaction?: number
    satisfactionComment?: string
    sla: {
      [key: string]: {
        runningSince?: number
        elapsed: number
        paused?: boolean
        stopped?: boolean
        goal?: number
        calendar: "business" | "always"
        breached?: boolean
        startedAt?: number
        stoppedAt?: number
      }
    }
    version: number
    createdAt: number
    updatedAt: number
  }
  space: {
    spaceId: string
    key: string
    name: string
    template: "basic" | "service" | "scrum" | "kanban" | "bugs"
    icon?: string
    color?: string
    leadId?: string
    archived: boolean
  }
  description: string
  comments: {
    commentId: string
    issueId: string
    body: string
    authorId: string
    authorType: string
    visibility: "public" | "internal"
    mentions: string[]
    reactions: {
      [key: string]: string[]
    }
    editedAt?: number
    createdAt: number
    updatedAt: number
  }[]
  links: {
    issue: {
      issueId: string
      key: string
      summary: string
      typeId: string
      statusId: string
      statusCategory: "done" | "todo" | "inprogress"
      priorityId?: string
      assigneeId?: string
    }
    linkId: string
    typeId: string
    direction: "outward" | "inward"
    label: string
  }[]
  remoteLinks: {
    linkId: string
    kind: "deployment" | "branch" | "commit" | "pull" | "page" | "web"
    url?: string
    title: string
    ref?: string
    meta: {
      [key: string]: unknown
    }
    createdBy?: string
    createdAt: number
    updatedAt: number
  }[]
  attachments: {
    attachmentId: string
    name: string
    size: number
    contentType: string
    uploadedBy: string
    createdAt: number
  }[]
  children: {
    issueId: string
    key: string
    summary: string
    typeId: string
    statusId: string
    statusCategory: "done" | "todo" | "inprogress"
    priorityId?: string
    assigneeId?: string
  }[]
  parent?: {
    issueId: string
    key: string
    summary: string
    typeId: string
    statusId: string
    statusCategory: "done" | "todo" | "inprogress"
    priorityId?: string
    assigneeId?: string
  }
  worklogs: {
    worklogId: string
    issueId: string
    spaceId: string
    authorId: string
    started: number
    seconds: number
    comment: string
    createdAt: number
    updatedAt: number
  }[]
  transitions: {
    id: string
    name: string
    to: string
    toName: string
    toCategory: string
    fields: string[]
    blocked?: string
  }[]
  workflow: {
    workflowId: string
    name: string
  }
  sla: {
    elapsed: number
    remaining?: number
    breached: boolean
    running: boolean
    paused: boolean
    stopped: boolean
    breachAt?: number
    id: string
    name: string
    goalMinutes?: number
    calendar: "business" | "always"
  }[]
  permissions: {
    edit: boolean
    delete: boolean
    link?: boolean
    worklog?: boolean
    comment?: boolean
    create?: boolean
    browse?: boolean
    editOwn?: boolean
    transition?: boolean
    assign?: boolean
    assignable?: boolean
    deleteOwn?: boolean
    editComments?: boolean
    deleteComments?: boolean
    attach?: boolean
    deleteAttachments?: boolean
    manageWatchers?: boolean
    manageSprints?: boolean
    move?: boolean
    administer?: boolean
    serviceAgent?: boolean
  }
}

PATCH /v1/orgs/:orgId/issues/:issueKey

Edits fields (status changes go through transitions).

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).

Request body

FieldTypeRequiredNotes
typestringNoup to 80 characters
summarystringNoup to 255 characters
descriptionstringNoup to 65,536 characters
prioritystringNoup to 80 characters; can be null
assigneestringNoup to 320 characters; can be null
reporterstringNoup to 320 characters; can be null
labelsstring[]Noup to 30 items; each up to 64 characters
componentsstring[]Noup to 50 items; each up to 100 characters
fixVersionsstring[]Noup to 50 items; each up to 100 characters
affectsVersionsstring[]Noup to 50 items; each up to 100 characters
dueDatestringNomatches ^\d{4}-\d{2}-\d{2}$; can be null
startDatestringNomatches ^\d{4}-\d{2}-\d{2}$; can be null
storyPointsnumberNo0–10000; can be null
originalEstimatenumber | stringNo0–315360000; up to 40 characters; can be null
remainingEstimatenumber | stringNo0–315360000; up to 40 characters; can be null
environmentstringNoup to 32,768 characters; can be null
parentstringNoup to 64 characters; can be null
sprintstringNoup to 100 characters; can be null
securityLevelstringNoup to 80 characters; can be null
resolutionstringNoup to 80 characters; can be null
fieldsobjectNokeys up to 100 characters; values: any JSON
requestTypestringNoup to 80 characters
participantsstring[]Noup to 100 items; each up to 320 characters

Response 200

{
  issue: {
    orgId: string
    issueId: string
    spaceId: string
    number: number
    key: string
    typeId: string
    summary: string
    statusId: string
    statusCategory: "done" | "todo" | "inprogress"
    statusChangedAt?: number
    resolutionId?: string
    resolvedAt?: number
    priorityId?: string
    assigneeId?: string
    reporterId?: string
    creatorId?: string
    labels: string[]
    componentIds: string[]
    fixVersionIds: string[]
    affectsVersionIds: string[]
    dueDate?: string
    startDate?: string
    storyPoints?: number
    originalEstimate?: number
    remainingEstimate?: number
    timeSpent?: number
    environment?: string
    parentId?: string
    sprintId?: string
    closedSprintIds: string[]
    rank: string
    watchers: string[]
    voters: string[]
    securityLevelId?: string
    fields: {
      [key: string]: boolean | null | string | number | string[] | {
        parent: string
        child?: string
      }
    }
    excerpt: string
    statusLog: [string, number][]
    commentCount: number
    attachmentCount: number
    requestTypeId?: string
    channel?: string
    participants: string[]
    satisfaction?: number
    satisfactionComment?: string
    sla: {
      [key: string]: {
        runningSince?: number
        elapsed: number
        paused?: boolean
        stopped?: boolean
        goal?: number
        calendar: "business" | "always"
        breached?: boolean
        startedAt?: number
        stoppedAt?: number
      }
    }
    version: number
    createdAt: number
    updatedAt: number
  }
  changes: {
    field: string
    from?: unknown
    to?: unknown
    fromText?: string
    toText?: string
  }[]
}

DELETE /v1/orgs/:orgId/issues/:issueKey

Deletes an issue with its comments, attachments, work logs and subtasks.

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).

Response 200

{
  issueId: string
  key: string
  subtasks: number
}

GET /v1/orgs/:orgId/issues/:issueKey/transitions

Transitions available from the issue's status, with the reason when a condition blocks one.

Auth: user access token or platform agent key · Scope: issues:read

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).

Response 200

{
  transitions: {
    id: string
    name: string
    to: string
    toName: string
    toCategory: string
    fields: string[]
    blocked?: string
  }[]
  workflow: {
    workflowId: string
    name: string
    definition: {
      initialStatusId: string
      statuses: {
        statusId: string
        x?: number
        y?: number
      }[]
      transitions: {
        id: string
        name: string
        from: string[]
        to: string
        fields?: string[]
        conditions?: {
          type: "orgRole"
          roles: object
        } | {
          type: "spaceRole"
          roles: object
        } | {
          type: "assignee"
        } | {
          type: "reporter"
        } | {
          type: "permission"
          permission: "link" | "worklog" | "delete" | "comment" | "create" | "browse" | "edit" | "editOwn" | "transition" | "assign" | "assignable" | "deleteOwn" | "editComments" | "deleteComments" | "attach" | "deleteAttachments" | "manageWatchers" | "manageSprints" | "move" | "administer" | "serviceAgent"
        } | {
          type: "fieldSet"
          field: string
        } | {
          type: "subtasksDone"
        }[]
        validators?: {
          type: "required"
          fields: object
          message?: string
        } | {
          type: "query"
          query: string
          message: string
        }[]
        postFunctions?: {
          type: "assign"
          to: "reporter" | "lead" | "unassigned" | "currentUser"
        } | {
          type: "setResolution"
          resolutionId: null | string
        } | {
          type: "setField"
          field: string
          value: unknown
        } | {
          type: "clearField"
          field: string
        } | {
          type: "comment"
          body: string
        }[]
      }[]
      autoResolution?: boolean
    }
  }
}

POST /v1/orgs/:orgId/issues/:issueKey/transitions

Moves the issue through its workflow (by transition id or name, or the target status name).

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).

Request body

FieldTypeRequiredNotes
transitionstringYes1–80 characters
fieldsobjectNo
fields.typestringNoup to 80 characters
fields.summarystringNoup to 255 characters
fields.descriptionstringNoup to 65,536 characters
fields.prioritystringNoup to 80 characters; can be null
fields.assigneestringNoup to 320 characters; can be null
fields.reporterstringNoup to 320 characters; can be null
fields.labelsstring[]Noup to 30 items; each up to 64 characters
fields.componentsstring[]Noup to 50 items; each up to 100 characters
fields.fixVersionsstring[]Noup to 50 items; each up to 100 characters
fields.affectsVersionsstring[]Noup to 50 items; each up to 100 characters
fields.dueDatestringNomatches ^\d{4}-\d{2}-\d{2}$; can be null
fields.startDatestringNomatches ^\d{4}-\d{2}-\d{2}$; can be null
fields.storyPointsnumberNo0–10000; can be null
fields.originalEstimatenumber | stringNo0–315360000; up to 40 characters; can be null
fields.remainingEstimatenumber | stringNo0–315360000; up to 40 characters; can be null
fields.environmentstringNoup to 32,768 characters; can be null
fields.parentstringNoup to 64 characters; can be null
fields.sprintstringNoup to 100 characters; can be null
fields.securityLevelstringNoup to 80 characters; can be null
fields.resolutionstringNoup to 80 characters; can be null
fields.fieldsobjectNokeys up to 100 characters; values: any JSON
fields.requestTypestringNoup to 80 characters
fields.participantsstring[]Noup to 100 items; each up to 320 characters
commentstringNoup to 32,768 characters
commentVisibility"public" | "internal"No

Response 200

{
  issue: {
    orgId: string
    issueId: string
    spaceId: string
    number: number
    key: string
    typeId: string
    summary: string
    statusId: string
    statusCategory: "done" | "todo" | "inprogress"
    statusChangedAt?: number
    resolutionId?: string
    resolvedAt?: number
    priorityId?: string
    assigneeId?: string
    reporterId?: string
    creatorId?: string
    labels: string[]
    componentIds: string[]
    fixVersionIds: string[]
    affectsVersionIds: string[]
    dueDate?: string
    startDate?: string
    storyPoints?: number
    originalEstimate?: number
    remainingEstimate?: number
    timeSpent?: number
    environment?: string
    parentId?: string
    sprintId?: string
    closedSprintIds: string[]
    rank: string
    watchers: string[]
    voters: string[]
    securityLevelId?: string
    fields: {
      [key: string]: boolean | null | string | number | string[] | {
        parent: string
        child?: string
      }
    }
    excerpt: string
    statusLog: [string, number][]
    commentCount: number
    attachmentCount: number
    requestTypeId?: string
    channel?: string
    participants: string[]
    satisfaction?: number
    satisfactionComment?: string
    sla: {
      [key: string]: {
        runningSince?: number
        elapsed: number
        paused?: boolean
        stopped?: boolean
        goal?: number
        calendar: "business" | "always"
        breached?: boolean
        startedAt?: number
        stoppedAt?: number
      }
    }
    version: number
    createdAt: number
    updatedAt: number
  }
  changes: {
    field: string
    from?: unknown
    to?: unknown
    fromText?: string
    toText?: string
  }[]
}

POST /v1/orgs/:orgId/issues/:issueKey/move

Moves the issue (and its subtasks) to another space under a new key; the old key keeps working.

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).

Request body

FieldTypeRequiredNotes
spacestringYes1–64 characters
typestringNoup to 80 characters
statusstringNoup to 80 characters

Response 200

{
  issue: {
    orgId: string
    issueId: string
    spaceId: string
    number: number
    key: string
    typeId: string
    summary: string
    statusId: string
    statusCategory: "done" | "todo" | "inprogress"
    statusChangedAt?: number
    resolutionId?: string
    resolvedAt?: number
    priorityId?: string
    assigneeId?: string
    reporterId?: string
    creatorId?: string
    labels: string[]
    componentIds: string[]
    fixVersionIds: string[]
    affectsVersionIds: string[]
    dueDate?: string
    startDate?: string
    storyPoints?: number
    originalEstimate?: number
    remainingEstimate?: number
    timeSpent?: number
    environment?: string
    parentId?: string
    sprintId?: string
    closedSprintIds: string[]
    rank: string
    watchers: string[]
    voters: string[]
    securityLevelId?: string
    fields: {
      [key: string]: boolean | null | string | number | string[] | {
        parent: string
        child?: string
      }
    }
    excerpt: string
    statusLog: [string, number][]
    commentCount: number
    attachmentCount: number
    requestTypeId?: string
    channel?: string
    participants: string[]
    satisfaction?: number
    satisfactionComment?: string
    sla: {
      [key: string]: {
        runningSince?: number
        elapsed: number
        paused?: boolean
        stopped?: boolean
        goal?: number
        calendar: "business" | "always"
        breached?: boolean
        startedAt?: number
        stoppedAt?: number
      }
    }
    version: number
    createdAt: number
    updatedAt: number
  }
  from: string
  subtasks: number
}

POST /v1/orgs/:orgId/issues/:issueKey/clone

Copies an issue (optionally with subtasks and links) and links the copy to the original.

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).

Request body

FieldTypeRequiredNotes
summarystringNo1–255 characters; trimmed
subtasksbooleanNo
linksbooleanNo

Response 201

{
  issue: {
    orgId: string
    issueId: string
    spaceId: string
    number: number
    key: string
    typeId: string
    summary: string
    statusId: string
    statusCategory: "done" | "todo" | "inprogress"
    statusChangedAt?: number
    resolutionId?: string
    resolvedAt?: number
    priorityId?: string
    assigneeId?: string
    reporterId?: string
    creatorId?: string
    labels: string[]
    componentIds: string[]
    fixVersionIds: string[]
    affectsVersionIds: string[]
    dueDate?: string
    startDate?: string
    storyPoints?: number
    originalEstimate?: number
    remainingEstimate?: number
    timeSpent?: number
    environment?: string
    parentId?: string
    sprintId?: string
    closedSprintIds: string[]
    rank: string
    watchers: string[]
    voters: string[]
    securityLevelId?: string
    fields: {
      [key: string]: boolean | null | string | number | string[] | {
        parent: string
        child?: string
      }
    }
    excerpt: string
    statusLog: [string, number][]
    commentCount: number
    attachmentCount: number
    requestTypeId?: string
    channel?: string
    participants: string[]
    satisfaction?: number
    satisfactionComment?: string
    sla: {
      [key: string]: {
        runningSince?: number
        elapsed: number
        paused?: boolean
        stopped?: boolean
        goal?: number
        calendar: "business" | "always"
        breached?: boolean
        startedAt?: number
        stoppedAt?: number
      }
    }
    version: number
    createdAt: number
    updatedAt: number
  }
}

GET /v1/orgs/:orgId/issues/:issueKey/children

Child issues (subtasks, or stories of an epic).

Auth: user access token or platform agent key · Scope: issues:read

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).

Response 200

{
  issues: {
    issueId: string
    key: string
    summary: string
    typeId: string
    statusId: string
    statusCategory: "done" | "todo" | "inprogress"
    priorityId?: string
    assigneeId?: string
  }[]
}

GET /v1/orgs/:orgId/issues/:issueKey/history

Field changes, newest first.

Auth: user access token or platform agent key · Scope: issues:read

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).

Response 200

{
  history: {
    changeId: string
    actorId: string
    actorType: string
    at: number
    items: {
      field: string
      from?: unknown
      to?: unknown
      fromText?: string
      toText?: string
    }[]
  }[]
}

GET /v1/orgs/:orgId/issues/:issueKey/comments

Comments, oldest first (order=desc for newest first). Internal comments only for agents.

Auth: user access token or platform agent key · Scope: issues:read

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
Query parameterTypeRequiredNotes
order"asc" | "desc"No

Response 200

{
  comments: {
    commentId: string
    issueId: string
    body: string
    authorId: string
    authorType: string
    visibility: "public" | "internal"
    mentions: string[]
    reactions: {
      [key: string]: string[]
    }
    editedAt?: number
    createdAt: number
    updatedAt: number
  }[]
}

POST /v1/orgs/:orgId/issues/:issueKey/comments

Adds a comment (Markdown; mention people as @[Name](user:usr_…)). Internal comments are for service desk agents.

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).

Request body

FieldTypeRequiredNotes
bodystringYes1–32,768 characters
visibility"public" | "internal"No

Response 201

{
  comment: {
    commentId: string
    issueId: string
    body: string
    authorId: string
    authorType: string
    visibility: "public" | "internal"
    mentions: string[]
    reactions: {
      [key: string]: string[]
    }
    editedAt?: number
    createdAt: number
    updatedAt: number
  }
}

PATCH /v1/orgs/:orgId/issues/:issueKey/comments/:commentId

Edits a comment (the previous body is kept as a revision) or changes its visibility.

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
:commentIdComment id (icm_…).

Request body

FieldTypeRequiredNotes
bodystringNo1–32,768 characters
visibility"public" | "internal"No

Response 200

{
  comment: {
    commentId: string
    issueId: string
    body: string
    authorId: string
    authorType: string
    visibility: "public" | "internal"
    mentions: string[]
    reactions: {
      [key: string]: string[]
    }
    editedAt?: number
    createdAt: number
    updatedAt: number
  }
}

DELETE /v1/orgs/:orgId/issues/:issueKey/comments/:commentId

Deletes a comment.

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
:commentIdComment id (icm_…).

Response 200

{
  commentId: string
}

GET /v1/orgs/:orgId/issues/:issueKey/comments/:commentId/revisions

Earlier versions of an edited comment.

Auth: user access token or platform agent key · Scope: issues:read

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
:commentIdComment id (icm_…).

Response 200

{
  revisions: {
    body: string
    at: number
  }[]
}

POST /v1/orgs/:orgId/issues/:issueKey/comments/:commentId/reactions

Toggles the caller's reaction.

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
:commentIdComment id (icm_…).

Request body

FieldTypeRequiredNotes
emojistringYes1–16 characters

Response 200

{
  reactions: {
    [key: string]: string[]
  }
}

Issue links and remote links (web pages, Knowledge pages, branches, commits, pull requests, deployments).

Auth: user access token or platform agent key · Scope: issues:read

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).

Response 200

{
  links: {
    issue: {
      issueId: string
      key: string
      summary: string
      typeId: string
      statusId: string
      statusCategory: "done" | "todo" | "inprogress"
      priorityId?: string
      assigneeId?: string
    }
    linkId: string
    typeId: string
    direction: "outward" | "inward"
    label: string
  }[]
  remoteLinks: {
    linkId: string
    kind: "deployment" | "branch" | "commit" | "pull" | "page" | "web"
    url?: string
    title: string
    ref?: string
    meta: {
      [key: string]: unknown
    }
    createdBy?: string
    createdAt: number
    updatedAt: number
  }[]
}

POST /v1/orgs/:orgId/issues/:issueKey/links

Links to another issue by link type (id, name, or either direction's wording, e.g. "is blocked by").

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).

Request body

FieldTypeRequiredNotes
typestringYes1–80 characters
issuestringYes1–64 characters
inwardbooleanNo

Response 201

{
  linkId: string
  typeId: string
  source: string
  target: string
}

Removes a link from both issues.

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
:linkIdLink id (ilk_… for issue links, irl_… for remote links).

Response 200

{
  linkId: string
}

POST /v1/orgs/:orgId/issues/:issueKey/remote-links

Links a web page or Knowledge page.

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).

Request body

FieldTypeRequiredNotes
urlstringYesup to 2,000 characters; URL
titlestringNoup to 200 characters
kind"web" | "page"No

Response 201

{
  linkId: string
}

Removes a remote link.

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
:linkIdLink id (ilk_… for issue links, irl_… for remote links).

Response 200

{
  linkId: string
}

GET /v1/orgs/:orgId/issues/:issueKey/attachments

Attachments.

Auth: user access token or platform agent key · Scope: issues:read

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).

Response 200

{
  attachments: {
    attachmentId: string
    name: string
    size: number
    contentType: string
    uploadedBy: string
    createdAt: number
  }[]
}

POST /v1/orgs/:orgId/issues/:issueKey/attachments

Starts an upload: returns a presigned PUT (15 minutes, size and type signed). Finish with /complete.

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).

Request body

FieldTypeRequiredNotes
namestringYes1–255 characters
sizeintegerYes≥ 1
contentTypestringNoup to 200 characters

Response 201

{
  attachmentId: string
  uploadUrl: string
  headers: {
    "content-type": string
  }
}

POST /v1/orgs/:orgId/issues/:issueKey/attachments/:attachmentId/complete

Finishes an upload once the file is in place.

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
:attachmentIdAttachment id (att_…).

Response 200

{
  attachmentId: string
}

GET /v1/orgs/:orgId/issues/:issueKey/attachments/:attachmentId

A 5-minute download link (inline=1 opens images, PDFs and plain text in the browser).

Auth: user access token or platform agent key · Scope: issues:read

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
:attachmentIdAttachment id (att_…).
Query parameterTypeRequiredNotes
inline"0" | "1"No

Response 200

{
  url: string
  name: string
  contentType: string
  size: number
}

DELETE /v1/orgs/:orgId/issues/:issueKey/attachments/:attachmentId

Deletes an attachment and its file.

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
:attachmentIdAttachment id (att_…).

Response 200

{
  attachmentId: string
}

GET /v1/orgs/:orgId/issues/:issueKey/worklogs

Work logs.

Auth: user access token or platform agent key · Scope: issues:read

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).

Response 200

{
  worklogs: {
    worklogId: string
    issueId: string
    spaceId: string
    authorId: string
    started: number
    seconds: number
    comment: string
    createdAt: number
    updatedAt: number
  }[]
}

POST /v1/orgs/:orgId/issues/:issueKey/worklogs

Logs work ("1h 30m" or seconds); the remaining estimate goes down unless told otherwise.

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).

Request body

FieldTypeRequiredNotes
timeSpentinteger | stringYes60–604800; 1–40 characters
startedintegerNo
commentstringNoup to 4,000 characters
remainingobject | object | objectNo

Response 201

{
  worklogId: string
  issue: {
    orgId: string
    issueId: string
    spaceId: string
    number: number
    key: string
    typeId: string
    summary: string
    statusId: string
    statusCategory: "done" | "todo" | "inprogress"
    statusChangedAt?: number
    resolutionId?: string
    resolvedAt?: number
    priorityId?: string
    assigneeId?: string
    reporterId?: string
    creatorId?: string
    labels: string[]
    componentIds: string[]
    fixVersionIds: string[]
    affectsVersionIds: string[]
    dueDate?: string
    startDate?: string
    storyPoints?: number
    originalEstimate?: number
    remainingEstimate?: number
    timeSpent?: number
    environment?: string
    parentId?: string
    sprintId?: string
    closedSprintIds: string[]
    rank: string
    watchers: string[]
    voters: string[]
    securityLevelId?: string
    fields: {
      [key: string]: boolean | null | string | number | string[] | {
        parent: string
        child?: string
      }
    }
    excerpt: string
    statusLog: [string, number][]
    commentCount: number
    attachmentCount: number
    requestTypeId?: string
    channel?: string
    participants: string[]
    satisfaction?: number
    satisfactionComment?: string
    sla: {
      [key: string]: {
        runningSince?: number
        elapsed: number
        paused?: boolean
        stopped?: boolean
        goal?: number
        calendar: "business" | "always"
        breached?: boolean
        startedAt?: number
        stoppedAt?: number
      }
    }
    version: number
    createdAt: number
    updatedAt: number
  }
}

PATCH /v1/orgs/:orgId/issues/:issueKey/worklogs/:worklogId

Changes a work log.

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
:worklogIdWork log id (wlg_…).

Request body

FieldTypeRequiredNotes
timeSpentinteger | stringNo60–604800; 1–40 characters
startedintegerNo
commentstringNoup to 4,000 characters

Response 200

{
  worklogId: string
}

DELETE /v1/orgs/:orgId/issues/:issueKey/worklogs/:worklogId

Deletes a work log (its time goes back on the remaining estimate).

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
:worklogIdWork log id (wlg_…).

Response 200

{
  worklogId: string
}

POST /v1/orgs/:orgId/issues/:issueKey/watchers

Starts or stops watching (the caller, or someone else with manage watchers).

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).

Request body

FieldTypeRequiredNotes
watchingbooleanYes
userIdstringNoup to 64 characters

Response 200

{
  watchers: string[]
}

POST /v1/orgs/:orgId/issues/:issueKey/votes

Votes for an issue, or withdraws the vote.

Auth: user access token or platform agent key · Scope: issues:write

Path parameterDescription
:orgIdOrganization id (org_…).
:issueKeyIssue key (WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).

Request body

FieldTypeRequiredNotes
votingbooleanYes

Response 200

{
  voters: string[]
}