Support

L'objet Issue

Les objets Issue représentent les tickets de support créés par votre organisation. Chaque ticket a un statut, une priorité et un historique d'activités.

Attributs

idID

Identifiant unique du ticket.

friendlyIdInt

Numéro de ticket lisible, séquentiel par organisation.

titleStringnullable

Description courte du ticket.

statusIssueStatus

Statut actuel du ticket dans son cycle de vie.

Valeurs possibles de l'énumération IssueStatus
QUEUED_BACKLOGReporté
QUEUED_READYÀ démarrer
ONGOING_REQUESTEREn attente de le demandeur
ONGOING_ASSIGNEEEntre les mains de Nebux
ONGOING_REVIEWEn revue par le demandeur
ONGOING_EXTERNALBloqué
CLOSED_RESOLVEDRésolu
CLOSED_DISMISSEDÉcarté
priorityIssuePriority

Niveau de priorité attribué au ticket.

Valeurs possibles de l'énumération IssuePriority
CRITICALCritique
HIGHHaute
MEDIUMMoyenne
LOWBasse
summaryStringnullable

Description détaillée du ticket.

createdAtString

Horodatage ISO 8601 de la création du ticket.

updatedAtString

Horodatage ISO 8601 de la dernière mise à jour du ticket.

lastActivityAtStringnullable

Horodatage ISO 8601 de l'activité la plus récente.

organizationOrganizationProfile

L'organisation à laquelle appartient ce ticket.

idID

Identifiant unique de l'organisation.

nameString

Nom affiché de l'organisation.

isVerifiedBoolean

Indique si l'organisation a été vérifiée.

participationsIssueParticipationConnection

Les utilisateurs impliqués dans le ticket : le demandeur et les responsables. Le node de chaque edge est un IssueParticipation avec :

idID

Identifiant unique de la participation.

roleIssueParticipationRole

Le rôle de l'utilisateur dans le ticket.

Valeurs possibles de l'énumération IssueParticipationRole
REQUESTERLa personne qui a ouvert le ticket.
ASSIGNEEUn membre de l'équipe Nebux qui traite le ticket.
WATCHERSuit le ticket sans en être responsable.
NONEAucun rôle particulier.
userUserProfile

L'utilisateur participant.

idID

Identifiant unique de l'utilisateur.

firstNameString

Le prénom de l'utilisateur.

lastNameString

Le nom de famille de l'utilisateur.

avatarUrlString

URL de l'image d'avatar de l'utilisateur.

isStaffBoolean

Indique si l'utilisateur est membre de l'équipe Nebux.

firstActivityIssueActivitynullable

L'activité d'ouverture du ticket, en général le premier message du demandeur.

inboundLinksIssueLinkConnection

Tickets qui pointent vers celui-ci. Le node de chaque edge est un IssueLink avec :

kindIssueLinkKind

Le type de relation entre les deux tickets.

inboundIssueIdID

ID du ticket du côté entrant du lien.

outboundIssueIdID

ID du ticket du côté sortant du lien.

outboundLinksIssueLinkConnection

Tickets vers lesquels pointe celui-ci. Le node de chaque edge est un IssueLink avec :

kindIssueLinkKind

Le type de relation entre les deux tickets.

inboundIssueIdID

ID du ticket du côté entrant du lien.

outboundIssueIdID

ID du ticket du côté sortant du lien.

RÉPONSE
{
  "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"
          }
        }
      }
    ]
  }
}
Requête

Lister les tickets

Renvoie une liste paginée des tickets d'une organisation. Vous pouvez filtrer par statut ou par priorité, et trier selon plusieurs champs.

Paramètres

idIDobligatoire

L'ID de l'organisation dont vous voulez lister les tickets.

firstIntfacultatif

Nombre de tickets à renvoyer (20 par défaut, 100 au maximum).

afterCursorfacultatif

Curseur pour la pagination avant. Utilisez le endCursor d'une réponse précédente.

where.statusIn[IssueStatus!]facultatif

Filtre sur un ou plusieurs statuts.

Valeurs possibles de l'énumération IssueStatus
QUEUED_BACKLOGReporté
QUEUED_READYÀ démarrer
ONGOING_REQUESTEREn attente de le demandeur
ONGOING_ASSIGNEEEntre les mains de Nebux
ONGOING_REVIEWEn revue par le demandeur
ONGOING_EXTERNALBloqué
CLOSED_RESOLVEDRésolu
CLOSED_DISMISSEDÉcarté
where.priorityIn[IssuePriority!]facultatif

