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

idID

Identificatore univoco del ticket.

friendlyIdInt

Numero di ticket leggibile, sequenziale per organizzazione.

titleStringnullable

Breve descrizione del ticket.

statusIssueStatus

Stato attuale del ticket nel suo ciclo di vita.

Valori possibili dell'enum IssueStatus
QUEUED_BACKLOGRimandato
QUEUED_READYDa iniziare
ONGOING_REQUESTERIn attesa di il richiedente
ONGOING_ASSIGNEEIn mano a Nebux
ONGOING_REVIEWIn revisione da parte di il richiedente
ONGOING_EXTERNALBloccato
CLOSED_RESOLVEDRisolto
CLOSED_DISMISSEDScartato
priorityIssuePriority

Livello di priorità assegnato al ticket.

Valori possibili dell'enum IssuePriority
CRITICALCritica
HIGHAlta
MEDIUMMedia
LOWBassa
summaryStringnullable

Descrizione dettagliata del ticket.

createdAtString

Timestamp ISO 8601 della creazione del ticket.

updatedAtString

Timestamp ISO 8601 dell'ultimo aggiornamento del ticket.

lastActivityAtStringnullable

Timestamp ISO 8601 dell'attività più recente.

organizationOrganizationProfile

L'organizzazione a cui appartiene questo ticket.

idID

Identificatore univoco dell'organizzazione.

nameString

Nome visualizzato dell'organizzazione.

isVerifiedBoolean

Se l'organizzazione è stata verificata.

participationsIssueParticipationConnection

Gli utenti coinvolti nel ticket: il richiedente e gli assegnatari. Il nodo di ogni edge è un IssueParticipation con:

idID

Identificatore univoco della partecipazione.

roleIssueParticipationRole

Il ruolo dell'utente nel ticket.

Valori possibili dell'enum IssueParticipationRole
REQUESTERLa 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.
userUserProfile

L'utente che partecipa.

idID

Identificatore univoco dell'utente.

firstNameString

Il nome dell'utente.

lastNameString

Il cognome dell'utente.

avatarUrlString

URL dell'immagine avatar dell'utente.

isStaffBoolean

Se l'utente fa parte del team di Nebux.

firstActivityIssueActivitynullable

L'attività di apertura del ticket, di solito il primo messaggio del richiedente.

inboundLinksIssueLinkConnection

Ticket che si collegano a questo. Il nodo di ogni edge è un IssueLink con:

kindIssueLinkKind

Il tipo di relazione tra i due ticket.

inboundIssueIdID

ID del ticket sul lato in entrata del collegamento.

outboundIssueIdID

ID del ticket sul lato in uscita del collegamento.

outboundLinksIssueLinkConnection

Ticket a cui questo si collega. Il nodo di ogni edge è un IssueLink con:

kindIssueLinkKind

Il tipo di relazione tra i due ticket.

inboundIssueIdID

ID del ticket sul lato in entrata del collegamento.

outboundIssueIdID

ID del ticket sul lato in uscita del collegamento.

