For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
      • AstroFully-managed data operations, powered by Apache Airflow.
      • Astro Private CloudRun Airflow-as-a-service in your environment.
      • Professional ServicesExpert Airflow services for your enterprise's success.
    • Tools
      • Cosmos
      • Orbiter
      • CLI
      • AI SDK
      • Agents
      • Blueprint
      • UpdatesThe State of Airflow 2026See the insights from over 5,800 data practitioners in the full report. Download Now ➔
  • Customers
  • Docs
    • Insights
      • Blog
      • Webinars
      • Resource Library
      • Events
    • Education
      • Academy
      • What is Airflow?
  • Pricing
Get Started Free
    • Astro Private Cloud overview
    • Astro Private Cloud features
      • Overview
      • Authenticate
      • Develop and test queries
      • Example Queries
        • Upsert Deployment
        • Delete Deployment
        • Create Deployment user
        • Delete user
        • Verify user email
        • Bypass user email verification
        • Add a System Admin
        • Create System Service Account Token
        • Update environment variables

Product

  • Platform Overview
  • Astro
  • Astro Observe
  • Astro Private Cloud
  • Security & Trust
  • Pricing

Tools & Services

  • Cosmos
  • Docs
  • Professional Services
  • Product Updates

Use Cases

  • AI Ops
  • Data Observability
  • ETL/ELT
  • ML Ops
  • Operational Analytics
  • All Use Cases

Industries

  • Financial Services
  • Gaming
  • Retail
  • Manufacturing
  • Healthcare
  • All Industries

Resources

  • Academy
  • eBooks & Guides
  • Blog
  • Webinars
  • Events
  • The Data Flowcast Podcast
  • All Resources

Airflow

  • What is Airflow
  • Airflow on Astro
  • Airflow 3.0
  • Airflow Upgrades
  • Airflow Use Cases
  • Airflow 2.x End of Life

Company

  • Our Story
  • Customers
  • Newsroom
  • Careers
  • Contact

Support

  • Knowledge Base
  • Status
  • Contact Support
GitHubYouTubeLinkedInx
  • Legal
  • Privacy
  • Terms of Service
  • Consent Preferences

  • Do Not Sell or Share My Personal information
  • Limit the Use Of My Sensitive Personal Information

Apache Airflow®, Airflow, and the Airflow logo are trademarks of the Apache Software Foundation. Copyright © Astronomer 2026. All rights reserved.

LogoLogo
APC APIExample mutations

Upsert a Deployment with the APC API

Edit this page
Built with

You can use the upsertDeployment mutation to both create and update Deployments with all possible Deployment configurations. If you query upsertDeployment without a deploymentUuid, the APC API creates a new Deployment according to your specifications. If you specify an existing deploymentUuid, the APC API updates the Deployment with that ID. All queries to create a Deployment require specifying a workspaceUuid.

When you make upsert updates to your Airflow Deployments, you must explicitly specify all existing environment variables, otherwise, the upsert overwrites them.

The following query creates a new Deployment in a custom namespace test-new-dep and configures a Deployment environment variable AIRFLOW__CORE__COLORED_LOG_FORMAT.

1mutation upsertDeployment(
2 $workspaceUuid: Uuid,
3 $deploymentUuid: Uuid,
4 $label: String,
5 $description: String,
6 $releaseName: String,
7 $namespace: String,
8 $environmentVariables: [InputEnvironmentVariable],
9 $image: String,
10 $dockerconfigjson: JSON,
11 $version: String,
12 $airflowVersion: String,
13 $runtimeVersion: String,
14 $desiredRuntimeVersion: String,
15 $executor: ExecutorType,
16 $workers: Workers,
17 $webserver: Webserver,
18 $scheduler: Scheduler,
19 $triggerer: Triggerer,
20 $dagProcessor: DagProcessor,
21 $dagDeployment: DagDeployment,
22 $properties: JSON,
23 $cloudRole: String
24) {
25 upsertDeployment(
26 workspaceUuid: $workspaceUuid,
27 deploymentUuid: $deploymentUuid,
28 label: $label,
29 description: $description,
30 releaseName: $releaseName,
31 namespace: $namespace,
32 environmentVariables: $environmentVariables,
33 image: $image,
34 dockerconfigjson: $dockerconfigjson,
35 version: $version,
36 airflowVersion: $airflowVersion,
37 runtimeVersion: $runtimeVersion,
38 desiredRuntimeVersion: $desiredRuntimeVersion,
39 executor: $executor,
40 workers: $workers,
41 webserver: $webserver,
42 scheduler: $scheduler,
43 triggerer: $triggerer,
44 dagProcessor: $dagProcessor,
45 dagDeployment: $dagDeployment,
46 properties: $properties,
47 cloudRole: $cloudRole
48) {
49 id
50 config
51 urls {
52 type
53 url
54 __typename
55 }
56 properties
57 description
58 label
59 releaseName
60 namespace
61 status
62 type
63 version
64 workspace {
65 id
66 label
67 __typename
68 }
69 airflowVersion
70 runtimeVersion
71 desiredAirflowVersion
72 upsertedEnvironmentVariables {
73 key
74 value
75 isSecret
76 __typename
77 }
78 dagDeployment {
79 type
80 nfsLocation
81 repositoryUrl
82 branchName
83 syncInterval
84 syncTimeout
85 ephemeralStorage
86 dagDirectoryLocation
87 rev
88 sshKey
89 knownHosts
90 __typename
91 }
92 createdAt
93 updatedAt
94 __typename
95 }
96}
97{
98 "workspaceUuid": "cldemxl9502454yxe6vjlxy23",
99 "environmentVariables": [
100 {
101 "key": "AIRFLOW__CORE__COLORED_LOG_FORMAT",
102 "value": "test",
103 "isSecret": false
104 }
105 ],
106 "releaseName": "",
107 "namespace": "test-new-dep",
108 "executor": "CeleryExecutor",
109 "workers": {},
110 "webserver": {},
111 "scheduler": {
112 "replicas": 1
113 },
114 "dagProcessor": {},
115 "label": "test-new-dep",
116 "description": "",
117 "runtimeVersion": "7.2.0",
118 "properties": {
119 "extra_au": 0
120 },
121 "dagDeployment": {
122 "type": "image",
123 "nfsLocation": "",
124 "repositoryUrl": "",
125 "branchName": "",
126 "syncInterval": 1,
127 "syncTimeout": 120,
128 "ephemeralStorage": 2,
129 "dagDirectoryLocation": "",
130 "rev": "",
131 "sshKey": "",
132 "knownHosts": ""
133 }
134}