Filtre sur une ou plusieurs priorités.

Valeurs possibles de l'énumération IssuePriority
CRITICALCritique
HIGHHaute
MEDIUMMoyenne
LOWBasse
where.statusNotIn[IssueStatus!]facultatif

Exclut un ou plusieurs statuts.

Valeurs possibles de l'énumération IssueStatus
QUEUED_BACKLOGReporté
QUEUED_READYÀ démarrer
ONGOING_REQUESTEREn attente de le demandeur
ONGOING_ASSIGNEEEntre les mains de Nebux
ONGOING_REVIEWEn revue par le demandeur
ONGOING_EXTERNALBloqué
CLOSED_RESOLVEDRésolu
CLOSED_DISMISSEDÉcarté
where.priorityNotIn[IssuePriority!]facultatif

Exclut une ou plusieurs priorités.

Valeurs possibles de l'énumération IssuePriority
CRITICALCritique
HIGHHaute
MEDIUMMoyenne
LOWBasse
where.titleContainsFoldStringfacultatif

Filtre les tickets dont le titre contient ce texte (insensible à la casse).

orderBy.fieldIssueOrderFieldfacultatif

Champ selon lequel trier.

Valeurs possibles de l'énumération IssueOrderField
CREATED_ATCréé
LAST_ACTIVITY_ATDernière activité
PRIORITYPriorité
orderBy.directionOrderDirectionfacultatif

Sens du tri.

Valeurs possibles de l'énumération OrderDirection
ASCCroissant
DESCDécroissant

Renvoie

Renvoie un objet IssueConnection avec une liste d'edges Issue, les informations de pagination et le nombre total.

Erreurs

NOT_FOUNDLa ressource n'existe pas ou votre organisation ne peut pas y accéder.
VALIDATIONL'entrée ne respecte pas les règles exigées (par exemple, un champ est trop long ou une valeur n'est pas autorisée).
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()
RÉPONSE
{
  "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
      }
    }
  }
}
Requête

Récupérer un ticket

Récupère un seul ticket par son ID, avec son organisation, ses participations et l'historique complet de ses activités.

Paramètres

idIDobligatoire

L'ID du ticket à récupérer.

Renvoie

Renvoie un objet Issue.

Erreurs

NOT_FOUNDLa ressource n'existe pas ou votre organisation ne peut pas y accéder.
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()
RÉPONSE
{
  "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

Créer un ticket

Ouvre un nouveau ticket de support dans votre organisation. Par défaut, il est mis en file d'attente pour être traité dès que possible (QUEUED_READY) ; passez un autre status pour changer cela. Cette mutation n'inclut aucun message ; pour publier le premier, utilisez la mutation ajouter un commentaire.

Paramètres

input.organizationIdIDobligatoire

L'ID de l'organisation dans laquelle le ticket sera créé.

input.titleStringfacultatif

Description courte du ticket (500 caractères au maximum). S'il est omis, un titre est généré automatiquement à partir de la conversation.

input.priorityIssuePriorityfacultatif

Priorité initiale du ticket.

Valeurs possibles de l'énumération IssuePriority
CRITICALCritiqueExclusivement pour les incidents qui affectent la disponibilité du service en production ; traité en urgence. Les tarifs de réponse aux incidents s'appliquent selon votre contrat.
HIGHHaute
MEDIUMMoyenne
LOWBasse
input.statusIssueStatusfacultatif

Quand le ticket doit être traité.

Valeurs possibles de l'énumération IssueStatus
QUEUED_READYpar défautL'équipe Nebux le traitera dès que possible.
QUEUED_BACKLOGNous le reporterons jusqu'à ce que vous changiez son statut.

Renvoie

Renvoie un objet IssueCreatePayload qui contient l'Issue nouvellement créée.

Erreurs

VALIDATIONL'entrée ne respecte pas les règles exigées (par exemple, un champ est trop long ou une valeur n'est pas autorisée).
INPUTL'entrée est mal formée ou d'un type incorrect (par exemple, un ID mal formé ou un champ obligatoire manquant).
NOT_FOUNDLa ressource n'existe pas ou votre organisation ne peut pas y accéder.
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()
RÉPONSE
{
  "data": {
    "issueCreate": {
      "issue": {
        "id": "np4kr7mt2vx9q8j3wz6ys1hcd5",
        "friendlyId": 43,
        "title": "Cannot access billing dashboard",
        "status": "QUEUED_READY",
        "priority": "HIGH",
        "createdAt": "2026-06-02T09:11:05Z"
      }
    }
  }
}
Mutation

