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
idIDIdentifiant unique du ticket.
friendlyIdIntNuméro de ticket lisible, séquentiel par organisation.
titleStringnullableDescription courte du ticket.
statusIssueStatusStatut actuel du ticket dans son cycle de vie.
IssueStatusQUEUED_BACKLOGReportéQUEUED_READYÀ démarrerONGOING_REQUESTEREn attente de le demandeurONGOING_ASSIGNEEEntre les mains de NebuxONGOING_REVIEWEn revue par le demandeurONGOING_EXTERNALBloquéCLOSED_RESOLVEDRésoluCLOSED_DISMISSEDÉcartépriorityIssuePriorityNiveau de priorité attribué au ticket.
IssuePriorityCRITICALCritiqueHIGHHauteMEDIUMMoyenneLOWBassesummaryStringnullableDescription détaillée du ticket.
createdAtStringHorodatage ISO 8601 de la création du ticket.
updatedAtStringHorodatage ISO 8601 de la dernière mise à jour du ticket.
lastActivityAtStringnullableHorodatage ISO 8601 de l'activité la plus récente.
organizationOrganizationProfileL'organisation à laquelle appartient ce ticket.
idIDIdentifiant unique de l'organisation.
nameStringNom affiché de l'organisation.
isVerifiedBooleanIndique si l'organisation a été vérifiée.
participationsIssueParticipationConnectionLes utilisateurs impliqués dans le ticket : le demandeur et les responsables. Le node de chaque edge est un IssueParticipation avec :
idIDIdentifiant unique de la participation.
roleIssueParticipationRoleLe rôle de l'utilisateur dans le ticket.
IssueParticipationRoleREQUESTERLa 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.userUserProfileL'utilisateur participant.
idIDIdentifiant unique de l'utilisateur.
firstNameStringLe prénom de l'utilisateur.
lastNameStringLe nom de famille de l'utilisateur.
avatarUrlStringURL de l'image d'avatar de l'utilisateur.
isStaffBooleanIndique si l'utilisateur est membre de l'équipe Nebux.
firstActivityIssueActivitynullableL'activité d'ouverture du ticket, en général le premier message du demandeur.
inboundLinksIssueLinkConnectionTickets qui pointent vers celui-ci. Le node de chaque edge est un IssueLink avec :
kindIssueLinkKindLe type de relation entre les deux tickets.
inboundIssueIdIDID du ticket du côté entrant du lien.
outboundIssueIdIDID du ticket du côté sortant du lien.
outboundLinksIssueLinkConnectionTickets vers lesquels pointe celui-ci. Le node de chaque edge est un IssueLink avec :
kindIssueLinkKindLe type de relation entre les deux tickets.
inboundIssueIdIDID du ticket du côté entrant du lien.
outboundIssueIdIDID du ticket du côté sortant du lien.
{
"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"
}
}
}
]
}
}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
idIDobligatoireL'ID de l'organisation dont vous voulez lister les tickets.
firstIntfacultatifNombre de tickets à renvoyer (20 par défaut, 100 au maximum).
afterCursorfacultatifCurseur pour la pagination avant. Utilisez le endCursor d'une réponse précédente.
where.statusIn[IssueStatus!]facultatifFiltre sur un ou plusieurs statuts.
IssueStatusQUEUED_BACKLOGReportéQUEUED_READYÀ démarrerONGOING_REQUESTEREn attente de le demandeurONGOING_ASSIGNEEEntre les mains de NebuxONGOING_REVIEWEn revue par le demandeurONGOING_EXTERNALBloquéCLOSED_RESOLVEDRésoluCLOSED_DISMISSEDÉcartéwhere.priorityIn[IssuePriority!]facultatifFiltre sur une ou plusieurs priorités.
IssuePriorityCRITICALCritiqueHIGHHauteMEDIUMMoyenneLOWBassewhere.statusNotIn[IssueStatus!]facultatifExclut un ou plusieurs statuts.
IssueStatusQUEUED_BACKLOGReportéQUEUED_READYÀ démarrerONGOING_REQUESTEREn attente de le demandeurONGOING_ASSIGNEEEntre les mains de NebuxONGOING_REVIEWEn revue par le demandeurONGOING_EXTERNALBloquéCLOSED_RESOLVEDRésoluCLOSED_DISMISSEDÉcartéwhere.priorityNotIn[IssuePriority!]facultatifExclut une ou plusieurs priorités.
IssuePriorityCRITICALCritiqueHIGHHauteMEDIUMMoyenneLOWBassewhere.titleContainsFoldStringfacultatifFiltre les tickets dont le titre contient ce texte (insensible à la casse).
orderBy.fieldIssueOrderFieldfacultatifChamp selon lequel trier.
IssueOrderFieldCREATED_ATCrééLAST_ACTIVITY_ATDernière activitéPRIORITYPrioritéorderBy.directionOrderDirectionfacultatifSens du tri.
OrderDirectionASCCroissantDESCDécroissantRenvoie
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).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
}
}
}
}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
idIDobligatoireL'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.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://..."
}
}
}
]
}
}
}
}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.organizationIdIDobligatoireL'ID de l'organisation dans laquelle le ticket sera créé.
input.titleStringfacultatifDescription courte du ticket (500 caractères au maximum). S'il est omis, un titre est généré automatiquement à partir de la conversation.
input.priorityIssuePriorityfacultatifPriorité initiale du ticket.
IssuePriorityCRITICALCritiqueExclusivement 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.HIGHHauteMEDIUMMoyenneLOWBasseinput.statusIssueStatusfacultatifQuand le ticket doit être traité.
IssueStatusQUEUED_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.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"
}
}
}
}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.idIDobligatoireL'ID du ticket à mettre à jour.
input.titleStringfacultatifNouvelle description courte du ticket (500 caractères au maximum).
input.priorityIssuePriorityfacultatifNouvelle priorité du ticket.
IssuePriorityHIGHHauteMEDIUMMoyenneLOWBasseinput.statusIssueStatusfacultatifChange le statut du ticket. Chaque valeur ne peut être définie qu'à partir de certains statuts actuels ; voir ci-dessous.
IssueStatusQUEUED_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).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'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
idIDIdentifiant unique de l'activité.
actionIssueActivityActionLe type d'activité.
IssueActivityActionCOMMENTUn 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.commentStringnullableTexte du commentaire, présent quand l'action est COMMENT.
commentEditedAtStringnullableHorodatage ISO 8601 de la dernière modification du commentaire, ou null s'il n'a jamais été modifié.
fileNameStringnullableNom de la pièce jointe, présent quand l'action est FILE.
fileUrlStringnullableURL de téléchargement de la pièce jointe, présente quand l'action est FILE.
isBotBooleanIndique si l'activité a été générée par un agent automatisé.
isFeaturedBooleanIndique si l'équipe Nebux a mis l'activité en avant.
createdAtStringHorodatage ISO 8601 de la création de l'activité.
userUserProfilenullableL'utilisateur à l'origine de l'activité, ou null pour les utilisateurs système ou supprimés.
idIDIdentifiant unique de l'utilisateur.
firstNameStringLe prénom de l'utilisateur.
lastNameStringLe nom de famille de l'utilisateur.
avatarUrlStringURL de l'image d'avatar de l'utilisateur.
isStaffBooleanIndique si l'utilisateur est membre de l'équipe Nebux.
reactionsIssueActivityReactionConnectionRéactions (emoji) à l'activité. Le node de chaque edge est un IssueActivityReaction avec :
bodyStringnullableL'emoji de la réaction.
userUserProfileL'utilisateur qui a réagi.
idIDIdentifiant unique de l'utilisateur.
firstNameStringLe prénom de l'utilisateur.
lastNameStringLe nom de famille de l'utilisateur.
avatarUrlStringURL de l'image d'avatar de l'utilisateur.
isStaffBooleanIndique si l'utilisateur est membre de l'équipe 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"
}
}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
idIDobligatoireL'ID du ticket dont vous voulez lister les activités.
firstIntfacultatifNombre d'activités à renvoyer (20 par défaut, 100 au maximum).
afterCursorfacultatifCurseur pour la pagination avant. Utilisez le endCursor d'une réponse précédente.
where.commentContainsFoldStringfacultatifFiltre les activités dont le commentaire contient ce texte (insensible à la casse).
orderBy.fieldIssueActivityOrderFieldfacultatifChamp selon lequel trier les activités.
IssueActivityOrderFieldCREATED_ATCrééorderBy.directionOrderDirectionfacultatifSens du tri.
OrderDirectionASCCroissantDESCDécroissantRenvoie
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.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
}
}
}
}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.issueIdIDobligatoireL'ID du ticket à commenter.
input.actionIssueActivityActionobligatoireL'action de l'activité : COMMENT pour publier un commentaire, ou FILE pour joindre un fichier.
IssueActivityActionCOMMENTUn commentaire publié sur le ticket.FILEUn fichier joint au ticket. Un commentaire peut aussi être inclus, de façon facultative.input.commentStringfacultatifLe texte du commentaire (obligatoire pour l'action COMMENT).
input.fileUploadfacultatifLe 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).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"
}
}
}
}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.idIDobligatoireL'ID de l'activité (commentaire) à modifier.
input.commentStringobligatoireLe 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).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"
}
}
}
}