RISPOSTA
{
  "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

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

idIDobbligatorio

L'ID dell'organizzazione di cui vuoi elencare i ticket.

firstIntfacoltativo

Numero di ticket da restituire (predefinito 20, massimo 100).

afterCursorfacoltativo

Cursore per la paginazione in avanti. Usa l'endCursor di una risposta precedente.

where.statusIn[IssueStatus!]facoltativo

Filtra per uno o più stati.

Valori possibili dell'enum IssueStatus
QUEUED_BACKLOGRimandato
QUEUED_READYDa iniziare
ONGOING_REQUESTERIn attesa di il richiedente
ONGOING_ASSIGNEEIn mano a Nebux
ONGOING_REVIEWIn revisione da parte di il richiedente
ONGOING_EXTERNALBloccato
CLOSED_RESOLVEDRisolto
CLOSED_DISMISSEDScartato
where.priorityIn[IssuePriority!]facoltativo

Filtra per una o più priorità.

Valori possibili dell'enum IssuePriority
CRITICALCritica
HIGHAlta
MEDIUMMedia
LOWBassa
where.statusNotIn[IssueStatus!]facoltativo

Escludi uno o più stati.

Valori possibili dell'enum IssueStatus
QUEUED_BACKLOGRimandato
QUEUED_READYDa iniziare
ONGOING_REQUESTERIn attesa di il richiedente
ONGOING_ASSIGNEEIn mano a Nebux
ONGOING_REVIEWIn revisione da parte di il richiedente
ONGOING_EXTERNALBloccato
CLOSED_RESOLVEDRisolto
CLOSED_DISMISSEDScartato
where.priorityNotIn[IssuePriority!]facoltativo

Escludi una o più priorità.

Valori possibili dell'enum IssuePriority
CRITICALCritica
HIGHAlta
MEDIUMMedia
LOWBassa
where.titleContainsFoldStringfacoltativo

Filtra i ticket il cui titolo contiene questo testo (senza distinzione tra maiuscole e minuscole).

orderBy.fieldIssueOrderFieldfacoltativo

Campo in base al quale ordinare.

Valori possibili dell'enum IssueOrderField
CREATED_ATCreato
LAST_ACTIVITY_ATUltima attività
PRIORITYPriorità
orderBy.directionOrderDirectionfacoltativo

Direzione dell'ordinamento.

Valori possibili dell'enum OrderDirection
ASCCrescente
DESCDecrescente

Restituisce

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).
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()
RISPOSTA
{
  "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

Recupera un ticket

Recupera un singolo ticket tramite il suo ID, con la sua organizzazione, le partecipazioni e la cronologia completa delle attività.

Parametri

idIDobbligatorio

L'ID del ticket da recuperare.

Restituisce

Restituisce un oggetto Issue.

Errori

NOT_FOUNDLa risorsa non esiste o la tua organizzazione non può accedervi.
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()
RISPOSTA
{
  "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

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.organizationIdIDobbligatorio

L'ID dell'organizzazione in cui verrà creato il ticket.

input.titleStringfacoltativo

Breve descrizione del ticket (massimo 500 caratteri). Se omesso, il titolo viene generato automaticamente a partire dalla conversazione.

input.priorityIssuePriorityfacoltativo

Priorità iniziale del ticket.

Valori possibili dell'enum IssuePriority
CRITICALCriticaEsclusivamente 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.
HIGHAlta
MEDIUMMedia
LOWBassa
input.statusIssueStatusfacoltativo

Quando il ticket deve essere preso in carico.

Valori possibili dell'enum IssueStatus
QUEUED_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.
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()
RISPOSTA
{
  "data": {
    "issueCreate": {
      "issue": {
        "id": "np4kr7mt2vx9q8j3wz6ys1hcd5",
        "friendlyId": 43,
        "title": "Cannot access billing dashboard",
        "status": "QUEUED_READY",
        "priority": "HIGH",
        "createdAt": "2026-06-02T09:11:05Z"
      }
    }
  }
}
Mutation

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.idIDobbligatorio

L'ID del ticket da aggiornare.

input.titleStringfacoltativo

Nuova breve descrizione del ticket (massimo 500 caratteri).

input.priorityIssuePriorityfacoltativo

Nuova priorità del ticket.

Valori possibili dell'enum IssuePriority
HIGHAlta
MEDIUMMedia
LOWBassa
input.statusIssueStatusfacoltativo

Cambia lo stato del ticket. Ogni valore può essere impostato solo a partire da determinati stati attuali: vedi sotto.

Valori possibili dell'enum IssueStatus
QUEUED_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).
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()
RISPOSTA
{
  "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

idID

Identificatore univoco dell'attività.

actionIssueActivityAction

Il tipo di attività.

Valori possibili dell'enum IssueActivityAction
COMMENTUn commento pubblicato nel ticket.
FILEUn file allegato al ticket. Può includere anche un commento, facoltativo.
FIELD_UPDATEUna modifica a uno dei campi del ticket.
commentStringnullable

Testo del commento, presente quando l'azione è COMMENT.

commentEditedAtStringnullable

Timestamp ISO 8601 dell'ultima modifica del commento, o null se non è mai stato modificato.

fileNameStringnullable

Nome del file allegato, presente quando l'azione è FILE.

fileUrlStringnullable

URL di download del file allegato, presente quando l'azione è FILE.

isBotBoolean

Se l'attività è stata generata da un agente automatico.

isFeaturedBoolean

Se il team di Nebux ha messo in evidenza l'attività.

createdAtString

Timestamp ISO 8601 della creazione dell'attività.

userUserProfilenullable

L'utente che ha prodotto l'attività, o null per utenti di sistema o eliminati.

idID

Identificatore univoco dell'utente.

firstNameString

Il nome dell'utente.

lastNameString

Il cognome dell'utente.

avatarUrlString

URL dell'immagine avatar dell'utente.

isStaffBoolean

Se l'utente fa parte del team di Nebux.

reactionsIssueActivityReactionConnection

Reazioni (emoji) all'attività. Il nodo di ogni edge è un IssueActivityReaction con:

bodyStringnullable

L'emoji della reazione.

userUserProfile

L'utente che ha reagito.

idID

Identificatore univoco dell'utente.

firstNameString

Il nome dell'utente.

lastNameString

Il cognome dell'utente.

avatarUrlString

URL dell'immagine avatar dell'utente.

isStaffBoolean

Se l'utente fa parte del team di Nebux.

RISPOSTA
{
  "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

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

idIDobbligatorio

L'ID del ticket di cui vuoi elencare le attività.

firstIntfacoltativo

Numero di attività da restituire (predefinito 20, massimo 100).

afterCursorfacoltativo

Cursore per la paginazione in avanti. Usa l'endCursor di una risposta precedente.

where.commentContainsFoldStringfacoltativo

Filtra le attività il cui commento contiene questo testo (senza distinzione tra maiuscole e minuscole).

orderBy.fieldIssueActivityOrderFieldfacoltativo

Campo in base al quale ordinare le attività.

Valori possibili dell'enum IssueActivityOrderField
CREATED_ATCreato
orderBy.directionOrderDirectionfacoltativo

Direzione dell'ordinamento.

Valori possibili dell'enum OrderDirection
ASCCrescente
DESCDecrescente

Restituisce

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.
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()
RISPOSTA
{
  "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

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.issueIdIDobbligatorio

L'ID del ticket da commentare.

input.actionIssueActivityActionobbligatorio

L'azione dell'attività: COMMENT per pubblicare un commento, o FILE per allegare un file.

Valori possibili dell'enum IssueActivityAction
COMMENTUn commento pubblicato nel ticket.
FILEUn file allegato al ticket. Può includere anche un commento, facoltativo.
input.commentStringfacoltativo

Il testo del commento (obbligatorio per l'azione COMMENT).

input.fileUploadfacoltativo

Il 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).
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()
RISPOSTA
{
  "data": {
    "issueActivityCreate": {
      "issueActivity": {
        "id": "8m3kq7v2wr9yt4xn1p6cs0hjda",
        "action": "COMMENT",
        "comment": "Thanks for the update, still seeing the error.",
        "createdAt": "2026-06-02T09:15:40Z"
      }
    }
  }
}
Mutation

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.idIDobbligatorio

L'ID dell'attività (commento) da modificare.

input.commentStringobbligatorio

Il 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).
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()
RISPOSTA
{
  "data": {
    "issueActivityUpdate": {
      "issueActivity": {
        "id": "8m3kq7v2wr9yt4xn1p6cs0hjda",
        "comment": "Thanks for the update, the error is gone now.",
        "commentEditedAt": "2026-06-02T09:20:11Z"
      }
    }
  }
}