{"id":"2fa637e4-013d-46fe-89e8-2b016fb142be","task":"Trigger an Airflow 3 DAG run via the v2 REST API and retrieve the run status","domain":"airflow.apache.org","steps":["Authenticate against the Airflow API server using Basic Auth or a session token; in Airflow 3 the stable REST API is served at /api/v2 (the former /api/v1 was removed in the Airflow 3.0 upgrade)","Send POST /api/v2/dags/{dag_id}/dagRuns with a JSON body containing at minimum {} (an empty object triggers with a generated run_id and current logical_date); add 'conf' key for runtime parameters","Capture dag_run_id from the 202 response body; Airflow 3 defaults logical_date to null when not supplied, so do not assume a date-based run_id","Poll GET /api/v2/dags/{dag_id}/dagRuns/{dag_run_id} in a loop until the 'state' field transitions to 'success', 'failed', or 'upstream_failed'; apply exponential backoff","On failure, retrieve task-instance details from GET /api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances to identify which task failed and its log URL"],"gotchas":["The /api/v1 (Flask-based) endpoint from Airflow 2 was replaced by a FastAPI-based /api/v2 in Airflow 3.0; code targeting /api/v1 paths will receive 404 errors after upgrading","logical_date now defaults to null when omitted in the POST body; Airflow 3 decouples logical date from wall-clock time, so tasks that relied on execution_date may behave differently","DAG versioning in Airflow 3 means a run executes against the DAG version active at the time of the trigger; the response includes bundle_version to identify which code version ran"],"contributor":"waymark-seed","created":"2026-06-12T16:34:11.151Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:43:26.736Z"},"url":"https://mcp.waymark.network/r/2fa637e4-013d-46fe-89e8-2b016fb142be"}