Capability library / Application package

Apache Airflow package v1.0.0

Apache Airflow 2 stable REST API v1: read workflows (DAGs), runs, and connections; pause or unpause workflows; create or delete connections; trigger runs; and delete workflow metadata. Runs can change downstream systems. Airflow 3 API v2 is excluded.

Review state: Reviewed · Distributable: yes, digest matches the release manifest

This page describes AAES Govern’s controls. AAES Operate has private-work permissions, operational reviews and recorded-spend limits; it does not include Govern. About AAES Govern

Before you enable this package

This package targets Airflow 2.10.5 and its /api/v1 REST API. Airflow 3 uses /api/v2 with different authentication and is not covered. The endpoint host 'airflow-instance.invalid' is a reserved .invalid placeholder that fails closed until you substitute the real host in both the endpoint URLs and the egress allowlist.

Read each action's effects and exclusions below. Before installation, also read the complete package requirements, including credential issuance, scope, expiry, and provider permissions. These are deployment prerequisites, not capabilities this package supplies.

Capabilities (9)

Each capability below is one registered operation. The complete package JSON includes its exact network destination allowlist. The repository stores it at packs/airflow.json and embeds a copy in the release binary.

Risk tiers. R0 is the minimum for reads. R2 is the minimum for write, create, update, execute, and invoke. R3 is the minimum for delete, send, pay, deploy, approve, share, and transfer. Operators can raise these levels. A minimum tier does not measure the operation's business or confidentiality risk.

On supported execution paths routed through AAES Govern, the R3 actions listed below require approval by an authorized person. Bypass paths and observation-only registrations are outside that guarantee. A provider's restoration feature does not remove this approval requirement. A provider-side approval, such as approving a GitLab merge request, is also separate from AAES Govern human approval. The capability matrix shows which execution paths are implemented, restricted to lab use, or refused at startup. Live compatibility must be tested in your environment.

Field guide. Endpoint is the service address and request method. Connector is the adapter that makes the call. Custody describes how the credential is held; the credential reference identifies the value to resolve. Data class sets handling requirements: pii means personal data, financial means financial records, and internal means internal organizational data.

airflow.dags.read v1.0.0R0

Kind
tool
Action
read
Endpoint
GET https://airflow-instance.invalid/api/v1/dags
Connector
http
Custody
customer_vault
Credential ref
secret-ref-airflow-basic-auth
Data class
internal

Read DAGs.

List the DAGs in the deployment's metadata database; this pack registers the collection read only — single-DAG reads (GET /api/v1/dags/{dag_id}) and GET /api/v1/dags/{dag_id}/details are not registered. DAG names, tags and schedules reveal the organization's pipeline layout.

The host is a reserved placeholder: substitute the customer's webserver host before enabling.

airflow.dag_runs.read v1.0.0R0

Kind
tool
Action
read
Endpoint
GET https://airflow-instance.invalid/api/v1/dags/DAG_ID/dagRuns
Connector
http
Custody
customer_vault
Credential ref
secret-ref-airflow-basic-auth
Data class
internal

Read DAG runs.

List DAG runs for one DAG; this pack registers the collection read only — single-run reads (GET /api/v1/dags/{dag_id}/dagRuns/{dag_run_id}) are not registered. The API accepts '~' as the dag_id to list runs across all DAGs; whether the deployment permits that pattern is a binding decision, not a restriction this registration imposes. DAG_ID is a placeholder the deployment binds before enabling.

airflow.dag_runs.list_batch v1.0.0R0

Kind
tool
Action
read
Endpoint
POST https://airflow-instance.invalid/api/v1/dags/~/dagRuns/list
Connector
http
Custody
customer_vault
Credential ref
secret-ref-airflow-basic-auth
Data class
internal

List DAG runs in batches.

Batch-list DAG runs across many DAGs. This is a POST-with-query-body endpoint used read-only: the specification defines it as a POST only because a GET filtering across a large number of DAG ids would exceed HTTP request URL length limits, and the request body is a query form (ListDagRunsForm: dag_ids, states, execution-date range filters, page limit and offset). It changes nothing and is registered read at the minimum R0 tier.

