---
title: "Crea un webhook endpoint (devuelve el secreto una vez)"
method: POST
path: "/webhook-endpoints"
tags: ["Webhooks"]
---

# Crea un webhook endpoint (devuelve el secreto una vez)

`POST /webhook-endpoints`

## Request

- Base URL: `https://api.met.meteor.com.co/api/v1`
- URL: `https://api.met.meteor.com.co/api/v1/webhook-endpoints`
- Auth: one of:
  - `bearer` (a scheme the document does not define)
  - HTTP bearer

Registra tu URL y **devuelve el secreto una sola vez**: guárdalo en ese momento, es con lo que vas a verificar la firma de cada entrega. Verificar la firma no es opcional — sin eso, cualquiera que conozca tu URL puede inventarte eventos.

## Request body

- CreateWebhookSubscriptionDto
  - `description` string: Etiqueta libre para distinguirlo en el listado.
  - `enabled_events` string[], required: Qué eventos quieres recibir. `*` no es un tipo de evento: es el comodín «todos los del catálogo, incluidos los que se agreguen después». `GET /webhook-endpoints/event-types` devuelve el catálogo vivo con la descripción y el scope de cada uno. `task.completed` está deprecado: no se emite desde el 2026-08-31 y sale del catálogo el 2027-04-07.
  - `url` string, uri, required: A dónde Meteor entrega los eventos. Debe traer protocolo (`https://…`).

## Response `201`

- object: Sobre en el que viaja toda respuesta correcta de la API. El recurso está en `data`. Los SDKs oficiales lo desenvuelven por ti; un cliente hecho a mano tiene que leer `.data`.
  - `success` true, required: Siempre `true` en una respuesta 2xx.
  - `data` WebhookEndpointCreatedResponseDto, required
    - `created_at` string, required
    - `description` string, nullable, required
    - `disabled_reason` string, nullable, required: Por qué está `disabled`, en texto. Lo escribe el apagado automático cuando un endpoint lleva días sin responder bien: dice cuántas entregas seguidas se agotaron y desde cuándo. `null` si está activo o si lo apagaste tú.
    - `enabled_events` string[], required: Tipos de evento suscritos. `*` no es un tipo de evento: es el comodín «todos los del catálogo, incluidos los que se agreguen después», así que `["*"]` significa todos. La lista sale de `WEBHOOK_EVENTS` — el catálogo vivo, con descripción y scope, está en `GET /webhook-endpoints/event-types`.
    - `id` string, required: ID del endpoint (UUID).
    - `last_delivery_at` string, nullable, required: Cuándo se le entregó un evento por última vez. `null` si nunca.
    - `object` 'webhook_endpoint', required: Siempre `webhook_endpoint`.
    - `previous_secret_expires_at` string, nullable, required: Hasta cuándo el secreto ANTERIOR sigue firmando, después de rotar. Mientras esta fecha esté en el futuro, cada entrega viaja con dos firmas `v1` en `X-Met-Signature` —la del secreto nuevo y la del viejo— y tu verificación pasa con cualquiera de los dos. `null` si no hay rotación en curso.
    - `secret` string, required: Secreto de firma HMAC. Solo aparece en esta respuesta.
    - `status` 'active' | 'disabled', required: `disabled` = el endpoint existe pero no recibe entregas.
    - `url` string, required: A dónde Meteor entrega los eventos.

## Other responses

- `400`: La request no es válida: un campo no pasa validación, falta un parámetro requerido o el recurso no admite la transición solicitada.
- `401`: API key ausente, inválida, revocada o expirada — o el workspace está bloqueado.
- `403`: La key está autenticada pero no puede ejecutar esta operación: scope faltante, capacidad deshabilitada, modo test restringido o recurso fuera de su cartera.
- `404`: El recurso no existe o no está disponible dentro del alcance de la key. No revela la existencia de recursos de otros tenants.
- `409`: La operación entra en conflicto con el estado actual o con un Idempotency-Key en uso. No reintentes con el mismo key y un body distinto.
- `429`: Se superó el límite por minuto de la key o la cuota del plan. Respeta `Retry-After`; el SDK ya reintenta solo.
- `500`: Error del servidor o del Met que ejecutaba. El SDK reintenta los 5xx con backoff.

---

[API](https://skmtc.dev/meteor/apis/met-public-api.md) · [All operations](https://skmtc.dev/meteor/apis/met-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/meteor/apis/met-public-api/revisions/5d9ca294295c?raw)
