Webhook Time Travel

Replay an event through a historical canvas snapshot to see what would have happened under a previous configuration — without actually delivering anything.

Overview

Time Travel performs a dry-run simulation of an existing event against a saved canvas snapshot. It walks the event through each node in the snapshot's pipeline and reports which nodes would process it, what each node would do, and the final outcome.

This is invaluable for debugging questions like: "Why did this event fail last Tuesday?" or "If I had that schema validator in place, would it have caught this bad payload?"

Time Travel is read-only. No deliveries, side effects, or state changes occur. The event and webhook are not modified.

How to use

1

Find the event to replay

Navigate to the event detail view from the webhook's event list. Copy the event ID.

2

Select a canvas snapshot

Go to /dashboard/flows and open the Snapshots panel. Identify the snapshot that represents the historical configuration you want to test against.

3

Run the time travel simulation

Use the API (below) or click "Time Travel" in the event detail drawer and select the target snapshot.

4

Review the results

Inspect each step to see which nodes would have processed the event, in what order, and with what outcome.


API

POST /api/events/:id/time-travel

Request

jsonRequest body
{
  "snapshotId": "664a1f2e8b1c4a001f2d3e4f"
}

Response

jsonResponse
{
  "eventId": "664a1f2e8b1c4a001f2d0001",
  "snapshotId": "664a1f2e8b1c4a001f2d3e4f",
  "snapshotName": "Production flow v3",
  "finalStatus": "DELIVERED",
  "matchedNodes": [
    "wh-abc123",
    "sv-def456",
    "fo-ghi789"
  ],
  "steps": [
    {
      "order": 1,
      "nodeId": "wh-abc123",
      "nodeType": "webhook",
      "nodeName": "Stripe Payments",
      "action": "RECEIVE",
      "status": "PASS",
      "detail": "Event accepted by webhook"
    },
    {
      "order": 2,
      "nodeId": "sv-def456",
      "nodeType": "schemaValidator",
      "nodeName": "Payment Schema",
      "action": "VALIDATE",
      "status": "PASS",
      "detail": "Payload matches schema: 5/5 fields valid"
    },
    {
      "order": 3,
      "nodeId": "ha-ghi789",
      "nodeType": "httpAction",
      "nodeName": "Slack Notification",
      "action": "HTTP_REQUEST",
      "status": "WOULD_DELIVER",
      "detail": "Would POST to https://hooks.slack.com/..."
    }
  ]
}

Step fields

FieldDescription
orderSequential step number in the pipeline
nodeIdCanvas node ID from the snapshot
nodeTypeNode type (webhook, schemaValidator, httpAction, alert, etc.)
nodeNameHuman-readable node name
actionWhat this node does (RECEIVE, VALIDATE, DELIVER, HTTP_REQUEST, FILTER, TRANSFORM, etc.)
statusSimulated outcome: PASS, FAIL, WOULD_DELIVER, BLOCKED, SKIPPED
detailExplanation of what happened or would happen at this step

Common use cases

  • Post-incident analysis: Replay failed events through the snapshot from before a config change to understand what went wrong.
  • Pre-deployment validation: Save a snapshot of your planned changes, then replay recent events to see if they would still pass.
  • Schema validation testing: Add a schema validator to a snapshot and replay events to see how many would be blocked.
Combine Time Travel with Contract Testing for a comprehensive view of schema drift over time.