Apache Airflow REST API

The stable public REST API for interacting with Apache Airflow programmatically, allowing management of DAGs, DAG runs, task instances, connections, variables, pools, roles, users, and monitoring resources.

Documentation

Specifications

Other Resources

🔗
ChangeLog
https://airflow.apache.org/docs/apache-airflow/stable/release_notes.html
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/apache-airflow/refs/heads/main/capabilities/apache-airflow-config.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/apache-airflow/refs/heads/main/capabilities/apache-airflow-connection.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/apache-airflow/refs/heads/main/capabilities/apache-airflow-dag.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/apache-airflow/refs/heads/main/capabilities/apache-airflow-dagrun.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/apache-airflow/refs/heads/main/capabilities/apache-airflow-dagwarning.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/apache-airflow/refs/heads/main/capabilities/apache-airflow-dataset.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/apache-airflow/refs/heads/main/capabilities/apache-airflow-eventlog.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/apache-airflow/refs/heads/main/capabilities/apache-airflow-importerror.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/apache-airflow/refs/heads/main/capabilities/apache-airflow-monitoring.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/apache-airflow/refs/heads/main/capabilities/apache-airflow-permission.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/apache-airflow/refs/heads/main/capabilities/apache-airflow-plugin.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/apache-airflow/refs/heads/main/capabilities/apache-airflow-pool.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/apache-airflow/refs/heads/main/capabilities/apache-airflow-provider.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/apache-airflow/refs/heads/main/capabilities/apache-airflow-role.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/apache-airflow/refs/heads/main/capabilities/apache-airflow-taskinstance.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/apache-airflow/refs/heads/main/capabilities/apache-airflow-user.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/apache-airflow/refs/heads/main/capabilities/apache-airflow-variable.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/apache-airflow/refs/heads/main/capabilities/apache-airflow-xcom.yaml

OpenAPI Specification

apache-airflow-openapi.yaml Raw ↑
openapi: 3.0.3
servers:
- description: Apache Airflow Stable API.
  url: /api/v1
