Supporto
L'oggetto Issue
Gli oggetti Issue rappresentano i ticket di supporto creati dalla tua organizzazione. Ogni ticket ha uno stato, una priorità e una cronologia di attività.
Attributi
idIDIdentificatore univoco del ticket.
friendlyIdIntNumero di ticket leggibile, sequenziale per organizzazione.
titleStringnullableBreve descrizione del ticket.
statusIssueStatusStato attuale del ticket nel suo ciclo di vita.
IssueStatusQUEUED_BACKLOGRimandatoQUEUED_READYDa iniziareONGOING_REQUESTERIn attesa di il richiedenteONGOING_ASSIGNEEIn mano a NebuxONGOING_REVIEWIn revisione da parte di il richiedenteONGOING_EXTERNALBloccatoCLOSED_RESOLVEDRisoltoCLOSED_DISMISSEDScartatopriorityIssuePriorityLivello di priorità assegnato al ticket.
IssuePriorityCRITICALCriticaHIGHAltaMEDIUMMediaLOWBassasummaryStringnullableDescrizione dettagliata del ticket.
createdAtStringTimestamp ISO 8601 della creazione del ticket.
updatedAtStringTimestamp ISO 8601 dell'ultimo aggiornamento del ticket.
lastActivityAtStringnullableTimestamp ISO 8601 dell'attività più recente.
organizationOrganizationProfileL'organizzazione a cui appartiene questo ticket.
idIDIdentificatore univoco dell'organizzazione.
nameStringNome visualizzato dell'organizzazione.
isVerifiedBooleanSe l'organizzazione è stata verificata.
participationsIssueParticipationConnectionGli utenti coinvolti nel ticket: il richiedente e gli assegnatari. Il nodo di ogni edge è un IssueParticipation con:
idIDIdentificatore univoco della partecipazione.
roleIssueParticipationRoleIl ruolo dell'utente nel ticket.
IssueParticipationRoleREQUESTERLa persona che ha aperto il ticket.ASSIGNEEUn membro del team di Nebux che ha in carico il ticket.WATCHERSegue il ticket senza esserne assegnatario.NONENessun ruolo particolare.userUserProfileL'utente che partecipa.
idIDIdentificatore univoco dell'utente.
firstNameStringIl nome dell'utente.
lastNameStringIl cognome dell'utente.
avatarUrlStringURL dell'immagine avatar dell'utente.
isStaffBooleanSe l'utente fa parte del team di Nebux.
firstActivityIssueActivitynullableL'attività di apertura del ticket, di solito il primo messaggio del richiedente.
inboundLinksIssueLinkConnectionTicket che si collegano a questo. Il nodo di ogni edge è un IssueLink con:
kindIssueLinkKindIl tipo di relazione tra i due ticket.
inboundIssueIdIDID del ticket sul lato in entrata del collegamento.
outboundIssueIdIDID del ticket sul lato in uscita del collegamento.
outboundLinksIssueLinkConnectionTicket a cui questo si collega. Il nodo di ogni edge è un IssueLink con:
kindIssueLinkKindIl tipo di relazione tra i due ticket.
inboundIssueIdIDID del ticket sul lato in entrata del collegamento.
outboundIssueIdIDID del ticket sul lato in uscita del collegamento.
{
"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"
}
}
}
]
}
}Elenca i ticket
Restituisce un elenco paginato dei ticket di un'organizzazione. Puoi filtrare per stato o priorità e ordinare in base a vari campi.
Parametri
idIDobbligatorioL'ID dell'organizzazione di cui vuoi elencare i ticket.
firstIntfacoltativoNumero di ticket da restituire (predefinito 20, massimo 100).
afterCursorfacoltativoCursore per la paginazione in avanti. Usa l'endCursor di una risposta precedente.
where.statusIn[IssueStatus!]facoltativoFiltra per uno o più stati.
IssueStatusQUEUED_BACKLOGRimandatoQUEUED_READYDa iniziareONGOING_REQUESTERIn attesa di il richiedenteONGOING_ASSIGNEEIn mano a NebuxONGOING_REVIEWIn revisione da parte di il richiedenteONGOING_EXTERNALBloccatoCLOSED_RESOLVEDRisoltoCLOSED_DISMISSEDScartatowhere.priorityIn[IssuePriority!]facoltativoFiltra per una o più priorità.
IssuePriorityCRITICALCriticaHIGHAltaMEDIUMMediaLOWBassawhere.statusNotIn[IssueStatus!]facoltativoEscludi uno o più stati.
IssueStatusQUEUED_BACKLOGRimandatoQUEUED_READYDa iniziareONGOING_REQUESTERIn attesa di il richiedenteONGOING_ASSIGNEEIn mano a NebuxONGOING_REVIEWIn revisione da parte di il richiedenteONGOING_EXTERNALBloccatoCLOSED_RESOLVEDRisoltoCLOSED_DISMISSEDScartatowhere.priorityNotIn[IssuePriority!]facoltativoEscludi una o più priorità.
IssuePriorityCRITICALCriticaHIGHAltaMEDIUMMediaLOWBassawhere.titleContainsFoldStringfacoltativoFiltra i ticket il cui titolo contiene questo testo (senza distinzione tra maiuscole e minuscole).
orderBy.fieldIssueOrderFieldfacoltativoCampo in base al quale ordinare.
IssueOrderFieldCREATED_ATCreatoLAST_ACTIVITY_ATUltima attivitàPRIORITYPrioritàorderBy.directionOrderDirectionfacoltativoDirezione dell'ordinamento.
OrderDirectionASCCrescenteDESCDecrescenteRestituisce
Restituisce un oggetto IssueConnection con un elenco di edge Issue, le informazioni di paginazione e il conteggio totale.
Errori
NOT_FOUNDLa risorsa non esiste o la tua organizzazione non può accedervi.VALIDATIONL'input non rispetta le regole richieste (ad esempio, un campo è troppo lungo o un valore non è consentito).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
}
}
}
}Recupera un ticket
Recupera un singolo ticket tramite il suo ID, con la sua organizzazione, le partecipazioni e la cronologia completa delle attività.
Parametri
idIDobbligatorioL'ID del ticket da recuperare.
Restituisce
Restituisce un oggetto Issue.
Errori
NOT_FOUNDLa risorsa non esiste o la tua organizzazione non può accedervi.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://..."
}
}
}
]
}
}
}
}Crea un ticket
Apre un nuovo ticket di supporto nella tua organizzazione. Di default viene messo in coda per essere preso in carico il prima possibile (QUEUED_READY); passa un altro status per cambiarlo. Questa mutation non include alcun messaggio; per pubblicare il primo, usa la mutation per aggiungere un commento.
Parametri
input.organizationIdIDobbligatorioL'ID dell'organizzazione in cui verrà creato il ticket.
input.titleStringfacoltativoBreve descrizione del ticket (massimo 500 caratteri). Se omesso, il titolo viene generato automaticamente a partire dalla conversazione.
input.priorityIssuePriorityfacoltativoPriorità iniziale del ticket.
IssuePriorityCRITICALCriticaEsclusivamente per incidenti che compromettono la disponibilità del servizio in produzione; viene preso in carico con urgenza. Si applicano le tariffe di risposta agli incidenti previste dal tuo contratto.HIGHAltaMEDIUMMediaLOWBassainput.statusIssueStatusfacoltativoQuando il ticket deve essere preso in carico.
IssueStatusQUEUED_READYpredefinitoIl team di Nebux lo prenderà in carico il prima possibile.QUEUED_BACKLOGLo rimanderemo finché non ne cambi lo stato.Restituisce
Restituisce un oggetto IssueCreatePayload che contiene la Issue appena creata.
Errori
VALIDATIONL'input non rispetta le regole richieste (ad esempio, un campo è troppo lungo o un valore non è consentito).INPUTL'input è malformato o ha un tipo errato (ad esempio, un ID con formato errato o un campo obbligatorio mancante).NOT_FOUNDLa risorsa non esiste o la tua organizzazione non può accedervi.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"
}
}
}
}Modifica un ticket
Aggiorna i campi modificabili di uno dei tuoi ticket. Se non fai parte dello staff puoi cambiare il titolo, la priorità e spostarlo tra i due stati in coda; il resto del ciclo di vita lo gestisce il team di Nebux.
Parametri
input.idIDobbligatorioL'ID del ticket da aggiornare.
input.titleStringfacoltativoNuova breve descrizione del ticket (massimo 500 caratteri).
input.priorityIssuePriorityfacoltativoNuova priorità del ticket.
IssuePriorityHIGHAltaMEDIUMMediaLOWBassainput.statusIssueStatusfacoltativoCambia lo stato del ticket. Ogni valore può essere impostato solo a partire da determinati stati attuali: vedi sotto.
IssueStatusQUEUED_READYQuando il ticket è rimandato (QUEUED_BACKLOG), per segnarlo come pronto per essere preso in carico dal team.ONGOING_ASSIGNEEQuando il ticket è in attesa della tua risposta (ONGOING_REQUESTER), per restituirlo al team di Nebux; oppure quando è in revisione (ONGOING_REVIEW), per riaprirlo come non ancora risolto.CLOSED_RESOLVEDQuando il ticket è in revisione (ONGOING_REVIEW), per confermare che è risolto.Restituisce
Restituisce un oggetto IssueUpdatePayload che contiene la Issue aggiornata.
Errori
NOT_FOUNDLa risorsa non esiste o la tua organizzazione non può accedervi.VALIDATIONL'input non rispetta le regole richieste (ad esempio, un campo è troppo lungo o un valore non è consentito).INPUTL'input è malformato o ha un tipo errato (ad esempio, un ID con formato errato o un campo obbligatorio mancante).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"
}
}
}
}L'oggetto IssueActivity
Le attività compongono la cronologia di un ticket: commenti, file caricati, modifiche ai campi e voci di audit. Ognuna ha un'azione che indica di che tipo di voce si tratta.
Attributi
idIDIdentificatore univoco dell'attività.
actionIssueActivityActionIl tipo di attività.
IssueActivityActionCOMMENTUn commento pubblicato nel ticket.FILEUn file allegato al ticket. Può includere anche un commento, facoltativo.FIELD_UPDATEUna modifica a uno dei campi del ticket.commentStringnullableTesto del commento, presente quando l'azione è COMMENT.
commentEditedAtStringnullableTimestamp ISO 8601 dell'ultima modifica del commento, o null se non è mai stato modificato.
fileNameStringnullableNome del file allegato, presente quando l'azione è FILE.
fileUrlStringnullableURL di download del file allegato, presente quando l'azione è FILE.
isBotBooleanSe l'attività è stata generata da un agente automatico.
isFeaturedBooleanSe il team di Nebux ha messo in evidenza l'attività.
createdAtStringTimestamp ISO 8601 della creazione dell'attività.
userUserProfilenullableL'utente che ha prodotto l'attività, o null per utenti di sistema o eliminati.
idIDIdentificatore univoco dell'utente.
firstNameStringIl nome dell'utente.
lastNameStringIl cognome dell'utente.
avatarUrlStringURL dell'immagine avatar dell'utente.
isStaffBooleanSe l'utente fa parte del team di Nebux.
reactionsIssueActivityReactionConnectionReazioni (emoji) all'attività. Il nodo di ogni edge è un IssueActivityReaction con:
bodyStringnullableL'emoji della reazione.
userUserProfileL'utente che ha reagito.
idIDIdentificatore univoco dell'utente.
firstNameStringIl nome dell'utente.
lastNameStringIl cognome dell'utente.
avatarUrlStringURL dell'immagine avatar dell'utente.
isStaffBooleanSe l'utente fa parte del team di Nebux.
{
"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"
}
}Elenca le attività
Restituisce la cronologia delle attività di un ticket (commenti, file caricati, cambi di stato e voci di audit) in ordine cronologico.
Parametri
idIDobbligatorioL'ID del ticket di cui vuoi elencare le attività.
firstIntfacoltativoNumero di attività da restituire (predefinito 20, massimo 100).
afterCursorfacoltativoCursore per la paginazione in avanti. Usa l'endCursor di una risposta precedente.
where.commentContainsFoldStringfacoltativoFiltra le attività il cui commento contiene questo testo (senza distinzione tra maiuscole e minuscole).
orderBy.fieldIssueActivityOrderFieldfacoltativoCampo in base al quale ordinare le attività.
IssueActivityOrderFieldCREATED_ATCreatoorderBy.directionOrderDirectionfacoltativoDirezione dell'ordinamento.
OrderDirectionASCCrescenteDESCDecrescenteRestituisce
Restituisce un oggetto IssueActivityConnection con un elenco di edge IssueActivity, le informazioni di paginazione e il conteggio totale.
Errori
NOT_FOUNDLa risorsa non esiste o la tua organizzazione non può accedervi.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
}
}
}
}Aggiungi un commento
Pubblica un commento in un ticket creando un'attività con l'azione COMMENT. Puoi anche allegare un file usando l'azione FILE con il campo file.
Parametri
input.issueIdIDobbligatorioL'ID del ticket da commentare.
input.actionIssueActivityActionobbligatorioL'azione dell'attività: COMMENT per pubblicare un commento, o FILE per allegare un file.
IssueActivityActionCOMMENTUn commento pubblicato nel ticket.FILEUn file allegato al ticket. Può includere anche un commento, facoltativo.input.commentStringfacoltativoIl testo del commento (obbligatorio per l'azione COMMENT).
input.fileUploadfacoltativoIl file da allegare (obbligatorio per l'azione FILE). Il caricamento dei file usa la specifica multipart di GraphQL (multipart/form-data), non il corpo JSON. Per maggiori informazioni, consulta questa specifica.
Restituisce
Restituisce un oggetto IssueActivityCreatePayload che contiene la IssueActivity appena creata.
Errori
NOT_FOUNDLa risorsa non esiste o la tua organizzazione non può accedervi.VALIDATIONL'input non rispetta le regole richieste (ad esempio, un campo è troppo lungo o un valore non è consentito).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"
}
}
}
}Modifica un commento
Aggiorna il testo di un commento esistente. Solo l'autore può modificare i propri commenti; commentEditedAt viene impostato sull'ora della modifica.
Parametri
input.idIDobbligatorioL'ID dell'attività (commento) da modificare.
input.commentStringobbligatorioIl nuovo testo del commento.
Restituisce
Restituisce un oggetto IssueActivityUpdatePayload che contiene la IssueActivity aggiornata.
Errori
NOT_FOUNDLa risorsa non esiste o la tua organizzazione non può accedervi.VALIDATIONL'input non rispetta le regole richieste (ad esempio, un campo è troppo lungo o un valore non è consentito).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"
}
}
}
}