Support

The Issue object

Issues represent support tickets created by your organization. Each issue has a status, priority, and a history of activities.

Attributes

idID

Unique identifier for the issue.

friendlyIdInt

Human-readable ticket number, sequential per organization.

titleStringnullable

Short description of the issue.

statusIssueStatus

Current lifecycle status of the issue.

Possible values of the IssueStatus enum
QUEUED_BACKLOGBacklog
QUEUED_READYReady to start
ONGOING_REQUESTERAwaiting the requester
ONGOING_ASSIGNEEIn Nebux' hands
ONGOING_REVIEWIn review by the requester
ONGOING_EXTERNALBlocked
CLOSED_RESOLVEDResolved
CLOSED_DISMISSEDDismissed
priorityIssuePriority

Priority level assigned to the issue.

Possible values of the IssuePriority enum
CRITICALCritical
HIGHHigh
MEDIUMMedium
LOWLow
summaryStringnullable

Detailed description of the issue.

createdAtString

ISO 8601 timestamp when the issue was created.

updatedAtString

ISO 8601 timestamp of the last update to the issue.

lastActivityAtStringnullable

ISO 8601 timestamp of the most recent activity.

organizationOrganizationProfile

The organization this issue belongs to.

idID

Unique identifier for the organization.

nameString

Display name of the organization.

isVerifiedBoolean

Whether the organization has been verified.

participationsIssueParticipationConnection

The users involved in the issue — the requester and any assignees. Each edge's node is an IssueParticipation with:

idID

Unique identifier for the participation.

roleIssueParticipationRole

The user's role in the issue.

Possible values of the IssueParticipationRole enum
REQUESTERThe person who opened the issue.
ASSIGNEEA Nebux team member handling the issue.
WATCHERFollowing the issue without being assigned.
NONENo particular role.
userUserProfile

The participating user.

idID

Unique identifier for the user.

firstNameString

The user's first name.

lastNameString

The user's last name.

avatarUrlString

URL of the user's avatar image.

isStaffBoolean

Whether the user is a member of the Nebux team.

firstActivityIssueActivitynullable

The opening activity of the issue — usually the requester's first message.

inboundLinksIssueLinkConnection

Issues that link to this one. Each edge's node is an IssueLink with:

kindIssueLinkKind

The kind of relationship between the two issues.

inboundIssueIdID

ID of the issue on the inbound side of the link.

outboundIssueIdID

ID of the issue on the outbound side of the link.

outboundLinksIssueLinkConnection

Issues this one links to. Each edge's node is an IssueLink with:

kindIssueLinkKind

The kind of relationship between the two issues.

inboundIssueIdID

ID of the issue on the inbound side of the link.

outboundIssueIdID

ID of the issue on the outbound side of the link.

RESPONSE
{
  "id": "rprdbtyvc51ys7g7xq9xwra8cm",
  "friendlyId": 42,
  "title": "Cannot access billing dashboard",
  "status": "ONGOING_ASSIGNEE",
  "priority": "HIGH",
  "summary": "Getting a 403 Forbidden error when navigating to the billing section.",
  "createdAt": "2026-05-15T10:23:41Z",
  "updatedAt": "2026-05-15T14:07:22Z",
  "lastActivityAt": "2026-05-15T14:07:22Z",
  "organization": {
    "id": "k4p9m2vr8st1ynx7q3wzc5hjd6",
    "name": "Acme Corp"
  },
  "participations": {
    "edges": [
      {
        "node": {
          "id": "prt9k2m8vr4st1ynx7q3wzc5hd",
          "role": "REQUESTER",
          "user": {
            "id": "bm3pq9rv5wy2k8tn7xj4cs1hd0",
            "firstName": "Jane",
            "lastName": "Doe"
          }
        }
      }
    ]
  }
}
Query

List issues

Returns a paginated list of issues for an organization. You can filter by status or priority, and sort by various fields.

Parameters

idIDrequired

The ID of the organization whose issues you want to list.

firstIntoptional

Number of issues to return (default 20, maximum 100).

afterCursoroptional

Cursor for forward pagination. Use the endCursor from a previous response.

where.statusIn[IssueStatus!]optional

Filter by one or more statuses.

Possible values of the IssueStatus enum
QUEUED_BACKLOGBacklog
QUEUED_READYReady to start
ONGOING_REQUESTERAwaiting the requester
ONGOING_ASSIGNEEIn Nebux' hands
ONGOING_REVIEWIn review by the requester
ONGOING_EXTERNALBlocked
CLOSED_RESOLVEDResolved
CLOSED_DISMISSEDDismissed
where.priorityIn[IssuePriority!]optional

