Dynamiq
Deploy & Integrate

Triggers

Invoke a deployed App automatically on a cron schedule, at a one-off time, or when an event arrives from a connected app such as Slack or email.

A Trigger invokes your deployed App without anyone calling its endpoint. Dynamiq supports exactly two trigger types: Schedule triggers (recurring cron, or a one-off run at a fixed time) and App event triggers, which fire when an event arrives from an external app — Slack messages, incoming emails, and hundreds of other sources delivered through the action connector infrastructure.

Trigger types

TypeProvider valueFires when
SchedulescheduleA cron expression matches (minute precision), or once at a fixed run_at time
App eventpipedreamA configured app-event source emits an event (e.g. "New message in channel" for Slack)

A schedule's cron expression is evaluated once per minute in the trigger's timezone. Recurring schedules can carry an optional expiration time, after which they stop firing.

Create a trigger in the UI

Open the Triggers tab

Open your App and switch to the Triggers tab, then click Create trigger.

The Triggers tab of an App with the Create trigger button and the triggers table

Name it and pick a type

Enter a Name and choose a Trigger type:

  • App event — "Trigger from a connected app's event"
  • Schedule — "Run on a recurring schedule or once"
A trigger name cannot be changed after creation.

Configure a Schedule trigger

The schedule editor has three modes — Recurring, One-time, and Cron:

  • Recurring builds the cron expression for you from a frequency: Every N minutes, Hourly (pick a minute), Daily, Weekly (pick weekdays), or Monthly (pick a day of month), plus a time of day for daily, weekly, and monthly schedules.
  • One-time takes a single run date/time, which must be in the future.
  • Cron accepts a raw cron expression directly.

Below the schedule, pick the Timezone (an IANA timezone name; defaults to your browser's timezone) and, for recurring and cron modes, an optional Stops at expiration. One-time triggers cannot have an expiration.

The Create trigger side sheet with the Recurring/One-time/Cron schedule mode switch, timezone select, and Stops at field

Or configure an App event trigger

Pick the source app and event (for example a Slack "new message" trigger), connect the account it should listen with, and fill in the event's configuration fields. After creation, use the Input mappings action on the trigger row to map fields from the incoming event payload onto your App's input.

Create

Click Create. The trigger appears in the table with its Name, Status, Type (Schedule or App event), Trigger summary, Updated by, and created/updated timestamps.

Activate, deactivate, edit, delete

Each row has inline actions:

  • Activate / Deactivate — toggles whether the trigger fires; both ask for confirmation. Deactivating keeps the configuration so you can re-activate later.
  • Edit — opens the schedule editor for Schedule triggers, or the Input mappings modal for App event triggers.
  • Delete — removes the trigger permanently.

Trigger events log

Click a trigger's name to open its events page (Triggers › <name> - Events). Each received event shows its Status, the raw Payload (click to open the full payload in a side sheet), and Received at time, newest first. This is the first place to look when a trigger fired but the run didn't behave as expected — you can see exactly what payload arrived.

The trigger events page listing received events with status, payload preview, and received-at time

screenshot: deployments-trigger-events-list

Manage triggers via the API

All trigger management lives under the App:

MethodPathPurpose
GET/v1/apps/{app_id}/triggersList triggers
POST/v1/apps/{app_id}/triggersCreate a trigger
GET/v1/apps/{app_id}/triggers/{trigger_id}Get one trigger
PUT/v1/apps/{app_id}/triggers/{trigger_id}Update config / input transformer
POST/v1/apps/{app_id}/triggers/{trigger_id}/activateActivate
POST/v1/apps/{app_id}/triggers/{trigger_id}/deactivateDeactivate
POST/v1/apps/{app_id}/triggers/{trigger_id}/runRun the trigger manually, now
DELETE/v1/apps/{app_id}/triggers/{trigger_id}Delete
GET/v1/apps/{app_id}/triggers/{trigger_id}/eventsList received events (newest first)
GET/v1/apps/{app_id}/triggers/{trigger_id}/events/{event_id}Get one event

Create payload

namestringrequired
Display name. Cannot be changed after creation — the update endpoint does not accept name.
providerstring
Either "schedule" or "pipedream". Defaults to "pipedream" when omitted.
configobjectrequired
Provider-specific configuration (see below).
input_transformerobject
Optional mapping with a path and a selector object that maps event payload fields onto your App input.

Schedule config fields — exactly one of schedule or run_at must be set:

schedulestring
Cron expression for recurring triggers.
run_atstring (RFC 3339)
One-off run time; must be in the future.
timezonestringrequired
IANA timezone the schedule is evaluated in, e.g. "Europe/Berlin".
expires_atstring (RFC 3339)
When the trigger stops firing. Only allowed with schedule, not with run_at; must be in the future.

config fields for app-event triggers:

trigger_idstringrequired
The event source component key, e.g. a Slack new-message trigger.
configured_propsobject
The source component’s configured properties, including the connected account.
dynamic_props_idstring
Identifier for dynamically loaded component props, when the source uses them.

Examples

# Create a recurring schedule trigger: weekdays at 09:00 Berlin time
curl -X POST "https://api.getdynamiq.ai/v1/apps/$APP_ID/triggers" \
  -H "Authorization: Bearer $DYNAMIQ_PAT" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "daily-digest",
    "provider": "schedule",
    "config": {
      "schedule": "0 9 * * 1-5",
      "timezone": "Europe/Berlin",
      "expires_at": "2026-12-31T23:59:00Z"
    }
  }'

# Run it manually right now
curl -X POST "https://api.getdynamiq.ai/v1/apps/$APP_ID/triggers/$TRIGGER_ID/run" \
  -H "Authorization: Bearer $DYNAMIQ_PAT"

# Deactivate it
curl -X POST "https://api.getdynamiq.ai/v1/apps/$APP_ID/triggers/$TRIGGER_ID/deactivate" \
  -H "Authorization: Bearer $DYNAMIQ_PAT"
import os
import requests

API = "https://api.getdynamiq.ai"
headers = {"Authorization": f"Bearer {os.environ['DYNAMIQ_PAT']}"}
app_id = os.environ["APP_ID"]

# Create a one-off schedule trigger
resp = requests.post(
    f"{API}/v1/apps/{app_id}/triggers",
    headers=headers,
    json={
        "name": "one-off-import",
        "provider": "schedule",
        "config": {
            "run_at": "2026-06-15T08:00:00Z",
            "timezone": "UTC",
        },
    },
)
resp.raise_for_status()
trigger = resp.json()["data"]

# List the events it has received
events = requests.get(
    f"{API}/v1/apps/{app_id}/triggers/{trigger['id']}/events",
    headers=headers,
).json()["data"]
print(events)
const API = 'https://api.getdynamiq.ai';
const headers = {
  Authorization: `Bearer ${process.env.DYNAMIQ_PAT}`,
  'Content-Type': 'application/json',
};
const appId = process.env.APP_ID;

// Create a recurring schedule trigger
const created = await fetch(`${API}/v1/apps/${appId}/triggers`, {
  method: 'POST',
  headers,
  body: JSON.stringify({
    name: 'hourly-sync',
    provider: 'schedule',
    config: { schedule: '0 * * * *', timezone: 'UTC' },
  }),
});
const { data: trigger } = await created.json();

// Activate it
await fetch(`${API}/v1/apps/${appId}/triggers/${trigger.id}/activate`, {
  method: 'POST',
  headers,
});

Invalid schedules are rejected at create time: a malformed cron expression, a run_at in the past, an expires_at in the past, or an expires_at combined with run_at all return a validation error.

Next steps

On this page