The host is a reserved placeholder: substitute the customer's webserver host before enabling.

airflow.connections.read v1.0.0R0

Kind
tool
Action
read
Endpoint
GET https://airflow-instance.invalid/api/v1/connections
Connector
http
Custody
customer_vault
Credential ref
secret-ref-airflow-basic-auth
Data class
internal

Read connections.

List the stored Airflow connections; this pack registers the collection read only — single-connection reads (GET /api/v1/connections/{connection_id}) are not registered. Connection records describe the infrastructure the deployment reaches (types, hosts, ports, logins and extras), which is sensitive internal configuration even where secret fields are not rendered; treat the response accordingly.

The host is a reserved placeholder: substitute the customer's webserver host before enabling.

airflow.dag.update v1.0.0R3

Kind
tool
Actions
update, deploy
Endpoint
PATCH https://airflow-instance.invalid/api/v1/dags/DAG_ID
Connector
http
Custody
customer_vault
Credential ref
secret-ref-airflow-basic-auth
Data class
internal

Update DAG.

Update one DAG record — the operational use is pausing and unpausing via is_paused with the update_mask query parameter. Unpausing is not an ordinary reversible update: it releases the DAG's queued and scheduled execution, and the tasks then run against whatever systems the DAG is wired to, so the effect is deploy-equivalent and the capability declares update and deploy at the minimum R3 tier. This registration does not restrict which fields the request body may carry: an installer's intention of pause-only is not a restriction, and a reviewer who wants that must impose it in policy.

The collection-wide PATCH /api/v1/dags (dag_id_pattern, including '~' for all DAGs) is a different, bulk operation and is deliberately not registered by this pack. DAG_ID is a placeholder the deployment binds before enabling.

On supported execution paths mediated by AAES Govern, the declared irreversible actions require an authorized person’s approval. Observation-only and bypass calls cannot be stopped by this control.

airflow.connection.create v1.0.0R2

Kind
tool
Action
create
Endpoint
POST https://airflow-instance.invalid/api/v1/connections
Connector
http
Custody
customer_vault
Credential ref
secret-ref-airflow-basic-auth
Data class
internal

Create connection.

Create one stored connection in the Airflow metadata database.

The request body is a Connection record and can carry credential material (login, password, extra) that Airflow then stores and serves to tasks — the body of a call to this capability is itself sensitive: the executor must keep the request body out of logs, traces, diagnostics and crash dumps exactly like the injected Authorization material, must not buffer it beyond the lifetime of the call, and any deployment-side request recording must redact it.

Creation is reversible by deletion, but any secret written is thereafter held in Airflow's own store, outside this capability's reach; review what the integration is permitted to write before enabling.

The host is a reserved placeholder: substitute the customer's webserver host before enabling.

airflow.dag_run.trigger v1.0.0R3

Kind
tool
Action
deploy
Endpoint
POST https://airflow-instance.invalid/api/v1/dags/DAG_ID/dagRuns
Connector
http
Custody
customer_vault
Credential ref
secret-ref-airflow-basic-auth
Data class
internal

Trigger DAG run.

Trigger a new DAG run. This is registered with the deploy action at the minimum R3 tier rather than as an ordinary create: a DAG run executes the DAG's tasks, which can write to any system the DAG is wired to — production databases, warehouses, third-party APIs — so the effect is deploy-equivalent, and the request body's conf object is an unrestricted parameter payload handed to that execution.

Deploy is one of the designated actions requiring human approval.

On supported execution paths mediated by AAES Govern, irreversible actions require approval by an authorized person; this does not prevent calls through bypass or observation-only paths. If the DAG is paused the run remains queued per the API's documented behavior, which changes timing, not effect. DAG_ID is a placeholder the deployment binds before enabling.

airflow.dag.delete v1.0.0R3

