
# Obtener un endpoint de webhook

`GET /v1/webhook-endpoints/{endpoint_id}` · permiso `webhook-endpoints:read` · todos los planes

Devuelve un endpoint de webhook. El encabezado `ETag` es la versión del endpoint y el valor de `If-Match` para [actualizar](update.md) y [eliminar](delete.md). El secreto de firma nunca se devuelve aquí.

## Solicitud

| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `endpoint_id` | path | sí | ID del endpoint de webhook (`whe_…`). |

## Respuesta

`200 OK` con el endpoint.

| Campo | Descripción |
|---|---|
| `id` | ID del endpoint (`whe_…`). |
| `key` | Clave estable, única en el entorno. |
| `url` | URL del receptor. |
| `description` | Texto libre; cadena vacía si no hay ninguno. |
| `event_types` | Tipos de evento del catálogo seleccionados; vacío significa todos los tipos excepto los de alto volumen. |
| `event_schema_versions` | Reemplazos de versión de esquema por tipo de evento. |
| `payload_mode` | `thin` o `full`. |
| `status` | `enabled`, `disabled_by_user`, `disabled_by_failure` (sin entregas exitosas durante 5 días y al menos 10 entregas abandonadas) o `disabled_by_receiver` (el receptor respondió `410 Gone`). Para volver a habilitarlo, use [actualizar](update.md) con `"status": "enabled"`; use la repetición para los eventos del período deshabilitado. |
| `rate_limit_per_second` | Límite de frecuencia de entregas para este endpoint. |
| `previous_secret_expires_at` | Tras una rotación, el fin del período en que el secreto anterior aún firma las entregas; si no, `null`. |
| `last_success_at` | Última entrega exitosa, o `null`. |
| `failing_since` | Inicio de las entregas fallidas ininterrumpidas, o `null`. |
| `version` | Versión; coincide con el encabezado `ETag`. |
| `created_at`, `updated_at` | Marcas de tiempo. |

```json
{
  "id": "whe_01k8a3m5q7t9v1w3x5y7z9b2c4",
  "key": "crm-sync",
  "url": "https://hooks.example.com/keenauth",
  "description": "CRM sync",
  "event_types": ["user.created", "user.updated"],
  "event_schema_versions": {"user.created": 1},
  "payload_mode": "thin",
  "status": "enabled",
  "rate_limit_per_second": 50,
  "previous_secret_expires_at": null,
  "last_success_at": "2026-10-26T09:12:00Z",
  "failing_since": null,
  "version": 3,
  "created_at": "2026-10-26T09:00:00Z",
  "updated_at": "2026-10-26T10:00:00Z"
}
```

## Errores

| HTTP | código | Cuándo |
|---|---|---|
| 404 | `not_found` | No existe ese endpoint en este entorno (también para un endpoint de otro entorno o un ID con formato incorrecto). |
| 401 | `unauthenticated` | La credencial falta, no es válida o fue revocada. |
| 403 | `insufficient_permissions` | La credencial no tiene `webhook-endpoints:read`. |
| 429 | `rate_limited` | Se superó el límite de frecuencia; reintente después del período de `Retry-After`. |
| 503 | `service_unavailable` | La administración de webhooks no está disponible temporalmente; reintente después del período de `Retry-After`. |

## Ejemplo

```bash
curl -i https://api.eu.keenauth.com/v1/webhook-endpoints/whe_01k8a3m5q7t9v1w3x5y7z9b2c4 \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

CLI: `keenauth webhook-endpoints get whe_01k8a3m5q7t9v1w3x5y7z9b2c4`
