Automation

List triggers

Page through tenant triggers by target, kind and state.

Page through tenant triggers by target, kind and state. ns/name matches all tags or versions of that target; ns/name@spec matches exactly.

GET /automation/v1/triggers

Authentication

Authorization: Bearer $PRAXIS_API_KEY

Request fields

ParameterTypeDescription
query: limitintegeroptional; Page size: integer 1–100, default 25. minimum: 1; maximum: 100
query: cursorstringoptional; Opaque next_cursor from the previous page; keep the original filters when paging.
query: targetstring[]optional; ns/name matches all versions or tags of a target; ns/name@spec matches the stored reference exactly. Separate multiple values with commas to match any value. minItems: 1
query: kind"schedule" / "webhook"[]optional; schedule or webhook; omit for both. Separate multiple values with commas to match any value. minItems: 1
query: state"enabled" / "paused" / "expired"[]optional; Trigger state: enabled, paused or expired; omit for all. Separate multiple values with commas to match any value. minItems: 1
query: labelsobjectoptional; Filter using labels[k]=v; comma-separated values for one key match any, and different keys match together.
query: created_at[gte]stringoptional; Inclusive creation-time lower bound, as an ISO 8601 timestamp with timezone. format: "date-time"
query: created_at[lte]stringoptional; Inclusive creation-time upper bound, as an ISO 8601 timestamp with timezone. format: "date-time"

Examples

Set these environment variables to your own resources:

: "${TARGET:?Set TARGET}"
curl --fail-with-body -X GET "https://api.deepraxis.ai/automation/v1/triggers" \
  -H "Authorization: Bearer $PRAXIS_API_KEY" \
  --get \
  --data-urlencode "target=${TARGET}"
import { createAutomationClient } from '@deepraxis/sdk/automation';

function env(name: string): string {
  const value = process.env[name];
  if (!value) throw new Error(`Set ${name}`);
  return value;
}
const automation = createAutomationClient({
  apiKey: env('PRAXIS_API_KEY'),
  baseUrl: 'https://api.deepraxis.ai',
  maxRetries: 0,
  timeoutMs: 90_000,
});
const result = await automation.triggers.list({
  "query": {
    "target": [
      env("TARGET")
    ]
  }
});
console.log(result);

Response

HTTP 200

Success

application/json

