Webhooks salientes. Todas las rutas cuelgan de https://api.blixye.com/v1 y llevan la llave en la cabecera Authorization (ver Llaves y ámbitos). Esta página sale de la especificación OpenAPI de la API; lo que no esté aquí, la API no lo hace.
Webhooks salientes. Todas las rutas cuelgan de https://api.blixye.com/v1 y llevan la llave en la cabecera Authorization (ver Llaves y ámbitos). Esta página sale de la especificación OpenAPI de la API; lo que no esté aquí, la API no lo hace.
OJO
Webhooks salientes. Todas las rutas cuelgan de https://api.blixye.com/v1 y llevan la llave en la cabecera Authorization (ver Llaves y ámbitos). Esta página sale de la especificación OpenAPI de la API; lo que no esté aquí, la API no lo hace.
OJO
GET /webhooks: Lista de webhooks (webhooks:manage)
POST /webhooks: Crear un webhook (webhooks:manage)
GET /webhooks/{id}: Un webhook (webhooks:manage)
PATCH /webhooks/{id}: Cambiar un webhook (webhooks:manage)
DELETE /webhooks/{id}: Borrar un webhook (webhooks:manage)
POST /webhooks/{id}/rotate-secret: Rotar el secreto de firma (webhooks:manage)
Lista de webhooks
Lista de webhooks
OJO
Lista de webhooks
GET /webhooks. Los webhooks del servidor (nunca el secreto). Ámbito: webhooks:manage.
GET /webhooks. Los webhooks del servidor (nunca el secreto). Ámbito: webhooks:manage.
OJO
GET /webhooks. Los webhooks del servidor (nunca el secreto). Ámbito: webhooks:manage.
curl "https://api.blixye.com/v1/webhooks" \
-H "Authorization: Bearer bx_live_…"
curl "https://api.blixye.com/v1/webhooks" \
-H "Authorization: Bearer bx_live_…"
OJO
curl "https://api.blixye.com/v1/webhooks" \
-H "Authorization: Bearer bx_live_…"
Respuesta 200: Webhooks.
Respuesta 200: Webhooks.
OJO
Respuesta 200: Webhooks.
{
"data": [
{
"id": "whk_3tq0vJ1c9Ydl2Hk7WqPzEw",
"url": "https://example.com/blixye/webhook",
"description": "CAD to our Discord",
"events": [
"call.created"
],
"is_active": true,
"secret_prefix": "whsec_Ab3d",
"consecutive_failures": 0,
"disabled_at": null,
"disabled_reason": null,
"last_success_at": "2026-09-27T18:04:05Z",
"last_failure_at": null,
"created_at": "2026-09-27T18:04:05Z"
}
]
}
{
"data": [
{
"id": "whk_3tq0vJ1c9Ydl2Hk7WqPzEw",
"url": "https://example.com/blixye/webhook",
"description": "CAD to our Discord",
"events": [
"call.created"
],
"is_active": true,
"secret_prefix": "whsec_Ab3d",
"consecutive_failures": 0,
"disabled_at": null,
"disabled_reason": null,
"last_success_at": "2026-09-27T18:04:05Z",
"last_failure_at": null,
"created_at": "2026-09-27T18:04:05Z"
}
]
}
OJO
{
"data": [
{
"id": "whk_3tq0vJ1c9Ydl2Hk7WqPzEw",
"url": "https://example.com/blixye/webhook",
"description": "CAD to our Discord",
"events": [
"call.created"
],
"is_active": true,
"secret_prefix": "whsec_Ab3d",
"consecutive_failures": 0,
"disabled_at": null,
"disabled_reason": null,
"last_success_at": "2026-09-27T18:04:05Z",
"last_failure_at": null,
"created_at": "2026-09-27T18:04:05Z"
}
]
}
Errores (el formato está en Errores):
Errores (el formato está en Errores):
OJO
Errores (el formato está en Errores):
OJO
400: Petición mal formada (limit, cursor, JSON o Idempotency-Key inválidos, o la llave en la URL).
401: Llave ausente, inválida, revocada o caducada (códigos missing_api_key, invalid_api_key, api_key_revoked, api_key_expired).
403: A la llave le falta un ámbito (missing_scope), la IP no está permitida (ip_not_allowed), el plan del servidor no tiene API (plan_required) o un módulo del MDT está apagado (module_off).
429: Demasiadas peticiones con esta llave (el límite es por llave y por minuto, según el plan). Demasiados fallos de autenticación desde una IP también dan 429.
Crear un webhook
Crear un webhook
OJO
Crear un webhook
POST /webhooks. Crea un webhook. La respuesta lleva el secreto de firma: es la única vez que lo verás. Tope por plan (plus 1, premium 5, business 20). Ámbito: webhooks:manage.
POST /webhooks. Crea un webhook. La respuesta lleva el secreto de firma: es la única vez que lo verás. Tope por plan (plus 1, premium 5, business 20). Ámbito: webhooks:manage.
OJO
POST /webhooks. Crea un webhook. La respuesta lleva el secreto de firma: es la única vez que lo verás. Tope por plan (plus 1, premium 5, business 20). Ámbito: webhooks:manage.
Parámetros:
Parámetros:
OJO
Parámetros:
OJO
Idempotency-Key (cabecera; texto, opcional): Hace seguro reintentar el POST: la misma clave devuelve la primera respuesta (con Idempotent-Replayed: true) durante 24 h. La misma clave con otro cuerpo es un 422.
Cuerpo (JSON):
Cuerpo (JSON):
OJO
Cuerpo (JSON):
OJO
url (texto, máx. 500, obligatorio): URL https. Se rechazan las direcciones privadas, de loopback y reservadas (también tras resolver el DNS, y otra vez en cada entrega).
events (lista, tipos de evento, obligatorio): Eventos a recibir. Una llave solo puede suscribir los que cubren sus ámbitos.
description (texto, máx. 120, admite null, opcional): Descripción (máx. 120).
curl -X POST "https://api.blixye.com/v1/webhooks" \
-H "Authorization: Bearer bx_live_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 5f7c1d2e-mi-reintento-1" \
-d '{"url":"https://example.com/blixye/webhook","events":["call.created"],"description":"Two suspects, one armed."}'
curl -X POST "https://api.blixye.com/v1/webhooks" \
-H "Authorization: Bearer bx_live_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 5f7c1d2e-mi-reintento-1" \
-d '{"url":"https://example.com/blixye/webhook","events":["call.created"],"description":"Two suspects, one armed."}'
OJO
curl -X POST "https://api.blixye.com/v1/webhooks" \
-H "Authorization: Bearer bx_live_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 5f7c1d2e-mi-reintento-1" \
-d '{"url":"https://example.com/blixye/webhook","events":["call.created"],"description":"Two suspects, one armed."}'
Respuesta 201: Creado.
Respuesta 201: Creado.
OJO
Respuesta 201: Creado.
{
"data": {
"id": "whk_3tq0vJ1c9Ydl2Hk7WqPzEw",
"url": "https://example.com/blixye/webhook",
"description": "Two suspects, one armed.",
"events": [
"call.created"
],
"is_active": true,
"secret_prefix": "whsec_Ab3d",
"consecutive_failures": 0,
"disabled_at": null,
"disabled_reason": null,
"last_success_at": "2026-09-27T18:04:05Z",
"last_failure_at": null,
"created_at": "2026-09-27T18:04:05Z",
"secret": "whsec_…"
}
}
{
"data": {
"id": "whk_3tq0vJ1c9Ydl2Hk7WqPzEw",
"url": "https://example.com/blixye/webhook",
"description": "Two suspects, one armed.",
"events": [
"call.created"
],
"is_active": true,
"secret_prefix": "whsec_Ab3d",
"consecutive_failures": 0,
"disabled_at": null,
"disabled_reason": null,
"last_success_at": "2026-09-27T18:04:05Z",
"last_failure_at": null,
"created_at": "2026-09-27T18:04:05Z",
"secret": "whsec_…"
}
}
OJO
{
"data": {
"id": "whk_3tq0vJ1c9Ydl2Hk7WqPzEw",
"url": "https://example.com/blixye/webhook",
"description": "Two suspects, one armed.",
"events": [
"call.created"
],
"is_active": true,
"secret_prefix": "whsec_Ab3d",
"consecutive_failures": 0,
"disabled_at": null,
"disabled_reason": null,
"last_success_at": "2026-09-27T18:04:05Z",
"last_failure_at": null,
"created_at": "2026-09-27T18:04:05Z",
"secret": "whsec_…"
}
}
Errores (el formato está en Errores):
Errores (el formato está en Errores):
OJO
Errores (el formato está en Errores):
OJO
400: Petición mal formada (limit, cursor, JSON o Idempotency-Key inválidos, o la llave en la URL).
401: Llave ausente, inválida, revocada o caducada (códigos missing_api_key, invalid_api_key, api_key_revoked, api_key_expired).
403: A la llave le falta un ámbito (missing_scope), la IP no está permitida (ip_not_allowed), el plan del servidor no tiene API (plan_required) o un módulo del MDT está apagado (module_off).
409: Conflicto (p. ej. la misma Idempotency-Key aún se está atendiendo, o se llegó al tope del plan).
422: Un campo no vale (details.field dice cuál).
429: Demasiadas peticiones con esta llave (el límite es por llave y por minuto, según el plan). Demasiados fallos de autenticación desde una IP también dan 429.
Un webhook
Un webhook
OJO
Un webhook
GET /webhooks/{id}. Un webhook. Ámbito: webhooks:manage.
GET /webhooks/{id}. Un webhook. Ámbito: webhooks:manage.
OJO
GET /webhooks/{id}. Un webhook. Ámbito: webhooks:manage.
Parámetros:
Parámetros:
OJO
Parámetros:
OJO
id (ruta; texto, obligatorio): Id del recurso.
curl "https://api.blixye.com/v1/webhooks/whk_3tq0vJ1c9Ydl2Hk7WqPzEw" \
-H "Authorization: Bearer bx_live_…"
curl "https://api.blixye.com/v1/webhooks/whk_3tq0vJ1c9Ydl2Hk7WqPzEw" \
-H "Authorization: Bearer bx_live_…"
OJO
curl "https://api.blixye.com/v1/webhooks/whk_3tq0vJ1c9Ydl2Hk7WqPzEw" \
-H "Authorization: Bearer bx_live_…"
Respuesta 200: El webhook.
Respuesta 200: El webhook.
OJO
Respuesta 200: El webhook.
{
"data": {
"id": "whk_3tq0vJ1c9Ydl2Hk7WqPzEw",
"url": "https://example.com/blixye/webhook",
"description": "CAD to our Discord",
"events": [
"call.created"
],
"is_active": true,
"secret_prefix": "whsec_Ab3d",
"consecutive_failures": 0,
"disabled_at": null,
"disabled_reason": null,
"last_success_at": "2026-09-27T18:04:05Z",
"last_failure_at": null,
"created_at": "2026-09-27T18:04:05Z"
}
}
{
"data": {
"id": "whk_3tq0vJ1c9Ydl2Hk7WqPzEw",
"url": "https://example.com/blixye/webhook",
"description": "CAD to our Discord",
"events": [
"call.created"
],
"is_active": true,
"secret_prefix": "whsec_Ab3d",
"consecutive_failures": 0,
"disabled_at": null,
"disabled_reason": null,
"last_success_at": "2026-09-27T18:04:05Z",
"last_failure_at": null,
"created_at": "2026-09-27T18:04:05Z"
}
}
OJO
{
"data": {
"id": "whk_3tq0vJ1c9Ydl2Hk7WqPzEw",
"url": "https://example.com/blixye/webhook",
"description": "CAD to our Discord",
"events": [
"call.created"
],
"is_active": true,
"secret_prefix": "whsec_Ab3d",
"consecutive_failures": 0,
"disabled_at": null,
"disabled_reason": null,
"last_success_at": "2026-09-27T18:04:05Z",
"last_failure_at": null,
"created_at": "2026-09-27T18:04:05Z"
}
}
Errores (el formato está en Errores):
Errores (el formato está en Errores):
OJO
Errores (el formato está en Errores):
OJO
400: Petición mal formada (limit, cursor, JSON o Idempotency-Key inválidos, o la llave en la URL).
401: Llave ausente, inválida, revocada o caducada (códigos missing_api_key, invalid_api_key, api_key_revoked, api_key_expired).
403: A la llave le falta un ámbito (missing_scope), la IP no está permitida (ip_not_allowed), el plan del servidor no tiene API (plan_required) o un módulo del MDT está apagado (module_off).
404: No existe en este servidor. Un id de otro servidor es siempre un 404.
429: Demasiadas peticiones con esta llave (el límite es por llave y por minuto, según el plan). Demasiados fallos de autenticación desde una IP también dan 429.
Cambiar un webhook
Cambiar un webhook
OJO
Cambiar un webhook
PATCH /webhooks/{id}. Cambia url, eventos, descripción o is_active. Volver a encender un webhook apagado pone a cero sus fallos. Ámbito: webhooks:manage.
PATCH /webhooks/{id}. Cambia url, eventos, descripción o is_active. Volver a encender un webhook apagado pone a cero sus fallos. Ámbito: webhooks:manage.
OJO
PATCH /webhooks/{id}. Cambia url, eventos, descripción o is_active. Volver a encender un webhook apagado pone a cero sus fallos. Ámbito: webhooks:manage.
Parámetros:
Parámetros:
OJO
Parámetros:
OJO
id (ruta; texto, obligatorio): Id del recurso.
Cuerpo (JSON):
Cuerpo (JSON):
OJO
Cuerpo (JSON):
OJO
url (texto, máx. 500, opcional): URL https. Se rechazan las direcciones privadas, de loopback y reservadas (también tras resolver el DNS, y otra vez en cada entrega).
events (lista, tipos de evento, opcional): Eventos a recibir. Una llave solo puede suscribir los que cubren sus ámbitos.
description (texto, máx. 120, admite null, opcional): Descripción (máx. 120).
is_active (booleano, opcional): Encendido o apagado.
curl -X PATCH "https://api.blixye.com/v1/webhooks/whk_3tq0vJ1c9Ydl2Hk7WqPzEw" \
-H "Authorization: Bearer bx_live_…" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/blixye/webhook","events":["call.created"],"description":"Two suspects, one armed."}'
curl -X PATCH "https://api.blixye.com/v1/webhooks/whk_3tq0vJ1c9Ydl2Hk7WqPzEw" \
-H "Authorization: Bearer bx_live_…" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/blixye/webhook","events":["call.created"],"description":"Two suspects, one armed."}'
OJO
curl -X PATCH "https://api.blixye.com/v1/webhooks/whk_3tq0vJ1c9Ydl2Hk7WqPzEw" \
-H "Authorization: Bearer bx_live_…" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/blixye/webhook","events":["call.created"],"description":"Two suspects, one armed."}'
Respuesta 200: El webhook.
Respuesta 200: El webhook.
OJO
Respuesta 200: El webhook.
{
"data": {
"id": "whk_3tq0vJ1c9Ydl2Hk7WqPzEw",
"url": "https://example.com/blixye/webhook",
"description": "CAD to our Discord",
"events": [
"call.created"
],
"is_active": true,
"secret_prefix": "whsec_Ab3d",
"consecutive_failures": 0,
"disabled_at": null,
"disabled_reason": null,
"last_success_at": "2026-09-27T18:04:05Z",
"last_failure_at": null,
"created_at": "2026-09-27T18:04:05Z"
}
}
{
"data": {
"id": "whk_3tq0vJ1c9Ydl2Hk7WqPzEw",
"url": "https://example.com/blixye/webhook",
"description": "CAD to our Discord",
"events": [
"call.created"
],
"is_active": true,
"secret_prefix": "whsec_Ab3d",
"consecutive_failures": 0,
"disabled_at": null,
"disabled_reason": null,
"last_success_at": "2026-09-27T18:04:05Z",
"last_failure_at": null,
"created_at": "2026-09-27T18:04:05Z"
}
}
OJO
{
"data": {
"id": "whk_3tq0vJ1c9Ydl2Hk7WqPzEw",
"url": "https://example.com/blixye/webhook",
"description": "CAD to our Discord",
"events": [
"call.created"
],
"is_active": true,
"secret_prefix": "whsec_Ab3d",
"consecutive_failures": 0,
"disabled_at": null,
"disabled_reason": null,
"last_success_at": "2026-09-27T18:04:05Z",
"last_failure_at": null,
"created_at": "2026-09-27T18:04:05Z"
}
}
Errores (el formato está en Errores):
Errores (el formato está en Errores):
OJO
Errores (el formato está en Errores):
OJO
400: Petición mal formada (limit, cursor, JSON o Idempotency-Key inválidos, o la llave en la URL).
401: Llave ausente, inválida, revocada o caducada (códigos missing_api_key, invalid_api_key, api_key_revoked, api_key_expired).
403: A la llave le falta un ámbito (missing_scope), la IP no está permitida (ip_not_allowed), el plan del servidor no tiene API (plan_required) o un módulo del MDT está apagado (module_off).
404: No existe en este servidor. Un id de otro servidor es siempre un 404.
422: Un campo no vale (details.field dice cuál).
429: Demasiadas peticiones con esta llave (el límite es por llave y por minuto, según el plan). Demasiados fallos de autenticación desde una IP también dan 429.
Borrar un webhook
Borrar un webhook
OJO
Borrar un webhook
DELETE /webhooks/{id}. Borra el webhook y sus entregas pendientes. Ámbito: webhooks:manage.
DELETE /webhooks/{id}. Borra el webhook y sus entregas pendientes. Ámbito: webhooks:manage.
OJO
DELETE /webhooks/{id}. Borra el webhook y sus entregas pendientes. Ámbito: webhooks:manage.
Parámetros:
Parámetros:
OJO
Parámetros:
OJO
id (ruta; texto, obligatorio): Id del recurso.
curl -X DELETE "https://api.blixye.com/v1/webhooks/whk_3tq0vJ1c9Ydl2Hk7WqPzEw" \
-H "Authorization: Bearer bx_live_…"
curl -X DELETE "https://api.blixye.com/v1/webhooks/whk_3tq0vJ1c9Ydl2Hk7WqPzEw" \
-H "Authorization: Bearer bx_live_…"
OJO
curl -X DELETE "https://api.blixye.com/v1/webhooks/whk_3tq0vJ1c9Ydl2Hk7WqPzEw" \
-H "Authorization: Bearer bx_live_…"
Respuesta 200: Borrado.
Respuesta 200: Borrado.
OJO
Respuesta 200: Borrado.
{
"data": {
"id": "whk_3tq0vJ1c9Ydl2Hk7WqPzEw",
"deleted": true
}
}
{
"data": {
"id": "whk_3tq0vJ1c9Ydl2Hk7WqPzEw",
"deleted": true
}
}
OJO
{
"data": {
"id": "whk_3tq0vJ1c9Ydl2Hk7WqPzEw",
"deleted": true
}
}
Errores (el formato está en Errores):
Errores (el formato está en Errores):
OJO
Errores (el formato está en Errores):
OJO
400: Petición mal formada (limit, cursor, JSON o Idempotency-Key inválidos, o la llave en la URL).
401: Llave ausente, inválida, revocada o caducada (códigos missing_api_key, invalid_api_key, api_key_revoked, api_key_expired).
403: A la llave le falta un ámbito (missing_scope), la IP no está permitida (ip_not_allowed), el plan del servidor no tiene API (plan_required) o un módulo del MDT está apagado (module_off).
404: No existe en este servidor. Un id de otro servidor es siempre un 404.
429: Demasiadas peticiones con esta llave (el límite es por llave y por minuto, según el plan). Demasiados fallos de autenticación desde una IP también dan 429.
Rotar el secreto de firma
Rotar el secreto de firma
OJO
Rotar el secreto de firma
POST /webhooks/{id}/rotate-secret. Cambia el secreto de firma. El viejo deja de valer ya; el nuevo solo sale en esta respuesta. Ámbito: webhooks:manage.
POST /webhooks/{id}/rotate-secret. Cambia el secreto de firma. El viejo deja de valer ya; el nuevo solo sale en esta respuesta. Ámbito: webhooks:manage.
OJO
POST /webhooks/{id}/rotate-secret. Cambia el secreto de firma. El viejo deja de valer ya; el nuevo solo sale en esta respuesta. Ámbito: webhooks:manage.
Parámetros:
Parámetros:
OJO
Parámetros:
OJO
id (ruta; texto, obligatorio): Id del recurso.
curl -X POST "https://api.blixye.com/v1/webhooks/whk_3tq0vJ1c9Ydl2Hk7WqPzEw/rotate-secret" \
-H "Authorization: Bearer bx_live_…"
curl -X POST "https://api.blixye.com/v1/webhooks/whk_3tq0vJ1c9Ydl2Hk7WqPzEw/rotate-secret" \
-H "Authorization: Bearer bx_live_…"
OJO
curl -X POST "https://api.blixye.com/v1/webhooks/whk_3tq0vJ1c9Ydl2Hk7WqPzEw/rotate-secret" \
-H "Authorization: Bearer bx_live_…"
Respuesta 200: El webhook con su secreto nuevo.
Respuesta 200: El webhook con su secreto nuevo.
OJO
Respuesta 200: El webhook con su secreto nuevo.
{
"data": {
"id": "whk_3tq0vJ1c9Ydl2Hk7WqPzEw",
"url": "https://example.com/blixye/webhook",
"description": "Two suspects, one armed.",
"events": [
"call.created"
],
"is_active": true,
"secret_prefix": "whsec_Ab3d",
"consecutive_failures": 0,
"disabled_at": null,
"disabled_reason": null,
"last_success_at": "2026-09-27T18:04:05Z",
"last_failure_at": null,
"created_at": "2026-09-27T18:04:05Z",
"secret": "whsec_…"
}
}
{
"data": {
"id": "whk_3tq0vJ1c9Ydl2Hk7WqPzEw",
"url": "https://example.com/blixye/webhook",
"description": "Two suspects, one armed.",
"events": [
"call.created"
],
"is_active": true,
"secret_prefix": "whsec_Ab3d",
"consecutive_failures": 0,
"disabled_at": null,
"disabled_reason": null,
"last_success_at": "2026-09-27T18:04:05Z",
"last_failure_at": null,
"created_at": "2026-09-27T18:04:05Z",
"secret": "whsec_…"
}
}
OJO
{
"data": {
"id": "whk_3tq0vJ1c9Ydl2Hk7WqPzEw",
"url": "https://example.com/blixye/webhook",
"description": "Two suspects, one armed.",
"events": [
"call.created"
],
"is_active": true,
"secret_prefix": "whsec_Ab3d",
"consecutive_failures": 0,
"disabled_at": null,
"disabled_reason": null,
"last_success_at": "2026-09-27T18:04:05Z",
"last_failure_at": null,
"created_at": "2026-09-27T18:04:05Z",
"secret": "whsec_…"
}
}
Errores (el formato está en Errores):
Errores (el formato está en Errores):
OJO
Errores (el formato está en Errores):
OJO
400: Petición mal formada (limit, cursor, JSON o Idempotency-Key inválidos, o la llave en la URL).
401: Llave ausente, inválida, revocada o caducada (códigos missing_api_key, invalid_api_key, api_key_revoked, api_key_expired).
403: A la llave le falta un ámbito (missing_scope), la IP no está permitida (ip_not_allowed), el plan del servidor no tiene API (plan_required) o un módulo del MDT está apagado (module_off).
404: No existe en este servidor. Un id de otro servidor es siempre un 404.
429: Demasiadas peticiones con esta llave (el límite es por llave y por minuto, según el plan). Demasiados fallos de autenticación desde una IP también dan 429.