Filter by one or more priorities.

Possible values of the IssuePriority enum
CRITICALCritical
HIGHHigh
MEDIUMMedium
LOWLow
where.statusNotIn[IssueStatus!]optional

Exclude one or more statuses.

Possible values of the IssueStatus enum
QUEUED_BACKLOGBacklog
QUEUED_READYReady to start
ONGOING_REQUESTERAwaiting the requester
ONGOING_ASSIGNEEIn Nebux' hands
ONGOING_REVIEWIn review by the requester
ONGOING_EXTERNALBlocked
CLOSED_RESOLVEDResolved
CLOSED_DISMISSEDDismissed
where.priorityNotIn[IssuePriority!]optional

Exclude one or more priorities.

Possible values of the IssuePriority enum
CRITICALCritical
HIGHHigh
MEDIUMMedium
LOWLow
where.titleContainsFoldStringoptional

Filter by issues whose title contains this text (case-insensitive).

orderBy.fieldIssueOrderFieldoptional

Field to sort by.

Possible values of the IssueOrderField enum
CREATED_ATCreated
LAST_ACTIVITY_ATLast activity
PRIORITYPriority
orderBy.directionOrderDirectionoptional

Sort direction.

Possible values of the OrderDirection enum
ASCAscending
DESCDescending

Returns

Returns an IssueConnection object with a list of Issue edges, pagination info, and the total count.

Errors

NOT_FOUNDThe resource does not exist or your organization cannot access it.
VALIDATIONThe input does not meet the required rules (for example, a field is too long or a value is not allowed).
listIssues.ts
const res = await fetch("https://api.nebux.cloud", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Authorization": "Bearer your-api-key",
  },
  body: JSON.stringify({
    query: `query ListIssues(
  $orgId: ID!
  $first: Int
  $after: Cursor
  $where: IssueWhereInput
  $orderBy: IssueOrder
) {
  organization(id: $orgId) {
    issues(
      first: $first
      after: $after
      where: $where
      orderBy: $orderBy
    ) {
      edges {
        node {
          id
          friendlyId
          title
          status
          priority
          createdAt
        }
      }
      pageInfo {
        hasNextPage
        endCursor
      }
      totalCount
    }
  }
}`,
    variables: {
      orgId: "k4p9m2vr8st1ynx7q3wzc5hjd6",
      first: 20,
      where: { statusIn: ["ONGOING_ASSIGNEE", "ONGOING_REVIEW"] },
    },
  }),
})
const { data } = await res.json()
RESPONSE
{
  "data": {
    "organization": {
      "id": "k4p9m2vr8st1ynx7q3wzc5hjd6",
      "issues": {
        "edges": [
          {
            "node": {
              "id": "rprdbtyvc51ys7g7xq9xwra8cm",
              "friendlyId": 42,
              "title": "Cannot access billing dashboard",
              "status": "ONGOING_ASSIGNEE",
              "priority": "HIGH",
              "createdAt": "2026-05-15T10:23:41Z"
            }
          }
        ],
        "pageInfo": {
          "hasNextPage": false,
          "endCursor": null
        },
        "totalCount": 1
      }
    }
  }
}
Query

Retrieve an issue

Retrieves a single issue by its ID, including its organization, participations, and full activity history.

Parameters

idIDrequired

The ID of the issue to retrieve.

Returns

Returns an Issue object.

Errors

NOT_FOUNDThe resource does not exist or your organization cannot access it.
getIssue.ts
const res = await fetch("https://api.nebux.cloud", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Authorization": "Bearer your-api-key",
  },
  body: JSON.stringify({
    query: `query GetIssue($id: ID!) {
  issue(id: $id) {
    id
    friendlyId
    title
    status
    priority
    summary
    createdAt
    updatedAt
    lastActivityAt
    organization {
      id
      name
    }
    participations(first: 20) {
      edges {
        node {
          id
          role
          user {
            id
            firstName
            lastName
            avatarUrl
          }
        }
      }
    }
  }
}`,
    variables: { id: "rprdbtyvc51ys7g7xq9xwra8cm" },
  }),
})
const { data } = await res.json()
RESPONSE
{
  "data": {
    "issue": {
      "id": "rprdbtyvc51ys7g7xq9xwra8cm",
      "friendlyId": 42,
      "title": "Cannot access billing dashboard",
      "status": "ONGOING_ASSIGNEE",
      "priority": "HIGH",
      "summary": "Getting a 403 Forbidden error when navigating to the billing section.",
      "createdAt": "2026-05-15T10:23:41Z",
      "updatedAt": "2026-05-15T14:07:22Z",
      "lastActivityAt": "2026-05-15T14:07:22Z",
      "organization": {
        "id": "k4p9m2vr8st1ynx7q3wzc5hjd6",
        "name": "Acme Corp"
      },
      "participations": {
        "edges": [
          {
            "node": {
              "id": "prt9k2m8vr4st1ynx7q3wzc5hd",
              "role": "REQUESTER",
              "user": {
                "id": "bm3pq9rv5wy2k8tn7xj4cs1hd0",
                "firstName": "Jane",
                "lastName": "Doe",
                "avatarUrl": "https://..."
              }
            }
          }
        ]
      }
    }
  }
}
Mutation

