Ir al contenido

API de webhooks

Los webhooks salientes pertenecen a un proyecto. La API los crea y gestiona, envía eventos de prueba, y lista y reenvía las entregas de cada webhook. Para los eventos y las cargas útiles que recibe el receptor, lee Webhooks salientes para desarrolladores. Para el comportamiento en la aplicación, lee la guía de webhooks.

  • Las lecturas requieren el permiso integrations.manage (que tienen owner/admin).
  • Las escrituras requieren el mismo permiso y un plan que incluya webhooks, Pro o Enterprise. En otros planes, las escrituras devuelven 403 forbidden.
  • Las escrituras tienen un límite de 120 por hora para cada organización. Por encima del límite, la API devuelve 429 con too_many_requests.
  • {projectId} es el código del proyecto, como CHK, igual que en las demás rutas de proyecto.
  • Las solicitudes de escritura aceptan el encabezado opcional Idempotency-Key. Consulta Idempotency-Key.
  • Un proyecto tiene como máximo 20 webhooks, así que la lista no está paginada.
MétodoRutaÉxito
GET/api/v1/projects/{projectId}/webhooks200 lista de webhooks
POST/api/v1/projects/{projectId}/webhooks201 webhook y su secreto
GET/api/v1/projects/{projectId}/webhooks/{webhookUlid}200 webhook
PATCH/api/v1/projects/{projectId}/webhooks/{webhookUlid}200 webhook
DELETE/api/v1/projects/{projectId}/webhooks/{webhookUlid}204
POST/api/v1/projects/{projectId}/webhooks/{webhookUlid}/rotate-secret200 secreto nuevo
POST/api/v1/projects/{projectId}/webhooks/{webhookUlid}/test201 entrega de prueba
GET/api/v1/projects/{projectId}/webhooks/{webhookUlid}/deliveries200 página de entregas
GET/api/v1/projects/{projectId}/webhooks/{webhookUlid}/deliveries/{deliveryUlid}200 entrega con solicitud y respuesta
POST/api/v1/projects/{projectId}/webhooks/{webhookUlid}/deliveries/{deliveryUlid}/redeliver202 entrega nueva
GET/api/v1/projects/{projectId}/webhooks

Devuelve todos los webhooks del proyecto como { items }. Cada elemento sigue los campos del webhook.

Ventana de terminal
curl -sS \
-H "Authorization: Bearer $PROBARA_API_TOKEN" \
"https://app.probara.net/api/v1/projects/CHK/webhooks"
POST/api/v1/projects/{projectId}/webhooks
CampoObligatorioNotas
namesíDe 1 a 120 caracteres
urlsíURL pública https://, sin credenciales, IP ni nombre local, de hasta 2000 caracteres. No se siguen redirecciones.
eventssegún el casoNombres de evento únicos del catálogo. Obligatorio salvo que allEvents sea true.
allEventsnotrue suscribe el webhook a todos los eventos, incluidos los que se añadan más adelante. Por defecto, false.
enablednoPor defecto, true.
methodnoPOST (por defecto), PUT o PATCH
headersnoHasta 20 objetos con name y value. Cada nombre aparece una vez, sin distinguir mayúsculas. Se rechazan los nombres que Probara define por sí mismo y los que empiezan por cf-. Un valor tiene hasta 4096 caracteres, sin saltos de línea.
payloadno{"format":"standard"} (por defecto), o {"format":"custom","contentType":"...","template":"..."}. contentType por defecto es application/json. Una template tiene de 1 a 16.384 caracteres, y una plantilla JSON debe generar JSON válido.
secretnoUn secreto whsec_ que codifica de 24 a 64 bytes en base64. Omítelo para que Probara genere uno.

201 con los campos del webhook y un campo secret. El secreto solo se devuelve aquí y al rotar el secreto. Guárdalo en ese momento.

Un cuerpo inválido devuelve 422 validation_failed, por ejemplo sin eventos y sin allEvents, una URL que las reglas del endpoint rechazan, una plantilla no válida o un proyecto que ya tiene 20 webhooks.

Ventana de terminal
curl -sS -X POST \
-H "Authorization: Bearer $PROBARA_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Alertas de release","url":"https://hooks.example.com/probara","allEvents":true}' \
"https://app.probara.net/api/v1/projects/CHK/webhooks"
GET/api/v1/projects/{projectId}/webhooks/{webhookUlid}

Devuelve un webhook. Un webhookUlid desconocido devuelve 404 not_found.

Ventana de terminal
curl -sS \
-H "Authorization: Bearer $PROBARA_API_TOKEN" \
"https://app.probara.net/api/v1/projects/CHK/webhooks/01JC8Z3N0A1B2C3D4E5F6G7H8J"
PATCH/api/v1/projects/{projectId}/webhooks/{webhookUlid}

