> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wirespeed.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Generic Detection

> Envíe detecciones desde cualquier sistema a Wirespeed mediante un webhook

La integración Generic Detection convierte cualquier sistema que pueda enviar un POST HTTPS — un SIEM, una herramienta interna, un script u otro producto de seguridad — en una fuente de detecciones para Wirespeed. Usted envía una detección por solicitud en el formato JSON documentado, y Wirespeed la clasifica como una detección de cualquier otra integración: los activos se extraen, la detección se categoriza con la categoría que usted suministra y aparece en **Detections** y en el SIEM.

Use esta integración cuando su sistema ya produce detecciones finalizadas. Si en su lugar quiere que Wirespeed encuentre detecciones en datos de registro sin procesar, use [Generic JSON](https://docs.wirespeed.co/es/integrations/generic-json.md) o una integración dedicada para su producto.

## Configuración en Wirespeed

1. Inicie sesión en Wirespeed y navegue a Integraciones > [**Añadir integración**](https://app.wirespeed.co/settings/integrations?tab=browse) > **Generic Detection**
2. Ingrese un **Nombre de la fuente** para identificar este sistema emisor (por ejemplo, `Internal SIEM`)
3. Opcionalmente active **Autenticación** (consulte [Autenticación](#authentication))
4. Haga clic en **Integrar**
5. Seleccione **Detalles del webhook**
6. Copie la **URL del webhook** y, si activó la autenticación, el **Secreto del webhook**

La URL del webhook tiene la forma:

```text theme={null}
https://<API_HOST>/integration/webhook/generic-detection/receive-detection?teamId=<TEAM_ID>&integrationId=<INTEGRATION_ID>
```

Cree una integración Generic Detection por sistema emisor. Cada integración tiene su propia URL, su propio secreto opcional y su propio Nombre de la fuente, de modo que las entregas se mantienen atribuibles y el secreto de un sistema puede rotarse sin afectar a otro.

## Autenticación

La autenticación es opcional y está desactivada de forma predeterminada. Cuando **Autenticación** está activado, cada solicitud debe incluir el secreto de webhook de la integración en el encabezado `X-Webhook-Key`:

```text theme={null}
X-Webhook-Key: <WEBHOOK_SECRET>
```

Las solicitudes con una clave ausente o incorrecta se rechazan con un `401` y el rechazo se escribe en el registro de la integración (como máximo una vez cada cinco minutos, para que un emisor mal configurado no pueda inundar el registro). El secreto nunca se acepta en la URL ni en el cuerpo de la solicitud.

### Rotar el secreto

1. Abra los **Detalles del webhook** de la integración
2. Haga clic en **Rotar secreto**
3. Actualice el emisor con el nuevo secreto

El secreto anterior deja de funcionar en cuanto se completa la rotación. No hay período de gracia, así que actualice el emisor cuanto antes; las entregas enviadas mientras tanto con el secreto anterior se rechazan con un `401` y no se ponen en cola.

## Enviar una detección

Envíe una detección por solicitud `POST` con un cuerpo JSON:

```bash theme={null}
curl -X POST '<WEBHOOK_URL>' \
  -H 'Content-Type: application/json' \
  -H 'X-Webhook-Key: <WEBHOOK_SECRET>' \
  -d '{
    "id": "alert-9042",
    "source": "internal-siem",
    "title": "Impossible travel sign-in",
    "description": "User signed in from two countries within one hour without a VPN session.",
    "severity": "high",
    "category": "IDENTITY__LOGIN",
    "occurredAt": "2026-11-13T15:00:00Z",
    "assets": {
      "users": [{ "email": "jane.doe@example.com", "username": "jane.doe" }]
    }
  }'
```

Omita el encabezado `X-Webhook-Key` si no activó la autenticación. Una respuesta `200` significa que la detección fue aceptada y puesta en cola; no espera a que termine la clasificación.

## Referencia de la carga útil

Los campos desconocidos se rechazan, incluso dentro de `assets`, de modo que un error tipográfico hace fallar la solicitud en lugar de descartarse silenciosamente.

| Campo | Requerido | Descripción |
| - | - | - |
| `id` | No | ID único y estable de su sistema (máx. 256 caracteres). Los reintentos que reutilizan el mismo `id` se deduplican, así que envíe siempre uno si su sistema lo tiene. |
| `source` | No | Nombre del sistema emisor (máx. 128 caracteres). Se almacena en la fila del SIEM; úselo para filtrar una fuente cuando una integración agrupa varios emisores. |
| `title` | Sí | Resumen corto de la detección (máx. 512 caracteres). |
| `description` | Sí | Qué ocurrió y por qué importa (máx. 10.000 caracteres). Esto es lo que leen los analistas durante la clasificación. |
| `severity` | Sí | Una de `informational`, `low`, `medium`, `high`, `critical`. |
| `category` | Sí | Una de las [categorías](#categories) siguientes, en el formato estándar de Wirespeed con guiones bajos dobles. |
| `occurredAt` | Sí | Hora ISO 8601 de la actividad detectada, por ejemplo `2026-11-13T15:00:00Z`. |
| `firstSeenAt` | No | Hora ISO 8601 de la primera observación de la actividad. No debe ser posterior a `lastSeenAt`. |
| `lastSeenAt` | No | Hora ISO 8601 de la última observación de la actividad. No debe ser anterior a `occurredAt` ni a `firstSeenAt`. |
| `referenceUrl` | No | Enlace `http` o `https` de vuelta a la detección en su sistema. |
| `blocked` | No | Establezca `true` cuando su sistema bloqueó la actividad. |
| `mitigated` | No | Establezca `true` cuando su sistema ya mitigó o resolvió la actividad. |
| `assets` | Sí | Al menos uno de `users`, `endpoints`, `files` o `ips`. Cada uno es un arreglo; cada activo del arreglo necesita al menos un campo de identificación (consulte a continuación). |

### Activos

Los activos indican a Wirespeed qué usuarios, endpoints, archivos o direcciones IP conciernen a la detección, para que pueda correlacionarla con su inventario. Los usuarios, endpoints y archivos también se pueden contener si es necesario; las direcciones IP solo se usan para la correlación. Envíe tantos como la detección involucre — hasta 50 de cada tipo en una solicitud. Envíe solo los campos que conoce: cada activo de usuario, endpoint o archivo necesita al menos uno de sus campos, y cada activo IP necesita `address`.

| Activo | Campos |
| - | - |
| `assets.users[]` | `id` (su ID único de usuario), `email`, `username` |
| `assets.endpoints[]` | `id` (su ID único de endpoint), `hostname` |
| `assets.files[]` | `name`, `path`, `sha256` (64 caracteres hexadecimales), `sha1` (40 caracteres hexadecimales) |
| `assets.ips[]` | `address` (obligatorio): una dirección IPv4 o IPv6, por ejemplo `203.0.113.7` o `2001:db8::1` |

Los hashes no distinguen mayúsculas y se almacenan en minúsculas. Un hash con la longitud incorrecta o caracteres no hexadecimales hace fallar la solicitud.

Envíe cada dirección IP sola. Un puerto (`203.0.113.7:443`), un rango CIDR (`10.0.0.0/8`) o un nombre de host hace fallar la solicitud; envíe los nombres de host como endpoints. Las direcciones IPv6 se almacenan en minúsculas.

### Categorías

Elija la categoría que mejor describa la detección. La lista es deliberadamente corta; para una detección sospechosa, envíe la categoría más cercana. Use `OTHER__INFORMATIONAL_EVENT` solo para actividad que no requiere respuesta, porque Wirespeed cierra automáticamente esas detecciones como benignas.

Los valores de categoría usan el formato estándar de categorías de Wirespeed: segmentos en mayúsculas unidos por **guiones bajos dobles**. Por ejemplo, `IDENTITY__LOGIN` tiene dos guiones bajos entre `IDENTITY` y `LOGIN` — `IDENTITY_LOGIN` e `IDENTITY-LOGIN` no se aceptan.

| Categoría | Usar para |
| - | - |
| `IDENTITY__LOGIN` | Inicios de sesión sospechosos o anómalos |
| `ENDPOINT__EXECUTION` | Programas, comandos o malware sospechosos ejecutándose en un endpoint |
| `CLOUD__INVOCATION` | Llamadas sospechosas a la API de la nube |
| `NETWORK__INBOUND_CONNECTION` | Conexiones de red entrantes sospechosas |
| `NETWORK__OUTBOUND_CONNECTION` | Conexiones de red salientes sospechosas |
| `DATA__DATA_TRANSFER` | Movimiento inusual de datos o exfiltración |
| `OTHER__INFORMATIONAL_EVENT` | Actividad informativa que no requiere respuesta; se cierra automáticamente como benigna |

## Cargas útiles de ejemplo

### Malware en endpoint con un activo de archivo

```json theme={null}
{
  "id": "edr-77120",
  "source": "custom-edr",
  "title": "Malware executed on workstation",
  "description": "The agent quarantined evil.exe after it injected into explorer.exe.",
  "severity": "critical",
  "category": "ENDPOINT__EXECUTION",
  "occurredAt": "2026-11-13T14:58:11Z",
  "referenceUrl": "https://edr.example.com/alerts/edr-77120",
  "blocked": true,
  "mitigated": true,
  "assets": {
    "endpoints": [{ "id": "endpoint-7", "hostname": "WS-001" }],
    "files": [
      {
        "name": "evil.exe",
        "path": "C:\\Users\\jane\\Downloads\\evil.exe",
        "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
      }
    ]
  }
}
```

### Conexión de red con activos de dirección IP

```json theme={null}
{
  "id": "fw-30418",
  "source": "perimeter-firewall",
  "title": "Outbound connection to known command-and-control server",
  "description": "WS-014 opened a TLS session to an IP address on the command-and-control blocklist.",
  "severity": "high",
  "category": "NETWORK__OUTBOUND_CONNECTION",
  "occurredAt": "2026-11-13T09:41:27Z",
  "blocked": true,
  "assets": {
    "endpoints": [{ "hostname": "WS-014" }],
    "ips": [{ "address": "198.51.100.23" }, { "address": "2001:db8::1" }]
  }
}
```

### Carga útil mínima

Solo los campos requeridos. Wirespeed puede clasificar esta detección, pero añadir un `id` e identificadores de activos mejora la deduplicación y la correlación.

```json theme={null}
{
  "title": "Unusual outbound transfer",
  "description": "Workstation uploaded 2 GB to an unknown host overnight.",
  "severity": "medium",
  "category": "DATA__DATA_TRANSFER",
  "occurredAt": "2026-11-13T07:12:00Z",
  "assets": {
    "endpoints": [{ "hostname": "WS-014" }]
  }
}
```

## Errores y casos límite

Las entregas rechazadas nunca se ponen en cola. Cuando una entrega no supera la validación, el motivo se escribe en el registro de la integración en Wirespeed para que pueda corregir el emisor; revise allí primero cuando las detecciones no aparezcan.

| Estado | Significado | Qué hacer |
| - | - | - |
| `400` | Carga útil malformada o no válida: campo requerido ausente, campo desconocido, `category` o `severity` no válidas, marcas de tiempo ilegibles o desordenadas, un activo sin identificadores, o un correo, URL, hash o dirección IP malformados. | Corrija el campo indicado en la entrada del registro de la integración y vuelva a enviar. |
| `401` | La autenticación está activada y el encabezado `X-Webhook-Key` está ausente o no coincide. | Envíe el secreto de webhook actual. Si lo rotó, actualice el emisor. |
| `404` | El `teamId` o el `integrationId` de la URL no identifica ninguna integración. | Vuelva a copiar la URL del webhook desde **Detalles del webhook**. |
| `422` | El procesamiento de webhooks está pausado temporalmente. | Reintente con espera progresiva. |
| `429` | Su equipo superó el límite de velocidad de webhooks (3.000 solicitudes/minuto). | Reintente con espera progresiva; los emisores por lotes deberían espaciar las entregas. |

Casos límite que debe conocer:

* **Una detección por solicitud.** Enviar un arreglo hace que la solicitud no supere la validación; itere sobre las detecciones en su lugar.
* **Los reintentos son seguros con un `id`.** El mismo `id` entregado dos veces se convierte en una sola detección. Sin un `id`, un reintento puede crear un duplicado.
* **Las marcas de tiempo futuras** se limitan a la hora de ingesta para la hora del evento de la detección; las marcas que envió se conservan en la fila del SIEM.
* **Las integraciones desactivadas** rechazan las entregas hasta que se reactivan.
* **Los secretos en las URL se ignoran.** Un parámetro de consulta `webhookSecret` no autentica una solicitud; use el encabezado `X-Webhook-Key`.

## Qué hace Wirespeed con ella

Cada entrega aceptada se convierte en una detección de Wirespeed de primera clase, igual que una detección de cualquier integración nativa, y se clasifica automáticamente: Wirespeed la investiga, emite un veredicto y escala o responde según la configuración de automatización de su equipo, sin ningún paso manual. Los usuarios, endpoints y archivos que envía se extraen para la correlación y la contención, las direcciones IP para la correlación, la detección se categoriza con la `category` que envió, y la carga útil normalizada se escribe en la tabla del SIEM `generic_detection_logs`. En el SIEM puede filtrar esa tabla por `severity`, `category` y `source`; las filas se almacenan ordenadas por equipo, luego por `source` y luego por hora, de modo que las consultas filtradas por fuente se mantienen rápidas. Cada integración de Generic Detection también aparece como su propia fuente del SIEM bajo su **Source Name**, de modo que las entregas de diferentes sistemas emisores permanecen separadas aunque compartan una sola tabla.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.