FieldTypeDescription
dataobject[]required; Triggers on this page, ordered by created_at descending, then id descending.
data[].namestringrequired; Trigger name, 1–100 characters. minLength: 1; maxLength: 100
data[].descriptionstringrequired; Trigger description, at most 1000 characters. maxLength: 1000
data[].labelsobjectrequired; Trigger tags as string key and value pairs, at most 64; keys must not start with the reserved prefix praxis. (400 INPUT_INVALID).
data[].targetstringrequired; Script or workflow to run, as ns/name@tag-or-version; it follows latest by default, and @1.2.0 pins a version.
data[].inputnull / string / number / boolean / object / JSON[]required; Any JSON value: null, boolean, number, string, array or object.
data[].input (variant 5).*null / string / number / boolean / object / JSON[]Recursive JSON value.
data[].input (variant 6)[]null / string / number / boolean / object / JSON[]Recursive JSON value.
data[].kind"schedule" / "webhook"required; Trigger kind. schedule fires on a plan (cron, every or at); webhook fires on an inbound HTTP request.
data[].scheduleobject / object / object / nullrequired; Schedule rule for kind=schedule, exactly one of cron, every or at; null for webhooks.
data[].schedule (variant 1) (variant 1).cronstringrequired; Five fields; supports L, W, #. DST gaps skip the day and overlaps run once.
data[].schedule (variant 1) (variant 2).everystring / objectrequired; A duration: an ISO 8601 string such as PT5M, or an object with days, hours, minutes, seconds and milliseconds. It must convert to a whole number of milliseconds between 60000 and 31622400000 (1 minute to 366 days).
data[].schedule (variant 1) (variant 2).every (variant 2).daysintegeroptional; Number of days, a non-negative integer. minimum: 0
data[].schedule (variant 1) (variant 2).every (variant 2).hoursintegeroptional; Number of hours, a non-negative integer. minimum: 0
data[].schedule (variant 1) (variant 2).every (variant 2).minutesintegeroptional; Number of minutes, a non-negative integer. minimum: 0
data[].schedule (variant 1) (variant 2).every (variant 2).secondsintegeroptional; Number of seconds, a non-negative integer. minimum: 0
data[].schedule (variant 1) (variant 2).every (variant 2).millisecondsintegeroptional; Number of milliseconds, a non-negative integer. minimum: 0
data[].schedule (variant 1) (variant 3).atstringrequired; Instant of a one-time firing (RFC 3339 UTC); it cannot be in the past or more than one year ahead. The trigger becomes expired after it runs. format: "date-time"
data[].timezonestringrequired; IANA time zone name used to interpret the schedule; UTC by default through the API. default: "UTC"
data[].start_atstring / nullrequired; Start time of a scheduled trigger (RFC 3339 UTC); it does not fire before then. null for no limit.
data[].end_atstring / nullrequired; End time of a scheduled trigger (RFC 3339 UTC); after it the trigger becomes expired. null for no end.
data[].overlap"skip" / "allow"required; Overlap policy when a firing is due while the previous run is still active: skip (default) skips it, allow starts it anyway. default: "skip"
data[].catchup_window_secondsintegerrequired; Catch-up window in seconds, default 300, for scheduled triggers only: if a firing is later than this (downtime, pause) it is recorded as missed and not run. default: 300; minimum: 0
data[].webhookobject / nullrequired; Webhook settings for kind=webhook; null for scheduled triggers.
data[].webhook (variant 1).input_mode"body" / "envelope"required; Shape of the input a webhook delivery gives the target. body (default) passes only the request body; envelope passes an object with body, raw_body, raw_body_encoding, headers, webhook_id and received_at.
data[].webhook (variant 1).url_hintstringrequired; Masked webhook address with an ellipsis replacing the secret token; it cannot be invoked. Newly created triggers use a full public URL; historical records may contain a relative /automation/v1/hooks/{id}/… path.
data[].idstringrequired; Trigger id, prefixed trg_; used in the webhook address and by every trigger endpoint.
data[].ownerstringrequired; Tenant that owns the trigger, injected by the gateway; treat it as an opaque string.
data[].state"enabled" / "paused" / "expired"required; Trigger state. enabled fires on schedule or request; paused does not fire; expired is final, reached after a one-time trigger has run or end_at has passed, and no longer fires.
data[].source"api" / "definition"required; Origin of the trigger. api was created through the API and can be changed and deleted; definition was generated from the schedule in a workflow YAML and can only be paused or resumed, changes return 409 TRIGGER_MANAGED.
data[].created_byobjectrequired; Principal {type, id} injected by the gateway that says who initiated or acted. This service does not resolve names; the console resolves them in batches. no additional fields.
data[].created_by.type"user" / "api_key" / "agent" / "run" / "trigger"required; Principal type. user is a signed-in user; api_key is a platform API key; agent is an agent; run is an action performed by a run itself (for example a parent run); trigger is a trigger.
data[].created_by.idstringrequired; Principal identifier whose meaning follows type: a user, API key, agent, run or trigger id. Treat it as an opaque string.
data[].created_by_user_idstringrequired; Real user id of the creator, forwarded by the gateway; runs the trigger starts take their token from this user, for audit and usage attribution.
data[].next_fire_timesstring[]required; Up to the next 5 firing times (RFC 3339 UTC); empty for webhook, paused or expired triggers. maxItems: 5
data[].last_firingobject / nullrequired; The most recent firing record, or null if it has never fired.
data[].last_firing (variant 1).idstringrequired; Firing record id; records are kept for 30 days.
data[].last_firing (variant 1).trigger_idstringrequired; Id (trg_) of the trigger this firing belongs to.
data[].last_firing (variant 1).scheduled_atstringrequired; Planned firing time (RFC 3339 UTC); for webhooks, the time the request arrived. format: "date-time"
data[].last_firing (variant 1).fired_atstringrequired; Time the firing actually happened (RFC 3339 UTC). format: "date-time"
data[].last_firing (variant 1).outcome"accepted" / "started" / "skipped_overlap" / "missed" / "failed" / "deduped"required; Firing outcome. accepted means persisted and awaiting processing; started means a run was created; skipped_overlap means skipped because the previous run was still active; missed means it was later than the catch-up window and was not run; failed means creating the run failed; deduped means it repeated a webhook-id seen within 24 hours.
data[].last_firing (variant 1).run_idstring / nullrequired; Id (run_) of the run this firing created, or null if no run was created.
data[].last_firing (variant 1).resolved_versionstring / nullrequired; Exact version this firing resolved to; null when not yet resolved or when it failed before resolving.
data[].last_firing (variant 1).errorobject / nullrequired; Reason {code, message} when the firing failed; null otherwise.
data[].last_firing (variant 1).error (variant 1).codestringrequired; Error code of the failure.
data[].last_firing (variant 1).error (variant 1).messagestringrequired; Message describing the failure.
data[].countsobjectrequired; Cumulative firing counts {started, skipped, missed, failed}. no additional fields.
data[].counts.startedintegerrequired; Number of firings that started a run. minimum: 0
data[].counts.skippedintegerrequired; Number of firings skipped because overlap is skip and the previous run was still active. minimum: 0
data[].counts.missedintegerrequired; Number of firings missed because they were later than the catch-up window. minimum: 0
data[].counts.failedintegerrequired; Number of firings where creating the run failed. minimum: 0
data[].created_atstringrequired; Creation time (RFC 3339 UTC). format: "date-time"
data[].updated_atstringrequired; Time of the last update (RFC 3339 UTC). format: "date-time"
data[].etagstringrequired; Current revision tag of the trigger; send it as If-Match when updating, and a mismatch returns 412.
data[].usage_30dobject / nulloptional; Returned only by GET /triggers/{id}, omitted from lists. Attributed charges over the preceding 30 days for this trigger's runs and descendants. Runs themselves are free; these are actual charges for capabilities such as models and search called during runs, attributed by call. Unrated usage is included later. Aggregation failure or timeout (1.5 seconds) returns null while details still return 200.
data[].usage_30d (variant 1).currency"USD"required; Charge currency, always USD.
data[].usage_30d (variant 1).coststringrequired; Rated actual charges as an exact dollar decimal string with six fractional digits; 0.000000 when there is no usage. pattern: "^[0-9]+\.[0-9]{6}$"
data[].usage_30d (variant 1).pending_eventsintegerrequired; Number of unrated usage events whose charges will be included later. minimum: 0
next_cursorstring / nullrequired; Cursor for the next page: pass it unchanged as cursor with the same filters; null when there are no more pages. No total is returned.