Actualización parcial. Se requiere al menos un campo. Para cambiar el secreto, usa rotar el secreto.

CampoObligatorioNotas
namenoDe 1 a 120 caracteres
urlnoLas mismas reglas que al crear
eventsnoUna lista no vacía de nombres de evento, salvo que allEvents sea true
allEventsnotrue o false
enablednotrue o false. Activar un webhook reinicia su contador de entregas fallidas.
methodnoPOST, PUT o PATCH
headersnoLas mismas reglas que al crear. La lista reemplaza los encabezados guardados: un nombre que no se incluye se elimina. Un encabezado sin value conserva el valor ya guardado con ese nombre.
payloadnoLas mismas reglas que al crear
Ventana de terminal
curl -sS -X PATCH \
-H "Authorization: Bearer $PROBARA_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"enabled":false}' \
"https://app.probara.net/api/v1/projects/CHK/webhooks/01JC8Z3N0A1B2C3D4E5F6G7H8J"
DELETE/api/v1/projects/{projectId}/webhooks/{webhookUlid}

Devuelve 204 si se completa, y elimina con él el historial de entregas del webhook. Un webhookUlid desconocido devuelve 404 not_found.

Ventana de terminal
curl -sS -X DELETE \
-H "Authorization: Bearer $PROBARA_API_TOKEN" \
"https://app.probara.net/api/v1/projects/CHK/webhooks/01JC8Z3N0A1B2C3D4E5F6G7H8J"
POST/api/v1/projects/{projectId}/webhooks/{webhookUlid}/rotate-secret

Reemplaza el secreto de firma. La respuesta devuelve el secreto nuevo una sola vez. El secreto actual deja de verificar las solicitudes en cuanto lo rotas, así que actualiza tu receptor con el nuevo secreto de inmediato.

200 con { "secret": "whsec_...", "secretHint": "..." }. secretHint contiene los últimos cuatro caracteres del secreto nuevo.

Ventana de terminal
curl -sS -X POST \
-H "Authorization: Bearer $PROBARA_API_TOKEN" \
"https://app.probara.net/api/v1/projects/CHK/webhooks/01JC8Z3N0A1B2C3D4E5F6G7H8J/rotate-secret"
POST/api/v1/projects/{projectId}/webhooks/{webhookUlid}/test

Envía un evento de muestra al webhook, con test en true. La solicitud se intenta una vez, de forma síncrona, sin reintentos. Una prueba nunca cuenta para el contador de fallos.

CampoObligatorioNotas
eventTypenoUn nombre de evento del catálogo. El evento de muestra tiene este tipo. Por defecto, es el primer evento suscrito del webhook, o test_case.created cuando allEvents es true.

201 con una entrega detallada. 409 conflict cuando el webhook está desactivado o el cuerpo de la muestra supera los 256 KiB.

Ventana de terminal
curl -sS -X POST \
-H "Authorization: Bearer $PROBARA_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"eventType":"test_run.closed"}' \
"https://app.probara.net/api/v1/projects/CHK/webhooks/01JC8Z3N0A1B2C3D4E5F6G7H8J/test"
GET/api/v1/projects/{projectId}/webhooks/{webhookUlid}/deliveries

Paginación por página.

ParámetroNotas
pageNúmero de página (desde 1, por defecto 1)
pageSizeElementos por página (por defecto 50, máximo 200)
statuspending, succeeded o failed

200 con { items, page, pageSize, total }. Cada elemento sigue los campos de la entrega.

Ventana de terminal
curl -sS \
-H "Authorization: Bearer $PROBARA_API_TOKEN" \
"https://app.probara.net/api/v1/projects/CHK/webhooks/01JC8Z3N0A1B2C3D4E5F6G7H8J/deliveries?status=failed"
GET/api/v1/projects/{projectId}/webhooks/{webhookUlid}/deliveries/{deliveryUlid}

Devuelve los campos de la entrega y, además, la solicitud que envió Probara y la respuesta que recibió. Los valores de los encabezados personalizados en request.headers aparecen como [redacted].

Ventana de terminal
curl -sS \
-H "Authorization: Bearer $PROBARA_API_TOKEN" \
"https://app.probara.net/api/v1/projects/CHK/webhooks/01JC8Z3N0A1B2C3D4E5F6G7H8J/deliveries/01JC8Z3P9Q8R7S6T5V4W3X2Y1Z"
POST/api/v1/projects/{projectId}/webhooks/{webhookUlid}/deliveries/{deliveryUlid}/redeliver

