# Jira Service Management

> Run a service desk from a workflow with Jira Service Management. Raise customer requests, read the queues they land in, comment on them, move them through their workflow, watch their SLA clocks, and manage the customer organizations behind them.

App · Help Desk · 20 actions. Web page: https://docs.lodol.com/docs/integrations/jira-service-management

## Actions

### Add comment

Add a comment to a request. Leave 'Visible to the customer' off - the default - for an internal note only agents see. Turn it on to reply to the customer: that is emailed to them and shown on the portal, and cannot be unsent.

**Inputs**

- Request (`request_key`, text, required): The request's key, such as 'ITSM-42'. Its numeric id works too, and so does a portal or browse URL copied from the address bar.
- Comment (`body`, text, required): The text of the comment.
- Visible to the customer (`public`, true/false): On, this is a public reply: the customer is emailed it and sees it on the portal. Off, it is an internal note only agents see. Defaults to off. Default: `false`.

**Outputs**

- `author` (object)
- `body` (text)
- `created` (object)
- `id` (text)
- `public` (true/false)

**Example output**

```json
{
  "author": {
    "accountId": "5b10a2844c20165700ede21g",
    "active": true,
    "displayName": "Ada Lovelace",
    "emailAddress": "ada@example.com",
    "timeZone": "Europe/London"
  },
  "body": "We have reproduced this and are working on it.",
  "created": {
    "epochMillis": 1773221058000,
    "friendly": "Wednesday 09:24 AM",
    "iso8601": "2026-03-11T09:24:18+0000",
    "jira": "2026-03-11T09:24:18.000+0000"
  },
  "id": "10501",
  "public": false
}
```

### Create organization

Create a customer organization and return it, including the id later steps need. Names are not unique on an Atlassian site - creating the same name twice gives two organizations that only their ids tell apart - so keep the id this returns rather than looking the organization up by name.

**Inputs**

- Name (`name`, text, required): The organization's name, 1-200 characters.

**Outputs**

- `created` (object)
- `id` (text)
- `name` (text)
- `scimManaged` (true/false)
- `uuid` (text)

**Example output**

```json
{
  "created": {
    "epochMillis": 1773221058000,
    "friendly": "Wednesday 09:24 AM",
    "iso8601": "2026-03-11T09:24:18+0000",
    "jira": "2026-03-11T09:24:18.000+0000"
  },
  "id": "7",
  "name": "Acme Corporation",
  "scimManaged": false,
  "uuid": "5d0b8f3a-1c9e-4b1a-9d5d-0a1a2b3c4d5e"
}
```

### Create request

Raise a customer request on a service desk and return it, including the key ('ITSM-42') every other request action takes. If the request type requires fields beyond a summary and a description, run 'Get request type fields' first and pass them in 'Additional fields' keyed by their field id.

**Inputs**

- Service desk (`service_desk_id`, text, required): The service desk to work in. Pick it from the list - the value is its numeric id, not its project key.
- Request type (`request_type_id`, text, required): The kind of request to raise, such as 'Get IT help'. The list is the request types on the service desk chosen above.
- Summary (`summary`, text, required): The one-line title of the request. This is what agents see in a queue.
- Description (`description`, text): The body of the request, as plain text. Leave empty if the request type does not ask for one.
- Raise on behalf of (`raise_on_behalf_of`, text): The Atlassian account id of the customer this request is for. Leave empty to raise it as the connected account. Account ids come from 'List service desk customers'.
- Participants (`request_participants`, list): Atlassian account ids to copy in on the request, as a list. They receive its notifications and can see it in the portal.
- Additional fields (`additional_fields`, object): Any other fields the request type requires, keyed by Jira field id - for example {"customfield_10062": "Laptop"}. Field ids come from 'Get request type fields'; a field's label will not work here.

**Outputs**

- `_links` (object)
- `createdDate` (object)
- `currentStatus` (object)
- `issueId` (text)
- `issueKey` (text)
- `reporter` (object)
- `requestFieldValues` (list)
- `requestTypeId` (text)
- `serviceDeskId` (text)
- `summary` (text)

