Support
The Issue object
Issues represent support tickets created by your organization. Each issue has a status, priority, and a history of activities.
Attributes
idIDUnique identifier for the issue.
friendlyIdIntHuman-readable ticket number, sequential per organization.
titleStringnullableShort description of the issue.
statusIssueStatusCurrent lifecycle status of the issue.
IssueStatus enumQUEUED_BACKLOGBacklogQUEUED_READYReady to startONGOING_REQUESTERAwaiting the requesterONGOING_ASSIGNEEIn Nebux' handsONGOING_REVIEWIn review by the requesterONGOING_EXTERNALBlockedCLOSED_RESOLVEDResolvedCLOSED_DISMISSEDDismissedpriorityIssuePriorityPriority level assigned to the issue.
IssuePriority enumCRITICALCriticalHIGHHighMEDIUMMediumLOWLowsummaryStringnullableDetailed description of the issue.
createdAtStringISO 8601 timestamp when the issue was created.
updatedAtStringISO 8601 timestamp of the last update to the issue.
lastActivityAtStringnullableISO 8601 timestamp of the most recent activity.
organizationOrganizationProfileThe organization this issue belongs to.
idIDUnique identifier for the organization.
nameStringDisplay name of the organization.
isVerifiedBooleanWhether the organization has been verified.
participationsIssueParticipationConnectionThe users involved in the issue — the requester and any assignees. Each edge's node is an IssueParticipation with:
idIDUnique identifier for the participation.
roleIssueParticipationRoleThe user's role in the issue.
IssueParticipationRole enumREQUESTERThe person who opened the issue.ASSIGNEEA Nebux team member handling the issue.WATCHERFollowing the issue without being assigned.NONENo particular role.userUserProfileThe participating user.
idIDUnique identifier for the user.
firstNameStringThe user's first name.
lastNameStringThe user's last name.
avatarUrlStringURL of the user's avatar image.
isStaffBooleanWhether the user is a member of the Nebux team.
firstActivityIssueActivitynullableThe opening activity of the issue — usually the requester's first message.
inboundLinksIssueLinkConnectionIssues that link to this one. Each edge's node is an IssueLink with:
kindIssueLinkKindThe kind of relationship between the two issues.
inboundIssueIdIDID of the issue on the inbound side of the link.
outboundIssueIdIDID of the issue on the outbound side of the link.
outboundLinksIssueLinkConnectionIssues this one links to. Each edge's node is an IssueLink with:
kindIssueLinkKindThe kind of relationship between the two issues.
inboundIssueIdIDID of the issue on the inbound side of the link.
outboundIssueIdIDID of the issue on the outbound side of the link.
{
"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"
}
}
}
]
}
}List issues
Returns a paginated list of issues for an organization. You can filter by status or priority, and sort by various fields.
Parameters
idIDrequiredThe ID of the organization whose issues you want to list.
firstIntoptionalNumber of issues to return (default 20, maximum 100).
afterCursoroptionalCursor for forward pagination. Use the endCursor from a previous response.
where.statusIn[IssueStatus!]optionalFilter by one or more statuses.
IssueStatus enumQUEUED_BACKLOGBacklogQUEUED_READYReady to startONGOING_REQUESTERAwaiting the requesterONGOING_ASSIGNEEIn Nebux' handsONGOING_REVIEWIn review by the requesterONGOING_EXTERNALBlockedCLOSED_RESOLVEDResolvedCLOSED_DISMISSEDDismissedwhere.priorityIn[IssuePriority!]optionalFilter by one or more priorities.
IssuePriority enumCRITICALCriticalHIGHHighMEDIUMMediumLOWLowwhere.statusNotIn[IssueStatus!]optionalExclude one or more statuses.
IssueStatus enumQUEUED_BACKLOGBacklogQUEUED_READYReady to startONGOING_REQUESTERAwaiting the requesterONGOING_ASSIGNEEIn Nebux' handsONGOING_REVIEWIn review by the requesterONGOING_EXTERNALBlockedCLOSED_RESOLVEDResolvedCLOSED_DISMISSEDDismissedwhere.priorityNotIn[IssuePriority!]optionalExclude one or more priorities.
IssuePriority enumCRITICALCriticalHIGHHighMEDIUMMediumLOWLowwhere.titleContainsFoldStringoptionalFilter by issues whose title contains this text (case-insensitive).
orderBy.fieldIssueOrderFieldoptionalField to sort by.
IssueOrderField enumCREATED_ATCreatedLAST_ACTIVITY_ATLast activityPRIORITYPriorityorderBy.directionOrderDirectionoptionalSort direction.
OrderDirection enumASCAscendingDESCDescendingReturns
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).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(){
"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
}
}
}
}Retrieve an issue
Retrieves a single issue by its ID, including its organization, participations, and full activity history.
Parameters
idIDrequiredThe ID of the issue to retrieve.
Returns
Returns an Issue object.
Errors
NOT_FOUNDThe resource does not exist or your organization cannot access it.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(){
"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://..."
}
}
}
]
}
}
}
}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.organizationIdIDrequiredThe ID of the organization under which the issue will be created.
input.titleStringoptionalShort description of the issue (maximum 500 characters). If omitted, a title is generated automatically from the conversation.
input.priorityIssuePriorityoptionalInitial priority of the issue.
IssuePriority enumCRITICALCriticalExclusively for incidents affecting service availability in production; attended urgently. Incident response fees apply according to your contract.HIGHHighMEDIUMMediumLOWLowinput.statusIssueStatusoptionalWhen the issue should be attended.
IssueStatus enumQUEUED_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.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(){
"data": {
"issueCreate": {
"issue": {
"id": "np4kr7mt2vx9q8j3wz6ys1hcd5",
"friendlyId": 43,
"title": "Cannot access billing dashboard",
"status": "QUEUED_READY",
"priority": "HIGH",
"createdAt": "2026-06-02T09:11:05Z"
}
}
}
}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.idIDrequiredThe ID of the issue to update.
input.titleStringoptionalNew short description for the issue (maximum 500 characters).
input.priorityIssuePriorityoptionalNew priority for the issue.
IssuePriority enumHIGHHighMEDIUMMediumLOWLowinput.statusIssueStatusoptionalChange the issue's status. Each value can only be set from certain current statuses — see below.
IssueStatus enumQUEUED_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).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(){
"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
idIDUnique identifier for the activity.
actionIssueActivityActionThe kind of activity.
IssueActivityAction enumCOMMENTA 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.commentStringnullableComment text, present when the action is COMMENT.
commentEditedAtStringnullableISO 8601 timestamp of the last edit to the comment, or null if it was never edited.
fileNameStringnullableName of the attached file, present when the action is FILE.
fileUrlStringnullableDownload URL of the attached file, present when the action is FILE.
isBotBooleanWhether the activity was generated by an automated agent.
isFeaturedBooleanWhether the activity has been highlighted by the Nebux team.
createdAtStringISO 8601 timestamp when the activity was created.
userUserProfilenullableThe user who produced the activity, or null for system or deleted users.
idIDUnique identifier for the user.
firstNameStringThe user's first name.
lastNameStringThe user's last name.
avatarUrlStringURL of the user's avatar image.
isStaffBooleanWhether the user is a member of the Nebux team.
reactionsIssueActivityReactionConnectionEmoji reactions on the activity. Each edge's node is an IssueActivityReaction with:
bodyStringnullableThe reaction emoji.
userUserProfileThe user who reacted.
idIDUnique identifier for the user.
firstNameStringThe user's first name.
lastNameStringThe user's last name.
avatarUrlStringURL of the user's avatar image.
isStaffBooleanWhether the user is a member of the Nebux team.
{
"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"
}
}List activities
Returns the activity timeline of an issue — comments, file uploads, status changes and audit entries — in chronological order.
Parameters
idIDrequiredThe ID of the issue whose activities you want to list.
firstIntoptionalNumber of activities to return (default 20, maximum 100).
afterCursoroptionalCursor for forward pagination. Use the endCursor from a previous response.
where.commentContainsFoldStringoptionalFilter by activities whose comment contains this text (case-insensitive).
orderBy.fieldIssueActivityOrderFieldoptionalField to sort activities by.
IssueActivityOrderField enumCREATED_ATCreatedorderBy.directionOrderDirectionoptionalSort direction.
OrderDirection enumASCAscendingDESCDescendingReturns
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.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(){
"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
}
}
}
}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.issueIdIDrequiredThe ID of the issue to comment on.
input.actionIssueActivityActionrequiredThe activity action: COMMENT to post a comment, or FILE to attach a file.
IssueActivityAction enumCOMMENTA comment posted to the issue.FILEA file attached to the issue. A comment can optionally be included as well.input.commentStringoptionalThe comment text (required for the COMMENT action).
input.fileUploadoptionalThe 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).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(){
"data": {
"issueActivityCreate": {
"issueActivity": {
"id": "8m3kq7v2wr9yt4xn1p6cs0hjda",
"action": "COMMENT",
"comment": "Thanks for the update, still seeing the error.",
"createdAt": "2026-06-02T09:15:40Z"
}
}
}
}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.idIDrequiredThe ID of the activity (comment) to edit.
input.commentStringrequiredThe 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).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(){
"data": {
"issueActivityUpdate": {
"issueActivity": {
"id": "8m3kq7v2wr9yt4xn1p6cs0hjda",
"comment": "Thanks for the update, the error is gone now.",
"commentEditedAt": "2026-06-02T09:20:11Z"
}
}
}
}