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

# V2 Webhooks API

> La V2 Webhooks API permite a los desarrolladores recibir notificaciones de eventos en tiempo real desde cuentas de X. Referencia del nivel estándar de X API v2 que cubre webhooks.

export const Button = ({href, children}) => {
  return <div className="not-prose">
    <a href={href}>
      <button className="x-btn">
        <span>{children}</span>
        <svg width="3" height="24" viewBox="0 -9 3 24" class="h-6 rotate-0 overflow-visible"><path d="M0 0L3 3L0 6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path></svg>
      </button>
    </a>
  </div>;
};

La V2 Webhooks API permite a los desarrolladores recibir notificaciones de eventos en tiempo real desde cuentas de X mediante mensajes JSON basados en webhooks. Estas APIs te permiten registrar y gestionar webhooks, desarrollar aplicaciones consumidoras para procesar eventos y garantizar comunicación segura mediante challenge-response checks (CRC) y cabeceras de firma.

## Descripción general

<CardGroup cols={2}>
  <Card title="Entrega en tiempo real" icon="bolt">
    Recibe eventos al instante cuando ocurren
  </Card>

  <Card title="Basado en push" icon="https://mintcdn.com/x-preview/Vn2KEkZaPF9LiPi3/icons/xds/icon-arrow-right.svg?fit=max&auto=format&n=Vn2KEkZaPF9LiPi3&q=85&s=88e933002782dbdeb204043cedef033e" width="24" height="24" data-path="icons/xds/icon-arrow-right.svg">
    Los datos se envían directamente a tu servidor — sin polling
  </Card>

  <Card title="Seguro" icon="https://mintcdn.com/x-preview/cfyQtgCdwk8p69aa/icons/xds/icon-shield-keyhole.svg?fit=max&auto=format&n=cfyQtgCdwk8p69aa&q=85&s=a0e05514090c8a6af232297bfb9c4055" width="24" height="24" data-path="icons/xds/icon-shield-keyhole.svg">
    Validación CRC y verificación de firma
  </Card>

  <Card title="Confiable" icon="gauge">
    Soporte de reintentos y recuperación
  </Card>
</CardGroup>

***

## Productos que soportan webhooks

Estos son los productos que actualmente soportan la entrega de eventos vía webhook:

| Producto                                                           | Descripción                                                               |
| :----------------------------------------------------------------- | :------------------------------------------------------------------------ |
| [X Activity API (XAA)](/x-api/activity/introduction)               | Recibe eventos en tiempo real de la actividad que ocurre en X             |
| [Account Activity API (AAA)](/x-api/account-activity/introduction) | Recibe eventos en tiempo real vinculados a cuentas de usuario específicas |
| [Filtered Stream Webhooks](/x-api/webhooks/stream/introduction)    | Recibe Posts de filtered stream mediante entrega por webhook              |

***

## Cómo funcionan los webhooks

```mermaid actions={false} theme={null}
flowchart LR
    A["X Event<br/>Occurs"] --> B["X Server"] --> C["Your<br/>Webhook URL"]
```

1. **Ocurre un evento** — Un usuario publica, envía un DM, es seguido, etc.
2. **X envía una solicitud POST** — Payload JSON del evento enviado a tu URL de webhook registrada
3. **Procesas el evento** — Tu servidor maneja los datos del evento
4. **Responde con 200 OK** — Devuelve un estado 200 para confirmar la recepción

***

## Requisitos del webhook