**Example output**

```json
{
  "_links": {
    "agent": "https://acme.atlassian.net/browse/ITSM-42",
    "jiraRest": "https://acme.atlassian.net/rest/api/2/issue/10214",
    "self": "https://acme.atlassian.net/rest/servicedeskapi/request/10214",
    "web": "https://acme.atlassian.net/servicedesk/customer/portal/2/ITSM-42"
  },
  "createdDate": {
    "epochMillis": 1773221058000,
    "friendly": "Wednesday 09:24 AM",
    "iso8601": "2026-03-11T09:24:18+0000",
    "jira": "2026-03-11T09:24:18.000+0000"
  },
  "currentStatus": {
    "status": "Waiting for support",
    "statusCategory": "NEW",
    "statusDate": {
      "epochMillis": 1773221058000,
      "friendly": "Wednesday 09:24 AM",
      "iso8601": "2026-03-11T09:24:18+0000",
      "jira": "2026-03-11T09:24:18.000+0000"
    }
  },
  "issueId": "10214",
  "issueKey": "ITSM-42",
  "reporter": {
    "accountId": "5b10a2844c20165700ede21g",
    "active": true,
    "displayName": "Ada Lovelace",
    "emailAddress": "ada@example.com",
    "timeZone": "Europe/London"
  },
  "requestFieldValues": [
    {
      "fieldId": "summary",
      "label": "What do you need?",
      "value": "Laptop will not connect to the VPN"
    },
    {
      "fieldId": "description",
      "label": "Details",
      "value": "It times out after the second factor prompt."
    }
  ],
  "requestTypeId": "25",
  "serviceDeskId": "10",
  "summary": "Laptop will not connect to the VPN"
}
```

### Delete organization

Delete a customer organization. Atlassian deletes it whatever it is attached to: its members keep their accounts and their requests, but every service desk association goes with it, and requests shared with the organization stop being shared.

**Inputs**

- Organization (`organization_id`, text, required): The organization's numeric id, from 'List organizations'.

**Outputs**

- `deleted` (true/false)
- `id` (text)
- `resource` (text)

**Example output**

```json
{
  "deleted": true,
  "id": "7",
  "resource": "organization"
}
```

### Get request

Read one customer request: its key and id, summary, request type, reporter, current status, every field value on it, and the portal and agent links to it. Ask for more with 'Also fetch'.

**Inputs**

- Request (`request_key`, text, required): The request's key, such as 'ITSM-42'. Its numeric id works too, and so does a portal or browse URL copied from the address bar.
- Also fetch (`expand`, list): Extra detail to return with the request, such as its comments, participants or SLA clocks. One or more of: `serviceDesk` (Service desk details), `requestType` (Request type details), `participant` (Participants), `sla` (SLA clocks), `status` (Status history, oldest first), `attachment` (Attachments), `action` (What the connected user may do to it), `comment` (Comments), `comment.attachment` (Comment attachments).

**Outputs**

- `_links` (object)
- `createdDate` (object)
- `currentStatus` (object)
- `issueId` (text)
- `issueKey` (text)
- `reporter` (object)
- `requestFieldValues` (list)
- `requestTypeId` (text)
- `serviceDeskId` (text)
- `summary` (text)

**Example output**