Create an issue

Opens a new support issue under your organization. By default it is queued to be attended as soon as possible (QUEUED_READY); pass a different status to change this. This mutation does not include a message; to post the first one, use the add a comment mutation.

Parameters

input.organizationIdIDrequired

The ID of the organization under which the issue will be created.

input.titleStringoptional

Short description of the issue (maximum 500 characters). If omitted, a title is generated automatically from the conversation.

input.priorityIssuePriorityoptional

Initial priority of the issue.

Possible values of the IssuePriority enum
CRITICALCriticalExclusively for incidents affecting service availability in production; attended urgently. Incident response fees apply according to your contract.
HIGHHigh
MEDIUMMedium
LOWLow
input.statusIssueStatusoptional

When the issue should be attended.

Possible values of the IssueStatus enum
QUEUED_READYdefaultThe Nebux team will address it as soon as possible.
QUEUED_BACKLOGWe will add it to the backlog until you change its status.

Returns

Returns an IssueCreatePayload object containing the newly created Issue.

Errors

VALIDATIONThe input does not meet the required rules (for example, a field is too long or a value is not allowed).
INPUTThe input is malformed or has the wrong type (for example, a badly formatted ID or a missing required field).
NOT_FOUNDThe resource does not exist or your organization cannot access it.
createIssue.ts
const res = await fetch("https://api.nebux.cloud", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Authorization": "Bearer your-api-key",
  },
  body: JSON.stringify({
    query: `mutation CreateIssue($input: IssueCreateInput!) {
  issueCreate(input: $input) {
    issue {
      id
      friendlyId
      title
      status
      priority
      createdAt
    }
  }
}`,
    variables: {
      input: {
        organizationId: "k4p9m2vr8st1ynx7q3wzc5hjd6",
        title: "Cannot access billing dashboard",
        priority: "HIGH",
      },
    },
  }),
})
const { data } = await res.json()
RESPONSE
{
  "data": {
    "issueCreate": {
      "issue": {
        "id": "np4kr7mt2vx9q8j3wz6ys1hcd5",
        "friendlyId": 43,
        "title": "Cannot access billing dashboard",
        "status": "QUEUED_READY",
        "priority": "HIGH",
        "createdAt": "2026-06-02T09:11:05Z"
      }
    }
  }
}
Mutation

Edit an issue

Updates the editable fields of one of your issues. As a non-staff caller you can change the title, the priority, and move it between the two queued statuses — the rest of the lifecycle is managed by the Nebux team.

Parameters

input.idIDrequired

The ID of the issue to update.

input.titleStringoptional

New short description for the issue (maximum 500 characters).

input.priorityIssuePriorityoptional

New priority for the issue.

Possible values of the IssuePriority enum
HIGHHigh
MEDIUMMedium
LOWLow
input.statusIssueStatusoptional

Change the issue's status. Each value can only be set from certain current statuses — see below.

Possible values of the IssueStatus enum
QUEUED_READYWhen the issue is in the backlog (QUEUED_BACKLOG), to mark it ready for the team to attend.
ONGOING_ASSIGNEEWhen the issue is awaiting your reply (ONGOING_REQUESTER), to hand it back to the Nebux team; or when it is in review (ONGOING_REVIEW), to reopen it as not yet resolved.
CLOSED_RESOLVEDWhen the issue is in review (ONGOING_REVIEW), to confirm it is resolved.

Returns

Returns an IssueUpdatePayload object containing the updated Issue.

Errors

