Batches
A batch represents one triggering event and groups every execution it produced. Key fields:trigger_type and trigger_source are two independent dimensions. Type is the deterministic entry point (api_call / webhook / schedule / event); source is the free-form caller label you pass at trigger time. Filter or group on either one. See Triggers for the full model.Batch status lifecycle
A batch moves
pending → running → completed | partially_failed | failed. Passing scheduled_at at trigger time inserts a scheduled stage before running. Only pending or scheduled batches can be cancelled (DELETE /batches/{id}) — anything already running returns 409.
Account-wide runs feed
GET /batches lists every batch across all of your definitions, newest first — the backing feed for a “recent runs” screen. GET /definitions/{id}/batches is the same feed scoped to a single definition.
The response is the converged
Page envelope — items, total, limit, skip, and next_cursor. This is a data-family feed, so total is always null; page forward until next_cursor is null, which signals no more rows. Only your own account’s batches are ever returned.
Executions
An execution is one durable run processing one set of inputs. Each belongs to exactly one batch:Execution status lifecycle
An execution moves
pending → running → completed | failed. List a batch’s executions with GET /batches/{batch_id}/executions and fetch one with GET /executions/{id}.
Per-step run detail
GET /executions/{id} embeds a per-step breakdown so a run-detail screen renders in one call — the step list is bounded by the definition’s task chain, so there is no pagination and no per-step endpoint.
Two fields carry it:
steps_source is always set on the detail route so a client can distinguish “this run genuinely has no steps” from “step detail isn’t available for this run”:
steps and steps_source are populated only on the single-execution detail route (GET /executions/{id}). The executions list route leaves them null — it isn’t the run-detail consumer.Single-record vs. multi-record triggers
A trigger creates executions in one of two shapes:- Single-record — pass
input_data. The batch hasrecord_count: 1and one execution that receives yourinput_data. - Multi-record (fan-out) — pass a
recordsarray (up to 15,000,000 records). One execution is created per record, each receiving that record as its input. The batch’srecord_countis the array length, and its final status aggregates all children: all succeed →completed, all fail →failed, a mix →partially_failed.
Recurring triggers: schedules
To run a definition on a repeating cadence, create a schedule withPOST /schedules. Each fire creates a normal batch — visible under GET /definitions/{id}/batches with trigger_type: "schedule" and a schedule_id pointing back at the schedule — so the batch and execution lifecycle above applies unchanged.
Fire behavior is fixed: if a previous fire is still running when the next tick arrives, that tick is skipped, not queued. Missed fires during downtime are replayed only within a 60-second catch-up window.
Manage schedules with
PATCH /schedules/{id} (change the cron expression, pause/resume with enabled, update input_data) and DELETE /schedules/{id} — deleting a schedule never affects batches it already fired.