```json
{
  "_links": {
    "agent": "https://acme.atlassian.net/browse/ITSM-42",
    "jiraRest": "https://acme.atlassian.net/rest/api/2/issue/10214",
    "self": "https://acme.atlassian.net/rest/servicedeskapi/request/10214",
    "web": "https://acme.atlassian.net/servicedesk/customer/portal/2/ITSM-42"
  },
  "createdDate": {
    "epochMillis": 1773221058000,
    "friendly": "Wednesday 09:24 AM",
    "iso8601": "2026-03-11T09:24:18+0000",
    "jira": "2026-03-11T09:24:18.000+0000"
  },
  "currentStatus": {
    "status": "Waiting for support",
    "statusCategory": "NEW",
    "statusDate": {
      "epochMillis": 1773221058000,
      "friendly": "Wednesday 09:24 AM",
      "iso8601": "2026-03-11T09:24:18+0000",
      "jira": "2026-03-11T09:24:18.000+0000"
    }
  },
  "issueId": "10214",
  "issueKey": "ITSM-42",
  "reporter": {
    "accountId": "5b10a2844c20165700ede21g",
    "active": true,
    "displayName": "Ada Lovelace",
    "emailAddress": "ada@example.com",
    "timeZone": "Europe/London"
  },
  "requestFieldValues": [
    {
      "fieldId": "summary",
      "label": "What do you need?",
      "value": "Laptop will not connect to the VPN"
    },
    {
      "fieldId": "description",
      "label": "Details",
      "value": "It times out after the second factor prompt."
    }
  ],
  "requestTypeId": "25",
  "serviceDeskId": "10",
  "summary": "Laptop will not connect to the VPN"
}
```

### Get request SLAs

Read every SLA clock running on a request - time to first response, time to resolution and any others configured - with how much of each goal is left and whether it has been breached. A service desk with no SLAs configured correctly returns nothing.

**Inputs**

- Request (`request_key`, text, required): The request's key, such as 'ITSM-42'. Its numeric id works too, and so does a portal or browse URL copied from the address bar.
- Start at (`start`, number): How many records to skip. Leave empty to start at the beginning; use the previous step's 'next_start' to fetch the following page. At least 0.
- Page size (`limit`, number): How many records to return, 1-100. Defaults to 50. From 1 to 100.

**Outputs**: The SLA clocks on the request

- `count` (number): How many records this page holds
- `is_last_page` (true/false): True when there is nothing after this page
- `items` (list)
- `limit` (number): The page size used
- `next_start` (number): The offset to pass as 'start' for the next page, or empty on the last page
- `start` (number): The offset this page started at

**Example output**

```json
{
  "count": 1,
  "is_last_page": true,
  "items": [
    {
      "completedCycles": [],
      "id": "1",
      "name": "Time to first response",
      "ongoingCycle": {
        "breachTime": {
          "epochMillis": 1773221058000,
          "friendly": "Wednesday 09:24 AM",
          "iso8601": "2026-03-11T09:24:18+0000",
          "jira": "2026-03-11T09:24:18.000+0000"
        },
        "breached": false,
        "elapsedTime": {
          "friendly": "30m",
          "millis": 1800000
        },
        "goalDuration": {
          "friendly": "4h",
          "millis": 14400000
        },
        "paused": false,
        "remainingTime": {
          "friendly": "3h 30m",
          "millis": 12600000
        },
        "startTime": {
          "epochMillis": 1773221058000,
          "friendly": "Wednesday 09:24 AM",
          "iso8601": "2026-03-11T09:24:18+0000",
          "jira": "2026-03-11T09:24:18.000+0000"
        },
        "withinCalendarHours": true
      },
      "slaDisplayFormat": "DURATION"
    }
  ],
  "limit": 50,
  "next_start": null,
  "start": 0
}
```

### Get request status history

List the statuses a request has moved through, oldest first, each with the date it changed and its category (NEW, INDETERMINATE or DONE). The last entry is where it is now.

**Inputs**

- Request (`request_key`, text, required): The request's key, such as 'ITSM-42'. Its numeric id works too, and so does a portal or browse URL copied from the address bar.
- Start at (`start`, number): How many records to skip. Leave empty to start at the beginning; use the previous step's 'next_start' to fetch the following page. At least 0.
- Page size (`limit`, number): How many records to return, 1-100. Defaults to 50. From 1 to 100.

**Outputs**: The request's status history, oldest first

- `count` (number): How many records this page holds
- `is_last_page` (true/false): True when there is nothing after this page
- `items` (list)
- `limit` (number): The page size used
- `next_start` (number): The offset to pass as 'start' for the next page, or empty on the last page
- `start` (number): The offset this page started at

**Example output**

