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
| Type | Fires when | Config |
|---|---|---|
inbound_webhook | Someone POSTs to the trigger's secret URL. | hmac_key optional, 16+ characters |
watermark_advance | A 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_completion | One 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_alert | Preview: not available yet. | none |
Data for each fire
- An inbound request body with CSV (header plus rows), a JSON array of objects, or an object holding one under
data,rowsorrecords. - Otherwise the connection in the target:
credential_idandtable(orcustom_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}"})
| Status | Meaning |
|---|---|
| 202 | { accepted: true, session_id } |
| 400 | No usable data and no connection, or no rows. |
| 401 | Signature missing, expired or wrong. |
| 404 | Unknown secret, or triggers off. |
| 410 | Trigger disabled. |
| 413 / 429 | Too large / rate limited. |
| 502 | The 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
| Option | mode | Each run | Needs |
|---|---|---|---|
| Prepare a new model | full_pipeline | Trains a new session with your pipeline configuration. | Target columns |
| Run inference | inference | Scores the new data with the stored transforms of a completed session. Output columns match that session. | base_session_id |
| Retrain a session | retraining | Refreshes 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 |
| Key | Meaning |
|---|---|
run_mode | full_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_id | Required for inference and retraining. |
target_columns / y_columns | Default: the data's last column. |
output_rows / output_number | Default 10000. |
credential_id, table, custom_query | Connection to read. |
webhook_ids | Webhooks to notify. |
auto_sink | Write output on completion, in every run mode. See Write Output & Auto-Sink. |
max_price_dollars | Optional 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
| Method | Path | Notes |
|---|---|---|
| GET | /api/v1/triggers | List (no secrets). |
| POST | /api/v1/triggers | name, 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}/test | Dry 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.