NOT_FOUNDThe resource does not exist or your organization cannot access it.
VALIDATIONThe input does not meet the required rules (for example, a field is too long or a value is not allowed).
INPUTThe input is malformed or has the wrong type (for example, a badly formatted ID or a missing required field).
updateIssue.ts
const res = await fetch("https://api.nebux.cloud", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Authorization": "Bearer your-api-key",
  },
  body: JSON.stringify({
    query: `mutation UpdateIssue($input: IssueUpdateInput!) {
  issueUpdate(input: $input) {
    issue {
      id
      friendlyId
      title
      status
      priority
      updatedAt
    }
  }
}`,
    variables: {
      input: {
        id: "rprdbtyvc51ys7g7xq9xwra8cm",
        title: "Cannot access billing dashboard (still blocked)",
        priority: "HIGH",
        status: "QUEUED_READY",
      },
    },
  }),
})
const { data } = await res.json()
RESPONSE
{
  "data": {
    "issueUpdate": {
      "issue": {
        "id": "rprdbtyvc51ys7g7xq9xwra8cm",
        "friendlyId": 42,
        "title": "Cannot access billing dashboard (still blocked)",
        "status": "QUEUED_READY",
        "priority": "HIGH",
        "updatedAt": "2026-06-02T09:25:00Z"
      }
    }
  }
}

The IssueActivity object

Activities make up an issue's timeline — comments, file uploads, field changes and audit entries. Each one carries an action that tells you what kind of entry it is.

Attributes

idID

Unique identifier for the activity.

actionIssueActivityAction

The kind of activity.

Possible values of the IssueActivityAction enum
COMMENTA comment posted to the issue.
FILEA file attached to the issue. A comment can optionally be included as well.
FIELD_UPDATEA change to one of the issue's fields.
commentStringnullable

Comment text, present when the action is COMMENT.

commentEditedAtStringnullable

ISO 8601 timestamp of the last edit to the comment, or null if it was never edited.

fileNameStringnullable

Name of the attached file, present when the action is FILE.

fileUrlStringnullable

Download URL of the attached file, present when the action is FILE.

isBotBoolean

Whether the activity was generated by an automated agent.

isFeaturedBoolean

Whether the activity has been highlighted by the Nebux team.

createdAtString

ISO 8601 timestamp when the activity was created.

userUserProfilenullable

The user who produced the activity, or null for system or deleted users.

idID

Unique identifier for the user.

firstNameString

The user's first name.

lastNameString

The user's last name.

avatarUrlString

URL of the user's avatar image.

isStaffBoolean

Whether the user is a member of the Nebux team.

reactionsIssueActivityReactionConnection

Emoji reactions on the activity. Each edge's node is an IssueActivityReaction with:

bodyStringnullable

The reaction emoji.

userUserProfile

The user who reacted.

idID

Unique identifier for the user.

firstNameString

The user's first name.

lastNameString

The user's last name.

avatarUrlString

URL of the user's avatar image.

isStaffBoolean

Whether the user is a member of the Nebux team.

RESPONSE
{
  "id": "8m3kq7v2wr9yt4xn1p6cs0hjda",
  "action": "COMMENT",
  "comment": "We are looking into this now.",
  "commentEditedAt": null,
  "isBot": false,
  "createdAt": "2026-05-15T11:02:13Z",
  "user": {
    "id": "bm3pq9rv5wy2k8tn7xj4cs1hd0",
    "firstName": "Jane",
    "lastName": "Doe"
  }
}
Query

List activities

Returns the activity timeline of an issue — comments, file uploads, status changes and audit entries — in chronological order.

Parameters

idIDrequired

The ID of the issue whose activities you want to list.

firstIntoptional

Number of activities to return (default 20, maximum 100).

afterCursoroptional

Cursor for forward pagination. Use the endCursor from a previous response.

where.commentContainsFoldStringoptional

Filter by activities whose comment contains this text (case-insensitive).

orderBy.fieldIssueActivityOrderFieldoptional

Field to sort activities by.

Possible values of the IssueActivityOrderField enum
CREATED_ATCreated
orderBy.directionOrderDirectionoptional

Sort direction.

Possible values of the OrderDirection enum
ASCAscending
DESCDescending

Returns

Returns an IssueActivityConnection object with a list of IssueActivity edges, pagination info, and the total count.

Errors