| Requisito                        | Descripción                                                                                                                  |
| :------------------------------- | :--------------------------------------------------------------------------------------------------------------------------- |
| **HTTPS**                        | La URL del webhook debe usar HTTPS                                                                                           |
| **Accesible públicamente**       | La URL debe ser alcanzable desde internet                                                                                    |
| **Sin especificación de puerto** | La URL no puede incluir un puerto (por ejemplo, `https://mydomain.com:5000/webhook` no funcionará)                           |
| **Respuesta rápida**             | Responder en menos de 10 segundos                                                                                            |
| **200 OK**                       | Devolver estado 200 para confirmar la recepción                                                                              |
| **Soporte CRC**                  | Debe responder a solicitudes GET de Challenge-Response Check ([más información](/x-api/webhooks/quickstart#2-the-crc-check)) |

***

## Endpoints

| Método | Endpoint                                                              | Descripción                                                  |
| :----- | :-------------------------------------------------------------------- | :----------------------------------------------------------- |
| POST   | [`/2/webhooks`](/x-api/webhooks/create-webhook)                       | Registrar un nuevo webhook                                   |
| GET    | [`/2/webhooks`](/x-api/webhooks/get-webhook)                          | Listar webhooks registrados                                  |
| DELETE | [`/2/webhooks/:webhook_id`](/x-api/webhooks/delete-webhook)           | Eliminar un webhook                                          |
| POST   | [`/2/webhooks/replay`](/x-api/webhooks/create-replay-job-for-webhook) | Crear un replay job para el webhook                          |
| PUT    | [`/2/webhooks/:webhook_id`](/x-api/webhooks/validate-webhook)         | Disparar la verificación CRC y volver a habilitar un webhook |

Todos los endpoints requieren autenticación con **OAuth2 App Only Bearer Token**.

***

## Seguridad

Las APIs basadas en webhooks de X proporcionan dos métodos para confirmar la seguridad de tu servidor de webhook:

1. **Challenge-Response Check (CRC)** — X envía solicitudes GET periódicas a la URL de tu webhook. Respondes con un hash HMAC-SHA256 para demostrar que controlas el endpoint. Las verificaciones CRC ocurren en el registro inicial, cada hora y ante una revalidación manual.

2. **Verificación de firma** — Cada solicitud POST de X incluye una cabecera `x-twitter-webhooks-signature`. Puedes verificar esta firma para confirmar que X es la fuente de los eventos entrantes.

<Card title="Consulta los detalles completos de la implementación" icon="https://mintcdn.com/x-preview/ygI6sSJPehlc0qNT/icons/xds/icon-code.svg?fit=max&auto=format&n=ygI6sSJPehlc0qNT&q=85&s=488e23401b19225b89acc0136d242219" href="/x-api/webhooks/quickstart" width="24" height="24" data-path="icons/xds/icon-code.svg">
  Configuración de CRC paso a paso, ejemplos de código y verificación de firma
</Card>

***

## Validación de webhook

Se envía una verificación CRC a tu webhook en los siguientes casos:

* Inmediatamente al crearse
* Ante una solicitud PUT explícita (`PUT /2/webhooks/{id}`)
* Periódicamente cada 30 minutos, pero solo si el webhook no ha sido validado con éxito en las últimas 24 horas

Un webhook se marca como **inválido** cuando:

* Devuelve una respuesta inválida a una verificación CRC
  * Devuelve un código de estado 2XX pero el `response_token` es incorrecto
  * Devuelve un código de estado 3XX
  * Provoca una excepción SSL
* Experimenta errores transitorios persistentes de modo que no ha validado con éxito por más de 28 horas (incluye un período de gracia de 4 horas para problemas transitorios)
  * Las siguientes respuestas se tratan como errores transitorios:
    * Código de estado 4XX
    * Código de estado 5XX
    * Tiempo de espera de solicitud
    * Canal cerrado

Puedes verificar el estado válido/inválido de un webhook usando el endpoint `GET /2/webhooks` o mediante la toolbox en el Developer Console.

***

## Primeros pasos

<Note>
  **Requisitos previos**

  * Una [cuenta de desarrollador](https://developer.x.com/en/portal/petition/essential/basic-info) aprobada
  * Un [Project y App](/resources/fundamentals/developer-apps) en el Developer Console
  * Un endpoint HTTPS accesible públicamente
  * El **consumer secret** de tu app (API secret key) para la validación CRC
</Note>

<CardGroup cols={2}>
  <Card title="Inicio rápido" icon="https://mintcdn.com/x-preview/oR-aRNyj1BKPJtxM/icons/xds/icon-rocket.svg?fit=max&auto=format&n=oR-aRNyj1BKPJtxM&q=85&s=b978d7a9225de31709efbbed5b84e92d" href="/x-api/webhooks/quickstart" width="24" height="24" data-path="icons/xds/icon-rocket.svg">
    Configura tu webhook de principio a fin
  </Card>

  <Card title="Filtered Stream Webhooks" icon="https://mintcdn.com/x-preview/szd6PKNMlRQoyyAo/icons/xds/icon-filter.svg?fit=max&auto=format&n=szd6PKNMlRQoyyAo&q=85&s=5d59aff402c1f2aeae0e9e44bb23400e" href="/x-api/webhooks/stream/introduction" width="24" height="24" data-path="icons/xds/icon-filter.svg">
    Recibe Posts filtrados vía webhook
  </Card>

  <Card title="Account Activity API" icon="https://mintcdn.com/x-preview/Vn2KEkZaPF9LiPi3/icons/xds/icon-bell.svg?fit=max&auto=format&n=Vn2KEkZaPF9LiPi3&q=85&s=5e0b3dcfbb39ba3d4619931d7cd927d1" href="/x-api/account-activity/introduction" width="24" height="24" data-path="icons/xds/icon-bell.svg">
    Recibe eventos de cuenta vía webhook
  </Card>

  <Card title="Apps de ejemplo" icon="github" href="/x-api/webhooks/quickstart#sample-apps">
    Ejemplos de código funcionales
  </Card>
</CardGroup>