Modifier un ticket

Met à jour les champs modifiables de l'un de vos tickets. En tant qu'appelant hors staff, vous pouvez changer le titre, la priorité et le faire passer d'un statut en file d'attente à l'autre ; le reste du cycle de vie est géré par l'équipe Nebux.

Paramètres

input.idIDobligatoire

L'ID du ticket à mettre à jour.

input.titleStringfacultatif

Nouvelle description courte du ticket (500 caractères au maximum).

input.priorityIssuePriorityfacultatif

Nouvelle priorité du ticket.

Valeurs possibles de l'énumération IssuePriority
HIGHHaute
MEDIUMMoyenne
LOWBasse
input.statusIssueStatusfacultatif

Change le statut du ticket. Chaque valeur ne peut être définie qu'à partir de certains statuts actuels ; voir ci-dessous.

Valeurs possibles de l'énumération IssueStatus
QUEUED_READYQuand le ticket est reporté (QUEUED_BACKLOG), pour indiquer qu'il est prêt à être traité par l'équipe.
ONGOING_ASSIGNEEQuand le ticket attend votre réponse (ONGOING_REQUESTER), pour le rendre à l'équipe Nebux ; ou quand il est en revue (ONGOING_REVIEW), pour le rouvrir comme pas encore résolu.
CLOSED_RESOLVEDQuand le ticket est en revue (ONGOING_REVIEW), pour confirmer qu'il est résolu.

Renvoie

Renvoie un objet IssueUpdatePayload qui contient l'Issue mise à jour.

Erreurs

NOT_FOUNDLa ressource n'existe pas ou votre organisation ne peut pas y accéder.
VALIDATIONL'entrée ne respecte pas les règles exigées (par exemple, un champ est trop long ou une valeur n'est pas autorisée).
INPUTL'entrée est mal formée ou d'un type incorrect (par exemple, un ID mal formé ou un champ obligatoire manquant).
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()
RÉPONSE
{
  "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'objet IssueActivity

Les activités composent l'historique d'un ticket : commentaires, fichiers envoyés, modifications de champs et entrées d'audit. Chacune porte une action qui indique de quel type d'entrée il s'agit.

Attributs

idID

Identifiant unique de l'activité.

actionIssueActivityAction

Le type d'activité.

Valeurs possibles de l'énumération IssueActivityAction
COMMENTUn commentaire publié sur le ticket.
FILEUn fichier joint au ticket. Un commentaire peut aussi être inclus, de façon facultative.
FIELD_UPDATEUne modification de l'un des champs du ticket.
commentStringnullable

Texte du commentaire, présent quand l'action est COMMENT.

commentEditedAtStringnullable

Horodatage ISO 8601 de la dernière modification du commentaire, ou null s'il n'a jamais été modifié.

fileNameStringnullable

Nom de la pièce jointe, présent quand l'action est FILE.

fileUrlStringnullable

URL de téléchargement de la pièce jointe, présente quand l'action est FILE.

isBotBoolean

Indique si l'activité a été générée par un agent automatisé.

isFeaturedBoolean

Indique si l'équipe Nebux a mis l'activité en avant.

createdAtString

Horodatage ISO 8601 de la création de l'activité.

userUserProfilenullable

L'utilisateur à l'origine de l'activité, ou null pour les utilisateurs système ou supprimés.

idID

Identifiant unique de l'utilisateur.

firstNameString

Le prénom de l'utilisateur.

lastNameString

Le nom de famille de l'utilisateur.

avatarUrlString

URL de l'image d'avatar de l'utilisateur.

isStaffBoolean

Indique si l'utilisateur est membre de l'équipe Nebux.

reactionsIssueActivityReactionConnection

Réactions (emoji) à l'activité. Le node de chaque edge est un IssueActivityReaction avec :

bodyStringnullable

L'emoji de la réaction.

userUserProfile

L'utilisateur qui a réagi.

idID

Identifiant unique de l'utilisateur.

firstNameString

Le prénom de l'utilisateur.

lastNameString

Le nom de famille de l'utilisateur.

avatarUrlString

URL de l'image d'avatar de l'utilisateur.

isStaffBoolean

Indique si l'utilisateur est membre de l'équipe Nebux.

RÉPONSE
{
  "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"
  }
}
Requête