```json
{
  "count": 1,
  "is_last_page": true,
  "items": [
    {
      "status": "Waiting for support",
      "statusCategory": "NEW",
      "statusDate": {
        "epochMillis": 1773221058000,
        "friendly": "Wednesday 09:24 AM",
        "iso8601": "2026-03-11T09:24:18+0000",
        "jira": "2026-03-11T09:24:18.000+0000"
      }
    }
  ],
  "limit": 50,
  "next_start": null,
  "start": 0
}
```

### Get request type fields

List the fields a request type asks for, which of them are required, and the values any dropdown among them accepts. Run this before 'Create request' against an unfamiliar request type: each entry's 'fieldId' is exactly the key that action's 'Additional fields' map wants.

**Inputs**

- Service desk (`service_desk_id`, text, required): The service desk to work in. Pick it from the list - the value is its numeric id, not its project key.
- Request type (`request_type_id`, text, required): The kind of request to raise, such as 'Get IT help'. The list is the request types on the service desk chosen above.

**Outputs**

- `canAddRequestParticipants` (true/false)
- `canRaiseOnBehalfOf` (true/false)
- `requestTypeFields` (list)

**Example output**

```json
{
  "canAddRequestParticipants": true,
  "canRaiseOnBehalfOf": true,
  "requestTypeFields": [
    {
      "defaultValues": [],
      "description": "",
      "fieldId": "summary",
      "jiraSchema": {
        "system": "summary",
        "type": "string"
      },
      "name": "What do you need?",
      "presetValues": [],
      "required": true,
      "validValues": [],
      "visible": true
    },
    {
      "defaultValues": [],
      "description": "The device the problem is on",
      "fieldId": "customfield_10062",
      "jiraSchema": {
        "custom": "select",
        "customId": 10062,
        "type": "option"
      },
      "name": "Which device?",
      "presetValues": [],
      "required": false,
      "validValues": [
        {
          "label": "Laptop",
          "value": "10"
        },
        {
          "label": "Phone",
          "value": "11"
        }
      ],
      "visible": true
    }
  ]
}
```

### Get service desk

Read one service desk: its id, the Jira project it belongs to, that project's key and name, and its project type.

**Inputs**

- Service desk (`service_desk_id`, text, required): The service desk to work in. Pick it from the list - the value is its numeric id, not its project key.

**Outputs**

- `id` (text)
- `projectId` (text)
- `projectKey` (text)
- `projectName` (text)
- `projectTypeKey` (text)

**Example output**

```json
{
  "id": "10",
  "projectId": "10002",
  "projectKey": "ITSM",
  "projectName": "IT Service Management",
  "projectTypeKey": "service_desk"
}
```

### List organizations

List the customer organizations on the site, with each one's id and name. Give an account id to list only the organizations that customer belongs to.

**Inputs**

- Customer account id (`account_id`, text): Only the organizations this customer belongs to. Leave empty for every organization on the site.
- Start at (`start`, number): How many records to skip. Leave empty to start at the beginning; use the previous step's 'next_start' to fetch the following page. At least 0.
- Page size (`limit`, number): How many records to return, 1-100. Defaults to 50. From 1 to 100.

**Outputs**: The organizations on the site

- `count` (number): How many records this page holds
- `is_last_page` (true/false): True when there is nothing after this page
- `items` (list)
- `limit` (number): The page size used
- `next_start` (number): The offset to pass as 'start' for the next page, or empty on the last page
- `start` (number): The offset this page started at

**Example output**

```json
{
  "count": 1,
  "is_last_page": true,
  "items": [
    {
      "created": {
        "epochMillis": 1773221058000,
        "friendly": "Wednesday 09:24 AM",
        "iso8601": "2026-03-11T09:24:18+0000",
        "jira": "2026-03-11T09:24:18.000+0000"
      },
      "id": "7",
      "name": "Acme Corporation",
      "scimManaged": false,
      "uuid": "5d0b8f3a-1c9e-4b1a-9d5d-0a1a2b3c4d5e"
    }
  ],
  "limit": 50,
  "next_start": null,
  "start": 0
}
```

### List queues

List a service desk's agent queues, with each one's id, name and the JQL query that defines it. Optionally include how many requests are sitting in each.

