Soporte
El objeto Issue
Los issues representan tickets de soporte creados por tu organización. Cada issue tiene un estado, una prioridad y un historial de actividades.
Atributos
idIDIdentificador único del ticket.
friendlyIdIntNúmero de ticket legible, secuencial por organización.
titleStringnulo permitidoDescripción breve del ticket.
statusIssueStatusEstado actual del ciclo de vida del ticket.
IssueStatusQUEUED_BACKLOGAplazadoQUEUED_READYPor iniciarONGOING_REQUESTEREsperando a el solicitanteONGOING_ASSIGNEEEn manos de NebuxONGOING_REVIEWEn revisión por el solicitanteONGOING_EXTERNALBloqueadoCLOSED_RESOLVEDResueltoCLOSED_DISMISSEDDescartadopriorityIssuePriorityNivel de prioridad asignado al ticket.
IssuePriorityCRITICALCríticaHIGHAltaMEDIUMMediaLOWBajasummaryStringnulo permitidoDescripción detallada del ticket.
createdAtStringMarca de tiempo ISO 8601 de cuándo se creó el ticket.
updatedAtStringMarca de tiempo ISO 8601 de la última actualización del ticket.
lastActivityAtStringnulo permitidoMarca de tiempo ISO 8601 de la actividad más reciente.
organizationOrganizationProfileLa organización a la que pertenece este ticket.
idIDIdentificador único de la organización.
nameStringNombre visible de la organización.
isVerifiedBooleanSi la organización ha sido verificada.
participationsIssueParticipationConnectionLos usuarios implicados en el ticket: el solicitante y los asignados. El node de cada arista es un IssueParticipation con:
idIDIdentificador único de la participación.
roleIssueParticipationRoleEl rol del usuario en el ticket.
IssueParticipationRoleREQUESTERLa persona que abrió el ticket.ASSIGNEEUn miembro del equipo de Nebux que atiende el ticket.WATCHERSigue el ticket sin estar asignado.NONESin un rol concreto.userUserProfileEl usuario participante.
idIDIdentificador único del usuario.
firstNameStringEl nombre del usuario.
lastNameStringLos apellidos del usuario.
avatarUrlStringURL de la imagen de avatar del usuario.
isStaffBooleanSi el usuario es miembro del equipo de Nebux.
firstActivityIssueActivitynulo permitidoLa actividad de apertura del ticket, normalmente el primer mensaje del solicitante.
inboundLinksIssueLinkConnectionTickets que enlazan con este. El nodo de cada edge es un IssueLink con:
kindIssueLinkKindEl tipo de relación entre los dos tickets.
inboundIssueIdIDID del ticket en el lado entrante del enlace.
outboundIssueIdIDID del ticket en el lado saliente del enlace.
outboundLinksIssueLinkConnectionTickets con los que enlaza este. El nodo de cada edge es un IssueLink con:
kindIssueLinkKindEl tipo de relación entre los dos tickets.
inboundIssueIdIDID del ticket en el lado entrante del enlace.
outboundIssueIdIDID del ticket en el lado saliente del enlace.
{
"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"
}
}
}
]
}
}Listar tickets
Devuelve una lista paginada de tickets de una organización. Puedes filtrar por estado o prioridad y ordenar por varios campos.
Parámetros
idIDobligatorioEl ID de la organización cuyos tickets quieres listar.
firstIntopcionalNúmero de tickets a devolver (por defecto 20, máximo 100).
afterCursoropcionalCursor para paginación hacia delante. Usa el endCursor de una respuesta anterior.
where.statusIn[IssueStatus!]opcionalFiltra por uno o más estados.
IssueStatusQUEUED_BACKLOGAplazadoQUEUED_READYPor iniciarONGOING_REQUESTEREsperando a el solicitanteONGOING_ASSIGNEEEn manos de NebuxONGOING_REVIEWEn revisión por el solicitanteONGOING_EXTERNALBloqueadoCLOSED_RESOLVEDResueltoCLOSED_DISMISSEDDescartadowhere.priorityIn[IssuePriority!]opcionalFiltra por una o más prioridades.
IssuePriorityCRITICALCríticaHIGHAltaMEDIUMMediaLOWBajawhere.statusNotIn[IssueStatus!]opcionalExcluye uno o más estados.
IssueStatusQUEUED_BACKLOGAplazadoQUEUED_READYPor iniciarONGOING_REQUESTEREsperando a el solicitanteONGOING_ASSIGNEEEn manos de NebuxONGOING_REVIEWEn revisión por el solicitanteONGOING_EXTERNALBloqueadoCLOSED_RESOLVEDResueltoCLOSED_DISMISSEDDescartadowhere.priorityNotIn[IssuePriority!]opcionalExcluye una o más prioridades.
IssuePriorityCRITICALCríticaHIGHAltaMEDIUMMediaLOWBajawhere.titleContainsFoldStringopcionalFiltra por tickets cuyo título contenga este texto (sin distinguir mayúsculas).
orderBy.fieldIssueOrderFieldopcionalCampo por el que ordenar.
IssueOrderFieldCREATED_ATCreadoLAST_ACTIVITY_ATÚltima actividadPRIORITYPrioridadorderBy.directionOrderDirectionopcionalDirección de ordenación.
OrderDirectionASCAscendenteDESCDescendenteDevuelve
Devuelve un objeto IssueConnection con una lista de aristas Issue, información de paginación y el recuento total.
Errores
NOT_FOUNDEl recurso no existe o tu organización no puede acceder a él.VALIDATIONLa entrada no cumple las reglas requeridas (por ejemplo, un campo es demasiado largo o un valor no está permitido).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
}
}
}
}Recuperar un ticket
Recupera un único ticket por su ID, incluyendo su organización, participaciones e historial completo de actividades.
Parámetros
idIDobligatorioEl ID del ticket a recuperar.
Devuelve
Devuelve un objeto Issue.
Errores
NOT_FOUNDEl recurso no existe o tu organización no puede acceder a él.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://..."
}
}
}
]
}
}
}
}Crear un ticket
Abre un nuevo ticket de soporte en tu organización. Por defecto se encola para atenderse lo antes posible (QUEUED_READY); pasa otro status para cambiarlo. Esta mutación no incluye ningún mensaje; para publicar el primero, usa la mutación de añadir un comentario.
Parámetros
input.organizationIdIDobligatorioEl ID de la organización en la que se creará el ticket.
input.titleStringopcionalDescripción breve del ticket (máximo 500 caracteres). Si se omite, se genera un título automáticamente a partir de la conversación.
input.priorityIssuePriorityopcionalPrioridad inicial del ticket.
IssuePriorityCRITICALCríticaExclusivamente para incidencias que afectan a la disponibilidad del servicio en producción; se atiende con urgencia. Se aplican las tarifas de respuesta a incidencias según tu contrato.HIGHAltaMEDIUMMediaLOWBajainput.statusIssueStatusopcionalCuándo se debe atender el ticket.
IssueStatusQUEUED_READYpredeterminadoEl equipo de Nebux lo atenderá lo antes posible.QUEUED_BACKLOGLo añadiremos al backlog hasta que cambies su estado.Devuelve
Devuelve un objeto IssueCreatePayload que contiene la Issue recién creada.
Errores
VALIDATIONLa entrada no cumple las reglas requeridas (por ejemplo, un campo es demasiado largo o un valor no está permitido).INPUTLa entrada está mal formada o tiene un tipo incorrecto (por ejemplo, un ID mal formado o falta un campo requerido).NOT_FOUNDEl recurso no existe o tu organización no puede acceder a él.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"
}
}
}
}Editar un ticket
Actualiza los campos editables de uno de tus tickets. Como llamante no-staff puedes cambiar el título, la prioridad y moverlo entre los dos estados en cola; el resto del ciclo de vida lo gestiona el equipo de Nebux.
Parámetros
input.idIDobligatorioEl ID del ticket a actualizar.
input.titleStringopcionalNueva descripción breve del ticket (máximo 500 caracteres).
input.priorityIssuePriorityopcionalNueva prioridad del ticket.
IssuePriorityHIGHAltaMEDIUMMediaLOWBajainput.statusIssueStatusopcionalCambia el estado del ticket. Cada valor solo puede establecerse desde ciertos estados actuales; consulta abajo.
IssueStatusQUEUED_READYCuando el ticket está en la cola de pendientes (QUEUED_BACKLOG), para marcarlo como listo para que el equipo lo atienda.ONGOING_ASSIGNEECuando el ticket espera tu respuesta (ONGOING_REQUESTER), para devolverlo al equipo de Nebux; o cuando está en revisión (ONGOING_REVIEW), para reabrirlo como aún no resuelto.CLOSED_RESOLVEDCuando el ticket está en revisión (ONGOING_REVIEW), para confirmar que está resuelto.Devuelve
Devuelve un objeto IssueUpdatePayload que contiene la Issue actualizada.
Errores
NOT_FOUNDEl recurso no existe o tu organización no puede acceder a él.VALIDATIONLa entrada no cumple las reglas requeridas (por ejemplo, un campo es demasiado largo o un valor no está permitido).INPUTLa entrada está mal formada o tiene un tipo incorrecto (por ejemplo, un ID mal formado o falta un campo requerido).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"
}
}
}
}El objeto IssueActivity
Las actividades componen el historial de un ticket: comentarios, archivos subidos, cambios de campos y entradas de auditoría. Cada una lleva una acción que indica de qué tipo de entrada se trata.
Atributos
idIDIdentificador único de la actividad.
actionIssueActivityActionEl tipo de actividad.
IssueActivityActionCOMMENTUn comentario publicado en el ticket.FILEUn archivo adjunto al ticket. Opcionalmente se puede incluir también un comentario.FIELD_UPDATEUn cambio en uno de los campos del ticket.commentStringnulo permitidoTexto del comentario, presente cuando la acción es COMMENT.
commentEditedAtStringnulo permitidoMarca de tiempo ISO 8601 de la última edición del comentario, o null si nunca se editó.
fileNameStringnulo permitidoNombre del archivo adjunto, presente cuando la acción es FILE.
fileUrlStringnulo permitidoURL de descarga del archivo adjunto, presente cuando la acción es FILE.
isBotBooleanSi la actividad fue generada por un agente automatizado.
isFeaturedBooleanSi el equipo de Nebux ha destacado la actividad.
createdAtStringMarca de tiempo ISO 8601 de cuándo se creó la actividad.
userUserProfilenulo permitidoEl usuario que produjo la actividad, o null para usuarios del sistema o eliminados.
idIDIdentificador único del usuario.
firstNameStringEl nombre del usuario.
lastNameStringLos apellidos del usuario.
avatarUrlStringURL de la imagen de avatar del usuario.
isStaffBooleanSi el usuario es miembro del equipo de Nebux.
reactionsIssueActivityReactionConnectionReacciones (emoji) en la actividad. El nodo de cada edge es un IssueActivityReaction con:
bodyStringnulo permitidoEl emoji de la reacción.
userUserProfileEl usuario que reaccionó.
idIDIdentificador único del usuario.
firstNameStringEl nombre del usuario.
lastNameStringLos apellidos del usuario.
avatarUrlStringURL de la imagen de avatar del usuario.
isStaffBooleanSi el usuario es miembro del equipo 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"
}
}Listar actividades
Devuelve el historial de actividad de un ticket —comentarios, archivos subidos, cambios de estado y entradas de auditoría— en orden cronológico.
Parámetros
idIDobligatorioEl ID del ticket cuyas actividades quieres listar.
firstIntopcionalNúmero de actividades a devolver (por defecto 20, máximo 100).
afterCursoropcionalCursor para paginación hacia delante. Usa el endCursor de una respuesta anterior.
where.commentContainsFoldStringopcionalFiltra por actividades cuyo comentario contenga este texto (sin distinguir mayúsculas).
orderBy.fieldIssueActivityOrderFieldopcionalCampo por el que ordenar las actividades.
IssueActivityOrderFieldCREATED_ATCreadoorderBy.directionOrderDirectionopcionalDirección de ordenación.
OrderDirectionASCAscendenteDESCDescendenteDevuelve
Devuelve un objeto IssueActivityConnection con una lista de aristas IssueActivity, información de paginación y el recuento total.
Errores
NOT_FOUNDEl recurso no existe o tu organización no puede acceder a él.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
}
}
}
}Añadir un comentario
Publica un comentario en un ticket creando una actividad con la acción COMMENT. También puedes adjuntar un archivo usando la acción FILE con el campo file.
Parámetros
input.issueIdIDobligatorioEl ID del ticket en el que comentar.
input.actionIssueActivityActionobligatorioLa acción de la actividad: COMMENT para publicar un comentario, o FILE para adjuntar un archivo.
IssueActivityActionCOMMENTUn comentario publicado en el ticket.FILEUn archivo adjunto al ticket. Opcionalmente se puede incluir también un comentario.input.commentStringopcionalEl texto del comentario (obligatorio para la acción COMMENT).
input.fileUploadopcionalEl archivo a adjuntar (obligatorio para la acción FILE). Las subidas de archivos usan la especificación multipart de GraphQL (multipart/form-data), no el cuerpo JSON. Para más información, consulta esta especificación.
Devuelve
Devuelve un objeto IssueActivityCreatePayload que contiene la IssueActivity recién creada.
Errores
NOT_FOUNDEl recurso no existe o tu organización no puede acceder a él.VALIDATIONLa entrada no cumple las reglas requeridas (por ejemplo, un campo es demasiado largo o un valor no está permitido).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 comentario
Actualiza el texto de un comentario existente. Solo el autor puede editar sus propios comentarios; commentEditedAt se establece con la hora de la edición.
Parámetros
input.idIDobligatorioEl ID de la actividad (comentario) a editar.
input.commentStringobligatorioEl nuevo texto del comentario.
Devuelve
Devuelve un objeto IssueActivityUpdatePayload que contiene la IssueActivity actualizada.
Errores
NOT_FOUNDEl recurso no existe o tu organización no puede acceder a él.VALIDATIONLa entrada no cumple las reglas requeridas (por ejemplo, un campo es demasiado largo o un valor no está permitido).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"
}
}
}
}