Lister les activités

Renvoie l'historique d'activité d'un ticket (commentaires, fichiers envoyés, changements de statut et entrées d'audit) dans l'ordre chronologique.

Paramètres

idIDobligatoire

L'ID du ticket dont vous voulez lister les activités.

firstIntfacultatif

Nombre d'activités à renvoyer (20 par défaut, 100 au maximum).

afterCursorfacultatif

Curseur pour la pagination avant. Utilisez le endCursor d'une réponse précédente.

where.commentContainsFoldStringfacultatif

Filtre les activités dont le commentaire contient ce texte (insensible à la casse).

orderBy.fieldIssueActivityOrderFieldfacultatif

Champ selon lequel trier les activités.

Valeurs possibles de l'énumération IssueActivityOrderField
CREATED_ATCréé
orderBy.directionOrderDirectionfacultatif

Sens du tri.

Valeurs possibles de l'énumération OrderDirection
ASCCroissant
DESCDécroissant

Renvoie

Renvoie un objet IssueActivityConnection avec une liste d'edges IssueActivity, les informations de pagination et le nombre total.

Erreurs

NOT_FOUNDLa ressource n'existe pas ou votre organisation ne peut pas y accéder.
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()
RÉPONSE
{
  "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

Ajouter un commentaire

Publie un commentaire sur un ticket en créant une activité avec l'action COMMENT. Vous pouvez aussi joindre un fichier avec l'action FILE et le champ file.

Paramètres

input.issueIdIDobligatoire

L'ID du ticket à commenter.

input.actionIssueActivityActionobligatoire

L'action de l'activité : COMMENT pour publier un commentaire, ou FILE pour joindre un fichier.

Valeurs possibles de l'énumération IssueActivityAction
COMMENTUn commentaire publié sur le ticket.
FILEUn fichier joint au ticket. Un commentaire peut aussi être inclus, de façon facultative.
input.commentStringfacultatif

Le texte du commentaire (obligatoire pour l'action COMMENT).

input.fileUploadfacultatif

Le fichier à joindre (obligatoire pour l'action FILE). Les envois de fichiers utilisent la spécification multipart de GraphQL (multipart/form-data), et non le corps JSON. Pour en savoir plus, consultez cette spécification.

Renvoie

Renvoie un objet IssueActivityCreatePayload qui contient l'IssueActivity nouvellement créée.

Erreurs

NOT_FOUNDLa ressource n'existe pas ou votre organisation ne peut pas y accéder.
VALIDATIONL'entrée ne respecte pas les règles exigées (par exemple, un champ est trop long ou une valeur n'est pas autorisée).
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()
RÉPONSE
{
  "data": {
    "issueActivityCreate": {
      "issueActivity": {
        "id": "8m3kq7v2wr9yt4xn1p6cs0hjda",
        "action": "COMMENT",
        "comment": "Thanks for the update, still seeing the error.",
        "createdAt": "2026-06-02T09:15:40Z"
      }
    }
  }
}
Mutation

Modifier un commentaire

Met à jour le texte d'un commentaire existant. Seul l'auteur peut modifier ses propres commentaires ; commentEditedAt prend l'heure de la modification.

Paramètres

input.idIDobligatoire

L'ID de l'activité (commentaire) à modifier.

input.commentStringobligatoire

Le nouveau texte du commentaire.

Renvoie

Renvoie un objet IssueActivityUpdatePayload qui contient l'IssueActivity mise à jour.

Erreurs

NOT_FOUNDLa ressource n'existe pas ou votre organisation ne peut pas y accéder.
VALIDATIONL'entrée ne respecte pas les règles exigées (par exemple, un champ est trop long ou une valeur n'est pas autorisée).
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()
RÉPONSE
{
  "data": {
    "issueActivityUpdate": {
      "issueActivity": {
        "id": "8m3kq7v2wr9yt4xn1p6cs0hjda",
        "comment": "Thanks for the update, the error is gone now.",
        "commentEditedAt": "2026-06-02T09:20:11Z"
      }
    }
  }
}