- url: https://apache.local
info:
  contact:
    email: [email protected]
    name: Apache Software Foundation
    url: https://airflow.apache.org
    x-twitter: TheASF
  description: |
    # Overview

    To facilitate management, Apache Airflow supports a range of REST API endpoints across its
    objects.
    This section provides an overview of the API design, methods, and supported use cases.

    Most of the endpoints accept `JSON` as input and return `JSON` responses.
    This means that you must usually add the following headers to your request:
    ```
    Content-type: application/json
    Accept: application/json
    ```

    ## Resources

    The term `resource` refers to a single type of object in the Airflow metadata. An API is broken up by its
    endpoint's corresponding resource.
    The name of a resource is typically plural and expressed in camelCase. Example: `dagRuns`.

    Resource names are used as part of endpoint URLs, as well as in API parameters and responses.

    ## CRUD Operations

    The platform supports **C**reate, **R**ead, **U**pdate, and **D**elete operations on most resources.
    You can review the standards for these operations and their standard parameters below.

    Some endpoints have special behavior as exceptions.

    ### Create

    To create a resource, you typically submit an HTTP `POST` request with the resource's required metadata
    in the request body.
    The response returns a `201 Created` response code upon success with the resource's metadata, including
    its internal `id`, in the response body.

    ### Read

    The HTTP `GET` request can be used to read a resource or to list a number of resources.

    A resource's `id` can be submitted in the request parameters to read a specific resource.
    The response usually returns a `200 OK` response code upon success, with the resource's metadata in
    the response body.

    If a `GET` request does not include a specific resource `id`, it is treated as a list request.
    The response usually returns a `200 OK` response code upon success, with an object containing a list
    of resources' metadata in the response body.

    When reading resources, some common query parameters are usually available. e.g.:
    ```
    v1/connections?limit=25&offset=25
    ```

    |Query Parameter|Type|Description|
    |---------------|----|-----------|
    |limit|integer|Maximum number of objects to fetch. Usually 25 by default|
    |offset|integer|Offset after which to start returning objects. For use with limit query parameter.|

    ### Update

    Updating a resource requires the resource `id`, and is typically done using an HTTP `PATCH` request,
    with the fields to modify in the request body.
    The response usually returns a `200 OK` response code upon success, with information about the modified
    resource in the response body.

    ### Delete

    Deleting a resource requires the resource `id` and is typically executing via an HTTP `DELETE` request.
    The response usually returns a `204 No Content` response code upon success.

    ## Conventions

    - Resource names are plural and expressed in camelCase.
    - Names are consistent between URL parameter name and field name.

    - Field names are in snake_case.
    ```json
    {
        "name": "string",
        "slots": 0,
        "occupied_slots": 0,
        "used_slots": 0,
        "queued_slots": 0,
        "open_slots": 0
    }
    ```

    ### Update Mask

    Update mask is available as a query parameter in patch endpoints. It is used to notify the
    API which fields you want to update. Using `update_mask` makes it easier to update objects
    by helping the server know which fields to update in an object instead of updating all fields.
    The update request ignores any fields that aren't specified in the field mask, leaving them with
    their current values.

    Example:
    ```
      resource = request.get('/resource/my-id').json()
      resource['my_field'] = 'new-value'
      request.patch('/resource/my-id?update_mask=my_field', data=json.dumps(resource))
    ```

    ## Versioning and Endpoint Lifecycle

    - API versioning is not synchronized to specific releases of the Apache Airflow.
    - APIs are designed to be backward compatible.
    - Any changes to the API will first go through a deprecation phase.

    # Trying the API

    You can use a third party client, such as [curl](https://curl.haxx.se/), [HTTPie](https://httpie.org/),
    [Postman](https://www.postman.com/) or [the Insomnia rest client](https://insomnia.rest/) to test
    the Apache Airflow API.

    Note that you will need to pass credentials data.

    For e.g., here is how to pause a DAG with [curl](https://curl.haxx.se/), when basic authorization is used:
    ```bash
    curl -X PATCH 'https://example.com/api/v1/dags/{dag_id}?update_mask=is_paused' \
    -H 'Content-Type: application/json' \
    --user "username:password" \
    -d '{
        "is_paused": true
    }'
    ```

    Using a graphical tool such as [Postman](https://www.postman.com/) or [Insomnia](https://insomnia.rest/),
    it is possible to import the API specifications directly:

    1. Download the API specification by clicking the **Download** button at top of this document
    2. Import the JSON specification in the graphical tool of your choice.
      - In *Postman*, you can click the **import** button at the top
      - With *Insomnia*, you can just drag-and-drop the file on the UI

    Note that with *Postman*, you can also generate code snippets by selecting a request and clicking on
    the **Code** button.

    ## Enabling CORS

    [Cross-origin resource sharing (CORS)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)
    is a browser security feature that restricts HTTP requests that are
    initiated from scripts running in the browser.

    For details on enabling/configuring CORS, see
    [Enabling CORS](https://airflow.apache.org/docs/apache-airflow/stable/security/api.html).

    # Authentication

    To be able to meet the requirements of many organizations, Airflow supports many authentication methods,
    and it is even possible to add your own method.

    If you want to check which auth backend is currently set, you can use
    `airflow config get-value api auth_backends` command as in the example below.
    ```bash
    $ airflow config get-value api auth_backends
    airflow.api.auth.backend.basic_auth
    ```
    The default is to deny all requests.

    For details on configuring the authentication, see
    [API Authorization](https://airflow.apache.org/docs/apache-airflow/stable/security/api.html).

    # Errors

    We follow the error response format proposed in [RFC 7807](https://tools.ietf.org/html/rfc7807)
    also known as Problem Details for HTTP APIs. As with our normal API responses,
    your client must be prepared to gracefully handle additional members of the response.

    ## Unauthenticated

    This indicates that the request has not been applied because it lacks valid authentication
    credentials for the target resource. Please check that you have valid credentials.

    ## PermissionDenied

    This response means that the server understood the request but refuses to authorize
    it because it lacks sufficient rights to the resource. It happens when you do not have the
    necessary permission to execute the action you performed. You need to get the appropriate
    permissions in other to resolve this error.

    ## BadRequest

    This response means that the server cannot or will not process the request due to something
    that is perceived to be a client error (e.g., malformed request syntax, invalid request message
    framing, or deceptive request routing). To resolve this, please ensure that your syntax is correct.

    ## NotFound

    This client error response indicates that the server cannot find the requested resource.

    ## MethodNotAllowed

    Indicates that the request method is known by the server but is not supported by the target resource.

    ## NotAcceptable

    The target resource does not have a current representation that would be acceptable to the user
    agent, according to the proactive negotiation header fields received in the request, and the
    server is unwilling to supply a default representation.

    ## AlreadyExists

    The request could not be completed due to a conflict with the current state of the target
    resource, e.g. the resource it tries to create already exists.

    ## Unknown

    This means that the server encountered an unexpected condition that prevented it from
    fulfilling the request.
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
  title: Airflow API (Stable)
  version: 2.5.3
  x-apisguru-categories:
  - messaging
  x-logo:
    url: https://twitter.com/TheASF/profile_image?size=original
  x-origin:
  - format: openapi
    url: https://airflow.apache.org/docs/apache-airflow/stable/_specs/v1.yaml
    version: "3.0"
  x-providerName: apache.org
  x-serviceName: airflow
externalDocs:
  url: https://airflow.apache.org/docs/apache-airflow/stable/
security: []
tags:
- name: Config
- name: Connection
- name: DAG
- name: DAGRun
- name: EventLog
- name: ImportError
- name: Monitoring
- name: Pool
- name: Provider
- name: TaskInstance
- name: Variable
- name: XCom
- name: Plugin
- name: Role
- name: Permission
- name: User
- name: DagWarning
- name: Dataset
paths:
  /config:
    get:
      operationId: get_config
      responses:
        "200":
          content:
            application/json:
              example:
                sections:
                - name: core
                  options:
                  - key: dags_folder
                    value: /home/user/my-dags-folder
                - name: smtp
                  options:
                  - key: smtp_host
                    value: localhost
                  - key: smtp_mail_from
                    value: [email protected]
              schema:
                $ref: "#/components/schemas/Config"
            text/plain:
              example: |
                [core]
                dags_folder = /home/user/my-dags-folder
                [smtp]
                smtp_host = localhost
                smtp_mail_from =  [email protected]
              schema:
                type: string
          description: Success.
        "401":
          $ref: "#/components/responses/Unauthenticated"
        "403":
          $ref: "#/components/responses/PermissionDenied"
      summary: Apache Airflow Get Current Configuration
      tags:
      - Config
      x-openapi-router-controller: airflow.api_connexion.endpoints.config_endpoint
  /connections:
    get:
      operationId: get_connections
      parameters:
      - $ref: "#/components/parameters/PageLimit"
      - $ref: "#/components/parameters/PageOffset"
      - $ref: "#/components/parameters/OrderBy"
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ConnectionCollection"
          description: Success.
        "401":
          $ref: "#/components/responses/Unauthenticated"
        "403":
          $ref: "#/components/responses/PermissionDenied"
      summary: Apache Airflow List Connections
      tags:
      - Connection
      x-openapi-router-controller: airflow.api_connexion.endpoints.connection_endpoint
    post:
      operationId: post_connection
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Connection"
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Connection"
          description: Success.
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthenticated"
        "403":
          $ref: "#/components/responses/PermissionDenied"
      summary: Apache Airflow Create a Connection
      tags:
      - Connection
      x-openapi-router-controller: airflow.api_connexion.endpoints.connection_endpoint
  /connections/test:
    post:
      description: |
        Test a connection.

        *New in version 2.2.0*
      operationId: test_connection
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Connection"
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ConnectionTest"
          description: Success.
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthenticated"
        "403":
          $ref: "#/components/responses/PermissionDenied"
        "404":
          $ref: "#/components/responses/NotFound"
      summary: Apache Airflow Test a Connection
      tags:
      - Connection
      x-openapi-router-controller: airflow.api_connexion.endpoints.connection_endpoint
  "/connections/{connection_id}":
    delete:
      operationId: delete_connection
      responses:
        "204":
          description: Success.
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthenticated"
        "403":
          $ref: "#/components/responses/PermissionDenied"
        "404":
          $ref: "#/components/responses/NotFound"
      summary: Apache Airflow Delete a Connection
      tags:
      - Connection
      x-openapi-router-controller: airflow.api_connexion.endpoints.connection_endpoint
    get:
      operationId: get_connection
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Connection"
          description: Success.
        "401":
          $ref: "#/components/responses/Unauthenticated"
        "403":
          $ref: "#/components/responses/PermissionDenied"
        "404":
          $ref: "#/components/responses/NotFound"
      summary: Apache Airflow Get a Connection
      tags:
      - Connection
      x-openapi-router-controller: airflow.api_connexion.endpoints.connection_endpoint
    parameters:
    - $ref: "#/components/parameters/ConnectionID"
    patch:
      operationId: patch_connection
      parameters:
      - $ref: "#/components/parameters/UpdateMask"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Connection"
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Connection"
          description: Success.
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthenticated"
        "403":
          $ref: "#/components/responses/PermissionDenied"
        "404":
          $ref: "#/components/responses/NotFound"
      summary: Apache Airflow Update a Connection
      tags:
      - Connection
      x-openapi-router-controller: airflow.api_connexion.endpoints.connection_endpoint
  "/dagSources/{file_token}":
    get:
      description: |
        Get a source code using file token.
      operationId: get_dag_source
      responses:
        "200":
          content:
            application/json:
              schema:
                properties:
                  content:
                    type: string
                type: object
            plain/text:
              schema:
                type: string
          description: Success.
        "401":
          $ref: "#/components/responses/Unauthenticated"
        "403":
          $ref: "#/components/responses/PermissionDenied"
        "404":
          $ref: "#/components/responses/NotFound"
        "406":
          $ref: "#/components/responses/NotAcceptable"
      summary: Apache Airflow Get a Source Code
      tags:
      - DAG
      x-openapi-router-controller: airflow.api_connexion.endpoints.dag_source_endpoint
    parameters:
    - $ref: "#/components/parameters/FileToken"
  /dagWarnings:
    get:
      operationId: get_dag_warnings
      parameters:
      - description: If set, only return DAG warnings with this dag_id.
        in: query
        name: dag_id
        required: false
        schema:
          type: string
      - description: If set, only return DAG warnings with this type.
        in: query
        name: warning_type
        required: false
        schema:
          type: string
      - $ref: "#/components/parameters/PageLimit"
      - $ref: "#/components/parameters/PageOffset"
      - $ref: "#/components/parameters/OrderBy"
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DagWarningCollection"
          description: Success.
        "401":
          $ref: "#/components/responses/Unauthenticated"
        "403":
          $ref: "#/components/responses/PermissionDenied"
      summary: Apache Airflow List Dag Warnings
      tags:
      - DagWarning
      x-openapi-router-controller: airflow.api_connexion.endpoints.dag_warning_endpoint
  /dags:
    get:
      description: |
        List DAGs in the database.
        `dag_id_pattern` can be set to match dags of a specific pattern
      operationId: get_dags
      parameters:
      - $ref: "#/components/parameters/PageLimit"
      - $ref: "#/components/parameters/PageOffset"
      - $ref: "#/components/parameters/OrderBy"
      - $ref: "#/components/parameters/FilterTags"
      - $ref: "#/components/parameters/OnlyActive"
      - description: |
          If set, only return DAGs with dag_ids matching this pattern.
        in: query
        name: dag_id_pattern
        required: false
        schema:
          type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DAGCollection"
          description: Success.
        "401":
          $ref: "#/components/responses/Unauthenticated"
      summary: Apache Airflow List DAGs
      tags:
      - DAG
      x-openapi-router-controller: airflow.api_connexion.endpoints.dag_endpoint
    patch:
      description: |
        Update DAGs of a given dag_id_pattern using UpdateMask.
        This endpoint allows specifying `~` as the dag_id_pattern to update all DAGs.
        *New in version 2.3.0*
      operationId: patch_dags
      parameters:
      - $ref: "#/components/parameters/PageLimit"
      - $ref: "#/components/parameters/PageOffset"
      - $ref: "#/components/parameters/FilterTags"
      - $ref: "#/components/parameters/UpdateMask"
      - $ref: "#/components/parameters/OnlyActive"
      - description: |
          If set, only update DAGs with dag_ids matching this pattern.
        in: query
        name: dag_id_pattern
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            example:
              is_paused: true
            schema:
              $ref: "#/components/schemas/DAG"
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DAGCollection"
          description: Success.
        "401":
          $ref: "#/components/responses/Unauthenticated"
        "403":
          $ref: "#/components/responses/PermissionDenied"
        "404":
          $ref: "#/components/responses/NotFound"
      summary: Apache Airflow Update DAGs
      tags:
      - DAG
      x-openapi-router-controller: airflow.api_connexion.endpoints.dag_endpoint
  "/dags/{dag_id}":
    delete:
      description: |
        Deletes all metadata related to the DAG, including finished DAG Runs and Tasks.
        Logs are not deleted. This action cannot be undone.

        *New in version 2.2.0*
      operationId: delete_dag
      responses:
        "204":
          description: Success.
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthenticated"
        "403":
          $ref: "#/components/responses/PermissionDenied"
        "404":
          $ref: "#/components/responses/NotFound"
        "409":
          $ref: "#/components/responses/AlreadyExists"
      summary: Apache Airflow Delete a DAG
      tags:
      - DAG
      x-openapi-router-controller: airflow.api_connexion.endpoints.dag_endpoint
    get:
      description: |
        Presents only information available in database (DAGModel).
        If you need detailed information, consider using GET /dags/{dag_id}/details.
      operationId: get_dag
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DAG"
          description: Success.
        "401":
          $ref: "#/components/responses/Unauthenticated"
        "403":
          $ref: "#/components/responses/PermissionDenied"
        "404":
          $ref: "#/components/responses/NotFound"
      summary: Apache Airflow Get Basic Information About a DAG
      tags:
      - DAG
      x-openapi-router-controller: airflow.api_connexion.endpoints.dag_endpoint
    parameters:
    - $ref: "#/components/parameters/DAGID"
    patch:
      operationId: patch_dag
      parameters:
      - $ref: "#/components/parameters/UpdateMask"
      requestBody:
        content:
          application/json:
            example:
              is_paused: true
            schema:
              $ref: "#/components/schemas/DAG"
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DAG"
          description: Success.
        "401":
          $ref: "#/components/responses/Unauthenticated"
        "403":
          $ref: "#/components/responses/PermissionDenied"
        "404":
          $ref: "#/components/responses/NotFound"
      summary: Apache Airflow Update a DAG
      tags:
      - DAG
      x-openapi-router-controller: airflow.api_connexion.endpoints.dag_endpoint
  "/dags/{dag_id}/clearTaskInstances":
    parameters:
    - $ref: "#/components/parameters/DAGID"
    post:
      description: |
        Clears a set of task instances associated with the DAG for a specified date range.
      operationId: post_clear_task_instances
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ClearTaskInstances"
        description: Parameters of action
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TaskInstanceReferenceCollection"
          description: Success.
        "401":
          $ref: "#/components/responses/Unauthenticated"
        "403":
          $ref: "#/components/responses/PermissionDenied"
        "404":
          $ref: "#/components/responses/NotFound"
      summary: Apache Airflow Clear a Set of Task Instances
      tags:
      - DAG
      x-openapi-router-controller: airflow.api_connexion.endpoints.task_instance_endpoint
  "/dags/{dag_id}/dagRuns":
    get:
      description: |
        This endpoint allows specifying `~` as the dag_id to retrieve DAG runs for all DAGs.
      operationId: get_dag_runs
      parameters:
      - $ref: "#/components/parameters/PageLimit"
      - $ref: "#/components/parameters/PageOffset"
      - $ref: "#/components/parameters/FilterExecutionDateGTE"
      - $ref: "#/components/parameters/FilterExecutionDateLTE"
      - $ref: "#/components/parameters/FilterStartDateGTE"
      - $ref: "#/components/parameters/FilterStartDateLTE"
      - $ref: "#/components/parameters/FilterEndDateGTE"
      - $ref: "#/components/parameters/FilterEndDateLTE"
      - $ref: "#/components/parameters/FilterState"
      - $ref: "#/components/parameters/OrderBy"
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DAGRunCollection"
          description: List of DAG runs.
        "401":
          $ref: "#/components/responses/Unauthenticated"
      summary: Apache Airflow List DAG Runs
      tags:
      - DAGRun
      x-openapi-router-controller: airflow.api_connexion.endpoints.dag_run_endpoint
    parameters:
    - $ref: "#/components/parameters/DAGID"
    post:
      operationId: post_dag_run
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DAGRun"
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DAGRun"
          description: Success.
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthenticated"
        "403":
          $ref: "#/components/responses/PermissionDenied"
        "404":
          $ref: "#/components/responses/NotFound"
        "409":
          $ref: "#/components/responses/AlreadyExists"
      summary: Apache Airflow Trigger a New DAG Run
      tags:
      - DAGRun
      x-openapi-router-controller: airflow.api_connexion.endpoints.dag_run_endpoint
  "/dags/{dag_id}/dagRuns/{dag_run_id}":
    delete:
      operationId: delete_dag_run
      responses:
        "204":
          description: Success.
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthenticated"
        "403":
          $ref: "#/components/responses/PermissionDenied"
        "404":
          $ref: "#/components/responses/NotFound"
      summary: Apache Airflow Delete a DAG Run
      tags:
      - DAGRun
      x-openapi-router-controller: airflow.api_connexion.endpoints.dag_run_endpoint
    get:
      operationId: get_dag_run
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DAGRun"
          description: Success.
        "401":
          $ref: "#/components/responses/Unauthenticated"
        "403":
          $ref: "#/components/responses/PermissionDenied"
        "404":
          $ref: "#/components/responses/NotFound"
      summary: Apache Airflow Get a DAG Run
      tags:
      - DAGRun
      x-openapi-router-controller: airflow.api_connexion.endpoints.dag_run_endpoint
    parameters:
    - $ref: "#/components/parameters/DAGID"
    - $ref: "#/components/parameters/DAGRunID"
    patch:
      description: |
        Modify a DAG run.

        *New in version 2.2.0*
      operationId: update_dag_run_state
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateDagRunState"
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DAGRun"
          description: Success.
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthenticated"
        "403":
          $ref: "#/components/responses/PermissionDenied"
        "404":
          $ref: "#/components/responses/NotFound"
      summary: Apache Airflow Modify a DAG Run
      tags:
      - DAGRun
      x-openapi-router-controller: airflow.api_connexion.endpoints.dag_run_endpoint
  "/dags/{dag_id}/dagRuns/{dag_run_id}/clear":
    parameters:
    - $ref: "#/components/parameters/DAGID"
    - $ref: "#/components/parameters/DAGRunID"
    post:
      description: |
        Clear a DAG run.

        *New in version 2.4.0*
      operationId: clear_dag_run
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ClearDagRun"
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                anyOf:
                - $ref: "#/components/schemas/DAGRun"
                - $ref: "#/components/schemas/TaskInstanceCollection"
          description: Success.
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthenticated"
        "403":
          $ref: "#/components/responses/PermissionDenied"
        "404":
          $ref: "#/components/responses/NotFound"
      summary: Apache Airflow Clear a DAG Run
      tags:
      - DAGRun
      x-openapi-router-controller: airflow.api_connexion.endpoints.dag_run_endpoint
  "/dags/{dag_id}/dagRuns/{dag_run_id}/setNote":
    parameters:
    - $ref: "#/components/parameters/DAGID"
    - $ref: "#/components/parameters/DAGRunID"
    patch:
      description: |
        Update the manual user note of a DagRun.

        *New in version 2.5.0*
      operationId: set_dag_run_note
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SetDagRunNote"
        description: Parameters of set DagRun note.
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DAGRun"
          description: Success.
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthenticated"
        "403":
          $ref: "#/components/responses/PermissionDenied"
        "404":
          $ref: "#/components/responses/NotFound"
      summary: Apache Airflow Update the DagRun Note.
      tags:
      - DAGRun
      x-openapi-router-controller: airflow.api_connexion.endpoints.dag_run_endpoint
  "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances":
    get:
      description: |
        This endpoint allows specifying `~` as the dag_id, dag_run_id to retrieve DAG runs for all DAGs and DAG runs.
      operationId: get_task_instances
      parameters:
      - $ref: "#/components/parameters/PageLimit"
      - $ref: "#/components/parameters/PageOffset"
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TaskInstanceCollection"
          description: Success.
        "401":
          $ref: "#/components/responses/Unauthenticated"
        "403":
          $ref: "#/components/responses/PermissionDenied"
      summary: Apache Airflow List Task Instances
      tags:
      - TaskInstance
      x-openapi-router-controller: airflow.api_connexion.endpoints.task_instance_endpoint
    parameters:
    - $ref: "#/components/parameters/DAGID"
    - $ref: "#/components/parameters/DAGRunID"
    - $ref: "#/components/parameters/FilterExecutionDateGTE"
    - $ref: "#/components/parameters/FilterExecutionDateLTE"
    - $ref: "#/components/parameters/FilterStartDateGTE"
    - $ref: "#/components/parameters/FilterStartDateLTE"
    - $ref: "#/components/parameters/FilterEndDateGTE"
    - $ref: "#/components/parameters/FilterEndDateLTE"
    - $ref: "#/components/parameters/FilterDurationGTE"
    - $ref: "#/components/parameters/FilterDurationLTE"
    - $ref: "#/components/parameters/FilterState"
    - $ref: "#/components/parameters/FilterPool"
    - $ref: "#/components/parameters/FilterQueue"
  "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}":
    get:
      operationId: get_task_instance
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TaskInstance"
          description: Success.
        "401":
          $ref: "#/components/responses/Unauthenticated"
        "403":
          $ref: "#/components/responses/PermissionDenied"
        "404":
          $ref: "#/components/responses/NotFound"
      summary: Apache Airflow Get a Task Instance
      tags:
      - TaskInstance
      x-openapi-router-controller: airflow.api_connexion.endpoints.task_instance_endpoint
    parameters:
    - $ref: "#/components/parameters/DAGID"
    - $ref: "#/components/parameters/DAGRunID"
    - $ref: "#/components/parameters/TaskID"
    patch:
      descrip

# --- truncated at 32 KB (144 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/apache-airflow/refs/heads/main/openapi/apache-airflow-openapi.yaml