Measured response

HTTP 200

{
  "data": [
    {
      "id": "trg_00mv67mzzqa0d63b98d72446dd9d1331051a3e100e",
      "owner": "tnt_3a9759864ccb4e00",
      "name": "sample-webhook-1791867412840-b05e8a",
      "description": "",
      "labels": {
        "namespace": "docs-samples"
      },
      "target": "docs-samples/sample-scripts-1791867412840-b05e8a@1.0.0",
      "input": {},
      "kind": "webhook",
      "schedule": null,
      "timezone": "UTC",
      "start_at": null,
      "end_at": null,
      "overlap": "skip",
      "catchup_window_seconds": 300,
      "webhook": {
        "input_mode": "body",
        "url_hint": "https://api-develop.deepraxis.ai/automation/v1/hooks/trg_00mv67mzzqa0d63b98d72446dd9d1331051a3e100e/…"
      },
      "state": "paused",
      "source": "api",
      "created_by": {
        "type": "api_key",
        "id": "key_3e00b8984967"
      },
      "created_by_user_id": "usr_49d4fcb99517",
      "next_fire_times": [],
      "last_firing": null,
      "counts": {
        "started": 0,
        "skipped": 0,
        "missed": 0,
        "failed": 0
      },
      "created_at": "2026-10-13T04:58:09.974Z",
      "updated_at": "2026-10-13T04:58:12.519Z",
      "etag": "etag_00mv67n1yf40e7b8d39ce5459d9ce835bfb1083701"
    }
  ],
  "next_cursor": null
}

Errors

HTTPCodes and description
400INVALID_PARAMS: Invalid request parameters, path, cursor, or body format.
defaultRFC 9457 automation problem. 429 includes Retry-After.

Authentication and common errors · Retain the X-Request-Id response header for troubleshooting.

Export

On this page