**Inputs**

- Service desk (`service_desk_id`, text, required): The service desk to work in. Pick it from the list - the value is its numeric id, not its project key.
- Include request counts (`include_count`, true/false): Also report how many requests each queue holds. This runs every queue's query, so it is slower.
- Start at (`start`, number): How many records to skip. Leave empty to start at the beginning; use the previous step's 'next_start' to fetch the following page. At least 0.
- Page size (`limit`, number): How many records to return, 1-100. Defaults to 50. From 1 to 100.

**Outputs**: The service desk's queues

- `count` (number): How many records this page holds
- `is_last_page` (true/false): True when there is nothing after this page
- `items` (list)
- `limit` (number): The page size used
- `next_start` (number): The offset to pass as 'start' for the next page, or empty on the last page
- `start` (number): The offset this page started at

**Example output**

```json
{
  "count": 1,
  "is_last_page": true,
  "items": [
    {
      "fields": [
        "issuekey",
        "summary",
        "created"
      ],
      "id": "42",
      "issueCount": 3,
      "jql": "project = ITSM AND assignee is EMPTY ORDER BY created ASC",
      "name": "Unassigned requests"
    }
  ],
  "limit": 50,
  "next_start": null,
  "start": 0
}
```

### List request comments

List a request's comments, oldest first, each with its author, text, date, and whether it is a public reply or an internal note. Narrow to just one of the two.

**Inputs**

- Request (`request_key`, text, required): The request's key, such as 'ITSM-42'. Its numeric id works too, and so does a portal or browse URL copied from the address bar.
- Show (`visibility`, text): Which comments to return. Defaults to both public replies and internal notes. One of: `all` (Public replies and internal notes), `public` (Public replies only), `internal` (Internal notes only).
- Start at (`start`, number): How many records to skip. Leave empty to start at the beginning; use the previous step's 'next_start' to fetch the following page. At least 0.
- Page size (`limit`, number): How many records to return, 1-100. Defaults to 50. From 1 to 100.

**Outputs**: The request's comments, oldest first

- `count` (number): How many records this page holds
- `is_last_page` (true/false): True when there is nothing after this page
- `items` (list)
- `limit` (number): The page size used
- `next_start` (number): The offset to pass as 'start' for the next page, or empty on the last page
- `start` (number): The offset this page started at

**Example output**

```json
{
  "count": 1,
  "is_last_page": true,
  "items": [
    {
      "author": {
        "accountId": "5b10a2844c20165700ede21g",
        "active": true,
        "displayName": "Ada Lovelace",
        "emailAddress": "ada@example.com",
        "timeZone": "Europe/London"
      },
      "body": "We have reproduced this and are working on it.",
      "created": {
        "epochMillis": 1773221058000,
        "friendly": "Wednesday 09:24 AM",
        "iso8601": "2026-03-11T09:24:18+0000",
        "jira": "2026-03-11T09:24:18.000+0000"
      },
      "id": "10501",
      "public": false
    }
  ],
  "limit": 50,
  "next_start": null,
  "start": 0
}
```

### List request participants

List the customers copied in on a request - the people who receive its notifications and can see it in the portal alongside the person who raised it.

**Inputs**

- Request (`request_key`, text, required): The request's key, such as 'ITSM-42'. Its numeric id works too, and so does a portal or browse URL copied from the address bar.
- Start at (`start`, number): How many records to skip. Leave empty to start at the beginning; use the previous step's 'next_start' to fetch the following page. At least 0.
- Page size (`limit`, number): How many records to return, 1-100. Defaults to 50. From 1 to 100.

**Outputs**: The request's participants

- `count` (number): How many records this page holds
- `is_last_page` (true/false): True when there is nothing after this page
- `items` (list)
- `limit` (number): The page size used
- `next_start` (number): The offset to pass as 'start' for the next page, or empty on the last page
- `start` (number): The offset this page started at

**Example output**

