Incidentes
Catálogos, listado, alta, edición, estados, asignación, reapertura y conversación.
GET/catalogsPrioridades y estados con sus transiciones (con ETag)
- Permiso
- Sesión
Cabeceras de la petición
| Cabecera | Valor | Para qué |
|---|---|---|
Authorization | Bearer trazo_… | Token de sesión que entrega el ingreso |
Accept | application/json | La API siempre responde JSON (o un archivo, en la exportación) |
If-None-Match | ETag anterior | Si nada cambió, responde 304 sin cuerpo |
Respuesta 200
| Campo | Tipo |
|---|---|
data | objeto |
data.priorities | lista de objeto |
data.statuses | lista de objeto |
{
"data": {
"priorities": [
"high"
],
"statuses": [
"in_progress"
]
}
}| Cabecera de la respuesta | Para qué |
|---|---|
X-Request-Id | Identificador de la petición; es el trace_id de los errores |
ETag | Versión de los catálogos |
Errores posibles
- 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.
GET/incidents/assigneesPersonas a las que se puede asignar: cuentas activas con el permiso incidents.status.assigned, por su rol o concedido a la persona (permisos por persona)
- Permiso
incidents.assign
Cabeceras de la petición
| Cabecera | Valor | Para qué |
|---|---|---|
Authorization | Bearer trazo_… | Token de sesión que entrega el ingreso |
Accept | application/json | La API siempre responde JSON (o un archivo, en la exportación) |
Respuesta 200
| Campo | Tipo |
|---|---|
data | lista de objeto |
{
"data": [
"texto"
]
}| Cabecera de la respuesta | Para qué |
|---|---|
X-Request-Id | Identificador de la petición; es el trace_id de los errores |
Errores posibles
- 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.
GET/incidentsListado paginado, con orden, búsqueda y filtros (ver abajo)
- Permiso
- Sesión; cada persona ve lo suyo
Cabeceras de la petición
| Cabecera | Valor | Para qué |
|---|---|---|
Authorization | Bearer trazo_… | Token de sesión que entrega el ingreso |
Accept | application/json | La API siempre responde JSON (o un archivo, en la exportación) |
Parámetros
| Nombre | Dónde | Tipo | Obligatorio |
|---|---|---|---|
page | Consulta | entero · ≥ 1 | No |
per_page | Consulta | entero · ≥ 1 · ≤ 100 | No |
sort | Consulta | "created_at" | "due_date" | "updated_at" | "priority" | "status" | "code" | "-created_at" | "-due_date" | "-updated_at" | "-priority" | "-status" | "-code" | No |
search | Consulta | texto · máx. 100 | No |
group_by | Consulta | "due" | "status" | "priority" | "assignee" | No |
filter[status][] | Consulta | lista de texto | No |
filter[priority][] | Consulta | lista de texto | No |
filter[assignee][] | Consulta | lista de texto | No |
filter[creator] | Consulta | texto | No |
filter[created_from] | Consulta | texto · date-time | No |
filter[created_to] | Consulta | texto · date-time | No |
filter[due_from] | Consulta | texto · date-time | No |
filter[due_to] | Consulta | texto · date-time | No |
filter[overdue] | Consulta | sí/no | No |
filter[deleted] | Consulta | sí/no | No |
filter[reopen_requested] | Consulta | sí/no | No |
Respuesta 200
| Campo | Tipo |
|---|---|
data | lista de objeto |
meta | objeto |
meta.page | entero |
meta.per_page | entero |
meta.total | entero |
meta.last_page | entero |
meta.groups | lista de objeto |
{
"data": [
"texto"
],
"meta": {
"page": 1,
"per_page": 1,
"total": 12,
"last_page": 1,
"groups": [
"texto"
]
}
}| Cabecera de la respuesta | Para qué |
|---|---|
X-Request-Id | Identificador de la petición; es el trace_id de los errores |
Errores posibles
- 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
- 422Algún dato no es válido (VALIDATION_FAILED, con el detalle por campo)
Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.
GET/incidents/mine"Mis incidentes": todos los asignados a quien pregunta, en curso o terminados hace 7 días o menos, por vencimiento, con actions y next_statuses y hasta 500 (meta.truncated, limit, finished_days) (Mis incidentes)
- Permiso
incidents.view.assigned
Cabeceras de la petición
| Cabecera | Valor | Para qué |
|---|---|---|
Authorization | Bearer trazo_… | Token de sesión que entrega el ingreso |
Accept | application/json | La API siempre responde JSON (o un archivo, en la exportación) |
Respuesta 200
| Campo | Tipo |
|---|---|
data | lista de objeto |
meta | objeto |
meta.truncated | sí/no |
meta.limit | entero |
meta.finished_days | entero |
{
"data": [
"texto"
],
"meta": {
"truncated": false,
"limit": 20,
"finished_days": 1
}
}| Cabecera de la respuesta | Para qué |
|---|---|
X-Request-Id | Identificador de la petición; es el trace_id de los errores |
Errores posibles
- 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.
GET/incidents/exportLo mismo del listado, sin página, en un archivo CSV (Exportación)
- Permiso
incidents.export; 5 por minuto
Cabeceras de la petición
| Cabecera | Valor | Para qué |
|---|---|---|
Authorization | Bearer trazo_… | Token de sesión que entrega el ingreso |
Accept | application/json | La API siempre responde JSON (o un archivo, en la exportación) |
Parámetros
| Nombre | Dónde | Tipo | Obligatorio |
|---|---|---|---|
page | Consulta | entero · ≥ 1 | No |
per_page | Consulta | entero · ≥ 1 · ≤ 100 | No |
sort | Consulta | "created_at" | "due_date" | "updated_at" | "priority" | "status" | "code" | "-created_at" | "-due_date" | "-updated_at" | "-priority" | "-status" | "-code" | No |
search | Consulta | texto · máx. 100 | No |
group_by | Consulta | "due" | "status" | "priority" | "assignee" | No |
filter[status][] | Consulta | lista de texto | No |
filter[priority][] | Consulta | lista de texto | No |
filter[assignee][] | Consulta | lista de texto | No |
filter[creator] | Consulta | texto | No |
filter[created_from] | Consulta | texto · date-time | No |
filter[created_to] | Consulta | texto · date-time | No |
filter[due_from] | Consulta | texto · date-time | No |
filter[due_to] | Consulta | texto · date-time | No |
filter[overdue] | Consulta | sí/no | No |
filter[deleted] | Consulta | sí/no | No |
filter[reopen_requested] | Consulta | sí/no | No |
Respuesta 200
Devuelve un archivo para descargar (CSV), no JSON.
| Cabecera de la respuesta | Para qué |
|---|---|
X-Request-Id | Identificador de la petición; es el trace_id de los errores |
Content-Disposition | Nombre del archivo que se descarga |
Retry-After | En un 429: segundos para volver a intentar |
Errores posibles
- 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
- 422Algún dato no es válido (VALIDATION_FAILED, con el detalle por campo)
- 429Demasiadas peticiones (TOO_MANY_REQUESTS, con Retry-After)
Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.
POST/incidentsCrear (acepta Idempotency-Key)
- Permiso
incidents.create
Cabeceras de la petición
| Cabecera | Valor | Para qué |
|---|---|---|
Authorization | Bearer trazo_… | Token de sesión que entrega el ingreso |
Accept | application/json | La API siempre responde JSON (o un archivo, en la exportación) |
Content-Type | application/json | Cuerpo en JSON |
Idempotency-Key | UUID | Evita crear dos veces el mismo incidente si la petición se repite |
X-Socket-ID | opcional | Para no recibir en tiempo real el aviso de tu propio cambio |
Cuerpo
| Campo | Tipo | Obligatorio |
|---|---|---|
title | texto · mín. 5 · máx. 80 | Sí |
description | texto · máx. 5000 | Sí |
priority | texto | Sí |
due_date | texto | null · date-time | No |
assignee | texto | null | No |
versionNo se envía: un incidente nuevo no tiene versión anterior | — | No se acepta |
{
"title": "No llega el correo de recuperación",
"description": "El correo no llega desde esta mañana.",
"priority": "high",
"due_date": "2026-11-01T14:30:00Z",
"assignee": "01jbzk8m3q9w2e5r7t1y4u6i0p"
}Respuesta 201
| Campo | Tipo |
|---|---|
data | objeto |
data.description | texto |
data.next_statuses | lista de objeto |
data.reopen_request | objeto | null |
data.reopen_request.requested_by | objeto |
data.reopen_request.reason | texto |
data.reopen_request.created_at | texto | null |
{
"data": {
"description": "El correo no llega desde esta mañana.",
"next_statuses": [
"in_progress"
],
"reopen_request": {
"requested_by": {
"id": "01jbzk8m3q9w2e5r7t1y4u6i0p",
"name": "Andrés Castro"
},
"reason": "El correo no llega desde esta mañana.",
"created_at": "2026-11-01T14:30:00Z"
}
}
}| Cabecera de la respuesta | Para qué |
|---|---|
X-Request-Id | Identificador de la petición; es el trace_id de los errores |
Errores posibles
- 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
- 422Algún dato no es válido (VALIDATION_FAILED, con el detalle por campo)
Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.
GET/incidents/{incident}Detalle con actions, next_statuses y comments_count
- Permiso
- Verlo
Cabeceras de la petición
| Cabecera | Valor | Para qué |
|---|---|---|
Authorization | Bearer trazo_… | Token de sesión que entrega el ingreso |
Accept | application/json | La API siempre responde JSON (o un archivo, en la exportación) |
Parámetros
| Nombre | Dónde | Tipo | Obligatorio |
|---|---|---|---|
incident | Ruta | texto | Sí |
Respuesta 200
| Campo | Tipo |
|---|---|
data | objeto |
data.description | texto |
data.next_statuses | lista de objeto |
data.reopen_request | objeto | null |
data.reopen_request.requested_by | objeto |
data.reopen_request.reason | texto |
data.reopen_request.created_at | texto | null |
data.comments_count | entero |
{
"data": {
"description": "El correo no llega desde esta mañana.",
"next_statuses": [
"in_progress"
],
"reopen_request": {
"requested_by": {
"id": "01jbzk8m3q9w2e5r7t1y4u6i0p",
"name": "Andrés Castro"
},
"reason": "El correo no llega desde esta mañana.",
"created_at": "2026-11-01T14:30:00Z"
},
"comments_count": 12
}
}| Cabecera de la respuesta | Para qué |
|---|---|
X-Request-Id | Identificador de la petición; es el trace_id de los errores |
Errores posibles
- 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
- 404No existe o quien pregunta no puede verlo
Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.
PUT/incidents/{incident}Editar título, descripción, prioridad y vencimiento
- Permiso
- Ver la tabla de reglas
Cabeceras de la petición
| Cabecera | Valor | Para qué |
|---|---|---|
Authorization | Bearer trazo_… | Token de sesión que entrega el ingreso |
Accept | application/json | La API siempre responde JSON (o un archivo, en la exportación) |
Content-Type | application/json | Cuerpo en JSON |
X-Socket-ID | opcional | Para no recibir en tiempo real el aviso de tu propio cambio |
Parámetros
| Nombre | Dónde | Tipo | Obligatorio |
|---|---|---|---|
incident | Ruta | texto | Sí |
Cuerpo
| Campo | Tipo | Obligatorio |
|---|---|---|
title | texto · mín. 5 · máx. 80 | Sí |
description | texto · máx. 5000 | Sí |
priority | texto | Sí |
due_date | texto · date-time | No |
assigneeNo se envía: la asignación tiene su propio endpoint | — | No se acepta |
version | entero · ≥ 1 | Sí |
{
"title": "No llega el correo de recuperación",
"description": "El correo no llega desde esta mañana.",
"priority": "high",
"due_date": "2026-11-01T14:30:00Z",
"version": 3
}Respuesta 200
| Campo | Tipo |
|---|---|
data | objeto |
data.description | texto |
data.next_statuses | lista de objeto |
data.reopen_request | objeto | null |
data.reopen_request.requested_by | objeto |
data.reopen_request.reason | texto |
data.reopen_request.created_at | texto | null |
{
"data": {
"description": "El correo no llega desde esta mañana.",
"next_statuses": [
"in_progress"
],
"reopen_request": {
"requested_by": {
"id": "01jbzk8m3q9w2e5r7t1y4u6i0p",
"name": "Andrés Castro"
},
"reason": "El correo no llega desde esta mañana.",
"created_at": "2026-11-01T14:30:00Z"
}
}
}| Cabecera de la respuesta | Para qué |
|---|---|
X-Request-Id | Identificador de la petición; es el trace_id de los errores |
Errores posibles
- 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
- 404No existe o quien pregunta no puede verlo
- 422Algún dato no es válido (VALIDATION_FAILED, con el detalle por campo)
Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.
PUT/incidents/{incident}/statusCambiar el estado, con note (obligatoria donde el catálogo lo pide)
- Permiso
- Ver la tabla de reglas
Cabeceras de la petición
| Cabecera | Valor | Para qué |
|---|---|---|
Authorization | Bearer trazo_… | Token de sesión que entrega el ingreso |
Accept | application/json | La API siempre responde JSON (o un archivo, en la exportación) |
Content-Type | application/json | Cuerpo en JSON |
X-Socket-ID | opcional | Para no recibir en tiempo real el aviso de tu propio cambio |
Parámetros
| Nombre | Dónde | Tipo | Obligatorio |
|---|---|---|---|
incident | Ruta | texto | Sí |
Cuerpo
| Campo | Tipo | Obligatorio |
|---|---|---|
version | entero · ≥ 1 | Sí |
status | texto · máx. 30 | Sí |
note | texto | null · máx. 1000 | No |
{
"version": 3,
"status": "in_progress",
"note": "El correo no llega desde esta mañana."
}Respuesta 200
| Campo | Tipo |
|---|---|
data | objeto |
data.description | texto |
data.next_statuses | lista de objeto |
data.reopen_request | objeto | null |
data.reopen_request.requested_by | objeto |
data.reopen_request.reason | texto |
data.reopen_request.created_at | texto | null |
{
"data": {
"description": "El correo no llega desde esta mañana.",
"next_statuses": [
"in_progress"
],
"reopen_request": {
"requested_by": {
"id": "01jbzk8m3q9w2e5r7t1y4u6i0p",
"name": "Andrés Castro"
},
"reason": "El correo no llega desde esta mañana.",
"created_at": "2026-11-01T14:30:00Z"
}
}
}| Cabecera de la respuesta | Para qué |
|---|---|
X-Request-Id | Identificador de la petición; es el trace_id de los errores |
Errores posibles
- 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
- 404No existe o quien pregunta no puede verlo
- 422Algún dato no es válido (VALIDATION_FAILED, con el detalle por campo)
Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.
PUT/incidents/{incident}/assigneeTomar, asignar o quitar la asignación (null)
- Permiso
- Ver la tabla de reglas
Cabeceras de la petición
| Cabecera | Valor | Para qué |
|---|---|---|
Authorization | Bearer trazo_… | Token de sesión que entrega el ingreso |
Accept | application/json | La API siempre responde JSON (o un archivo, en la exportación) |
Content-Type | application/json | Cuerpo en JSON |
X-Socket-ID | opcional | Para no recibir en tiempo real el aviso de tu propio cambio |
Parámetros
| Nombre | Dónde | Tipo | Obligatorio |
|---|---|---|---|
incident | Ruta | texto | Sí |
Cuerpo
| Campo | Tipo | Obligatorio |
|---|---|---|
version | entero · ≥ 1 | Sí |
assigneenull deja el incidente sin asignar | texto | null | Sí |
{
"version": 3,
"assignee": "01jbzk8m3q9w2e5r7t1y4u6i0p"
}Respuesta 200
| Campo | Tipo |
|---|---|
data | objeto |
data.description | texto |
data.next_statuses | lista de objeto |
data.reopen_request | objeto | null |
data.reopen_request.requested_by | objeto |
data.reopen_request.reason | texto |
data.reopen_request.created_at | texto | null |
{
"data": {
"description": "El correo no llega desde esta mañana.",
"next_statuses": [
"in_progress"
],
"reopen_request": {
"requested_by": {
"id": "01jbzk8m3q9w2e5r7t1y4u6i0p",
"name": "Andrés Castro"
},
"reason": "El correo no llega desde esta mañana.",
"created_at": "2026-11-01T14:30:00Z"
}
}
}| Cabecera de la respuesta | Para qué |
|---|---|
X-Request-Id | Identificador de la petición; es el trace_id de los errores |
Errores posibles
- 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
- 404No existe o quien pregunta no puede verlo
- 422Algún dato no es válido (VALIDATION_FAILED, con el detalle por campo)
Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.
DELETE/incidents/{incident}Borrado lógico
- Permiso
incidents.delete
Cabeceras de la petición
| Cabecera | Valor | Para qué |
|---|---|---|
Authorization | Bearer trazo_… | Token de sesión que entrega el ingreso |
Accept | application/json | La API siempre responde JSON (o un archivo, en la exportación) |
X-Socket-ID | opcional | Para no recibir en tiempo real el aviso de tu propio cambio |
Parámetros
| Nombre | Dónde | Tipo | Obligatorio |
|---|---|---|---|
incident | Ruta | texto | Sí |
Respuesta 204
Sin cuerpo: la operación salió bien.
| Cabecera de la respuesta | Para qué |
|---|---|
X-Request-Id | Identificador de la petición; es el trace_id de los errores |
Errores posibles
- 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
- 404No existe o quien pregunta no puede verlo
Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.
POST/incidents/{incident}/restoreRestaurar
- Permiso
incidents.restore
Cabeceras de la petición
| Cabecera | Valor | Para qué |
|---|---|---|
Authorization | Bearer trazo_… | Token de sesión que entrega el ingreso |
Accept | application/json | La API siempre responde JSON (o un archivo, en la exportación) |
X-Socket-ID | opcional | Para no recibir en tiempo real el aviso de tu propio cambio |
Parámetros
| Nombre | Dónde | Tipo | Obligatorio |
|---|---|---|---|
incident | Ruta | texto | Sí |
Respuesta 200
| Campo | Tipo |
|---|---|
data | objeto |
data.description | texto |
data.next_statuses | lista de objeto |
data.reopen_request | objeto | null |
data.reopen_request.requested_by | objeto |
data.reopen_request.reason | texto |
data.reopen_request.created_at | texto | null |
{
"data": {
"description": "El correo no llega desde esta mañana.",
"next_statuses": [
"in_progress"
],
"reopen_request": {
"requested_by": {
"id": "01jbzk8m3q9w2e5r7t1y4u6i0p",
"name": "Andrés Castro"
},
"reason": "El correo no llega desde esta mañana.",
"created_at": "2026-11-01T14:30:00Z"
}
}
}| Cabecera de la respuesta | Para qué |
|---|---|
X-Request-Id | Identificador de la petición; es el trace_id de los errores |
Errores posibles
- 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
- 404No existe o quien pregunta no puede verlo
Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.
GET/incidents/{incident}/activitiesHistorial, de lo más reciente a lo más antiguo, 50 por página
- Permiso
- Verlo
Cabeceras de la petición
| Cabecera | Valor | Para qué |
|---|---|---|
Authorization | Bearer trazo_… | Token de sesión que entrega el ingreso |
Accept | application/json | La API siempre responde JSON (o un archivo, en la exportación) |
Parámetros
| Nombre | Dónde | Tipo | Obligatorio |
|---|---|---|---|
incident | Ruta | texto | Sí |
page | Consulta | entero | No |
Respuesta 200
| Campo | Tipo |
|---|---|
data | lista de objeto |
data[].type | objeto |
data[].type.code | texto |
data[].type.name | texto |
data[].user | objeto |
data[].user.id | texto |
data[].user.name | texto |
data[].changes | objeto | null |
data[].note | texto | null |
data[].created_at | texto |
meta | objeto |
meta.page | entero |
meta.per_page | entero |
meta.total | entero |
{
"data": [
{
"type": {
"code": "in_progress",
"name": "Andrés Castro"
},
"user": {
"id": "01jbzk8m3q9w2e5r7t1y4u6i0p",
"name": "Andrés Castro"
},
"changes": {},
"note": "El correo no llega desde esta mañana.",
"created_at": "2026-11-01T14:30:00Z"
}
],
"meta": {
"page": 1,
"per_page": 1,
"total": 12
}
}| Cabecera de la respuesta | Para qué |
|---|---|
X-Request-Id | Identificador de la petición; es el trace_id de los errores |
Errores posibles
- 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
- 404No existe o quien pregunta no puede verlo
- 422Algún dato no es válido (VALIDATION_FAILED, con el detalle por campo)
Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.
POST/incidents/{incident}/reopen-requestPedir que se reabra, con reason (Reapertura)
- Permiso
incidents.reopen.request
Cabeceras de la petición
| Cabecera | Valor | Para qué |
|---|---|---|
Authorization | Bearer trazo_… | Token de sesión que entrega el ingreso |
Accept | application/json | La API siempre responde JSON (o un archivo, en la exportación) |
Content-Type | application/json | Cuerpo en JSON |
X-Socket-ID | opcional | Para no recibir en tiempo real el aviso de tu propio cambio |
Parámetros
| Nombre | Dónde | Tipo | Obligatorio |
|---|---|---|---|
incident | Ruta | texto | Sí |
Cuerpo
| Campo | Tipo | Obligatorio |
|---|---|---|
reason | texto · máx. 1000 | Sí |
{
"reason": "El correo no llega desde esta mañana."
}Respuesta 201
| Campo | Tipo |
|---|---|
data | objeto |
data.description | texto |
data.next_statuses | lista de objeto |
data.reopen_request | objeto | null |
data.reopen_request.requested_by | objeto |
data.reopen_request.reason | texto |
data.reopen_request.created_at | texto | null |
{
"data": {
"description": "El correo no llega desde esta mañana.",
"next_statuses": [
"in_progress"
],
"reopen_request": {
"requested_by": {
"id": "01jbzk8m3q9w2e5r7t1y4u6i0p",
"name": "Andrés Castro"
},
"reason": "El correo no llega desde esta mañana.",
"created_at": "2026-11-01T14:30:00Z"
}
}
}| Cabecera de la respuesta | Para qué |
|---|---|
X-Request-Id | Identificador de la petición; es el trace_id de los errores |
Errores posibles
- 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
- 404No existe o quien pregunta no puede verlo
- 422Algún dato no es válido (VALIDATION_FAILED, con el detalle por campo)
Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.
POST/incidents/{incident}/reopen-request/approveAprobar la solicitud pendiente (con version)
- Permiso
incidents.reopen.approve
Cabeceras de la petición
| Cabecera | Valor | Para qué |
|---|---|---|
Authorization | Bearer trazo_… | Token de sesión que entrega el ingreso |
Accept | application/json | La API siempre responde JSON (o un archivo, en la exportación) |
Content-Type | application/json | Cuerpo en JSON |
X-Socket-ID | opcional | Para no recibir en tiempo real el aviso de tu propio cambio |
Parámetros
| Nombre | Dónde | Tipo | Obligatorio |
|---|---|---|---|
incident | Ruta | texto | Sí |
Cuerpo
| Campo | Tipo | Obligatorio |
|---|---|---|
version | entero · ≥ 1 | Sí |
{
"version": 3
}Respuesta 200
| Campo | Tipo |
|---|---|
data | objeto |
data.description | texto |
data.next_statuses | lista de objeto |
data.reopen_request | objeto | null |
data.reopen_request.requested_by | objeto |
data.reopen_request.reason | texto |
data.reopen_request.created_at | texto | null |
{
"data": {
"description": "El correo no llega desde esta mañana.",
"next_statuses": [
"in_progress"
],
"reopen_request": {
"requested_by": {
"id": "01jbzk8m3q9w2e5r7t1y4u6i0p",
"name": "Andrés Castro"
},
"reason": "El correo no llega desde esta mañana.",
"created_at": "2026-11-01T14:30:00Z"
}
}
}| Cabecera de la respuesta | Para qué |
|---|---|
X-Request-Id | Identificador de la petición; es el trace_id de los errores |
Errores posibles
- 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
- 404No existe o quien pregunta no puede verlo
- 422Algún dato no es válido (VALIDATION_FAILED, con el detalle por campo)
Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.
POST/incidents/{incident}/reopen-request/rejectRechazarla, con reason
- Permiso
incidents.reopen.approve
Cabeceras de la petición
| Cabecera | Valor | Para qué |
|---|---|---|
Authorization | Bearer trazo_… | Token de sesión que entrega el ingreso |
Accept | application/json | La API siempre responde JSON (o un archivo, en la exportación) |
Content-Type | application/json | Cuerpo en JSON |
X-Socket-ID | opcional | Para no recibir en tiempo real el aviso de tu propio cambio |
Parámetros
| Nombre | Dónde | Tipo | Obligatorio |
|---|---|---|---|
incident | Ruta | texto | Sí |
Cuerpo
| Campo | Tipo | Obligatorio |
|---|---|---|
reason | texto · máx. 1000 | Sí |
{
"reason": "El correo no llega desde esta mañana."
}Respuesta 200
| Campo | Tipo |
|---|---|
data | objeto |
data.description | texto |
data.next_statuses | lista de objeto |
data.reopen_request | objeto | null |
data.reopen_request.requested_by | objeto |
data.reopen_request.reason | texto |
data.reopen_request.created_at | texto | null |
{
"data": {
"description": "El correo no llega desde esta mañana.",
"next_statuses": [
"in_progress"
],
"reopen_request": {
"requested_by": {
"id": "01jbzk8m3q9w2e5r7t1y4u6i0p",
"name": "Andrés Castro"
},
"reason": "El correo no llega desde esta mañana.",
"created_at": "2026-11-01T14:30:00Z"
}
}
}| Cabecera de la respuesta | Para qué |
|---|---|
X-Request-Id | Identificador de la petición; es el trace_id de los errores |
Errores posibles
- 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
- 404No existe o quien pregunta no puede verlo
- 422Algún dato no es válido (VALIDATION_FAILED, con el detalle por campo)
Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.
POST/incidents/{incident}/reopenReabrir directamente, con reason y version
- Permiso
incidents.reopen.approve
Cabeceras de la petición
| Cabecera | Valor | Para qué |
|---|---|---|
Authorization | Bearer trazo_… | Token de sesión que entrega el ingreso |
Accept | application/json | La API siempre responde JSON (o un archivo, en la exportación) |
Content-Type | application/json | Cuerpo en JSON |
X-Socket-ID | opcional | Para no recibir en tiempo real el aviso de tu propio cambio |
Parámetros
| Nombre | Dónde | Tipo | Obligatorio |
|---|---|---|---|
incident | Ruta | texto | Sí |
Cuerpo
| Campo | Tipo | Obligatorio |
|---|---|---|
version | entero · ≥ 1 | Sí |
reason | texto · máx. 1000 | Sí |
{
"version": 3,
"reason": "El correo no llega desde esta mañana."
}Respuesta 200
| Campo | Tipo |
|---|---|
data | objeto |
data.description | texto |
data.next_statuses | lista de objeto |
data.reopen_request | objeto | null |
data.reopen_request.requested_by | objeto |
data.reopen_request.reason | texto |
data.reopen_request.created_at | texto | null |
{
"data": {
"description": "El correo no llega desde esta mañana.",
"next_statuses": [
"in_progress"
],
"reopen_request": {
"requested_by": {
"id": "01jbzk8m3q9w2e5r7t1y4u6i0p",
"name": "Andrés Castro"
},
"reason": "El correo no llega desde esta mañana.",
"created_at": "2026-11-01T14:30:00Z"
}
}
}| Cabecera de la respuesta | Para qué |
|---|---|
X-Request-Id | Identificador de la petición; es el trace_id de los errores |
Errores posibles
- 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
- 404No existe o quien pregunta no puede verlo
- 422Algún dato no es válido (VALIDATION_FAILED, con el detalle por campo)
Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.
GET/incidents/{incident}/commentsConversación, del mensaje más nuevo al más viejo, 50 por página (before para los anteriores) (Conversación)
- Permiso
- Verlo
Cabeceras de la petición
| Cabecera | Valor | Para qué |
|---|---|---|
Authorization | Bearer trazo_… | Token de sesión que entrega el ingreso |
Accept | application/json | La API siempre responde JSON (o un archivo, en la exportación) |
Parámetros
| Nombre | Dónde | Tipo | Obligatorio |
|---|---|---|---|
incident | Ruta | texto | Sí |
before | Consulta | texto | No |
Respuesta 200
| Campo | Tipo |
|---|---|
data | lista de objeto |
meta | objeto |
meta.total | entero |
meta.before | texto | null |
{
"data": [
"texto"
],
"meta": {
"total": 12,
"before": "texto"
}
}| Cabecera de la respuesta | Para qué |
|---|---|
X-Request-Id | Identificador de la petición; es el trace_id de los errores |
Errores posibles
- 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
- 404No existe o quien pregunta no puede verlo
- 422Algún dato no es válido (VALIDATION_FAILED, con el detalle por campo)
Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.
POST/incidents/{incident}/commentsEscribir un mensaje (body, hasta 2.000 caracteres)
- Permiso
incidents.comment; 20 por minuto
Cabeceras de la petición
| Cabecera | Valor | Para qué |
|---|---|---|
Authorization | Bearer trazo_… | Token de sesión que entrega el ingreso |
Accept | application/json | La API siempre responde JSON (o un archivo, en la exportación) |
Content-Type | application/json | Cuerpo en JSON |
X-Socket-ID | opcional | Para no recibir en tiempo real el aviso de tu propio cambio |
Parámetros
| Nombre | Dónde | Tipo | Obligatorio |
|---|---|---|---|
incident | Ruta | texto | Sí |
Cuerpo
| Campo | Tipo | Obligatorio |
|---|---|---|
body | texto · máx. 2000 | Sí |
{
"body": "El correo no llega desde esta mañana."
}Respuesta 201
| Campo | Tipo |
|---|---|
data | objeto |
data.id | texto |
data.author | objeto |
data.author.id | texto |
data.author.name | texto |
data.body | texto | null |
data.mine | sí/no |
data.created_at | texto |
data.deleted_at | texto | null |
data.actions | objeto |
data.actions.delete | sí/no |
{
"data": {
"id": "01jbzk8m3q9w2e5r7t1y4u6i0p",
"author": {
"id": "01jbzk8m3q9w2e5r7t1y4u6i0p",
"name": "Andrés Castro"
},
"body": "El correo no llega desde esta mañana.",
"mine": true,
"created_at": "2026-11-01T14:30:00Z",
"deleted_at": "2026-11-01T14:30:00Z",
"actions": {
"delete": true
}
}
}| Cabecera de la respuesta | Para qué |
|---|---|
X-Request-Id | Identificador de la petición; es el trace_id de los errores |
Retry-After | En un 429: segundos para volver a intentar |
Errores posibles
- 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
- 404No existe o quien pregunta no puede verlo
- 422Algún dato no es válido (VALIDATION_FAILED, con el detalle por campo)
- 429Demasiadas peticiones (TOO_MANY_REQUESTS, con Retry-After)
Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.
DELETE/incidents/{incident}/comments/{comment}Borrar un mensaje propio, durante 5 minutos
- Permiso
- Quien lo escribió
Cabeceras de la petición
| Cabecera | Valor | Para qué |
|---|---|---|
Authorization | Bearer trazo_… | Token de sesión que entrega el ingreso |
Accept | application/json | La API siempre responde JSON (o un archivo, en la exportación) |
X-Socket-ID | opcional | Para no recibir en tiempo real el aviso de tu propio cambio |
Parámetros
| Nombre | Dónde | Tipo | Obligatorio |
|---|---|---|---|
incident | Ruta | texto | Sí |
comment | Ruta | texto | Sí |
Respuesta 200
| Campo | Tipo |
|---|---|
data | objeto |
data.id | texto |
data.author | objeto |
data.author.id | texto |
data.author.name | texto |
data.body | texto | null |
data.mine | sí/no |
data.created_at | texto |
data.deleted_at | texto | null |
data.actions | objeto |
data.actions.delete | sí/no |
{
"data": {
"id": "01jbzk8m3q9w2e5r7t1y4u6i0p",
"author": {
"id": "01jbzk8m3q9w2e5r7t1y4u6i0p",
"name": "Andrés Castro"
},
"body": "El correo no llega desde esta mañana.",
"mine": true,
"created_at": "2026-11-01T14:30:00Z",
"deleted_at": "2026-11-01T14:30:00Z",
"actions": {
"delete": true
}
}
}| Cabecera de la respuesta | Para qué |
|---|---|
X-Request-Id | Identificador de la petición; es el trace_id de los errores |
Errores posibles
- 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
- 404No existe o quien pregunta no puede verlo
Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.