Kind
tool
Action
delete
Endpoint
DELETE https://airflow-instance.invalid/api/v1/dags/DAG_ID
Connector
http
Custody
customer_vault
Credential ref
secret-ref-airflow-basic-auth
Data class
internal

Delete DAG.

Delete a DAG's metadata. The OpenAPI description is explicit: this deletes all metadata related to the DAG, including finished DAG runs and tasks, logs are not deleted, and the action cannot be undone — the run history is the audit trail for past executions, and re-adding the DAG code later does not restore it. Registered as delete at the minimum R3 tier; delete is one of the designated actions requiring human approval. DAG_ID is a placeholder the deployment binds before enabling.

On supported execution paths mediated by AAES Govern, the declared irreversible actions require an authorized person’s approval. Observation-only and bypass calls cannot be stopped by this control.

airflow.connection.delete v1.0.0R3

Kind
tool
Action
delete
Endpoint
DELETE https://airflow-instance.invalid/api/v1/connections/CONNECTION_ID
Connector
http
Custody
customer_vault
Credential ref
secret-ref-airflow-basic-auth
Data class
internal

Delete connection.

Delete a stored connection, including any credential material held in it. Recreating the connection later is a new write, not an undo: unless the caller preserved the previous secret values elsewhere they are gone, and every DAG that references the connection id starts failing at runtime — the blast radius extends beyond the deleted record. Registered as delete at the minimum R3 tier; delete is one of the designated actions requiring human approval. CONNECTION_ID is a placeholder the deployment binds before enabling.

On supported execution paths mediated by AAES Govern, the declared irreversible actions require an authorized person’s approval. Observation-only and bypass calls cannot be stopped by this control.

Credential reference

The credential field names a reference rather than containing credential material. Packs are designed not to contain secrets; the format checks cover only known credential formats and cannot prove that arbitrary text contains no secrets. Installing a package registers its capabilities. Configure the provider credentials, endpoints, and network access, then test the integration in your environment before enabling it.

Reference
secret-ref-airflow-basic-auth
Custody
customer_vault
Injection
header (Authorization)

Configure the value and injection format specified in the package. Assign responsibility for credential rotation and revocation, restrict provider permissions, and keep credential material out of logs and responses.

Complete credential requirements

Credentials for the customer's own Airflow webserver, held in the client's own secret manager. The stored material must be the complete Authorization header value (scheme included) — for the basic-auth backend, 'Basic ' followed by the base64 of 'username:password'. Token issuance: the stable API v1 has no first-class scoped-token issuance; authentication is per-request against the webserver's configured auth backend. Version-corrected default: the pinned 2.10.5 configuration contract is [api] auth_backends, whose documented DEFAULT is the session backend ([api] auth_backends = airflow.api.auth.backend.session); on FAB-auth-manager deployments the equivalent setting is [fab] auth_backends = airflow.providers.fab.auth_manager.api.auth.backend.session.

Either way, basic authentication is not on by default and a deployment must explicitly configure the basic_auth backend (airflow.api.auth.backend.basic_auth, or airflow.providers.fab.auth_manager.api.auth.backend.basic_auth under the FAB auth manager) for the credential stored here to work at all. The credential is therefore a long-lived webserver user password, not an expiring token: it does not expire on its own, it stops working only when the password is rotated or the user is disabled (each request is authenticated, so disablement takes effect immediately — there is no already-issued token that outlives revocation, and no refresh for the executor to perform; any renewal is an external deployment process that updates the stored value).

Least privilege: create a dedicated API user with the minimum webserver RBAC roles that make these capabilities work (read-only roles for the reads; operational roles for trigger and connection writes) and nothing more — an admin user would also carry the unregistered /users, /roles and /config surfaces.

Executor hygiene: the value must live only in executor memory for the lifetime of a call, must never be written to logs, traces or diagnostics, and must not appear in crash dumps; a deployment that cannot meet that bar must not enable the pack. Deployments on Airflow 3 should not reuse this reference: its auth manager issues short-lived JWTs from /auth/token against /api/v2, which is a different credential lifecycle and a different registration.

