---
title: "Simulate event matching (dry run)"
method: POST
path: "/events/dry-run"
tags: ["Events"]
---

# Simulate event matching (dry run)

`POST /events/dry-run`

Simulate an event against all configured flows. Returns which flows would match and what actions would run, without storing the event or enqueuing jobs.

## Request body

- IngestEventBody
  - `eventType` string, required
  - `payload` object

## Response `200`

Dry-run result

- object
  - `data` DryRunResult, required
    - `validation` DryRunValidation, required
      - `valid` boolean, required
      - `errors` object[]
        - `field` string, required
        - `message` string, required
    - `matchedFlows` DryRunMatchedFlow[], required
      - `flow` Flow, required
        - `id` string, uuid, required
        - `userId` string, uuid, required
        - `name` string, required
        - `description` string, nullable, required
        - `triggerId` string, uuid, required
        - `enabled` boolean, required
        - `deviceIds` string[], required
        - `cooldownSeconds` integer, nullable, required
        - `cooldownScope` 'flow' | 'device', required
        - `notifyWebhookId` string, uuid, nullable, required
        - `notifyOnSuccess` boolean, required
        - `notifyOnFailure` boolean, required
        - `lastTriggeredAt` string, nullable, required
        - `status` 'healthy' | 'failing' | 'blocked', required
        - `consecutiveFailures` integer, required
        - `lastFailureCode` 'device_not_found' | 'permission_denied' | 'client_error' | 'transient' | 'logic' | 'invalid_config', nullable, required
        - `lastFailureAt` string, nullable, required
        - `blockedAt` string, nullable, required
        - `createdAt` string, nullable, required
        - `updatedAt` string, nullable, required
      - `trigger` object, required
        - `id` string, uuid, required
        - `userId` string, uuid, required
        - `name` string, required
        - `description` string, nullable, required
        - `activation` 'event' | 'schedule' | 'custom', required
        - `scheduleRule` object, nullable, required
          - `type` 'once' | 'cron' | 'recurring', required
          - `dateTime` string — ISO 8601 datetime (for type=once)
          - `expression` string — Cron expression (for type=cron)
          - `rrule` string — RRULE string (for type=recurring)
        - `timezone` string, nullable, required
        - `nextFireTime` string, nullable
        - `eventType` string, nullable, required
        - `conditions` unknown
        - `customPayloadSchema` object, nullable, required
        - `createdAt` string, nullable, required
        - `updatedAt` string, nullable, required
      - `actions` ResolvedAction[], required
        - `name` string, required
        - `service` 'tasks_api' | 'devices_api' | 'agents_api' | 'webhooks', required
        - `method` string, required
        - `params` object
        - `continueOnError` boolean, required
        - `children` unknown[] — Nested child actions (loop/branch bodies), each the same shape as a ResolvedAction.
          - unknown
      - `gates` DryRunGates, required
        - `enabled` boolean, required
        - `deviceAttached` boolean, required
        - `deviceIds` string[], required
        - `blocked` boolean, required
        - `cooldownActive` boolean, nullable, required
      - `wouldFire` boolean, required

---

[API](https://skmtc.net/droidrun/apis/droidrun-cloud.md) · [All operations](https://skmtc.net/droidrun/apis/droidrun-cloud/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/droidrun/droidrun-cloud/versions/7f577998739b/schema)