```json
{
  "count": 1,
  "is_last_page": true,
  "items": [
    {
      "accountId": "5b10a2844c20165700ede21g",
      "active": true,
      "displayName": "Ada Lovelace",
      "emailAddress": "ada@example.com",
      "timeZone": "Europe/London"
    }
  ],
  "limit": 50,
  "next_start": null,
  "start": 0
}
```

### List request transitions

List the status changes the connected account may make to a request right now, with each one's id and name. These depend on the request's current status, so read them immediately before using one rather than hard-coding an id.

**Inputs**

- Request (`request_key`, text, required): The request's key, such as 'ITSM-42'. Its numeric id works too, and so does a portal or browse URL copied from the address bar.
- Start at (`start`, number): How many records to skip. Leave empty to start at the beginning; use the previous step's 'next_start' to fetch the following page. At least 0.
- Page size (`limit`, number): How many records to return, 1-100. Defaults to 50. From 1 to 100.

**Outputs**: The transitions available right now

- `count` (number): How many records this page holds
- `is_last_page` (true/false): True when there is nothing after this page
- `items` (list)
- `limit` (number): The page size used
- `next_start` (number): The offset to pass as 'start' for the next page, or empty on the last page
- `start` (number): The offset this page started at

**Example output**

```json
{
  "count": 1,
  "is_last_page": true,
  "items": [
    {
      "id": "731",
      "name": "Resolve this issue"
    }
  ],
  "limit": 50,
  "next_start": null,
  "start": 0
}
```

### List request types

List the request types customers can raise on a service desk - 'Get IT help', 'Report a bug' and so on - with each one's id, name, description and help text. The id is what 'Create request' takes.

**Inputs**

- Service desk (`service_desk_id`, text, required): The service desk to work in. Pick it from the list - the value is its numeric id, not its project key.
- Search (`search_query`, text): Only request types whose name matches this text. Leave empty for all of them.
- Start at (`start`, number): How many records to skip. Leave empty to start at the beginning; use the previous step's 'next_start' to fetch the following page. At least 0.
- Page size (`limit`, number): How many records to return, 1-100. Defaults to 50. From 1 to 100.

**Outputs**: The service desk's request types

- `count` (number): How many records this page holds
- `is_last_page` (true/false): True when there is nothing after this page
- `items` (list)
- `limit` (number): The page size used
- `next_start` (number): The offset to pass as 'start' for the next page, or empty on the last page
- `start` (number): The offset this page started at

**Example output**

```json
{
  "count": 1,
  "is_last_page": true,
  "items": [
    {
      "canCreateRequest": true,
      "description": "Get help from the IT team",
      "groupIds": [
        "12"
      ],
      "helpText": "Tell us what you need help with",
      "id": "25",
      "issueTypeId": "10010",
      "name": "Get IT help",
      "portalId": "2",
      "practice": "ITSM",
      "serviceDeskId": "10"
    }
  ],
  "limit": 50,
  "next_start": null,
  "start": 0
}
```

### List requests

Search the customer requests the connected account can see. Narrow by summary text, by service desk, by request type, by open or closed, and by how the account relates to the request - it created it, is a participant on it, or approves it. Left alone, it reports the account's own and participating requests.

**Inputs**