Resources

  • airflow-instance (api, internal): https://airflow-instance.invalid/api/v1

Technical package and review record

Complete provider requirements and exclusions

The endpoint host 'airflow-instance.invalid' is a reserved non-production placeholder (an RFC 2606 reserved TLD): substitute the customer's own Airflow webserver host before enabling, in every endpoint, in the resource locator and in every egress allowlist entry — the allowlist matches exactly, so all three must be substituted together, and substitution is a required deployment step. DAG_ID and CONNECTION_ID in the paths are placeholders the deployment binds to concrete values before enabling.

This pack registers the stable REST API v1 (server path /api/v1) as specified by the Airflow 2.10.5 OpenAPI definition; Airflow 3 ships a different public API (/api/v2, JWT via /auth/token under the configured auth manager) and this pack registers none of it. The rendered stable-rest-api-ref.html documentation page is a JavaScript application that yielded no operation content to the retrieval tool used for this review, so the review was made against the raw OpenAPI source that page renders, plus the API security pages for both major lines; that is an honest limitation of the retrieval, not a gap in the underlying specification.

Excluded operations: the collection-wide PATCH /api/v1/dags (which updates every DAG matching dag_id_pattern, including '~' for all DAGs — a bulk pause/unpause of the whole estate in one call); POST /api/v1/dags/{dag_id}/clearTaskInstances and POST /api/v1/dags/{dag_id}/updateTaskInstancesState (bulk task-instance state changes that re-run or rewrite execution state across a date range); DELETE /api/v1/dags/{dag_id}/dagRuns/{dag_run_id} (DAG-run deletion; single-run history deletion is a narrower review the deployment can add); the /variables endpoints (Airflow Variables commonly hold secrets and are readable by every task); the /users, /roles and /permissions endpoints (identity and access management for the deployment itself); the /pools write operations; /config and /plugins (deployment internals); and POST /api/v1/connections/test, which the specification documents as disabled by default and strongly advised to stay disabled except for highly trusted users.

Approval classification: triggering a DAG run is registered as deploy at the minimum R3 tier, not as an ordinary create — a DAG run executes the DAG's tasks, which can write to any system the DAG touches, so the effect is deploy-equivalent; deploy is one of the designated actions requiring human approval. DAG deletion is registered as delete at the minimum R3 tier: the OpenAPI description states it deletes all metadata related to the DAG including finished DAG runs and tasks, and that the action cannot be undone.

The POST /api/v1/dags/~/dagRuns/list capability is a collection read that uses POST only because a GET with many DAG ids would exceed URL length limits; its body is a query form (ListDagRunsForm: dag_ids, states, execution-date ranges, page limit and offset), it changes nothing, and it is registered read at the minimum R0 tier.

Download the complete package JSON for exact network allowlists, credential requirements, exclusions, and setup notes. Read these requirements before installation.

The full documentation review record is supplied in the evaluation package. The evaluation package runs in your environment and comes only with the paid design partnership. This page reproduces the source links and review block; the full record is available for evaluation. Discuss a design partnership to inspect it before installation.

Review block

This section reproduces the review block recorded in the pack file. The evidence and approval record is separate: for a reviewed pack, it is in the evaluation materials and in the release binary's embedded assets.

Review completed: 2026-09-22

4 sources, retrieved 2026-09-21

Current documentation links are navigation aids. They do not change the package, its historical sources or its review date. Review dates describe a documentation review, not a live integration test. No package is provider-endorsed or yet tested against a live provider tenant.

Release identity

SHA-256 of the pack file bytes: 91579dbc21200d1c781ffd81e522266de7b70806bd74dfc0d9959bcb09e6ec4c

Distributable: yes, digest matches the release manifest. Editing a package changes its release identity. A deployment plan checks its own file digests; it does not restore reviewed status or authenticate approval.