Envía el mismo evento otra vez como una entrega nueva, con el mismo ID de evento y el mismo cuerpo, a la URL, el método y los encabezados actuales del webhook. El campo redeliveryOf de la entrega nueva contiene el ULID de la entrega que reenvía. Los reenvíos cuentan para el contador de fallos.

202 con los campos de la entrega de la entrega nueva. 409 conflict cuando el webhook está desactivado, o cuando el cuerpo de la entrega nunca se envió por superar los 256 KiB.

Ventana de terminal
curl -sS -X POST \
-H "Authorization: Bearer $PROBARA_API_TOKEN" \
"https://app.probara.net/api/v1/projects/CHK/webhooks/01JC8Z3N0A1B2C3D4E5F6G7H8J/deliveries/01JC8Z3P9Q8R7S6T5V4W3X2Y1Z/redeliver"

Las respuestas de crear, obtener, listar y actualizar devuelven estos campos. Los tiempos son milisegundos Unix desde la época.

CampoTipoNotas
ulidcadena (ULID)Identificador asignado por el servidor
projectUlidcadena (ULID)El proyecto al que pertenece el webhook
namecadenaNombre visible
urlcadenaURL del endpoint
enabledbooleanoIndica si se envían eventos
disabledReasonmanual, failures o nullPor qué el webhook está desactivado: manual cuando una persona lo desactivó, failures cuando Probara lo desactivó tras entregas fallidas
disabledAtnúmero o nullCuándo se desactivó
eventscadena[]Nombres de los eventos suscritos
allEventsbooleanotrue cuando el webhook recibe todos los eventos
methodcadenaPOST, PUT o PATCH
headers{ name }[]Solo los nombres de los encabezados. Los valores solo se escriben.
payloadobjetoLa configuración de la carga útil, como al crear
secretHintcadenaLos últimos cuatro caracteres del secreto de firma
consecutiveFailuresnúmeroEntregas fallidas seguidas
lastDeliveryAtnúmero o nullCuándo se hizo la entrega más reciente
lastDeliveryStatuspending, succeeded, failed o nullEstado de la entrega más reciente
lastSuccessAtnúmero o nullCuándo se hizo la última entrega exitosa
createdAtnúmeroCuándo se creó el webhook
updatedAtnúmeroCuándo se modificó por última vez el webhook

Las respuestas de entregas devuelven estos campos. Los tiempos son milisegundos Unix desde la época.

CampoTipoNotas
ulidcadena (ULID)Identificador de la entrega
webhookUlidcadena (ULID)El webhook
eventIdcadena (ULID)El evento. Es igual al encabezado webhook-id.
eventTypecadenaEl nombre del evento
testbooleanotrue para una entrega de prueba
redeliveryOfcadena (ULID) o nullLa entrega que esta reenvía
statuspending, succeeded o failedEstado actual
attemptsnúmeroIntentos realizados hasta ahora
createdAtnúmeroCuándo se creó la entrega
lastAttemptAtnúmero o nullCuándo se hizo el último intento
nextAttemptAtnúmero o nullCuándo vence el siguiente reintento
responseStatusnúmero o nullEstado HTTP del último intento
durationMsnúmero o nullCuánto duró el último intento
errorcadena o nullPor qué la entrega falló sin una respuesta 2xx, como un tiempo de espera agotado, un error de DNS o TLS, una redirección o un cuerpo de más de 256 KiB

Una entrega detallada añade dos objetos:

CampoTipoNotas
requestobjetomethod, url, headers y body que envió Probara. Los valores de los encabezados personalizados aparecen como [redacted].
responseobjeto o nullstatus, headers y body que devolvió el endpoint. El cuerpo se conserva hasta 4096 bytes, y bodyTruncated indica si se recortó.
EstadoCódigoCuándo
401unauthorizedEl token falta, no es válido o fue revocado
403forbiddenEl token no tiene integrations.manage, o se intenta escribir en un plan sin webhooks
404not_foundEl webhook o la entrega no existe
409conflictSe pide una prueba o un reenvío para un webhook desactivado, se pide un reenvío de una entrega cuyo cuerpo nunca se envió, o el cuerpo de una prueba supera los 256 KiB
422validation_failedEl cuerpo o un parámetro de consulta no es válido, incluida una URL que las reglas del endpoint rechazan, o el proyecto ya tiene 20 webhooks
429too_many_requestsSe superó el límite de frecuencia de escrituras

Crear, actualizar y eliminar un webhook, rotar su secreto y desactivarlo automáticamente generan webhook.created, webhook.updated, webhook.deleted, webhook.secret_rotated y webhook.auto_disabled en el feed de actividad de la organización. Ver Eventos de auditoría.