- Summary contains (`search_term`, text): Only requests whose summary matches this text. Leave empty for all of them.
- My relationship to the request (`request_ownership`, list): How the connected account relates to the requests to return. Choose several to combine them. Leave empty for Jira's default: requests it created, is a participant on, or that belong to its organizations. One or more of: `OWNED_REQUESTS` (Requests I created), `PARTICIPATED_REQUESTS` (Requests I am a participant on), `ORGANIZATION` (Requests for one organization I belong to), `ALL_ORGANIZATIONS` (Requests for every organization I belong to), `APPROVER` (Requests I am an approver on).
- Status (`request_status`, text): Open requests, closed ones, or both. One of: `OPEN_REQUESTS` (Open requests), `CLOSED_REQUESTS` (Closed requests), `ALL_REQUESTS` (Open and closed requests).
- Approval (`approval_status`, text): Narrow to requests waiting on the account's approval, or ones it has already answered. Only works with 'Requests I am an approver on' chosen above. One of: `MY_PENDING_APPROVAL` (Waiting for my approval), `MY_HISTORY_APPROVAL` (I have already approved or declined).
- Service desk (`service_desk_id`, text): Only requests on this service desk. Leave empty for all of them.
- Request type (`request_type_id`, text): Only requests of this type. Needs a service desk chosen above, because a request type id is only unique within its own service desk.
- Organization (`organization_id`, text): Only requests belonging to this organization. Needs 'Requests for one organization I belong to' chosen above. Organization ids come from 'List organizations'.
- Also fetch (`expand`, list): Extra detail to return with each request. Each one costs time, so ask only for what a later step reads. One or more of: `serviceDesk` (Service desk details), `requestType` (Request type details), `participant` (Participants), `sla` (SLA clocks), `status` (Status history, oldest first), `attachment` (Attachments), `action` (What the connected user may do to it), `comment` (Comments), `comment.attachment` (Comment attachments).
- Start at (`start`, number): How many records to skip. Leave empty to start at the beginning; use the previous step's 'next_start' to fetch the following page. At least 0.
- Page size (`limit`, number): How many records to return, 1-100. Defaults to 50. From 1 to 100.

**Outputs**: The matching requests

- `count` (number): How many records this page holds
- `is_last_page` (true/false): True when there is nothing after this page
- `items` (list)
- `limit` (number): The page size used
- `next_start` (number): The offset to pass as 'start' for the next page, or empty on the last page
- `start` (number): The offset this page started at

**Example output**

```json
{
  "count": 1,
  "is_last_page": true,
  "items": [
    {
      "_links": {
        "agent": "https://acme.atlassian.net/browse/ITSM-42",
        "jiraRest": "https://acme.atlassian.net/rest/api/2/issue/10214",
        "self": "https://acme.atlassian.net/rest/servicedeskapi/request/10214",
        "web": "https://acme.atlassian.net/servicedesk/customer/portal/2/ITSM-42"
      },
      "createdDate": {
        "epochMillis": 1773221058000,
        "friendly": "Wednesday 09:24 AM",
        "iso8601": "2026-03-11T09:24:18+0000",
        "jira": "2026-03-11T09:24:18.000+0000"
      },
      "currentStatus": {
        "status": "Waiting for support",
        "statusCategory": "NEW",
        "statusDate": {
          "epochMillis": 1773221058000,
          "friendly": "Wednesday 09:24 AM",
          "iso8601": "2026-03-11T09:24:18+0000",
          "jira": "2026-03-11T09:24:18.000+0000"
        }
      },
      "issueId": "10214",
      "issueKey": "ITSM-42",
      "reporter": {
        "accountId": "5b10a2844c20165700ede21g",
        "active": true,
        "displayName": "Ada Lovelace",
        "emailAddress": "ada@example.com",
        "timeZone": "Europe/London"
      },
      "requestFieldValues": [
        {
          "fieldId": "summary",
          "label": "What do you need?",
          "value": "Laptop will not connect to the VPN"
        },
        {
          "fieldId": "description",
          "label": "Details",
          "value": "It times out after the second factor prompt."
        }
      ],
      "requestTypeId": "25",
      "serviceDeskId": "10",
      "summary": "Laptop will not connect to the VPN"
    }
  ],
  "limit": 50,
  "next_start": null,
  "start": 0
}
```

### List requests in a queue

List the requests currently in one queue. These come back in Jira's issue shape - 'key' and a 'fields' object - rather than the customer request shape the other request actions return, because a queue reports the underlying issues.

**Inputs**

- Service desk (`service_desk_id`, text, required): The service desk to work in. Pick it from the list - the value is its numeric id, not its project key.
- Queue (`queue_id`, text, required): The queue's numeric id, from 'List queues'.
- Start at (`start`, number): How many records to skip. Leave empty to start at the beginning; use the previous step's 'next_start' to fetch the following page. At least 0.
- Page size (`limit`, number): How many records to return, 1-100. Defaults to 50. From 1 to 100.

**Outputs**: The requests in the queue