NOT_FOUNDThe resource does not exist or your organization cannot access it.
listActivities.ts
const res = await fetch("https://api.nebux.cloud", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Authorization": "Bearer your-api-key",
  },
  body: JSON.stringify({
    query: `query ListActivities($issueId: ID!, $first: Int, $after: Cursor) {
  issue(id: $issueId) {
    activities(
      first: $first
      after: $after
      orderBy: { field: CREATED_AT, direction: ASC }
    ) {
      edges {
        node {
          id
          action
          comment
          commentEditedAt
          isBot
          createdAt
          user {
            id
            firstName
            lastName
          }
        }
      }
      pageInfo {
        hasNextPage
        endCursor
      }
      totalCount
    }
  }
}`,
    variables: {
      issueId: "rprdbtyvc51ys7g7xq9xwra8cm",
      first: 20,
    },
  }),
})
const { data } = await res.json()
RESPONSE
{
  "data": {
    "issue": {
      "activities": {
        "edges": [
          {
            "node": {
              "id": "8m3kq7v2wr9yt4xn1p6cs0hjda",
              "action": "COMMENT",
              "comment": "We are looking into this now.",
              "commentEditedAt": null,
              "isBot": false,
              "createdAt": "2026-05-15T11:02:13Z",
              "user": {
                "id": "bm3pq9rv5wy2k8tn7xj4cs1hd0",
                "firstName": "Jane",
                "lastName": "Doe"
              }
            }
          }
        ],
        "pageInfo": {
          "hasNextPage": false,
          "endCursor": null
        },
        "totalCount": 1
      }
    }
  }
}
Mutation

Add a comment

Posts a comment to an issue by creating an activity with the COMMENT action. You can also attach a file using the FILE action with the file field.

Parameters

input.issueIdIDrequired

The ID of the issue to comment on.

input.actionIssueActivityActionrequired

The activity action: COMMENT to post a comment, or FILE to attach a file.

Possible values of the IssueActivityAction enum
COMMENTA comment posted to the issue.
FILEA file attached to the issue. A comment can optionally be included as well.
input.commentStringoptional

The comment text (required for the COMMENT action).

input.fileUploadoptional

The file to attach (required for the FILE action). File uploads use the GraphQL multipart request spec (multipart/form-data), not the JSON body. For more information, see this specification.

Returns

Returns an IssueActivityCreatePayload object containing the newly created IssueActivity.

Errors

NOT_FOUNDThe resource does not exist or your organization cannot access it.
VALIDATIONThe input does not meet the required rules (for example, a field is too long or a value is not allowed).
addComment.ts
const res = await fetch("https://api.nebux.cloud", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Authorization": "Bearer your-api-key",
  },
  body: JSON.stringify({
    query: `mutation AddComment($input: IssueActivityCreateInput!) {
  issueActivityCreate(input: $input) {
    issueActivity {
      id
      action
      comment
      createdAt
    }
  }
}`,
    variables: {
      input: {
        issueId: "rprdbtyvc51ys7g7xq9xwra8cm",
        action: "COMMENT",
        comment: "Thanks for the update, still seeing the error.",
      },
    },
  }),
})
const { data } = await res.json()
RESPONSE
{
  "data": {
    "issueActivityCreate": {
      "issueActivity": {
        "id": "8m3kq7v2wr9yt4xn1p6cs0hjda",
        "action": "COMMENT",
        "comment": "Thanks for the update, still seeing the error.",
        "createdAt": "2026-06-02T09:15:40Z"
      }
    }
  }
}
Mutation

Edit a comment

Updates the text of an existing comment. Only the author can edit their own comments; commentEditedAt is set to the time of the edit.

Parameters

input.idIDrequired

The ID of the activity (comment) to edit.

input.commentStringrequired

The new comment text.

Returns

Returns an IssueActivityUpdatePayload object containing the updated IssueActivity.

Errors

NOT_FOUNDThe resource does not exist or your organization cannot access it.
VALIDATIONThe input does not meet the required rules (for example, a field is too long or a value is not allowed).
editComment.ts
const res = await fetch("https://api.nebux.cloud", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Authorization": "Bearer your-api-key",
  },
  body: JSON.stringify({
    query: `mutation EditComment($input: IssueActivityUpdateInput!) {
  issueActivityUpdate(input: $input) {
    issueActivity {
      id
      comment
      commentEditedAt
    }
  }
}`,
    variables: {
      input: {
        id: "8m3kq7v2wr9yt4xn1p6cs0hjda",
        comment: "Thanks for the update, the error is gone now.",
      },
    },
  }),
})
const { data } = await res.json()
RESPONSE
{
  "data": {
    "issueActivityUpdate": {
      "issueActivity": {
        "id": "8m3kq7v2wr9yt4xn1p6cs0hjda",
        "comment": "Thanks for the update, the error is gone now.",
        "commentEditedAt": "2026-06-02T09:20:11Z"
      }
    }
  }
}