Subir un artefacto de soporte
POST /v1/support-artifacts · permiso support-artifacts:write
Adjunta un archivo HAR o un registro a un ticket de soporte. Los artefactos solo se suben desde la página Soporte del panel; las claves de API y los clientes de máquina reciben 403 insufficient_permissions. El panel elimina los secretos en su navegador antes de la subida, y el servidor vuelve a analizar el artefacto: las cabeceras Cookie, Set-Cookie, Authorization y DPoP, los campos de token de OAuth, OIDC y SAML, las cookies __Host-, los JWT y los secretos con prefijo KeenAuth se reemplazan por [redacted]. Una clave de API de gestión (idp_sk_, idp_rk_) encontrada en el artefacto se revoca de inmediato; si la revocación falla, no se almacena nada y la subida devuelve 503. Solo se guarda el contenido limpio, cifrado con la clave de datos del entorno, y se elimina a los 30 días. La respuesta nunca contiene el contenido ni los valores eliminados.
Solicitud
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
ticket_ref |
query | sí | Referencia del ticket de soporte: 1-64 caracteres, letras, dígitos y _ . : -, que empiece por una letra o un dígito. |
kind |
query | sí | har (un documento JSON HAR 1.2) o log (texto plano). |
Content-Type |
header | sí | application/octet-stream. |
Content-Encoding |
header | no | gzip para enviar un artefacto comprimido. |
Idempotency-Key |
header | no | Opcional. 16-64 caracteres [A-Za-z0-9_-]; repetir la misma clave con el mismo cuerpo devuelve el mismo artefacto. |
El cuerpo es el propio artefacto: como máximo 50 MB sin comprimir. El cuerpo de la solicitud en la red está limitado a 11 MiB, así que comprima con gzip los artefactos más grandes. Un ticket contiene como máximo 10 artefactos.
Respuesta
201 Created con el artefacto almacenado. findings cuenta los valores eliminados por tipo; revocations_triggered es el número de credenciales revocadas porque aparecían en el artefacto.
{
"id": "sart_01j9xk3m7q8r2s4t6v8w0y2z4a",
"ticket_ref": "SUP-48213",
"kind": "har",
"size_bytes": 482113,
"sha256": "9f2b5c7d1e3a4f60718293a4b5c6d7e8f90123456789abcdef0123456789abcd",
"findings": {"authorization": 2, "cookie": 5, "host_cookie": 3, "oauth_param": 1},
"revocations_triggered": 0,
"created_at": "2026-11-10T09:30:00.123456Z",
"expires_at": "2026-12-10T09:30:00.123456Z"
}
Errores
| HTTP | código | Cuándo |
|---|---|---|
| 400 | malformed_request |
No se pudo leer el cuerpo, el flujo gzip no es válido o el Idempotency-Key tiene formato incorrecto. |
| 401 | unauthenticated |
La credencial falta, no es válida o fue revocada. |
| 403 | insufficient_permissions |
La solicitud no se hizo desde el panel, o el rol del panel no tiene support-artifacts:write. |
| 403 | quota_exceeded |
El ticket ya tiene 10 artefactos. |
| 413 | payload_too_large |
El artefacto supera 50 MB, o el cuerpo de la solicitud supera 11 MiB. |
| 415 | unsupported_media_type |
Content-Type no es application/octet-stream, o la codificación del contenido no es gzip. |
| 422 | validation_failed |
ticket_ref o kind falta o no es válido, el cuerpo está vacío, o un artefacto har no es un documento HAR (/body invalid_har). |
| 422 | idempotency_key_reuse |
El Idempotency-Key ya se usó con un cuerpo distinto. |
| 429 | rate_limited |
Se están procesando demasiadas subidas o se superó el límite de frecuencia; vuelva a intentarlo tras el tiempo indicado en Retry-After. |
| 503 | service_unavailable |
El artefacto no se almacenó (no se pudo revocar una credencial o el almacenamiento no está disponible); vuelva a intentarlo tras el tiempo indicado en Retry-After. |
Ejemplo
Las subidas son una acción del panel. La solicitud que envía el panel:
POST /v1/support-artifacts?ticket_ref=SUP-48213&kind=har
Content-Type: application/octet-stream
Content-Encoding: gzip
Idempotency-Key: 2f1c9a7e-5b3d-4e8f-9a6c-1d2e3f4a5b6c
<archivo HAR comprimido con gzip>