---
title: "Emitir un fixture de webhook"
method: POST
path: "/test_helpers/webhook_events"
tags: ["testHelpers"]
---

# Emitir un fixture de webhook

`POST /test_helpers/webhook_events`

Persiste una `Activity` de prueba y entrega el evento por la misma aplicación
Svix del Sandbox autenticado. Acepta cualquier tipo del catálogo público y es
útil para validar firmas, routing, reintentos e idempotencia del consumer.

La respuesta contiene el payload base normalizado. Recurrente genera y
reemplaza los campos reservados `data.id` y `data.created_at`, aunque el
request envíe otros valores. La entrega Svix agrega `data.event_type` y
`data.sandbox_id` como contexto estándar.

El fixture no crea el grafo de dominio del evento. Por ejemplo,
`dispute.create` entrega el contrato del webhook, pero no crea una disputa ni
movimientos financieros. Para validar comportamiento end-to-end, ejecuta el
flujo real y observa sus webhooks naturales.

Este endpoint solo existe para llaves de Sandboxes nombrados. Una llave LIVE
recibe `404` para evitar que una suite de pruebas emita fixtures en producción.

## Headers

- `X-SECRET-KEY` string, required

## Request body

- SandboxWebhookEventRequest
  - `event_type` 'account_connection.create' | 'automated_bank_transfer_intent.succeeded' | 'balance_intent.paid' | 'balance_intent.succeeded' | 'bank_transfer_intent.create' | 'bank_transfer_intent.failed' | 'bank_transfer_intent.pending' | 'bank_transfer_intent.succeeded' | 'bank_transfer_intent.update' | 'cash_intent.succeeded' | 'connected_account_fee_invoice.failed' | 'connected_account_fee_invoice.issued' | 'crypto_intent.create' | 'crypto_intent.pending' | 'crypto_intent.succeeded' | 'crypto_intent.update' | 'dispute.create' | 'dispute.update' | 'intent.canceled' | 'intent.failed' | 'intent.paid' | 'intent.pending' | 'intent.succeeded' | 'partner_commission_invoice.failed' | 'partner_commission_invoice.issued' | 'payment_intent.failed' | 'payment_intent.requires_capture' | 'payment_intent.requires_verification' | 'payment_intent.succeeded' | 'refund.create' | 'setup_intent.cancelled' | 'setup_intent.succeeded' | 'subscription.cancel' | 'subscription.create' | 'subscription.invoice_item_added' | 'subscription.item_added' | 'subscription.item_removed' | 'subscription.past_due' | 'subscription.pause' | 'subscription.reactivate' | 'subscription.unpause' | 'subscription.update' | 'swap.create' | 'swap.update' | 'transfer.received' | 'transfer.sent' | 'verification.rejected' | 'withdrawal.create' | 'withdrawal.update', required — Tipo de evento publicado que debe emitir el fixture.
  - `data` object — Campos del payload de prueba. Recurrente reemplaza `id` y `created_at` con la identidad y fecha persistidas del fixture.

## Response `201`

Fixture persistido y encolado para entrega

- SandboxWebhookEvent
  - `id` string, required
  - `event_type` 'account_connection.create' | 'automated_bank_transfer_intent.succeeded' | 'balance_intent.paid' | 'balance_intent.succeeded' | 'bank_transfer_intent.create' | 'bank_transfer_intent.failed' | 'bank_transfer_intent.pending' | 'bank_transfer_intent.succeeded' | 'bank_transfer_intent.update' | 'cash_intent.succeeded' | 'connected_account_fee_invoice.failed' | 'connected_account_fee_invoice.issued' | 'crypto_intent.create' | 'crypto_intent.pending' | 'crypto_intent.succeeded' | 'crypto_intent.update' | 'dispute.create' | 'dispute.update' | 'intent.canceled' | 'intent.failed' | 'intent.paid' | 'intent.pending' | 'intent.succeeded' | 'partner_commission_invoice.failed' | 'partner_commission_invoice.issued' | 'payment_intent.failed' | 'payment_intent.requires_capture' | 'payment_intent.requires_verification' | 'payment_intent.succeeded' | 'refund.create' | 'setup_intent.cancelled' | 'setup_intent.succeeded' | 'subscription.cancel' | 'subscription.create' | 'subscription.invoice_item_added' | 'subscription.item_added' | 'subscription.item_removed' | 'subscription.past_due' | 'subscription.pause' | 'subscription.reactivate' | 'subscription.unpause' | 'subscription.update' | 'swap.create' | 'swap.update' | 'transfer.received' | 'transfer.sent' | 'verification.rejected' | 'withdrawal.create' | 'withdrawal.update', required — Tipo de evento publicado que debe emitir el fixture.
  - `data` object, required — Payload base normalizado, incluidos `id` y `created_at`. La entrega Svix agrega `event_type` y `sandbox_id`.
  - `created_at` string, date-time, required

## Other responses

- `400` — Falta `event_type`
- `404` — La llave autenticada no pertenece a un Sandbox
- `422` — `event_type` no pertenece al catálogo publicado

---

[API](https://skmtc.dev/recurrente/apis/referencia-api.md) · [All operations](https://skmtc.dev/recurrente/apis/referencia-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/recurrente/referencia-api/revisions/f494a078482c/schema)