- `count` (number): How many records this page holds
- `is_last_page` (true/false): True when there is nothing after this page
- `items` (list)
- `limit` (number): The page size used
- `next_start` (number): The offset to pass as 'start' for the next page, or empty on the last page
- `start` (number): The offset this page started at

**Example output**

```json
{
  "count": 1,
  "is_last_page": true,
  "items": [
    {
      "fields": {
        "created": "2026-03-11T09:24:18.000+0000",
        "summary": "Laptop will not connect to the VPN",
        "updated": "2026-03-11T10:02:55.000+0000"
      },
      "id": "10214",
      "key": "ITSM-42",
      "self": "https://acme.atlassian.net/rest/api/2/issue/10214"
    }
  ],
  "limit": 50,
  "next_start": null,
  "start": 0
}
```

### List service desk customers

List the customers who can raise requests against a service desk, with each one's account id, display name and - where their Atlassian profile allows it - their email address. Narrow it with a search term.

**Inputs**

- Service desk (`service_desk_id`, text, required): The service desk to work in. Pick it from the list - the value is its numeric id, not its project key.
- Search (`query`, text): Only customers whose name or email matches this text. Leave empty for all of them.
- Start at (`start`, number): How many records to skip. Leave empty to start at the beginning; use the previous step's 'next_start' to fetch the following page. At least 0.
- Page size (`limit`, number): How many records to return, 1-100. Defaults to 50. From 1 to 100.

**Outputs**: The service desk's customers

- `count` (number): How many records this page holds
- `is_last_page` (true/false): True when there is nothing after this page
- `items` (list)
- `limit` (number): The page size used
- `next_start` (number): The offset to pass as 'start' for the next page, or empty on the last page
- `start` (number): The offset this page started at

**Example output**

```json
{
  "count": 1,
  "is_last_page": true,
  "items": [
    {
      "accountId": "5b10a2844c20165700ede21g",
      "active": true,
      "displayName": "Ada Lovelace",
      "emailAddress": "ada@example.com",
      "timeZone": "Europe/London"
    }
  ],
  "limit": 50,
  "next_start": null,
  "start": 0
}
```

### List service desks

List the service desks the connected account can see, with each one's id, project key, name and type. The id is what every other service desk action takes - start here when you do not know it.

**Inputs**

- Start at (`start`, number): How many records to skip. Leave empty to start at the beginning; use the previous step's 'next_start' to fetch the following page. At least 0.
- Page size (`limit`, number): How many records to return, 1-100. Defaults to 50. From 1 to 100.

**Outputs**: The service desks on the site

- `count` (number): How many records this page holds
- `is_last_page` (true/false): True when there is nothing after this page
- `items` (list)
- `limit` (number): The page size used
- `next_start` (number): The offset to pass as 'start' for the next page, or empty on the last page
- `start` (number): The offset this page started at

**Example output**

```json
{
  "count": 1,
  "is_last_page": true,
  "items": [
    {
      "id": "10",
      "projectId": "10002",
      "projectKey": "ITSM",
      "projectName": "IT Service Management",
      "projectTypeKey": "service_desk"
    }
  ],
  "limit": 50,
  "next_start": null,
  "start": 0
}
```

### Transition request

Move a request to another status - resolving it, closing it, or whatever else its workflow allows. Take the transition id from 'List request transitions' run against the same request; an id from a request in a different status will be refused.

**Inputs**

- Request (`request_key`, text, required): The request's key, such as 'ITSM-42'. Its numeric id works too, and so does a portal or browse URL copied from the address bar.
- Transition (`transition_id`, text, required): The numeric id of the transition to perform, from 'List request transitions'.
- Comment (`comment`, text): An optional note explaining the change. It is added as a public comment, so the customer will see it.

**Outputs**

- `comment` (text)
- `request_key` (text)
- `transition_id` (text)
- `transitioned` (true/false)

**Example output**

```json
{
  "comment": "Fixed by reissuing the VPN certificate.",
  "request_key": "ITSM-42",
  "transition_id": "731",
  "transitioned": true
}
```
