Browse documentation
2026-09-29AutoDataOpen in dashboard

Triggers

Start runs from an inbound HTTP request, a growing table or another pipeline completing: types, security, target pipeline and API.

What triggers do

A trigger starts a run when something happens outside AutoData. Manage triggers on the Triggers tab or at /api/v1/triggers. Triggers are a server option; when it is off, every trigger route answers 404.

Types

TypeFires whenConfig
inbound_webhookSomeone POSTs to the trigger's secret URL.hmac_key optional, 16+ characters
watermark_advanceA sync watermark grows by at least min_advance; checked every 60 seconds.credential_id, table, watermark_column, min_advance (positive integer); optional source_key
pipeline_completionOne of your runs whose name contains the given text completes (runs started in the last 6 hours); checked every 60 seconds.source_session_name or source_template_id
quality_alertPreview: not available yet.none

Data for each fire

  1. An inbound request body with CSV (header plus rows), a JSON array of objects, or an object holding one under data, rows or records.
  2. Otherwise the connection in the target: credential_id and table (or custom_query).

With neither, the fire is rejected. The dashboard form has no connection field for pipeline-completion triggers; create those through the API with a connection in the target.

Inbound webhook

POST /trigger/inbound/<secret>. The secret URL is returned once, when the trigger is created. Limits: 64 KB body, 10 requests per minute per trigger. Five failed fires in a row disable the trigger (rejected requests do not count).

Signing (when an hmac_key is set)

Send X-Signature: t=<unix seconds>,v1=<hex> where v1 is HMAC-SHA256 with your key over <t>. followed by the raw body. The timestamp must be within 300 seconds.

t = str(int(time.time()))
sig = hmac.new(key, t.encode() + b"." + body, hashlib.sha256).hexdigest()
requests.post(url, data=body, headers={"X-Signature": f"t={t},v1={sig}"})
StatusMeaning
202{ accepted: true, session_id }
400No usable data and no connection, or no rows.
401Signature missing, expired or wrong.
404Unknown secret, or triggers off.
410Trigger disabled.
413 / 429Too large / rate limited.
502The run could not start; may include auto_disabled.

Watermark advance

Watches a watermark from Incremental sync. The first observation is a baseline. After that it fires when a numeric value grows by at least min_advance, or a non-numeric value changes. The watermark must be moved by incremental runs or edits on the Sync tab.

Pipeline completion

Fires once per matching completed run. Chains are limited: at most four chained runs follow an original run.

Target pipeline

OptionmodeEach runNeeds
Prepare a new modelfull_pipelineTrains a new session with your pipeline configuration.Target columns
Run inferenceinferenceScores the new data with the stored transforms of a completed session. Output columns match that session.base_session_id
Retrain a sessionretrainingRefreshes a completed session with the new data, keeping its output schema. Options: remove outlier rows (run_dor), add synthetic rows (run_dsg), target rows (output_number, default 10000).base_session_id
KeyMeaning
run_modefull_pipeline, inference or retraining (default full_pipeline). A mode key counts as the run mode only if it holds one of those values; otherwise it is the speed preset.
base_session_idRequired for inference and retraining.
target_columns / y_columnsDefault: the data's last column.
output_rows / output_numberDefault 10000.
credential_id, table, custom_queryConnection to read.
webhook_idsWebhooks to notify.
auto_sinkWrite output on completion, in every run mode. See Write Output & Auto-Sink.
max_price_dollarsOptional Maximum price per run ($). A run priced above it is held for approval.

Pipeline settings use the shared keys described in the Configuration reference (for example text_mode 0 drop / 1 neural tokenization / 2 TF-IDF / 3 auto, mdh_mode 0 imputation / 1 2D-removal / 2 imputation/dropping, dsg_mode copula or gan, output_number). Every key the pipeline accepts is passed through. Inference and retraining take all of their settings from the base session.

Price per run

Each run is charged the exact price of the data it actually processes, measured when the run starts. Nobody confirms the price first, so you can set an optional Maximum price per run ($) (max_price_dollars). When a triggered run is priced above it, the run is held instead of running and listed under Runs → Waiting for approval with its price and the limit. Approve starts it at that price, and it is charged exactly that; Discard drops it. You are notified by a job.held webhook event and, if you receive failure emails, by email. Leave the field empty for no limit. The limit applies to runs that prepare a new model. See Account and billing.

API

MethodPathNotes
GET/api/v1/triggersList (no secrets).
POST/api/v1/triggersname, trigger_type, config, target_pipeline_config, enabled. 201; inbound triggers include webhook_secret and inbound_url once.
GET/api/v1/triggers/{id}One trigger.
PUT/api/v1/triggers/{id}name, enabled, config, target_pipeline_config.
DELETE/api/v1/triggers/{id}Delete.
POST/api/v1/triggers/{id}/testDry run: { would_fire, checks }; starts nothing.

Python SDK: list_triggers(), create_trigger(name, trigger_type, config=None, target_pipeline_config=None, enabled=True, mode="full_pipeline", base_session_id=None), get_trigger(id), update_trigger(id, **fields), delete_trigger(id), test_trigger(id).

LM Readiness runs

A new-model run can be LM Readiness instead of the classic pipeline: choose it under Job at the top of the configuration pop-up. It uses the same settings as the LM Readiness tab and is stored as lm_readiness in pipeline_config.

For inference and retraining, the base session decides: an LM Readiness session is replayed as LM Readiness (inference), or prepared again with its own LM Readiness settings (retraining). Outlier removal and synthetic rows do not apply to it. Each run accepts up to 200,000 rows.