3.0.0
This is the first release of the Airflow 3.0.0 Python client. It introduces compatibility with the new Airflow 3.0 REST API, and includes several breaking changes and behavior updates.
Below is a list of important changes. Refer to individual endpoint documentation for full details.
-
API v1 (
/api/v1) has been dropped and replaced with API v2(/api/v2). -
422 Validation Errors (instead of 400)
The API now returns
422 Unprocessable Entityfor validation errors (e.g. bad payload, path params, or query params), instead of400 Bad Request. -
Partial response support removed (
fieldsparameter)Endpoints like
GET /dagsno longer support thefieldsquery param for partial responses. Full objects are returned by default. This feature may return in a future 3.x release. -
Passing list in query parameters switched from
form, non explodedtoform, explodedi.e before?my_list=item1,item2now?my_list=item1&my_list=item2 -
execution_datehas been removedThe previously deprecated
execution_dateparameter and fields are now fully removed. Uselogical_dateinstead. -
Datetime format updated to RFC3339-compliant
Datetimes returned are now in RFC3339 format (e.g.
2024-10-01T13:00:00Z). BothZand+00:00forms are accepted in inputs.
→ This change comes from FastAPI & Pydantic v2 behavior.
More info -
PATCH on
DagRunandTaskInstanceare more generic and allow in addition to update the resource state and the note content.Therefore, the two legacy dedicated endpoints to update a
DagRunnote andTaskInstancenote have been removed.Same for the set task instance state, it is now handled by the broader PATCH on task instances.
-
assets/queuedEventendpoints have moved toassets/queuedEventsfor consistency. -
dag_parsingreturns 409 for duplicatesIf a
DagPriorityParsingRequestalready exists,POST /dag_parsingnow returns409 Conflictinstead of201 Created. -
Default value change in
clearTaskInstancesThe
reset_dag_runsfield now defaults totrueinstead offalse. -
Pool name is no longer editable
PATCH /pools/{pool_name}can no longer be used to rename a pool. Pool names are immutable via the API. -
logical_dateis now a required nullable fieldWhen triggering a DAG run (
POST /dags/{dag_id}/dagRuns),logical_dateis now required but can explicitly be set tonull.