Suport
L'objecte Issue
Els tiquets representen els tiquets de suport creats per la teua organització. Cada tiquet té un estat, una prioritat i un historial d'activitats.
Atributs
idIDIdentificador únic del tiquet.
friendlyIdIntNúmero de tiquet llegible, seqüencial per organització.
titleStringnul·lableDescripció breu del tiquet.
statusIssueStatusEstat actual del cicle de vida del tiquet.
IssueStatusQUEUED_BACKLOGAjornatQUEUED_READYPer iniciarONGOING_REQUESTEREsperant a el sol·licitantONGOING_ASSIGNEEEn mans de NebuxONGOING_REVIEWEn revisió per el sol·licitantONGOING_EXTERNALBloquejatCLOSED_RESOLVEDResoltCLOSED_DISMISSEDDescartatpriorityIssuePriorityNivell de prioritat assignat al tiquet.
IssuePriorityCRITICALCríticaHIGHAltaMEDIUMMitjanaLOWBaixasummaryStringnul·lableDescripció detallada del tiquet.
createdAtStringMarca de temps ISO 8601 de quan es va crear el tiquet.
updatedAtStringMarca de temps ISO 8601 de l'última actualització del tiquet.
lastActivityAtStringnul·lableMarca de temps ISO 8601 de l'activitat més recent.
organizationOrganizationProfileL'organització a què pertany este tiquet.
idIDIdentificador únic de l'organització.
nameStringNom visible de l'organització.
isVerifiedBooleanSi l'organització ha sigut verificada.
participationsIssueParticipationConnectionEls usuaris implicats en el tiquet: el sol·licitant i els assignats. El node de cada aresta és un IssueParticipation amb:
idIDIdentificador únic de la participació.
roleIssueParticipationRoleEl rol de l'usuari en el tiquet.
IssueParticipationRoleREQUESTERLa persona que va obrir el tiquet.ASSIGNEEUn membre de l'equip de Nebux que atén el tiquet.WATCHERSeguix el tiquet sense estar assignat.NONESense un rol concret.userUserProfileL'usuari participant.
idIDIdentificador únic de l'usuari.
firstNameStringEl nom de l'usuari.
lastNameStringEls cognoms de l'usuari.
avatarUrlStringURL de la imatge d'avatar de l'usuari.
isStaffBooleanSi l'usuari és membre de l'equip de Nebux.
firstActivityIssueActivitynul·lableL'activitat d'obertura del ticket, normalment el primer missatge del sol·licitant.
inboundLinksIssueLinkConnectionTickets que enllacen amb este. El node de cada edge és un IssueLink amb:
kindIssueLinkKindEl tipus de relació entre els dos tickets.
inboundIssueIdIDID del ticket al costat entrant de l'enllaç.
outboundIssueIdIDID del ticket al costat eixent de l'enllaç.
outboundLinksIssueLinkConnectionTickets amb els quals enllaça este. El node de cada edge és un IssueLink amb:
kindIssueLinkKindEl tipus de relació entre els dos tickets.
inboundIssueIdIDID del ticket al costat entrant de l'enllaç.
outboundIssueIdIDID del ticket al costat eixent de l'enllaç.
{
"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"
}
}
}
]
}
}Llista de tiquets
Retorna una llista paginada de tiquets per a una organització. Pots filtrar per estat o prioritat i ordenar per diversos camps.
Paràmetres
idIDobligatoriL'ID de l'organització els tiquets de la qual vols llistar.
firstIntopcionalNombre de tiquets a retornar (per defecte 20, màxim 100).
afterCursoropcionalCursor per a la paginació cap avant. Usa l'endCursor d'una resposta anterior.
where.statusIn[IssueStatus!]opcionalFiltra per un o més estats.
IssueStatusQUEUED_BACKLOGAjornatQUEUED_READYPer iniciarONGOING_REQUESTEREsperant a el sol·licitantONGOING_ASSIGNEEEn mans de NebuxONGOING_REVIEWEn revisió per el sol·licitantONGOING_EXTERNALBloquejatCLOSED_RESOLVEDResoltCLOSED_DISMISSEDDescartatwhere.priorityIn[IssuePriority!]opcionalFiltra per una o més prioritats.
IssuePriorityCRITICALCríticaHIGHAltaMEDIUMMitjanaLOWBaixawhere.statusNotIn[IssueStatus!]opcionalExclou un o més estats.
IssueStatusQUEUED_BACKLOGAjornatQUEUED_READYPer iniciarONGOING_REQUESTEREsperant a el sol·licitantONGOING_ASSIGNEEEn mans de NebuxONGOING_REVIEWEn revisió per el sol·licitantONGOING_EXTERNALBloquejatCLOSED_RESOLVEDResoltCLOSED_DISMISSEDDescartatwhere.priorityNotIn[IssuePriority!]opcionalExclou una o més prioritats.
IssuePriorityCRITICALCríticaHIGHAltaMEDIUMMitjanaLOWBaixawhere.titleContainsFoldStringopcionalFiltra pels tickets el títol dels quals continga este text (sense distingir majúscules).
orderBy.fieldIssueOrderFieldopcionalCamp pel qual ordenar.
IssueOrderFieldCREATED_ATCreatLAST_ACTIVITY_ATÚltima activitatPRIORITYPrioritatorderBy.directionOrderDirectionopcionalDirecció d'ordenació.
OrderDirectionASCAscendentDESCDescendentRetorna
Retorna un objecte IssueConnection amb una llista d'arestes Issue, informació de paginació i el total.
Errors
NOT_FOUNDEl recurs no existix o la teua organització no hi pot accedir.VALIDATIONL'entrada no complix les regles requerides (per exemple, un camp és massa llarg o un valor no està permés).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 tiquet
Recupera un tiquet individual pel seu ID, incloent la seua organització, participacions i historial complet d'activitats.
Paràmetres
idIDobligatoriL'ID del tiquet a recuperar.
Retorna
Retorna un objecte Issue.
Errors
NOT_FOUNDEl recurs no existix o la teua organització no hi pot accedir.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 tiquet
Obri un nou tiquet de suport en la teua organització. Per defecte s'encua per atendre's al més aviat possible (QUEUED_READY); passa un altre status per canviar-ho. Esta mutació no inclou cap missatge; per a publicar el primer, fes la mutació d'afegir un comentari.
Paràmetres
input.organizationIdIDobligatoriL'ID de l'organització en què es crearà el tiquet.
input.titleStringopcionalDescripció breu del tiquet (màxim 500 caràcters). Si s'omet, es genera un títol automàticament a partir de la conversa.
input.priorityIssuePriorityopcionalPrioritat inicial del tiquet.
IssuePriorityCRITICALCríticaExclusivament per a incidències que afecten la disponibilitat del servei en producció; s'atén amb urgència. S'apliquen les tarifes de resposta a incidències segons el teu contracte.HIGHAltaMEDIUMMitjanaLOWBaixainput.statusIssueStatusopcionalQuan s'ha d'atendre el tiquet.
IssueStatusQUEUED_READYper defecteL'equip de Nebux l'atendrà al més aviat possible.QUEUED_BACKLOGL'afegirem al backlog fins que en canvies l'estat.Retorna
Retorna un objecte IssueCreatePayload que conté l'Issue recentment creada.
Errors
VALIDATIONL'entrada no complix les regles requerides (per exemple, un camp és massa llarg o un valor no està permés).INPUTL'entrada està mal formada o té un tipus incorrecte (per exemple, un ID mal format o falta un camp requerit).NOT_FOUNDEl recurs no existix o la teua organització no hi pot accedir.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"
}
}
}
}Edita un tiquet
Actualitza els camps editables d'un dels teus tiquets. Com a sol·licitant no-staff pots canviar el títol, la prioritat i moure'l entre els dos estats en cua; la resta del cicle de vida la gestiona l'equip de Nebux.
Paràmetres
input.idIDobligatoriL'ID del tiquet a actualitzar.
input.titleStringopcionalNova descripció breu del tiquet (màxim 500 caràcters).
input.priorityIssuePriorityopcionalNova prioritat del tiquet.
IssuePriorityHIGHAltaMEDIUMMitjanaLOWBaixainput.statusIssueStatusopcionalCanvia l'estat del tiquet. Cada valor només es pot establir des de certs estats actuals; consulta-ho davall.
IssueStatusQUEUED_READYQuan el tiquet està en la cua de pendents (QUEUED_BACKLOG), per a marcar-lo com a llest perquè l'equip l'atenga.ONGOING_ASSIGNEEQuan el tiquet espera la teua resposta (ONGOING_REQUESTER), per a tornar-lo a l'equip de Nebux; o quan està en revisió (ONGOING_REVIEW), per a reobrir-lo com a no resolt encara.CLOSED_RESOLVEDQuan el tiquet està en revisió (ONGOING_REVIEW), per a confirmar que està resolt.Retorna
Retorna un objecte IssueUpdatePayload que conté l'Issue actualitzada.
Errors
NOT_FOUNDEl recurs no existix o la teua organització no hi pot accedir.VALIDATIONL'entrada no complix les regles requerides (per exemple, un camp és massa llarg o un valor no està permés).INPUTL'entrada està mal formada o té un tipus incorrecte (per exemple, un ID mal format o falta un camp requerit).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'objecte IssueActivity
Les activitats componen l'historial d'un tiquet: comentaris, fitxers pujats, canvis de camps i entrades d'auditoria. Cada una porta una acció que indica de quin tipus d'entrada es tracta.
Atributs
idIDIdentificador únic de l'activitat.
actionIssueActivityActionEl tipus d'activitat.
IssueActivityActionCOMMENTUn comentari publicat en el tiquet.FILEUn fitxer adjunt al tiquet. Opcionalment es pot incloure també un comentari.FIELD_UPDATEUn canvi en un dels camps del tiquet.commentStringnul·lableText del comentari, present quan l'acció és COMMENT.
commentEditedAtStringnul·lableMarca de temps ISO 8601 de l'última edició del comentari, o null si mai no s'ha editat.
fileNameStringnul·lableNom del fitxer adjunt, present quan l'acció és FILE.
fileUrlStringnul·lableURL de descàrrega del fitxer adjunt, present quan l'acció és FILE.
isBotBooleanSi l'activitat ha sigut generada per un agent automatitzat.
isFeaturedBooleanSi l'equip de Nebux ha destacat l'activitat.
createdAtStringMarca de temps ISO 8601 de quan es va crear l'activitat.
userUserProfilenul·lableL'usuari que va produir l'activitat, o null per a usuaris del sistema o eliminats.
idIDIdentificador únic de l'usuari.
firstNameStringEl nom de l'usuari.
lastNameStringEls cognoms de l'usuari.
avatarUrlStringURL de la imatge d'avatar de l'usuari.
isStaffBooleanSi l'usuari és membre de l'equip de Nebux.
reactionsIssueActivityReactionConnectionReaccions (emoji) en l'activitat. El node de cada edge és un IssueActivityReaction amb:
bodyStringnul·lableL'emoji de la reacció.
userUserProfileL'usuari que ha reaccionat.
idIDIdentificador únic de l'usuari.
firstNameStringEl nom de l'usuari.
lastNameStringEls cognoms de l'usuari.
avatarUrlStringURL de la imatge d'avatar de l'usuari.
isStaffBooleanSi l'usuari és membre de l'equip de 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"
}
}Llista d'activitats
Retorna l'historial d'activitat d'un tiquet —comentaris, fitxers pujats, canvis d'estat i entrades d'auditoria— en ordre cronològic.
Paràmetres
idIDobligatoriL'ID del tiquet les activitats del qual vols llistar.
firstIntopcionalNombre d'activitats a retornar (per defecte 20, màxim 100).
afterCursoropcionalCursor per a la paginació cap avant. Usa l'endCursor d'una resposta anterior.
where.commentContainsFoldStringopcionalFiltra per les activitats el comentari de les quals continga este text (sense distingir majúscules).
orderBy.fieldIssueActivityOrderFieldopcionalCamp pel qual ordenar les activitats.
IssueActivityOrderFieldCREATED_ATCreatorderBy.directionOrderDirectionopcionalDirecció d'ordenació.
OrderDirectionASCAscendentDESCDescendentRetorna
Retorna un objecte IssueActivityConnection amb una llista d'arestes IssueActivity, informació de paginació i el total.
Errors
NOT_FOUNDEl recurs no existix o la teua organització no hi pot accedir.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
}
}
}
}Afegir un comentari
Publica un comentari en un tiquet creant una activitat amb l'acció COMMENT. També pots adjuntar un fitxer usant l'acció FILE amb el camp file.
Paràmetres
input.issueIdIDobligatoriL'ID del tiquet on comentar.
input.actionIssueActivityActionobligatoriL'acció de l'activitat: COMMENT per a publicar un comentari, o FILE per a adjuntar un fitxer.
IssueActivityActionCOMMENTUn comentari publicat en el tiquet.FILEUn fitxer adjunt al tiquet. Opcionalment es pot incloure també un comentari.input.commentStringopcionalEl text del comentari (obligatori per a l'acció COMMENT).
input.fileUploadopcionalEl fitxer a adjuntar (obligatori per a l'acció FILE). Les pujades de fitxers usen l'especificació multipart de GraphQL (multipart/form-data), no el cos JSON. Per a més informació, consulteu esta especificació.
Retorna
Retorna un objecte IssueActivityCreatePayload que conté la IssueActivity recentment creada.
Errors
NOT_FOUNDEl recurs no existix o la teua organització no hi pot accedir.VALIDATIONL'entrada no complix les regles requerides (per exemple, un camp és massa llarg o un valor no està permés).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"
}
}
}
}Editar un comentari
Actualitza el text d'un comentari existent. Només l'autor pot editar els seus propis comentaris; commentEditedAt s'establix amb l'hora de l'edició.
Paràmetres
input.idIDobligatoriL'ID de l'activitat (comentari) a editar.
input.commentStringobligatoriEl nou text del comentari.
Retorna
Retorna un objecte IssueActivityUpdatePayload que conté la IssueActivity actualitzada.
Errors
NOT_FOUNDEl recurs no existix o la teua organització no hi pot accedir.VALIDATIONL'entrada no complix les regles requerides (per exemple, un camp és massa llarg o un valor no està permés).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"
}
}
}
}